diff -Nrcpad gcc-17-20260823/LAST_UPDATED gcc-17-20260830/LAST_UPDATED
*** gcc-17-20260823/LAST_UPDATED	Sun Aug 23 22:32:25 2026
--- gcc-17-20260830/LAST_UPDATED	Sun Aug 30 22:32:21 2026
***************
*** 1 ****
! Obtained from git: master revision 91291a45490dae956752e55398b6562505692dc5
--- 1 ----
! Obtained from git: master revision 41a3f864cf6f838aa0d6c1f2c2b2b5dc9e017dd4
diff -Nrcpad gcc-17-20260823/MD5SUMS gcc-17-20260830/MD5SUMS
*** gcc-17-20260823/MD5SUMS	Sun Aug 23 22:32:31 2026
--- gcc-17-20260830/MD5SUMS	Sun Aug 30 22:32:26 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260823.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-17-20260830.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
*** 28,34 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 005c760ddfe83d5681f54825c494306c  LAST_UPDATED
  a7d0ab83fc3c7da30451b3e07652bfe1  MAINTAINERS
  703c372a29f5027add1f8fd516124910  MAINTAINERS.yml
  0ee9767a4a3a98a9c80a24e87901dda4  Makefile.def
--- 28,34 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 4cf3d97936f2e26b64c2027f7195c696  LAST_UPDATED
  a7d0ab83fc3c7da30451b3e07652bfe1  MAINTAINERS
  703c372a29f5027add1f8fd516124910  MAINTAINERS.yml
  0ee9767a4a3a98a9c80a24e87901dda4  Makefile.def
*************** f15bc3c5de22eac0bdd4f611502139a0  gcc/AB
*** 535,541 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 5477f2aa3e6734c59e26bb3fade73ddd  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 535,541 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 796f1beb3affceb291270f2abc337d09  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 573,591 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! a17063c69940cf6ebd0e4234c47329df  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! 9d838c7b304ab9d4bb331742b95bd616  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
  a9a7c60459b2407bfdf4e68c0ed4ad0a  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 53fbae1169f28bd710b77d24d9c17164  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 573,591 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 60a69b8abd630f785368fdb5d03af022  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! b62151b93e869d3d02a7d486a8b55815  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
  a9a7c60459b2407bfdf4e68c0ed4ad0a  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! cffa3afddf1d898ac0741e3607e683a7  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** e21df15bc81f432d4de85b5af4ecc699  gcc/ad
*** 768,774 ****
  3dc31e56d392ba3da0e312527adcd953  gcc/ada/eval_fat.adb
  3a42a1f58a3aff7741ec916dfc1d9882  gcc/ada/eval_fat.ads
  adb49f37416fce62d5759f9b4c733fe6  gcc/ada/exit.c
! 9449a73e7e6a1dbd5075571bb21173e7  gcc/ada/exp_aggr.adb
  8d6933ec0ee945c50b4e8c114b1221b6  gcc/ada/exp_aggr.ads
  045a2ef4e4932ea2c0b17910db37af46  gcc/ada/exp_atag.adb
  2a027dfad5944cc346ee7c94c022d302  gcc/ada/exp_atag.ads
--- 768,774 ----
  3dc31e56d392ba3da0e312527adcd953  gcc/ada/eval_fat.adb
  3a42a1f58a3aff7741ec916dfc1d9882  gcc/ada/eval_fat.ads
  adb49f37416fce62d5759f9b4c733fe6  gcc/ada/exit.c
! ccca427f7a4e7cb45e935d05b4f7ddd1  gcc/ada/exp_aggr.adb
  8d6933ec0ee945c50b4e8c114b1221b6  gcc/ada/exp_aggr.ads
  045a2ef4e4932ea2c0b17910db37af46  gcc/ada/exp_atag.adb
  2a027dfad5944cc346ee7c94c022d302  gcc/ada/exp_atag.ads
*************** b7dd8bd2dd68f81643704bf0b73553a1  gcc/al
*** 3156,3162 ****
  71901705cb0e11732bae53ff9de25faf  gcc/align.h
  b4e46e469a1489710e8e4c6f91fe1769  gcc/alloc-pool.cc
  d9a0827561e1202f405290a0d2aabb73  gcc/alloc-pool.h
! 6bcd650a4cca21116409e652873a4f89  gcc/analyzer/ChangeLog
  2efbdc8b8a68e1025a7219e0b1f99360  gcc/analyzer/access-diagram.cc
  c41fa6be7ca91f40a15a7b8f03732d25  gcc/analyzer/access-diagram.h
  d97e417faf9694fdbd68f91aee129bd2  gcc/analyzer/ana-state-to-diagnostic-state.cc
--- 3156,3162 ----
  71901705cb0e11732bae53ff9de25faf  gcc/align.h
  b4e46e469a1489710e8e4c6f91fe1769  gcc/alloc-pool.cc
  d9a0827561e1202f405290a0d2aabb73  gcc/alloc-pool.h
! 4290143c63bcd39354800aa7733d4c93  gcc/analyzer/ChangeLog
  2efbdc8b8a68e1025a7219e0b1f99360  gcc/analyzer/access-diagram.cc
  c41fa6be7ca91f40a15a7b8f03732d25  gcc/analyzer/access-diagram.h
  d97e417faf9694fdbd68f91aee129bd2  gcc/analyzer/ana-state-to-diagnostic-state.cc
*************** bedbea78751b139538f4c906011432fe  gcc/an
*** 3171,3177 ****
  380f2a7c04a014441f78569ef397a8a4  gcc/analyzer/analyzer-selftests.cc
  e87a9090a957efa1653cc5a6e36ec346  gcc/analyzer/analyzer-selftests.h
  13acacaee7827f2cd2751a2a73381ca0  gcc/analyzer/analyzer.cc
! 1708e1bf7b93e19f073cc11833cd2725  gcc/analyzer/analyzer.opt
  5847f7da212ee502959192dec8edf0e2  gcc/analyzer/analyzer.opt.urls
  4a17f3766ca5b4ec528ac459c519fc61  gcc/analyzer/bar-chart.cc
  745aa2e3472448c5c97fb4908c8d4397  gcc/analyzer/bar-chart.h
--- 3171,3177 ----
  380f2a7c04a014441f78569ef397a8a4  gcc/analyzer/analyzer-selftests.cc
  e87a9090a957efa1653cc5a6e36ec346  gcc/analyzer/analyzer-selftests.h
  13acacaee7827f2cd2751a2a73381ca0  gcc/analyzer/analyzer.cc
! fda60f990f386c12b45d1db0cfe8d675  gcc/analyzer/analyzer.opt
  5847f7da212ee502959192dec8edf0e2  gcc/analyzer/analyzer.opt.urls
  4a17f3766ca5b4ec528ac459c519fc61  gcc/analyzer/bar-chart.cc
  745aa2e3472448c5c97fb4908c8d4397  gcc/analyzer/bar-chart.h
*************** c277cfbf6dc22b5e43687f22a6ef9adb  gcc/bb
*** 3299,3316 ****
  8ba8cc55d4c38f126d32b3291cec4312  gcc/btfout.cc
  2e53ccb37c67650b6c2eb37e8eaf5c65  gcc/builtin-attrs.def
  f2bf5284bd63a533f1707b1aca6dee0f  gcc/builtin-types.def
! 5904fdca89f304f313188b0fc026f555  gcc/builtins.cc
  c69491e1e06e8252126bfd579bd74d4d  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! d05d3095bd9cc6fd334719f30001d24f  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
  c2900e9951110ee0c69a1382b1244b47  gcc/c-family/c-attribs.cc
  f051b502f9fc64654fd7a070663aa28d  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
! 26e4e6982ab6b0ab9aa95e016492295e  gcc/c-family/c-common.h
! 43e417b9e64ee0daf44f853c2ae513f0  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
  1adde7951b864b565a2b79c5461d43fa  gcc/c-family/c-format.h
--- 3299,3316 ----
  8ba8cc55d4c38f126d32b3291cec4312  gcc/btfout.cc
  2e53ccb37c67650b6c2eb37e8eaf5c65  gcc/builtin-attrs.def
  f2bf5284bd63a533f1707b1aca6dee0f  gcc/builtin-types.def
! 28ffa82d6c658cd40ae9a9374f1362cd  gcc/builtins.cc
  c69491e1e06e8252126bfd579bd74d4d  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! 4fb4aeeb49a615d785dff16c6cbeef71  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
  c2900e9951110ee0c69a1382b1244b47  gcc/c-family/c-attribs.cc
  f051b502f9fc64654fd7a070663aa28d  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
! 6f4b5f757eec808a5ce2bfd26e734418  gcc/c-family/c-common.h
! ab69aab3a69585ef7cf5a4bb8dd2a61a  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
  1adde7951b864b565a2b79c5461d43fa  gcc/c-family/c-format.h
*************** d5acf2497b583d0fedcf4e2ac5f4ac4a  gcc/c-
*** 3337,3344 ****
  ea821c9d267c64dd8b74aad9d0189834  gcc/c-family/c-type-mismatch.h
  eb0fcc324140f72001698df8e19f05c4  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
! 309adcb76e5a3c3f022c2d30b3bbda93  gcc/c-family/c-warn.cc
! ad074468fd0363c73de7097ac35b0159  gcc/c-family/c.opt
  cb2b05da78d8f8f39150cdbaa5df1754  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
--- 3337,3344 ----
  ea821c9d267c64dd8b74aad9d0189834  gcc/c-family/c-type-mismatch.h
  eb0fcc324140f72001698df8e19f05c4  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
! c60780421619c32c16553469f8ec492b  gcc/c-family/c-warn.cc
! 26d92c66cf28ea710f39a9210d449a41  gcc/c-family/c.opt
  cb2b05da78d8f8f39150cdbaa5df1754  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
*************** c620b176c09eda90b566ae49703a8346  gcc/cf
*** 3381,3390 ****
  1759b500ef3ebaa71f165d1004be0c28  gcc/cfgbuild.h
  4c93b442fb2c3908e2b49dbd5e1d5d2c  gcc/cfgcleanup.cc
  19b842f671a6c6284b654d712d52e513  gcc/cfgcleanup.h
! c4b7d359fdc8ec6fb78a1f9eb149b2bf  gcc/cfgexpand.cc
  742bc48a21badd5ee854bc97f1f0e5b2  gcc/cfgexpand.h
! 9009ba1d3f596dbdd73e13ac8c13aa03  gcc/cfghooks.cc
! 168a35792653beee5d2b951ef1708665  gcc/cfghooks.h
  8c572e1dbe8ec2f3eb6a83b9125087ab  gcc/cfgloop.cc
  800de1da21391e92242fa06c12bc3446  gcc/cfgloop.h
  689848baf4480a109da126f0865b5be6  gcc/cfgloopanal.cc
--- 3381,3390 ----
  1759b500ef3ebaa71f165d1004be0c28  gcc/cfgbuild.h
  4c93b442fb2c3908e2b49dbd5e1d5d2c  gcc/cfgcleanup.cc
  19b842f671a6c6284b654d712d52e513  gcc/cfgcleanup.h
! 6acdc0e5d5ce92f3a6601503f61e799f  gcc/cfgexpand.cc
  742bc48a21badd5ee854bc97f1f0e5b2  gcc/cfgexpand.h
! e61d5907548caa368625c5ccd2d69a03  gcc/cfghooks.cc
! a2f9f502053808b1ff271b8b87c0b9b6  gcc/cfghooks.h
  8c572e1dbe8ec2f3eb6a83b9125087ab  gcc/cfgloop.cc
  800de1da21391e92242fa06c12bc3446  gcc/cfgloop.h
  689848baf4480a109da126f0865b5be6  gcc/cfgloopanal.cc
*************** e5a012c1da31f9a8d61212cd17d2761a  gcc/cf
*** 3392,3457 ****
  f06c849f4ab033a8269f676731b08388  gcc/cfgloopmanip.h
  bf51c09e81eb3433da948582cff58444  gcc/cfgrtl.cc
  c41525a1de6e78cabd4414d6a8c3dac9  gcc/cfgrtl.h
! b017c04fd62ddad9a7991a117deec1c3  gcc/cgraph.cc
  0c9fe7329f8b2ff0fb69961350196249  gcc/cgraph.h
  b50dcacbe77c96809023aa599a556717  gcc/cgraphbuild.cc
  6bbd9709ea4ceecf5a5aa5db6e94305f  gcc/cgraphclones.cc
  a0decca90d109aea1db48b0c0b1aa825  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! ec02ba422030485a1f16887e56b17655  gcc/cobol/ChangeLog
! fcb021496628ea0c70ca22a6f8b75eb5  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! dd2b964b0e5eda571b510dbcc357149b  gcc/cobol/cbldiag.h
! 5d42f453c7204fe5b6a0098f45c3d54b  gcc/cobol/cdf-copy.cc
! bdb2531d89f681dbf53b5e94085c3eed  gcc/cobol/cdf.y
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! c12b82f2ab467c082bebde524e6c4bcb  gcc/cobol/cobol1.cc
! 7a689655afcafc1b63d3ebe6b42ad0c2  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
  07fd52b0f595c85024915a586a088b2a  gcc/cobol/copybook.h
  d5c6387d56f84eecf1320e4209ae02fe  gcc/cobol/dts.h
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
! 5faeacdf9fba68f3991fa3a6f65be405  gcc/cobol/exceptg.h
  d662c0c5ca1bc4d52a83fa1d89e0db14  gcc/cobol/gcobc
! 74aa12f3d6e9037439e3b07479b35e2c  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  6c87ff946886a67b55671336b1424703  gcc/cobol/gcobolspec.cc
! a1984d9fb354cff78bcf2184d3cffa21  gcc/cobol/genapi.cc
  d123a110b5bdd12bc4b6d11604cfa72a  gcc/cobol/genapi.h
! b16c0b6e905e571f500c48b45cc7c574  gcc/cobol/gengen.cc
! 8f8657092699ecf5713e37b4ccc90baa  gcc/cobol/gengen.h
! 138a86216ef1a87dbafc564fef54f80c  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! eb64a00a8301726556e9befda294143a  gcc/cobol/genutil.cc
! d4281e18d5605e9736af62191e62e4b7  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
! 337ae42f895ed6b1bf4777dda0bc0e00  gcc/cobol/lang-specs.h
! 6770f5894e15fc888a906eaea559333b  gcc/cobol/lang.opt
  fd4809576031a8df82aa91899e5e6a5f  gcc/cobol/lang.opt.urls
! b882474654709098298572822c5a1ed3  gcc/cobol/lexio.cc
  e062f9692ebf1a0a57ae640afec53eea  gcc/cobol/lexio.h
! 7abce59a112aec6c05f4e7a1d79f1841  gcc/cobol/messages.cc
! 0c2abdb82a005eeaccf5a086f5d9f49c  gcc/cobol/move.cc
! 35ad55a8fd6c7b7f002e5beb99ff5ec0  gcc/cobol/parse.y
! 389bfa1f2962b8adfdd34eb680390637  gcc/cobol/parse_ante.h
  07e2f8ea22b70968a03d9ddf07a64315  gcc/cobol/parse_util.h
! 3121e0fb1350b93767c7ffff7fd14e2b  gcc/cobol/scan.l
! edc14f2d1d1652d88499eb861620fdf7  gcc/cobol/scan_ante.h
! 9690a33431169b9a17759255ddebbcd8  gcc/cobol/scan_post.h
  101567c93410c3bf96c11ed170b57f3d  gcc/cobol/show_parse.h
  67018417e6b9207073ab29a9c383a8e1  gcc/cobol/structs.cc
  5c0d1b14653ab0afb694ae1bfadcbad5  gcc/cobol/structs.h
! b1ba76fea58365d3a89595753f945cef  gcc/cobol/symbols.cc
! 1b909acead294adde262afc8ba965ca3  gcc/cobol/symbols.h
  2862172acfe51d0110621aa14e8b9655  gcc/cobol/symfind.cc
! dc02077e1f0561ed3b057fd824cc134e  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! a54468d736d6b6137fa446192cd40418  gcc/cobol/util.cc
  483ee4b003fe2afabe91bf455aa5cebb  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
--- 3392,3457 ----
  f06c849f4ab033a8269f676731b08388  gcc/cfgloopmanip.h
  bf51c09e81eb3433da948582cff58444  gcc/cfgrtl.cc
  c41525a1de6e78cabd4414d6a8c3dac9  gcc/cfgrtl.h
! 72380f22af05191fae5d394bfc014f33  gcc/cgraph.cc
  0c9fe7329f8b2ff0fb69961350196249  gcc/cgraph.h
  b50dcacbe77c96809023aa599a556717  gcc/cgraphbuild.cc
  6bbd9709ea4ceecf5a5aa5db6e94305f  gcc/cgraphclones.cc
  a0decca90d109aea1db48b0c0b1aa825  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 2aaf5357797aca1f4b82d55b270f204c  gcc/cobol/ChangeLog
! 046af04a7546c9fd63be30d42daa6852  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! 5271fffe02a1ed3aabfbef5fa7f02076  gcc/cobol/cbldiag.h
! f9b184a898062f5d95ad4a771c2d27cc  gcc/cobol/cdf-copy.cc
! 9745f0a8c8c19be372de79caec96417e  gcc/cobol/cdf.y
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! 7e7dfd0b7d6d6a608461d13c55839fe4  gcc/cobol/cobol1.cc
! 7c48d18045820d55a92ba95dd2b5cc57  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
  07fd52b0f595c85024915a586a088b2a  gcc/cobol/copybook.h
  d5c6387d56f84eecf1320e4209ae02fe  gcc/cobol/dts.h
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
! 66b6e007b09a4236331cc1940f396b81  gcc/cobol/exceptg.h
  d662c0c5ca1bc4d52a83fa1d89e0db14  gcc/cobol/gcobc
! f86841eaadd21666039c38e433b1beb5  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  6c87ff946886a67b55671336b1424703  gcc/cobol/gcobolspec.cc
! c2496001905b5c162a9806b2cef089fa  gcc/cobol/genapi.cc
  d123a110b5bdd12bc4b6d11604cfa72a  gcc/cobol/genapi.h
! 80b91a38262f213e8625d1877d36ca28  gcc/cobol/gengen.cc
! d0589ad10b3054d41fd03937d55172ba  gcc/cobol/gengen.h
! 47f7a17f4ae85b7b322bd5d7e0183ec9  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 502e7e4c69663116c7f2ec97e4de7af0  gcc/cobol/genutil.cc
! db8226fa2c12e8e1e18ca7841176befc  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
! 381e109003cb73b5e0ca934966923035  gcc/cobol/lang-specs.h
! 67c09c8077198fc991f2cea987393d52  gcc/cobol/lang.opt
  fd4809576031a8df82aa91899e5e6a5f  gcc/cobol/lang.opt.urls
! e6fac46d632916e4306482d251ad6074  gcc/cobol/lexio.cc
  e062f9692ebf1a0a57ae640afec53eea  gcc/cobol/lexio.h
! e2351a2014eb644b8d8374ca91014752  gcc/cobol/messages.cc
! c51ddbdbced501cd4ef0be0673d1056b  gcc/cobol/move.cc
! a12796529b5ac893e4be7eaee1890c38  gcc/cobol/parse.y
! 82318a9224c71541262dd2d7e79d879c  gcc/cobol/parse_ante.h
  07e2f8ea22b70968a03d9ddf07a64315  gcc/cobol/parse_util.h
! 986c6cbba170f18e1acf919c373b8a5a  gcc/cobol/scan.l
! f08505aa58437adf3ca8d026daed5bdd  gcc/cobol/scan_ante.h
! 62105874c6f5b265af262cd621bb1577  gcc/cobol/scan_post.h
  101567c93410c3bf96c11ed170b57f3d  gcc/cobol/show_parse.h
  67018417e6b9207073ab29a9c383a8e1  gcc/cobol/structs.cc
  5c0d1b14653ab0afb694ae1bfadcbad5  gcc/cobol/structs.h
! 7c8960d546aa17284d4998db19c2c9ea  gcc/cobol/symbols.cc
! 413d5bac5569546e4a140d0eef771667  gcc/cobol/symbols.h
  2862172acfe51d0110621aa14e8b9655  gcc/cobol/symfind.cc
! da59ffad61f72f01efc6a00a5076c5a8  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 47d33686a3c255009d98c902047b7281  gcc/cobol/util.cc
  483ee4b003fe2afabe91bf455aa5cebb  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
*************** d48c86bc52a7b8ee38281d6069d3eb6a  gcc/co
*** 3463,3470 ****
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
  100506a8d163543727e88837c245a4b3  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
! f6d493aabc47355d8d59d0c5350d0314  gcc/common.opt
! 0adac6d65f53c31ab204318202298c08  gcc/common.opt.urls
  d3b28fb0d49a8d683dde6011400fd7e7  gcc/common/common-target-def.h
  93cf11d6a27d42f73799ae012d2f876e  gcc/common/common-target.def
  d8f7142c05c4102806a8b26817df17a6  gcc/common/common-target.h
--- 3463,3470 ----
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
  100506a8d163543727e88837c245a4b3  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
! 71efa31fda6ef8fc9e6081fedb11d635  gcc/common.opt
! 5cbba7b55111981e4d1e34e911a9bf4b  gcc/common.opt.urls
  d3b28fb0d49a8d683dde6011400fd7e7  gcc/common/common-target-def.h
  93cf11d6a27d42f73799ae012d2f876e  gcc/common/common-target.def
  d8f7142c05c4102806a8b26817df17a6  gcc/common/common-target.h
*************** c118f6e609bff904f31476e74ab45479  gcc/co
*** 3475,3481 ****
  3a5ce2d619f3e16155b647a743a1c1c2  gcc/common/config/alpha/alpha-common.cc
  62d17fa2c618153bcc9f0eabb9a8e88c  gcc/common/config/arc/arc-common.cc
  75091fb226907ee0c421380ad0d55922  gcc/common/config/arm/arm-common.cc
! 35a96b3438b0a330529b5a3fab6a3541  gcc/common/config/avr/avr-common.cc
  01bfdbc404319ecaeaaf9400e490cded  gcc/common/config/bfin/bfin-common.cc
  7163ff82097caea7c45ba50bc3827cd2  gcc/common/config/bpf/bpf-common.cc
  0f0b65e1026a46ad767e0354be2f0529  gcc/common/config/c6x/c6x-common.cc
--- 3475,3481 ----
  3a5ce2d619f3e16155b647a743a1c1c2  gcc/common/config/alpha/alpha-common.cc
  62d17fa2c618153bcc9f0eabb9a8e88c  gcc/common/config/arc/arc-common.cc
  75091fb226907ee0c421380ad0d55922  gcc/common/config/arm/arm-common.cc
! 4c5d57b17772da56d57d5d1e1d463155  gcc/common/config/avr/avr-common.cc
  01bfdbc404319ecaeaaf9400e490cded  gcc/common/config/bfin/bfin-common.cc
  7163ff82097caea7c45ba50bc3827cd2  gcc/common/config/bpf/bpf-common.cc
  0f0b65e1026a46ad767e0354be2f0529  gcc/common/config/c6x/c6x-common.cc
*************** b218f741c2f54f950d065bb40f5125ea  gcc/co
*** 3487,3493 ****
  4d82eb0ae58ac44e02bff98ed16ac27d  gcc/common/config/frv/frv-common.cc
  5b41dfaa1b910962a78074d1e5d611d6  gcc/common/config/gcn/gcn-common.cc
  30ff9a49f51b477d26fe8159736f2269  gcc/common/config/h8300/h8300-common.cc
! 5b8af18c93ca332f9e5992dc8252e72e  gcc/common/config/i386/cpuinfo.h
  bbff7fbbae49cdc8b8d58f65a23965f7  gcc/common/config/i386/i386-common.cc
  6d890f5ec81f40ba6947b6e90c634596  gcc/common/config/i386/i386-cpuinfo.h
  446bc1554ae9006c9ce21deca1defd35  gcc/common/config/i386/i386-isas.h
--- 3487,3493 ----
  4d82eb0ae58ac44e02bff98ed16ac27d  gcc/common/config/frv/frv-common.cc
  5b41dfaa1b910962a78074d1e5d611d6  gcc/common/config/gcn/gcn-common.cc
  30ff9a49f51b477d26fe8159736f2269  gcc/common/config/h8300/h8300-common.cc
! 50886cb0190802239a8188b4dbfe6637  gcc/common/config/i386/cpuinfo.h
  bbff7fbbae49cdc8b8d58f65a23965f7  gcc/common/config/i386/i386-common.cc
  6d890f5ec81f40ba6947b6e90c634596  gcc/common/config/i386/i386-cpuinfo.h
  446bc1554ae9006c9ce21deca1defd35  gcc/common/config/i386/i386-isas.h
*************** b1b166d42b0cd3e8a21a0ad1a418bab7  gcc/co
*** 3510,3517 ****
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! e81b9bc7d0ec088b63d9b5299f1e707d  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
  69998ad4853297d8db89b57ff246a41d  gcc/common/config/s390/s390-common.cc
--- 3510,3519 ----
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! 8f28392cd20e13d6a03b14055de29996  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
+ 7f648d7ccb228ec0040d66e4c00d43e9  gcc/common/config/riscv/riscv-hwprobe.def
+ 1ce9976ad6912f0411e1b162dd96df08  gcc/common/config/riscv/riscv-hwprobe.h
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
  69998ad4853297d8db89b57ff246a41d  gcc/common/config/s390/s390-common.cc
*************** d3b8ce30c6110489fd0b57d6792f3f29  gcc/co
*** 3525,3533 ****
  5370af2e3d8323d9b237214fc0c1b479  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! 03c394e48a27f3ec7b01db8f77f1bc90  gcc/config.gcc
! 33cf4c148287e74c9983b38524ffbc88  gcc/config.host
! aff01d1ea9fc10bd68293fb6710a46b2  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
--- 3527,3535 ----
  5370af2e3d8323d9b237214fc0c1b479  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! c57adbd485fa2e969d5665b1e34e6eb1  gcc/config.gcc
! 772c293a2c2e0cfd0244daadad75a8ff  gcc/config.host
! 39db26628ed7e2ec3d7807dab8dae509  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
*************** a4a345dbdcb2992f4e1119944ecfb4d7  gcc/co
*** 3609,3617 ****
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  3e678460d03287c5817595f99c59d4c5  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! 1183a58970dd1cf93461bd15a4a99c95  gcc/config/aarch64/aarch64.cc
  52439d78410f3d795a1dc90678f81cb4  gcc/config/aarch64/aarch64.h
! cb531746658627cf8c8fce448e021c62  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
  5bc2d62d910e1c00bd6eed6ffaa5a18d  gcc/config/aarch64/aarch64.opt.urls
  854a2fd8965d477c5b064388ed354bf1  gcc/config/aarch64/arm_acle.h
--- 3611,3619 ----
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  3e678460d03287c5817595f99c59d4c5  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! 68c889c596b87f5a78754a225a9f0f75  gcc/config/aarch64/aarch64.cc
  52439d78410f3d795a1dc90678f81cb4  gcc/config/aarch64/aarch64.h
! 976b228d949c4b8fe617b42bb59526b2  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
  5bc2d62d910e1c00bd6eed6ffaa5a18d  gcc/config/aarch64/aarch64.opt.urls
  854a2fd8965d477c5b064388ed354bf1  gcc/config/aarch64/arm_acle.h
*************** a07ee362a4961e9d41cb0ab83553de74  gcc/co
*** 3692,3701 ****
  83cd5c97b8f09c9606ad9f2c50fb18a0  gcc/config/alpha/alpha-modes.def
  b4eac8c564e104cf3cc48269868be196  gcc/config/alpha/alpha-passes.def
  3fde351a6bc8386bb57921a1e5589ffa  gcc/config/alpha/alpha-protos.h
! adbdde4d4bf5f4b8028f8e797b07a1a6  gcc/config/alpha/alpha.cc
! 97ead278f191dc858083549f1b19f490  gcc/config/alpha/alpha.h
! 8ab33b033535a21076bc6f09c2e4fd44  gcc/config/alpha/alpha.md
! 9d7aba6e4e2821c0d801e5c6cba73763  gcc/config/alpha/alpha.opt
  16f67dabdc3240d89a6b1f0993fcc29a  gcc/config/alpha/alpha.opt.urls
  a5b914202bf4c167a93dd74f67c791b7  gcc/config/alpha/constraints.md
  cc4294801cf299374bae02319a552dbc  gcc/config/alpha/driver-alpha.cc
--- 3694,3703 ----
  83cd5c97b8f09c9606ad9f2c50fb18a0  gcc/config/alpha/alpha-modes.def
  b4eac8c564e104cf3cc48269868be196  gcc/config/alpha/alpha-passes.def
  3fde351a6bc8386bb57921a1e5589ffa  gcc/config/alpha/alpha-protos.h
! 7906348bbd9affb18ad3393c7fe75681  gcc/config/alpha/alpha.cc
! 07bff42513933490553721a6e5ba6232  gcc/config/alpha/alpha.h
! 0d6b82fbb23b6dbf07e7196944a21a99  gcc/config/alpha/alpha.md
! 2e5003dbb315f79b91042d79ca2ffae3  gcc/config/alpha/alpha.opt
  16f67dabdc3240d89a6b1f0993fcc29a  gcc/config/alpha/alpha.opt.urls
  a5b914202bf4c167a93dd74f67c791b7  gcc/config/alpha/constraints.md
  cc4294801cf299374bae02319a552dbc  gcc/config/alpha/driver-alpha.cc
*************** e219596493ffcd798a48b24b22b5e077  gcc/co
*** 3900,3914 ****
  c29ebb93bbe48714c53c5d397dedbe7f  gcc/config/avr/avr-mcus.def
  b05978bd2969a943265d3549c23b8b59  gcc/config/avr/avr-modes.def
  6c45ecfd28874e5791ad3e04448486e9  gcc/config/avr/avr-passes-fuse-move.h
! 48585d0945f7d06daef2e406d11d2480  gcc/config/avr/avr-passes.cc
! 7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
! aed97a2b02b21f1df8924d81ddb284c9  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! a0f2c822d7a46dd51fb9753819ceb815  gcc/config/avr/avr.cc
! 7e4633dda230d367d9859c29b7534ae4  gcc/config/avr/avr.h
! 0a5b2e3ad1aa10dd9768f52a75ed09b7  gcc/config/avr/avr.md
! 514b7fcd718addcd441a0d2ef528b752  gcc/config/avr/avr.opt
! 377c88b0916a0c0c70eed6b40a1955f1  gcc/config/avr/avr.opt.urls
  a2e6c4bc09c4af90d1c01745985baff7  gcc/config/avr/avrlibc.h
  f625cbe4b6bbd0986ca09f6d0465d3f6  gcc/config/avr/builtins.def
  dcd40301975d7f922b3fc51ba7ab1096  gcc/config/avr/constraints.md
--- 3902,3916 ----
  c29ebb93bbe48714c53c5d397dedbe7f  gcc/config/avr/avr-mcus.def
  b05978bd2969a943265d3549c23b8b59  gcc/config/avr/avr-modes.def
  6c45ecfd28874e5791ad3e04448486e9  gcc/config/avr/avr-passes-fuse-move.h
! 1c23f60c711b03950958cb0d08add911  gcc/config/avr/avr-passes.cc
! fe343aa204708201c3376ae0f9d49e6e  gcc/config/avr/avr-passes.def
! 2eb362200d12193129f27e51798a76f9  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! 1ab5b84d2a32d736d31c1af5d58d1bde  gcc/config/avr/avr.cc
! adb05322a72be5b2fada8702cbf92e5e  gcc/config/avr/avr.h
! 77bed72dd6e2f6c9412c2bc75573bb62  gcc/config/avr/avr.md
! 985c09fce30e3e67547982fd8f51dcef  gcc/config/avr/avr.opt
! c626d21d131e05f5ffdb967e0b414aed  gcc/config/avr/avr.opt.urls
  a2e6c4bc09c4af90d1c01745985baff7  gcc/config/avr/avrlibc.h
  f625cbe4b6bbd0986ca09f6d0465d3f6  gcc/config/avr/builtins.def
  dcd40301975d7f922b3fc51ba7ab1096  gcc/config/avr/constraints.md
*************** ba1ccf433d1efd30c6fb7d9330d6c15f  gcc/co
*** 3993,3999 ****
  9c37e92c4940cbfae2cc0dffed81013f  gcc/config/cris/cris-protos.h
  0e5387dda087723fe21aa57b524b7bc9  gcc/config/cris/cris.cc
  5937d099a75f786eceb3027e381c5f1b  gcc/config/cris/cris.h
! 90e372f8f064dd7786f945aade6f6f5b  gcc/config/cris/cris.md
  9806f1d00685997be4c9f849f3a615d8  gcc/config/cris/cris.opt
  6860fb25a360ee6a896163ea010ecc27  gcc/config/cris/cris.opt.urls
  9e100a5514b76c41c8ab833558ae88b9  gcc/config/cris/elf.opt
--- 3995,4001 ----
  9c37e92c4940cbfae2cc0dffed81013f  gcc/config/cris/cris-protos.h
  0e5387dda087723fe21aa57b524b7bc9  gcc/config/cris/cris.cc
  5937d099a75f786eceb3027e381c5f1b  gcc/config/cris/cris.h
! 960a7de821b547990ef72f306b71521d  gcc/config/cris/cris.md
  9806f1d00685997be4c9f849f3a615d8  gcc/config/cris/cris.opt
  6860fb25a360ee6a896163ea010ecc27  gcc/config/cris/cris.opt.urls
  9e100a5514b76c41c8ab833558ae88b9  gcc/config/cris/elf.opt
*************** c7967649d7ebce88af774f54ce092852  gcc/co
*** 4059,4065 ****
  3b8465d196386af4a9863de91fc46fcb  gcc/config/epiphany/epiphany-protos.h
  fa098af48e50711d95c8a54cbe04528d  gcc/config/epiphany/epiphany-sched.md
  b6ccf5fc720af904304d6b045f3fbccb  gcc/config/epiphany/epiphany.cc
! d2283ae4a5ff31065eb995f419c503fa  gcc/config/epiphany/epiphany.h
  96651ce858cd6472861cda93bfb007c7  gcc/config/epiphany/epiphany.md
  15a623aefccfa172b62f4caa9a418acd  gcc/config/epiphany/epiphany.opt
  9656628e872aaf1f77fcd92f605c9853  gcc/config/epiphany/epiphany.opt.urls
--- 4061,4067 ----
  3b8465d196386af4a9863de91fc46fcb  gcc/config/epiphany/epiphany-protos.h
  fa098af48e50711d95c8a54cbe04528d  gcc/config/epiphany/epiphany-sched.md
  b6ccf5fc720af904304d6b045f3fbccb  gcc/config/epiphany/epiphany.cc
! 3c4da4e5096ab9634fe8a2d9b92ff47a  gcc/config/epiphany/epiphany.h
  96651ce858cd6472861cda93bfb007c7  gcc/config/epiphany/epiphany.md
  15a623aefccfa172b62f4caa9a418acd  gcc/config/epiphany/epiphany.opt
  9656628e872aaf1f77fcd92f605c9853  gcc/config/epiphany/epiphany.opt.urls
*************** dbcdd5d37809de3b588c89731b456a95  gcc/co
*** 4267,4273 ****
  1e33ea74ea0aac3b8f07f5a6a2b214fd  gcc/config/i386/cmpccxaddintrin.h
  e31d20e57fcc6b9a15aa65c66ea05643  gcc/config/i386/constraints.md
  6ba0c72d72717542a49115d882af3ce9  gcc/config/i386/core2.md
! 6e3e40c261f3454f6e02e67fde91a7a3  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
  ec9ea5650606b68388cd5a99c6f7d4a4  gcc/config/i386/cygming.h
--- 4269,4275 ----
  1e33ea74ea0aac3b8f07f5a6a2b214fd  gcc/config/i386/cmpccxaddintrin.h
  e31d20e57fcc6b9a15aa65c66ea05643  gcc/config/i386/constraints.md
  6ba0c72d72717542a49115d882af3ce9  gcc/config/i386/core2.md
! 4999832e0fc4cd6a1fcbedd5296b6ceb  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
  ec9ea5650606b68388cd5a99c6f7d4a4  gcc/config/i386/cygming.h
*************** be7f06e3ea032dfb39fcda012c812683  gcc/co
*** 4320,4328 ****
  3f0086f7be559b83e2e48c5d027f29b7  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! 10e5b6e8d9e767ca09b9a04583978404  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 79ab78a97f2366664e1286573cdefd6f  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  ba2707b1d74b53cb15d773395234150f  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
--- 4322,4330 ----
  3f0086f7be559b83e2e48c5d027f29b7  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! c9167eb1b2caf0f3e1df2a0c9ee1f078  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 203d5bf5ed98cf568f16d37228c1fecf  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  ba2707b1d74b53cb15d773395234150f  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
*************** effc5170dfebc3b292ed32af75644c49  gcc/co
*** 4332,4344 ****
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
! 4f2145b62b0465868e9bacb4334f0cf4  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 901130d750d7b1853c5a5acaa2bd3d2d  gcc/config/i386/i386.cc
  2049b3f01a97cbd56512c690d1badd37  gcc/config/i386/i386.h
! b39cbce4cc51b6c75f0a366f811a1d2a  gcc/config/i386/i386.md
  27faa1319822db264f91c0c1f13d3aba  gcc/config/i386/i386.opt
  635a164a3ef0d50d298591ff189f5a84  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
--- 4334,4346 ----
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
! 3a4c1e0fce225e6778a53bbe150e9f23  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! e38f990f1f3ba5f38a4043650991b9d9  gcc/config/i386/i386.cc
  2049b3f01a97cbd56512c690d1badd37  gcc/config/i386/i386.h
! f0f3cefc8424988f9121f2566cdbbbe6  gcc/config/i386/i386.md
  27faa1319822db264f91c0c1f13d3aba  gcc/config/i386/i386.opt
  635a164a3ef0d50d298591ff189f5a84  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
*************** db114ac74c87743a142214fddaad2687  gcc/co
*** 4400,4406 ****
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  592f748733487ebc51326f6cbf8f1f54  gcc/config/i386/sol2.h
! 2ecfa56d0ccfc24f1cb02f97739a953c  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  1ad8fa318a811105e288b55b2d978572  gcc/config/i386/subst.md
--- 4402,4408 ----
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  592f748733487ebc51326f6cbf8f1f54  gcc/config/i386/sol2.h
! dd97e0cb71b1ec95dda4e276a43e2dad  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  1ad8fa318a811105e288b55b2d978572  gcc/config/i386/subst.md
*************** b4cde95b709fc93c90bf4d6b3edc7fd0  gcc/co
*** 4448,4454 ****
  c2cfb83eb28cbbc487a62ee85650286e  gcc/config/i386/x-mingw32
  5d8e585db0fd38674f683b0e8aafb897  gcc/config/i386/x-mingw32-utf8
  c98679993951718aa4177acc76b998b3  gcc/config/i386/x86-64.h
! 1e658f4f5595aba100e6c8f5626bb81e  gcc/config/i386/x86-tune-costs.h
  1a895f070eb6bb8cabffb78a3daa7738  gcc/config/i386/x86-tune-sched-atom.cc
  33b66e2688b9fbf775f4dc603512548f  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
--- 4450,4456 ----
  c2cfb83eb28cbbc487a62ee85650286e  gcc/config/i386/x-mingw32
  5d8e585db0fd38674f683b0e8aafb897  gcc/config/i386/x-mingw32-utf8
  c98679993951718aa4177acc76b998b3  gcc/config/i386/x86-64.h
! 35145bd2c77bd5dcabb0dd1dd69f28c2  gcc/config/i386/x86-tune-costs.h
  1a895f070eb6bb8cabffb78a3daa7738  gcc/config/i386/x86-tune-sched-atom.cc
  33b66e2688b9fbf775f4dc603512548f  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
*************** ef58889db2e623bb276663585662ae5d  gcc/co
*** 5036,5041 ****
--- 5038,5044 ----
  cea5b702841429deff64e2e6fd0b626f  gcc/config/riscv/corev.def
  3541ce4817aa1b4ca8a8e3799ba716d8  gcc/config/riscv/corev.md
  e2422c2fce6d2a652b60158b9d2bad0e  gcc/config/riscv/crypto.md
+ f01dff8e7ae50f0fce57ec7eebe54508  gcc/config/riscv/driver-riscv.cc
  cf2f4b49f9a1b3787b92baf7d5a969f7  gcc/config/riscv/elf.h
  2510ce821b34e9be6fa995fe43ac5b37  gcc/config/riscv/freebsd.h
  e5846099f736bbc0e13d9013a9274209  gcc/config/riscv/gen-riscv-ext-opt.cc
*************** bcda2f5a4a2728d5f6bc53cbbd26f90c  gcc/co
*** 5061,5067 ****
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 7316d62fc5d1b5b4fc7cd7f50fe01697  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
--- 5064,5070 ----
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 767a6fdc3ec115d0473bf0bd9f68f695  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
*************** e1ac1647825642c1e551b9a174630bd6  gcc/co
*** 5088,5094 ****
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
  f01ff8b2bc5bc133ba546fe533e1c878  gcc/config/riscv/riscv-sr.cc
  0289d9345d2dc3266b3b689ac0528963  gcc/config/riscv/riscv-string.cc
! 5f2c2bf7c94b8cb13fc50b55194c991e  gcc/config/riscv/riscv-subset.h
  8c562399dc63a0d58647b21f53d09499  gcc/config/riscv/riscv-target-attr.cc
  f7b43b4d93e70b25dcdde54ac0f0badd  gcc/config/riscv/riscv-v.cc
  34f62419062663f91765f9f50c8f0b62  gcc/config/riscv/riscv-v.h
--- 5091,5097 ----
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
  f01ff8b2bc5bc133ba546fe533e1c878  gcc/config/riscv/riscv-sr.cc
  0289d9345d2dc3266b3b689ac0528963  gcc/config/riscv/riscv-string.cc
! 65cf58f5206ff4198ee41408122a4b56  gcc/config/riscv/riscv-subset.h
  8c562399dc63a0d58647b21f53d09499  gcc/config/riscv/riscv-target-attr.cc
  f7b43b4d93e70b25dcdde54ac0f0badd  gcc/config/riscv/riscv-v.cc
  34f62419062663f91765f9f50c8f0b62  gcc/config/riscv/riscv-v.h
*************** ee8122b7c30f11ad5dc682dad7cf7f55  gcc/co
*** 5108,5115 ****
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! 12fd229d75293466fcfdaa9c3f9a6487  gcc/config/riscv/riscv.cc
! e03f5d27fdc607980d9b9e77410f003b  gcc/config/riscv/riscv.h
  1265d889c87c62d6e8009a72177a9ccc  gcc/config/riscv/riscv.md
  c5d85fc587ed7ba9d844efc0c8436373  gcc/config/riscv/riscv.opt
  07987470dd445a1552645f6c12c92c20  gcc/config/riscv/riscv.opt.urls
--- 5111,5118 ----
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! f2a45cfa6537d3403f27174c75f620c3  gcc/config/riscv/riscv.cc
! 0938f12db207c670470b99a30854f5a6  gcc/config/riscv/riscv.h
  1265d889c87c62d6e8009a72177a9ccc  gcc/config/riscv/riscv.md
  c5d85fc587ed7ba9d844efc0c8436373  gcc/config/riscv/riscv.opt
  07987470dd445a1552645f6c12c92c20  gcc/config/riscv/riscv.opt.urls
*************** fe202105dd9e81b9ce8fdcc11d52c294  gcc/co
*** 5147,5153 ****
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
  30b27e6e363dfee77266722486f5a23d  gcc/config/riscv/vector-iterators.md
! 76e190f6734c30217e942cc123636d7c  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
--- 5150,5157 ----
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
  30b27e6e363dfee77266722486f5a23d  gcc/config/riscv/vector-iterators.md
! 6c975e0ea67221cfabdd69ac4861348d  gcc/config/riscv/vector.md
! 4a3cd38f307d9cb9f741d6309b110c78  gcc/config/riscv/x-riscv
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
*************** db237fc1717a4075e7b9480205a32fd5  gcc/co
*** 5257,5263 ****
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
  86402342f6ed6ab468cb6e1be746b9d0  gcc/config/rs6000/rs6000-builtin.cc
! a279505199952377f52557bce5be1325  gcc/config/rs6000/rs6000-builtins.def
  577fc739593a5c933b13e4dc37e2c774  gcc/config/rs6000/rs6000-c.cc
  750a00046cfa4dae2ffa5fb25e5c3d92  gcc/config/rs6000/rs6000-call.cc
  e13b19871c269e71cdff2581ed1c5a9a  gcc/config/rs6000/rs6000-cpus.def
--- 5261,5267 ----
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
  86402342f6ed6ab468cb6e1be746b9d0  gcc/config/rs6000/rs6000-builtin.cc
! d3d8941e9e8e6b3d28404ee885a853ca  gcc/config/rs6000/rs6000-builtins.def
  577fc739593a5c933b13e4dc37e2c774  gcc/config/rs6000/rs6000-c.cc
  750a00046cfa4dae2ffa5fb25e5c3d92  gcc/config/rs6000/rs6000-call.cc
  e13b19871c269e71cdff2581ed1c5a9a  gcc/config/rs6000/rs6000-cpus.def
*************** ce8de9a27f36b759a69194616c02eb38  gcc/co
*** 5280,5286 ****
  5ab383e0be64fd5a3a737feb4d231200  gcc/config/rs6000/rs6000.cc
  d126839c8ffcac5e1e502900c8cdd6cb  gcc/config/rs6000/rs6000.h
  db032c9e6cd19d084d1a3e2c9565615a  gcc/config/rs6000/rs6000.md
! e9eda0c22b5fe43eacbc84048e8c92b0  gcc/config/rs6000/rs6000.opt
  ffc3950548b9645aae429cfff87c63f8  gcc/config/rs6000/rs6000.opt.urls
  89d4cadf8216efa86b72204e660cc4b0  gcc/config/rs6000/rs64.md
  d57d0eb0a8e2193f5cef2aaf1ad6d722  gcc/config/rs6000/rtems.h
--- 5284,5290 ----
  5ab383e0be64fd5a3a737feb4d231200  gcc/config/rs6000/rs6000.cc
  d126839c8ffcac5e1e502900c8cdd6cb  gcc/config/rs6000/rs6000.h
  db032c9e6cd19d084d1a3e2c9565615a  gcc/config/rs6000/rs6000.md
! 2b0ac14dde68fa9357f34f8b93c6d2e2  gcc/config/rs6000/rs6000.opt
  ffc3950548b9645aae429cfff87c63f8  gcc/config/rs6000/rs6000.opt.urls
  89d4cadf8216efa86b72204e660cc4b0  gcc/config/rs6000/rs64.md
  d57d0eb0a8e2193f5cef2aaf1ad6d722  gcc/config/rs6000/rtems.h
*************** f11925c88524d2fd457bf77944da1302  gcc/co
*** 5319,5325 ****
  da79297ad0c4c71553a67c1c8659d7f0  gcc/config/rs6000/tmmintrin.h
  88417b4d808d053378108ca755b5e5ce  gcc/config/rs6000/vec_types.h
  3392062820ad067ae3abd25781a80d07  gcc/config/rs6000/vector.md
! 3825f3de0bbcfcffae4bf1277297ac97  gcc/config/rs6000/vsx.md
  f7ab50c00153b9422ed788ad3b431920  gcc/config/rs6000/vxworks.h
  879b35d5e026800c40c13e663df8c5f9  gcc/config/rs6000/vxworksae.h
  aa45c89828fac6551d8d57309cf26ec0  gcc/config/rs6000/vxworksmils.h
--- 5323,5329 ----
  da79297ad0c4c71553a67c1c8659d7f0  gcc/config/rs6000/tmmintrin.h
  88417b4d808d053378108ca755b5e5ce  gcc/config/rs6000/vec_types.h
  3392062820ad067ae3abd25781a80d07  gcc/config/rs6000/vector.md
! 3a7b9a65a66ee86eff1bbb24ff5da7b0  gcc/config/rs6000/vsx.md
  f7ab50c00153b9422ed788ad3b431920  gcc/config/rs6000/vxworks.h
  879b35d5e026800c40c13e663df8c5f9  gcc/config/rs6000/vxworksae.h
  aa45c89828fac6551d8d57309cf26ec0  gcc/config/rs6000/vxworksmils.h
*************** d1ec3fe7ea1ffbba709fcaf32aea2477  gcc/co
*** 5359,5365 ****
  8c8ba7cdb3ae873076863999cac07e5b  gcc/config/s390/3906.md
  2b52ced3bf9bf5a68c3fc963fb25e3b0  gcc/config/s390/3931.md
  0a1378600d656f0826742be98ff022af  gcc/config/s390/8561.md
! dfe9c3a25373c32a4a7298bc4bb5b315  gcc/config/s390/9175.md
  8c76b092b2ba34a0e01a6b15440ac2b9  gcc/config/s390/constraints.md
  b88693242a20e2c9b57bbc9515f88cc6  gcc/config/s390/driver-native.cc
  82325d9b30c7bd62ba24065c4795d4e5  gcc/config/s390/htmintrin.h
--- 5363,5369 ----
  8c8ba7cdb3ae873076863999cac07e5b  gcc/config/s390/3906.md
  2b52ced3bf9bf5a68c3fc963fb25e3b0  gcc/config/s390/3931.md
  0a1378600d656f0826742be98ff022af  gcc/config/s390/8561.md
! b0c4d87fd3cbce75d336cdd17163785a  gcc/config/s390/9175.md
  8c76b092b2ba34a0e01a6b15440ac2b9  gcc/config/s390/constraints.md
  b88693242a20e2c9b57bbc9515f88cc6  gcc/config/s390/driver-native.cc
  82325d9b30c7bd62ba24065c4795d4e5  gcc/config/s390/htmintrin.h
*************** ea440bcad8a276afecfcff0ce6aae6fe  gcc/co
*** 5377,5383 ****
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  21b7404a4711b3193b5b65a160378070  gcc/config/s390/s390-protos.h
  93184a0abe13f053c21e1f696f4b4448  gcc/config/s390/s390.cc
! f508d5a165d6ee82cceb4134e86ec04d  gcc/config/s390/s390.h
  e4c33bcc84106184dd2233b1eab57049  gcc/config/s390/s390.md
  d9a39d0121b211e4c06d67f829e1280a  gcc/config/s390/s390.opt
  d666710167ed4cebc6dc7b6cb8ee33b4  gcc/config/s390/s390.opt.urls
--- 5381,5387 ----
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  21b7404a4711b3193b5b65a160378070  gcc/config/s390/s390-protos.h
  93184a0abe13f053c21e1f696f4b4448  gcc/config/s390/s390.cc
! ed9ec97c9c2d8ad58a2e50639ebbb740  gcc/config/s390/s390.h
  e4c33bcc84106184dd2233b1eab57049  gcc/config/s390/s390.md
  d9a39d0121b211e4c06d67f829e1280a  gcc/config/s390/s390.opt
  d666710167ed4cebc6dc7b6cb8ee33b4  gcc/config/s390/s390.opt.urls
*************** c08812561648d9be8b2c465101f02f55  gcc/co
*** 5476,5482 ****
  710bcf4b6ac9924f665a6ed578c037f2  gcc/config/sparc/sparc-passes.def
  24d69dfb87c13754d1f394397cf82632  gcc/config/sparc/sparc-protos.h
  7ed22cc6ae023ee2be061ca296b615c6  gcc/config/sparc/sparc.cc
! 24aa1fc935c7db9e2b56c45a55fe530d  gcc/config/sparc/sparc.h
  baa4d437af36181c641fd909d270531a  gcc/config/sparc/sparc.md
  d35b9f07de59a46cdbdd2bfb5aefaa3e  gcc/config/sparc/sparc.opt
  7989b30c48125e3c3acf6b37e76bd44f  gcc/config/sparc/sparc.opt.urls
--- 5480,5486 ----
  710bcf4b6ac9924f665a6ed578c037f2  gcc/config/sparc/sparc-passes.def
  24d69dfb87c13754d1f394397cf82632  gcc/config/sparc/sparc-protos.h
  7ed22cc6ae023ee2be061ca296b615c6  gcc/config/sparc/sparc.cc
! c0e124df350d76d5a2ebe59378b369e2  gcc/config/sparc/sparc.h
  baa4d437af36181c641fd909d270531a  gcc/config/sparc/sparc.md
  d35b9f07de59a46cdbdd2bfb5aefaa3e  gcc/config/sparc/sparc.opt
  7989b30c48125e3c3acf6b37e76bd44f  gcc/config/sparc/sparc.opt.urls
*************** eabefa7848e30cb14ae3473ccb4f1c5e  gcc/co
*** 5644,5651 ****
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! c86df7d33cba2546aedc0fbb71b08b93  gcc/configure
! 0d070da28010dc4b91e5c3299e2c1c4b  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
--- 5648,5655 ----
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! 8b744b733247c7ef11ebc35145d2ee49  gcc/configure
! ad60cf19b1be2b9219985b70af86daaf  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
*************** c5ad0142a191862e3e81ecd3573754b3  gcc/co
*** 5656,5662 ****
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! 6980b12b5ee7d58f34ea6e04b9fae33f  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5660,5666 ----
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! c1512354df3be6a3199667ef801fadc1  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** f39635970f98bbc4591f6363fe70504b  gcc/cp
*** 5693,5706 ****
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d9b8a76735523ab737e8778b90397d97  gcc/cp/Make-lang.in
! 424b3f3c06677591d931209932462a5f  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
  71a53d5acceb572b1f04fac1bee641a9  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! 8d24c7994d82cea073f22d46c768b201  gcc/cp/constexpr.cc
! 8496faa175546e14a318d75acad50407  gcc/cp/constraint.cc
! 82787881429d4e0164a81f57770f7b27  gcc/cp/contracts.cc
  3df18dc2cb1493562bae14ea5bc85c10  gcc/cp/contracts.h
  37c0253792f8c7107a6beca6e8411c09  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
--- 5697,5710 ----
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d9b8a76735523ab737e8778b90397d97  gcc/cp/Make-lang.in
! 88416a1dd254219b3c3b9802a9b0f107  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
  71a53d5acceb572b1f04fac1bee641a9  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! f5c643c92285472e2fcdd64c5615e971  gcc/cp/constexpr.cc
! 45e402d52ce6df79d810adb1674abee0  gcc/cp/constraint.cc
! 69466f97c097f91a456bf7c524c5ee51  gcc/cp/contracts.cc
  3df18dc2cb1493562bae14ea5bc85c10  gcc/cp/contracts.h
  37c0253792f8c7107a6beca6e8411c09  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
*************** e51f295e858583af5f9cf88b9530adf7  gcc/cp
*** 5710,5720 ****
  d7d250b1eaee24019593f10bfebff1b3  gcc/cp/cp-objcp-common.cc
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
! 4725eb6367561f7e622a8578f48db129  gcc/cp/cp-tree.def
! cca55dec3f87e185ae64311087510014  gcc/cp/cp-tree.h
  13d136a72a2aff80be380103d1c27ed5  gcc/cp/cp-ubsan.cc
  d49404e9805231f4f5732b27e7c35670  gcc/cp/cvt.cc
! 6f71556aa8917a18188d98294711bc59  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
  98aedfd1dc2cf818aaabfc641136ebee  gcc/cp/decl.cc
--- 5714,5724 ----
  d7d250b1eaee24019593f10bfebff1b3  gcc/cp/cp-objcp-common.cc
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
! 4b73238df8e4961703ef6aeb8d9f5697  gcc/cp/cp-tree.def
! c87b3993309e78355356e8b7f8a91449  gcc/cp/cp-tree.h
  13d136a72a2aff80be380103d1c27ed5  gcc/cp/cp-ubsan.cc
  d49404e9805231f4f5732b27e7c35670  gcc/cp/cvt.cc
! fa46318edd9f82b0c77eb0d342637496  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
  98aedfd1dc2cf818aaabfc641136ebee  gcc/cp/decl.cc
*************** a29b3e9192657e81a1574fb99466348d  gcc/cp
*** 5732,5738 ****
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  ae7c1d49c3ae546f4a980c3ebc22690d  gcc/cp/lex.cc
  e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp/logic.cc
! 6a26bc898d3a507e194ac1f081b823cd  gcc/cp/mangle.cc
  3d68343c4a9d614bb00b91ad53e79a0b  gcc/cp/mapper-client.cc
  27465babcaf6195d4f438ed36bdd6aff  gcc/cp/mapper-client.h
  40847be23013a3a5aba415a0a2002926  gcc/cp/mapper-resolver.cc
--- 5736,5742 ----
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  ae7c1d49c3ae546f4a980c3ebc22690d  gcc/cp/lex.cc
  e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp/logic.cc
! 9a01eb10a7b7b3e112eaa9e7f5cda57d  gcc/cp/mangle.cc
  3d68343c4a9d614bb00b91ad53e79a0b  gcc/cp/mapper-client.cc
  27465babcaf6195d4f438ed36bdd6aff  gcc/cp/mapper-client.h
  40847be23013a3a5aba415a0a2002926  gcc/cp/mapper-resolver.cc
*************** e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp
*** 5741,5752 ****
  c52f8d73b7042675572727b4bbb00bc2  gcc/cp/method.cc
  1036b0f480de83065cc19247a1cf998a  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
! 475864b4d28a78a99daca900b93bb9a6  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! 569f5e3bee5435d218c125766b535625  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 379d4d9ff76f22d44c11ad851cbab2ad  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
  e54f0cd9d37a30330ea77c220f5b82e6  gcc/cp/reflect.cc
  1faa8f5ba3e1bae7c1cf69f93affe1dd  gcc/cp/rtti.cc
--- 5745,5756 ----
  c52f8d73b7042675572727b4bbb00bc2  gcc/cp/method.cc
  1036b0f480de83065cc19247a1cf998a  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
! bfbabb2874dd771e49882b927bad7414  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! f37239d61414f98f5622d841d2801965  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 39857a621f3547605873c5cb9bd1c26d  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
  e54f0cd9d37a30330ea77c220f5b82e6  gcc/cp/reflect.cc
  1faa8f5ba3e1bae7c1cf69f93affe1dd  gcc/cp/rtti.cc
*************** f910306138014f0f7b52ab2934ac0f1b  gcc/db
*** 6041,6047 ****
  3e98a4ca217fc6f5c000ab031d6f8b30  gcc/ddg.h
  fc9508a813d61f77432f8e52b0a237ee  gcc/debug.cc
  89780f934584ce7fe2539cb7ac5c8eb8  gcc/debug.h
! 0afbf3ea5c8e19a3c7a80ff5fd51f85b  gcc/defaults.h
  e9fa9536951db6e9abcb8db4a451ec79  gcc/dep-fusion.cc
  aa5b6daea5bb76571584ecd5c953cb2b  gcc/df-core.cc
  deda7f03e66eeca915d92a67670adf3c  gcc/df-problems.cc
--- 6045,6051 ----
  3e98a4ca217fc6f5c000ab031d6f8b30  gcc/ddg.h
  fc9508a813d61f77432f8e52b0a237ee  gcc/debug.cc
  89780f934584ce7fe2539cb7ac5c8eb8  gcc/debug.h
! 9d922df39d68488610199aa62527ebb3  gcc/defaults.h
  e9fa9536951db6e9abcb8db4a451ec79  gcc/dep-fusion.cc
  aa5b6daea5bb76571584ecd5c953cb2b  gcc/df-core.cc
  deda7f03e66eeca915d92a67670adf3c  gcc/df-problems.cc
*************** ee65c9e3e7c3fb1fd0128c23f4130e51  gcc/do
*** 6141,6147 ****
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 2ad3a77b8cab4890f911831d538ab179  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
--- 6145,6151 ----
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 9a7edc5068be5fa44a9bad0de3dfe83f  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
*************** c84639641b29cd79e61a0fe226b0bca7  gcc/do
*** 6164,6172 ****
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! a79b3cf471168fa102d1da4e09c6a25a  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 4556f33d8ea043197eac78aa3ba258a8  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6168,6176 ----
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 587de04be2ed31376f132b23d3b9dcf7  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 74e8b4309b220b687376b0de23d029f3  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** c2fc9f8e6a1cb39a7237e4ac3d7fcd7f  gcc/do
*** 6204,6210 ****
  c107bad07b9aaa666477ef733b5fa733  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  721e689329cd07ff27ba55b5c090eae1  gcc/doc/match-and-simplify.texi
! 8a48cf4c683d44d167575c5be6742fca  gcc/doc/md.texi
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
--- 6208,6214 ----
  c107bad07b9aaa666477ef733b5fa733  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  721e689329cd07ff27ba55b5c090eae1  gcc/doc/match-and-simplify.texi
! d5b614da0b0d0bf52fc4ae185bdad3e9  gcc/doc/md.texi
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
*************** e54937e427a2584ac4045286c725fab1  gcc/do
*** 6214,6228 ****
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
  5a6d335e7f5eb45cd81d2e5bbf8a3e08  gcc/doc/riscv-ext.texi
! 7a72b9255474351bcdd93a892d9117cc  gcc/doc/riscv-mcpu.texi
! 9ec20d6ebaa57efb413a9b6318d67afd  gcc/doc/riscv-mtune.texi
  d148d8e42c694bcabb267855d8c863fb  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
  9ffca90352cb023c870de24efb2c2567  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! ce88643312d8f975e58f32c87177fe60  gcc/doc/tm.texi
! 12b132a1a7bd5eb02147ab7fbc77d30c  gcc/doc/tm.texi.in
  b3858c24cbc7c7b77d15bcdd7c4b1fde  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
--- 6218,6232 ----
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
  5a6d335e7f5eb45cd81d2e5bbf8a3e08  gcc/doc/riscv-ext.texi
! 6ff934f860e08505d46fc75263670498  gcc/doc/riscv-mcpu.texi
! 3f5f90c41630a7e7beceefceb6a811c4  gcc/doc/riscv-mtune.texi
  d148d8e42c694bcabb267855d8c863fb  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
  9ffca90352cb023c870de24efb2c2567  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! 5a96b393e3e987f4636ddcba4d66c987  gcc/doc/tm.texi
! 274b44834f8265a4d1cce5a9eb4d4b08  gcc/doc/tm.texi.in
  b3858c24cbc7c7b77d15bcdd7c4b1fde  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
*************** d61f76c4b55102abe0d6908ab60489e7  gcc/ex
*** 6262,6268 ****
  218b6e1049518cb5651dfbf9f18e27a8  gcc/explow.cc
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
  ef79bb9b3a89cdad2c27fe5d245027c0  gcc/expmed.cc
! dfe1e019d600e28ca6930d4d35dd73a5  gcc/expmed.h
  31aadb9ebae73c79e15e8db0c74fbde7  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  1695cbbee07dd6afdb1af11e8fe6c80b  gcc/ext-dce.cc
--- 6266,6272 ----
  218b6e1049518cb5651dfbf9f18e27a8  gcc/explow.cc
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
  ef79bb9b3a89cdad2c27fe5d245027c0  gcc/expmed.cc
! 281d19a5024cc9a07cec71db1e982130  gcc/expmed.h
  31aadb9ebae73c79e15e8db0c74fbde7  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  1695cbbee07dd6afdb1af11e8fe6c80b  gcc/ext-dce.cc
*************** d9115b3f18771a2d2c8c56e81789487b  gcc/fi
*** 6277,6288 ****
  1caa253d024b0e3dcf3e6ba5ca8eeab1  gcc/fixed-value.h
  08524cf6a8b83425667c9520ab473128  gcc/flag-types.h
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
! 93f8868de91f6c2b4a1c52b6045f2d89  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
  72c8a46a02696cd6a04b08ee7a11edfb  gcc/fold-const.cc
  98b49862cb21c530619c3ce208a89e80  gcc/fold-const.h
  87bf3dcaf0fa670e88b5693e7ece16d6  gcc/fold-mem-offsets.cc
! ec55fd43e99083063065c944aa0c5390  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6281,6292 ----
  1caa253d024b0e3dcf3e6ba5ca8eeab1  gcc/fixed-value.h
  08524cf6a8b83425667c9520ab473128  gcc/flag-types.h
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
! 36d55215f4d570a1a074b9850c01d93d  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
  72c8a46a02696cd6a04b08ee7a11edfb  gcc/fold-const.cc
  98b49862cb21c530619c3ce208a89e80  gcc/fold-const.h
  87bf3dcaf0fa670e88b5693e7ece16d6  gcc/fold-mem-offsets.cc
! d9b1ef9dd844808db7bac35e8ce55f1f  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** b85c5c1f73d24c8492963a229c649c86  gcc/fo
*** 6348,6354 ****
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
  e5c0565c05cf7375c9978273f2e553e7  gcc/fortran/iso-fortran-env.def
  20a111338bfdbe210a5826e590844f81  gcc/fortran/lang-specs.h
! ab51c8a2ae0733888b4a71d477aa98a9  gcc/fortran/lang.opt
  54208069c9076f94d4a14191605630c0  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
  3739ea7b5fda2d49d8465c9f9d510dbb  gcc/fortran/match.cc
--- 6352,6358 ----
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
  e5c0565c05cf7375c9978273f2e553e7  gcc/fortran/iso-fortran-env.def
  20a111338bfdbe210a5826e590844f81  gcc/fortran/lang-specs.h
! f0de02cb8967c55a286816e26e2c4e82  gcc/fortran/lang.opt
  54208069c9076f94d4a14191605630c0  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
  3739ea7b5fda2d49d8465c9f9d510dbb  gcc/fortran/match.cc
*************** bf54232c4c950ed772f4964c4f79629e  gcc/fo
*** 6362,6393 ****
  dcf85ccadaa9f9fc953324d70320f59d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  652dece8c45124ac6ad49d39f2b67df1  gcc/fortran/primary.cc
! 9d50def4889b3e383a68585d777aa5ca  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
  d2c91e2744faf25a9b344ff91de78405  gcc/fortran/st.cc
! 760f4dee9cef719e49f21860505e1687  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 44a26b9887c5b82a64a0016810ee62e7  gcc/fortran/trans-array.cc
  579b2b79e8e64c99cf7a8101c42ba519  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  0051b874f3dfe1b38ec77d5f181b3425  gcc/fortran/trans-const.cc
  f98aef4a99a3ee3d3100e827120be5ca  gcc/fortran/trans-const.h
! 8126f57e12d4b9ba7cc04d0b13500955  gcc/fortran/trans-decl.cc
! 278d0bfd7a22db97d4d490f51ae5189e  gcc/fortran/trans-descriptor.cc
! 3b12be7bdd3315f8ea7b068be3c5efcb  gcc/fortran/trans-descriptor.h
! 81ca0845909664f1fad7b29485b3f136  gcc/fortran/trans-expr.cc
  246bddc0de965f984fd5a3a5cafd5002  gcc/fortran/trans-intrinsic.cc
  98da4f32a07d6a9049d5ebdb3a59119a  gcc/fortran/trans-io.cc
  8ab80418ccd29228a9a453d9eb3ab11e  gcc/fortran/trans-openmp.cc
  d4074142bb1ae96a013559a4155423be  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! 2080e7fe1dede580efeb6d90a49f88ce  gcc/fortran/trans-types.cc
  d2e2d3b54c5e07c2ef96e16dfafb0a5d  gcc/fortran/trans-types.h
  3f9d439378f1f9d9f4c05eb2da11ba90  gcc/fortran/trans.cc
! 549613013fb9087bd3f1dfb4726b135b  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
  db9a8244f9f5260e1f67ae046b4dd905  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
--- 6366,6397 ----
  dcf85ccadaa9f9fc953324d70320f59d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  652dece8c45124ac6ad49d39f2b67df1  gcc/fortran/primary.cc
! 9e217248f3269b435c826b0e723d6b14  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
  d2c91e2744faf25a9b344ff91de78405  gcc/fortran/st.cc
! e1286db11b273464bda7121ef769ceca  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 5c0119c9c5b8980dd1c25572c34d7a30  gcc/fortran/trans-array.cc
  579b2b79e8e64c99cf7a8101c42ba519  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  0051b874f3dfe1b38ec77d5f181b3425  gcc/fortran/trans-const.cc
  f98aef4a99a3ee3d3100e827120be5ca  gcc/fortran/trans-const.h
! a1ba286bcc8b9ce13333f2a075071cfa  gcc/fortran/trans-decl.cc
! 3314d275b84d3defca2787a916d16bf3  gcc/fortran/trans-descriptor.cc
! bd00ab3a96c4f46fde5649e4f23fe0ab  gcc/fortran/trans-descriptor.h
! a1944d3ca1d20da7a2a74bee87004e42  gcc/fortran/trans-expr.cc
  246bddc0de965f984fd5a3a5cafd5002  gcc/fortran/trans-intrinsic.cc
  98da4f32a07d6a9049d5ebdb3a59119a  gcc/fortran/trans-io.cc
  8ab80418ccd29228a9a453d9eb3ab11e  gcc/fortran/trans-openmp.cc
  d4074142bb1ae96a013559a4155423be  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! 5df598f3b234e988f78cb3fcd112d9a6  gcc/fortran/trans-types.cc
  d2e2d3b54c5e07c2ef96e16dfafb0a5d  gcc/fortran/trans-types.h
  3f9d439378f1f9d9f4c05eb2da11ba90  gcc/fortran/trans.cc
! 1ce67de80fb14b1d56dffe3eaf4a5d32  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
  db9a8244f9f5260e1f67ae046b4dd905  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
*************** c739e2bedd7d49bc7a7c4ae61fe92df6  gcc/ge
*** 6450,6456 ****
  237cfbef39ab39de5247e709cbcd0ca2  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
! de8e965a4f6c4f4c5ab705bd4b8c7cfe  gcc/genmatch.cc
  e4047cfabe80236af3ae74f11e2d60c6  gcc/genmddeps.cc
  07e47d3b20e79c811a134c66e6706df2  gcc/genmddump.cc
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
--- 6454,6460 ----
  237cfbef39ab39de5247e709cbcd0ca2  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
! 3ab923976164ffd787a3ef633e4118cc  gcc/genmatch.cc
  e4047cfabe80236af3ae74f11e2d60c6  gcc/genmddeps.cc
  07e47d3b20e79c811a134c66e6706df2  gcc/genmddump.cc
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
*************** e8ef831ecab58724c781ef6c239eb959  gcc/gi
*** 6477,6483 ****
  8b1599b40f5a2702947d5d0d54b2abbc  gcc/gimple-crc-optimization.cc
  a15c39c8992a881e7ddd36b0e81d341c  gcc/gimple-expr.cc
  61721564f913cdbebe438f7c378b316e  gcc/gimple-expr.h
! 7e2f9ef99c28a0bdb61bb4832971985f  gcc/gimple-fold.cc
  ae37e021ec4849550d7598ecdd2faeb4  gcc/gimple-fold.h
  109e0f96a9d27a8a25bb73d61b701bbc  gcc/gimple-harden-conditionals.cc
  77b7894bb225ebcb156bb0cf28b9325a  gcc/gimple-harden-control-flow.cc
--- 6481,6487 ----
  8b1599b40f5a2702947d5d0d54b2abbc  gcc/gimple-crc-optimization.cc
  a15c39c8992a881e7ddd36b0e81d341c  gcc/gimple-expr.cc
  61721564f913cdbebe438f7c378b316e  gcc/gimple-expr.h
! 4386ea01a053f6f301544e07dfcb28ca  gcc/gimple-fold.cc
  ae37e021ec4849550d7598ecdd2faeb4  gcc/gimple-fold.h
  109e0f96a9d27a8a25bb73d61b701bbc  gcc/gimple-harden-conditionals.cc
  77b7894bb225ebcb156bb0cf28b9325a  gcc/gimple-harden-control-flow.cc
*************** dd67ca2e05cdfe59a549e49eb485455e  gcc/gi
*** 6509,6521 ****
  fad790d11444089193185456cf2a344e  gcc/gimple-range-fold.h
  e004c7285e8f17a42a8ef6730842e935  gcc/gimple-range-gori.cc
  d3281d0fef662ef60ad0bc983f08e436  gcc/gimple-range-gori.h
! 572dc8958109d912190096364752a45a  gcc/gimple-range-infer.cc
  2d9eaffb183e7db68a396b309a97e2cc  gcc/gimple-range-infer.h
  269c7f94145cdb7a8f6345055e177813  gcc/gimple-range-op.cc
  2b35447fc9805b1aa9b1c06450e44a9e  gcc/gimple-range-op.h
  d09001e5018f413cdc71a098de3b6209  gcc/gimple-range-path.cc
  fd93abee2584b401c93735ddd00e75d1  gcc/gimple-range-path.h
! a901b5fb3b36536c4a4133be813140fc  gcc/gimple-range-phi.cc
  cb618963a83cd7f24a75236850e20a99  gcc/gimple-range-phi.h
  a4932ff9aca9b1faf77d94e18d1a98dd  gcc/gimple-range-tests.cc
  6aea6dbdcfdbb9cc7eaba0885ef8339c  gcc/gimple-range-trace.cc
--- 6513,6525 ----
  fad790d11444089193185456cf2a344e  gcc/gimple-range-fold.h
  e004c7285e8f17a42a8ef6730842e935  gcc/gimple-range-gori.cc
  d3281d0fef662ef60ad0bc983f08e436  gcc/gimple-range-gori.h
! e717924b91e6a132546857e546c7db70  gcc/gimple-range-infer.cc
  2d9eaffb183e7db68a396b309a97e2cc  gcc/gimple-range-infer.h
  269c7f94145cdb7a8f6345055e177813  gcc/gimple-range-op.cc
  2b35447fc9805b1aa9b1c06450e44a9e  gcc/gimple-range-op.h
  d09001e5018f413cdc71a098de3b6209  gcc/gimple-range-path.cc
  fd93abee2584b401c93735ddd00e75d1  gcc/gimple-range-path.h
! 0a82c8d6f1b34ba7d24d4dfb1735e5fb  gcc/gimple-range-phi.cc
  cb618963a83cd7f24a75236850e20a99  gcc/gimple-range-phi.h
  a4932ff9aca9b1faf77d94e18d1a98dd  gcc/gimple-range-tests.cc
  6aea6dbdcfdbb9cc7eaba0885ef8339c  gcc/gimple-range-trace.cc
*************** c6ca4c904385311cad5f96a840b597c6  gcc/in
*** 6692,6698 ****
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  a7d9dfb72122a917ffa9ee90152b059e  gcc/ipa-comdats.cc
! 3b23244f6f631f47a593fd9c5779947b  gcc/ipa-cp.cc
  bff71bc7b721a547da3a7ddc6b208fb9  gcc/ipa-cp.h
  0951d893930a76f52aa7e3f0fbd7201e  gcc/ipa-devirt.cc
  069cadb11f88729832aa5e2667ac73b8  gcc/ipa-fnsummary.cc
--- 6696,6702 ----
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  a7d9dfb72122a917ffa9ee90152b059e  gcc/ipa-comdats.cc
! 4bfbdbeeb7671c0fc16b49964afb2cc9  gcc/ipa-cp.cc
  bff71bc7b721a547da3a7ddc6b208fb9  gcc/ipa-cp.h
  0951d893930a76f52aa7e3f0fbd7201e  gcc/ipa-devirt.cc
  069cadb11f88729832aa5e2667ac73b8  gcc/ipa-fnsummary.cc
*************** c6ab645f373e1d6e9ddd212bfc3a95ba  gcc/lo
*** 6876,6882 ****
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
  1c331efaab50c9e240d3ebcebea56688  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
! 3d57bb7e92dc60a4a2924c65366195b4  gcc/lra-constraints.cc
  8476735029992c09ffa3a74ea4cd6802  gcc/lra-eliminations.cc
  23c680edc94df3576ba4a7a7abe7ee64  gcc/lra-int.h
  568d6d2d43a7728ab0b54f7e837b653a  gcc/lra-lives.cc
--- 6880,6886 ----
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
  1c331efaab50c9e240d3ebcebea56688  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
! 239f1c667c50395c160873841c1f05f7  gcc/lra-constraints.cc
  8476735029992c09ffa3a74ea4cd6802  gcc/lra-eliminations.cc
  23c680edc94df3576ba4a7a7abe7ee64  gcc/lra-int.h
  568d6d2d43a7728ab0b54f7e837b653a  gcc/lra-lives.cc
*************** e0d99466f393722c3e10caf535614ff7  gcc/lt
*** 6922,6929 ****
  351e06833ea0ad58238533d76ea0c2cf  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 2585f20844693505f67c0297817c5ebe  gcc/m2/ChangeLog
! cb2181d2ed48606b2c4a0407d3d608fb  gcc/m2/Make-lang.in
  ed6143d60ab8fbfb423b65ba791d1faf  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
  3e6a5f14d741382ac3cffb2b6c8d2ce8  gcc/m2/README
--- 6926,6933 ----
  351e06833ea0ad58238533d76ea0c2cf  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 37f352298213554ffaf67d39e609cfba  gcc/m2/ChangeLog
! 29165034bc9ef18ecddaa857a1ebf5a3  gcc/m2/Make-lang.in
  ed6143d60ab8fbfb423b65ba791d1faf  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
  3e6a5f14d741382ac3cffb2b6c8d2ce8  gcc/m2/README
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7899,7905 ****
  a19f34a937ad29bda64c2e81d6433940  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
  11dfd6679ddc945a2c284204df360007  gcc/match-sat-alu.pd
! 8b5a29b9723f0f4239aa5bb5b1136ef2  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  de2929affe75fa1e953d7a30762480bb  gcc/mem-stats.h
--- 7903,7909 ----
  a19f34a937ad29bda64c2e81d6433940  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
  11dfd6679ddc945a2c284204df360007  gcc/match-sat-alu.pd
! 12ac29354bfea813c9aa87d432090678  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  de2929affe75fa1e953d7a30762480bb  gcc/mem-stats.h
*************** de2929affe75fa1e953d7a30762480bb  gcc/me
*** 7910,7916 ****
  1c680ed2fea24d63c34c8362970ded74  gcc/mode-classes.def
  173becf2370cc59c9b9db1f353933280  gcc/mode-switching.cc
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
! ab360f5772fb7a87b6119cf198a8246f  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
  505007bd98eaa6dc54b30f30a1bfa0a0  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
--- 7914,7920 ----
  1c680ed2fea24d63c34c8362970ded74  gcc/mode-classes.def
  173becf2370cc59c9b9db1f353933280  gcc/mode-switching.cc
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
! 21e03d1bc387a3c0516c1fd488911537  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
  505007bd98eaa6dc54b30f30a1bfa0a0  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
*************** a3e14ca56a69a9d7eba5fccdc026d90f  gcc/pa
*** 7999,8005 ****
  0355d2054ba5f7935e870d42ea044cbf  gcc/path-coverage.cc
  a804a634cdc9dbcb92434c9e03799a1e  gcc/pex.cc
  b2f9b18f946c2e60e4f6cba0ab2df54e  gcc/pex.h
! 4c58d163e773c8a97fe95f623b089641  gcc/plugin.cc
  af6268dd53154434eb4c4d1c299e0ee2  gcc/plugin.def
  5678cfbc9cf98f9e69bee1118c787a42  gcc/plugin.h
  ea6d245aaa2a4560ad9eea0c7b1fd2df  gcc/po/ChangeLog
--- 8003,8009 ----
  0355d2054ba5f7935e870d42ea044cbf  gcc/path-coverage.cc
  a804a634cdc9dbcb92434c9e03799a1e  gcc/pex.cc
  b2f9b18f946c2e60e4f6cba0ab2df54e  gcc/pex.h
! 55b41ed23a74923c0eed92808ee08ab1  gcc/plugin.cc
  af6268dd53154434eb4c4d1c299e0ee2  gcc/plugin.def
  5678cfbc9cf98f9e69bee1118c787a42  gcc/plugin.h
  ea6d245aaa2a4560ad9eea0c7b1fd2df  gcc/po/ChangeLog
*************** f72a1e84c9facd65dc1c42ee67f21583  gcc/pu
*** 8062,8068 ****
  b13ec01389f52189f974e148eec9ae08  gcc/range-op-float.cc
  4c327cee286aae07c335e8d4a2eea1a1  gcc/range-op-mixed.h
  63b4a88f7fe37133ba456c19d2d85e72  gcc/range-op-ptr.cc
! 5817de3ada2c203cf1fd721db7f314e4  gcc/range-op.cc
  52c9ff8b4fcf2afdee9b9f331411b42e  gcc/range-op.h
  5224210104d440bc7bae81953ca2e7f1  gcc/range.cc
  19ba1dec644467b75ebc4246acf8ff8f  gcc/range.h
--- 8066,8072 ----
  b13ec01389f52189f974e148eec9ae08  gcc/range-op-float.cc
  4c327cee286aae07c335e8d4a2eea1a1  gcc/range-op-mixed.h
  63b4a88f7fe37133ba456c19d2d85e72  gcc/range-op-ptr.cc
! b4524f9db48854a3e11599181d877a06  gcc/range-op.cc
  52c9ff8b4fcf2afdee9b9f331411b42e  gcc/range-op.h
  5224210104d440bc7bae81953ca2e7f1  gcc/range.cc
  19ba1dec644467b75ebc4246acf8ff8f  gcc/range.h
*************** eab7365dceccf86b8e9a8ccbb365afc3  gcc/rt
*** 8121,8131 ****
  52b32f7fea2e3ff36ca550993706891f  gcc/rtl-ssa/movement.h
  40583244827449be4bd28679b4068f04  gcc/rtl-ssa/predicates.h
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
! 27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
  d5fa22d4e702847e6ca00581513834fe  gcc/rtl.def
! 9e4f2a5f5ed58f15c72f77b1019c01a1  gcc/rtl.h
! 78a6761be9094aabb776bbba41b1906f  gcc/rtlanal.cc
! 57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
  0c917b0591a65e7996befc0d1e294cc3  gcc/rtlhash.h
  e69cd2b6e182aa2d43143b1719d6c6e4  gcc/rtlhooks-def.h
--- 8125,8135 ----
  52b32f7fea2e3ff36ca550993706891f  gcc/rtl-ssa/movement.h
  40583244827449be4bd28679b4068f04  gcc/rtl-ssa/predicates.h
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
! 516067600b233e22bde13c1efebd30cf  gcc/rtl.cc
  d5fa22d4e702847e6ca00581513834fe  gcc/rtl.def
! abac3a57cf23d3557141fe66e7f5e2ad  gcc/rtl.h
! b4ccd7c1619c8002bdc60a343b9849e4  gcc/rtlanal.cc
! ac465e6a2c91a6be2f2d0576b6edbb72  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
  0c917b0591a65e7996befc0d1e294cc3  gcc/rtlhash.h
  e69cd2b6e182aa2d43143b1719d6c6e4  gcc/rtlhooks-def.h
*************** f7a30cc2e8344fa489739267da2d868b  gcc/se
*** 8704,8710 ****
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! dca58d14fac22629afbbab846b5610fb  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
--- 8708,8714 ----
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! 005bd7f8ca28bd916b7fc128ce1a53da  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
*************** d294651bcc46af1abb89e48cd851fd40  gcc/ta
*** 8753,8764 ****
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
! e4624141ea31da60f0820a531da77a13  gcc/target.def
  4685fe9ae3053826ebb0e8a51092bb53  gcc/target.h
  8dfc7c2c4f5fcc8bae4e56f4908de008  gcc/targhooks.cc
  dcedef5930550e30cc9ea611bbffde5b  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 37d4c4cddd9ee4978e4ecd4ae5f72d8d  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8757,8768 ----
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
! 046ce839cc31be646fc5363019fb581b  gcc/target.def
  4685fe9ae3053826ebb0e8a51092bb53  gcc/target.h
  8dfc7c2c4f5fcc8bae4e56f4908de008  gcc/targhooks.cc
  dcedef5930550e30cc9ea611bbffde5b  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 371347cb477907268b138bbf4d01716d  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** de61993d506322a4ebcaeb6951f40fff  gcc/te
*** 18058,18063 ****
--- 18062,18069 ----
  9435b893d35596d6e6c421a7d0ca6b4e  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess3.c
  c2f8af9a24cbf598244cbdf23a6eb007  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess4.c
  af1ddc910423deb7037d0df021bc094d  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c
+ 555686248cc64e8fe412bbe87dfdd7f6  gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c
+ bd92582637840eb5e15722f85b17f629  gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c
  def0eee4b52b80a22825e7e10a92ec0d  gcc/testsuite/c-c++-common/Wstrict-flex-arrays.c
  f65e675073fa6e887cf5c8b46811dbbd  gcc/testsuite/c-c++-common/Wstringop-overflow-2-novec.c
  72b026b6797ea3ac3a7342c55601477c  gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
*************** f5daaa51309a09590684e189ca5cef39  gcc/te
*** 18153,18159 ****
  aaa6cbff71474123fbc7b9f839f77079  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c
  e0cb9fd36a45a025e09e801b6c957686  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-2.c
  d5abab57686f3bb67c17fb893fa906c5  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-3.c
! ff142bf88e41f77d891ef01f35da87a1  gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c
  84d8987fac13d5215f5fc055229d77d8  gcc/testsuite/c-c++-common/analyzer/analyzer-debugging-fns-1.c
  1a7053ef4676bb493808df6d87159d0e  gcc/testsuite/c-c++-common/analyzer/analyzer-decls.h
  5ddad3c4a41d4b1a1b4ac83583c6c61b  gcc/testsuite/c-c++-common/analyzer/analyzer-verbosity-0.c
--- 18159,18165 ----
  aaa6cbff71474123fbc7b9f839f77079  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c
  e0cb9fd36a45a025e09e801b6c957686  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-2.c
  d5abab57686f3bb67c17fb893fa906c5  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-3.c
! 6ea73e8fe54549e395b3831e518c49a9  gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c
  84d8987fac13d5215f5fc055229d77d8  gcc/testsuite/c-c++-common/analyzer/analyzer-debugging-fns-1.c
  1a7053ef4676bb493808df6d87159d0e  gcc/testsuite/c-c++-common/analyzer/analyzer-decls.h
  5ddad3c4a41d4b1a1b4ac83583c6c61b  gcc/testsuite/c-c++-common/analyzer/analyzer-verbosity-0.c
*************** f2131bfa61003086112f4727e3acb289  gcc/te
*** 18221,18227 ****
  90d538195723afedc20809c0e3299ea3  gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-2.c
  d7794ed91b592bdaaebd423b3d5d046d  gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c
  a42e31835cb440aad70d530954f539ee  gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c
! cc0f23b2ce68c195b7e03c19c98794a7  gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c
  155d36ab3fdd051347569701effe1700  gcc/testsuite/c-c++-common/analyzer/data-model-11.c
  ed3e5f87e61e0018134586c5a1a64feb  gcc/testsuite/c-c++-common/analyzer/data-model-12.c
  3b6f2946393d384b8f9dc15de19da5b6  gcc/testsuite/c-c++-common/analyzer/data-model-14.c
--- 18227,18233 ----
  90d538195723afedc20809c0e3299ea3  gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-2.c
  d7794ed91b592bdaaebd423b3d5d046d  gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c
  a42e31835cb440aad70d530954f539ee  gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c
! e24e68bbdd806671c87d9c0c4e45962c  gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c
  155d36ab3fdd051347569701effe1700  gcc/testsuite/c-c++-common/analyzer/data-model-11.c
  ed3e5f87e61e0018134586c5a1a64feb  gcc/testsuite/c-c++-common/analyzer/data-model-12.c
  3b6f2946393d384b8f9dc15de19da5b6  gcc/testsuite/c-c++-common/analyzer/data-model-14.c
*************** e8f2ac5a2eaf583345c763651947c9b5  gcc/te
*** 18298,18305 ****
  50e92bcce9bdc748be8e90cf89d2dfc7  gcc/testsuite/c-c++-common/analyzer/fileno-1.c
  a54c5604b047a4dc1ca40c729785be0b  gcc/testsuite/c-c++-common/analyzer/first-field-1.c
  bdefb38ec06fb2e8a965770a1ddea724  gcc/testsuite/c-c++-common/analyzer/first-field-2.c
! b8afac2235f0cb3ddf49379207ffb33f  gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c
! ec1f7f84cd3c696e2def72daeb4cd58d  gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c
  28949d2a04a0d181e2013c7f210560c6  gcc/testsuite/c-c++-common/analyzer/flexible-array-member-1.c
  3a1490518625a0c947e5b6ac2c5401eb  gcc/testsuite/c-c++-common/analyzer/fold-string-to-char.c
  3ca6537a697cd0e749a07d45d59ad24d  gcc/testsuite/c-c++-common/analyzer/fopen-2.c
--- 18304,18311 ----
  50e92bcce9bdc748be8e90cf89d2dfc7  gcc/testsuite/c-c++-common/analyzer/fileno-1.c
  a54c5604b047a4dc1ca40c729785be0b  gcc/testsuite/c-c++-common/analyzer/first-field-1.c
  bdefb38ec06fb2e8a965770a1ddea724  gcc/testsuite/c-c++-common/analyzer/first-field-2.c
! 45232c6a573f6e6ce3c56f9a1a66839a  gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c
! 1d96fea1846636f6006c81fdc782f611  gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c
  28949d2a04a0d181e2013c7f210560c6  gcc/testsuite/c-c++-common/analyzer/flexible-array-member-1.c
  3a1490518625a0c947e5b6ac2c5401eb  gcc/testsuite/c-c++-common/analyzer/fold-string-to-char.c
  3ca6537a697cd0e749a07d45d59ad24d  gcc/testsuite/c-c++-common/analyzer/fopen-2.c
*************** a256b4df4964505fabaddb133153a201  gcc/te
*** 18455,18463 ****
  10ef8fc8fdc0652e0eae180799d486c8  gcc/testsuite/c-c++-common/analyzer/null-terminated-strings-2.c
  0d02ed8e1b5ac37f6e2d0eec884933c1  gcc/testsuite/c-c++-common/analyzer/omp-parallel-for-1.c
  43dcd48b6c73f9d8d64b95d20f4581b4  gcc/testsuite/c-c++-common/analyzer/omp-parallel-for-get-min.c
! eb24e40876713860ca0ac7e931abfc74  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-1.c
! dccaf3f6a5587a149aa108073584f903  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-2.c
! 010805505962cb3ca5a783127e374794  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c
  76447181c8e4ba9f2f4b741530e5f530  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-5.c
  2c5cd1ccc8e8156dab1bceee1e648188  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c
  6795a96b6fc0be9bd4170d12a24fbf9f  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c
--- 18461,18469 ----
  10ef8fc8fdc0652e0eae180799d486c8  gcc/testsuite/c-c++-common/analyzer/null-terminated-strings-2.c
  0d02ed8e1b5ac37f6e2d0eec884933c1  gcc/testsuite/c-c++-common/analyzer/omp-parallel-for-1.c
  43dcd48b6c73f9d8d64b95d20f4581b4  gcc/testsuite/c-c++-common/analyzer/omp-parallel-for-get-min.c
! dfcc4a99c189e281c60cfacb2a195182  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-1.c
! 424799e4df320800c0eb1dbf8cd52c56  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-2.c
! 54bcad3fb33d2ab27429ba597165a71b  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c
  76447181c8e4ba9f2f4b741530e5f530  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-5.c
  2c5cd1ccc8e8156dab1bceee1e648188  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c
  6795a96b6fc0be9bd4170d12a24fbf9f  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c
*************** a4afe75fce610b5b4bf8328a5a6680ba  gcc/te
*** 18470,18480 ****
  4b4040192bf840340d180d48b3baf801  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c
  f6abb46de5e149c3f51e095ebafbfd2c  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c
  fd5ff61d7a7a7b916324140fe3cb5d15  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr114899.c
! ddb39f13a9824d6f1b3f6e3508ece447  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat-2.c
! a435090b70c1213b2855e316d7921c1c  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat.c
  faf5c64c9f4ef2376b39ca41758cad75  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr110387.c
  606543af52a81eac809729a52049583c  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr111266.c
! fba9c98e5882168b4357947531f5c3b5  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr112792.c
  c8afd3ff3470bbc33ae32b332a3ec376  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c
  525e0bc1850a84e8e7242a4f6db33b2f  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-read-char-arr.c
  98843c5223809f4a124d12a592435fac  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-read-int-arr.c
--- 18476,18486 ----
  4b4040192bf840340d180d48b3baf801  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c
  f6abb46de5e149c3f51e095ebafbfd2c  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c
  fd5ff61d7a7a7b916324140fe3cb5d15  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr114899.c
! c4bdc5007ed49f1adf4a15d3ded2bb5e  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat-2.c
! 76e57b31c98365417c2887757eb1a594  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat.c
  faf5c64c9f4ef2376b39ca41758cad75  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr110387.c
  606543af52a81eac809729a52049583c  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr111266.c
! 9cd6c2d6ef30974bff66985496c72c87  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr112792.c
  c8afd3ff3470bbc33ae32b332a3ec376  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c
  525e0bc1850a84e8e7242a4f6db33b2f  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-read-char-arr.c
  98843c5223809f4a124d12a592435fac  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-read-int-arr.c
*************** c8afd3ff3470bbc33ae32b332a3ec376  gcc/te
*** 18483,18489 ****
  1e983ca7a4b3b1b4b201607210aedfaf  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-write-int-arr.c
  e4c3643265721b24d21f9763581d569d  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-write-struct-arr.c
  d0558cc0b71d11f718ec2ecc93cc34b9  gcc/testsuite/c-c++-common/analyzer/overlapping-buffers-pr113998.c
! e089e6b6af2eeb36ade618f602bd67bd  gcc/testsuite/c-c++-common/analyzer/overlapping-buffers.c
  7c6c9ed633de8bd71c9e5bf5ec95ceb7  gcc/testsuite/c-c++-common/analyzer/params-2.c
  4d166a6392bd44e453b465258f187cd0  gcc/testsuite/c-c++-common/analyzer/paths-1.c
  25979d0595f5e4da39288a37576604b7  gcc/testsuite/c-c++-common/analyzer/paths-1a.c
--- 18489,18495 ----
  1e983ca7a4b3b1b4b201607210aedfaf  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-write-int-arr.c
  e4c3643265721b24d21f9763581d569d  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-write-struct-arr.c
  d0558cc0b71d11f718ec2ecc93cc34b9  gcc/testsuite/c-c++-common/analyzer/overlapping-buffers-pr113998.c
! 35325786b0aaa6131c38bd67a2b1d15b  gcc/testsuite/c-c++-common/analyzer/overlapping-buffers.c
  7c6c9ed633de8bd71c9e5bf5ec95ceb7  gcc/testsuite/c-c++-common/analyzer/params-2.c
  4d166a6392bd44e453b465258f187cd0  gcc/testsuite/c-c++-common/analyzer/paths-1.c
  25979d0595f5e4da39288a37576604b7  gcc/testsuite/c-c++-common/analyzer/paths-1a.c
*************** dbff5f371056a62a0166453b66a4e27a  gcc/te
*** 18578,18584 ****
  aa029c0bea41b0e118a8ca1f50d23b60  gcc/testsuite/c-c++-common/analyzer/pr96650-2-notrans.c
  8493678def139ca7a82b058857427371  gcc/testsuite/c-c++-common/analyzer/pr96650-2-trans.c
  6839dc70e12ccfcef828a166458c4e34  gcc/testsuite/c-c++-common/analyzer/pr96651-1.c
! 4104c93d9abf49a4c99fa10aa19d03ce  gcc/testsuite/c-c++-common/analyzer/pr96653.c
  93d3de68df9d3d71a9a39d6fc15caaee  gcc/testsuite/c-c++-common/analyzer/pr96699.c
  59b287a3143a88ac8698f48e67bca083  gcc/testsuite/c-c++-common/analyzer/pr96705.c
  4ca9c431f41a72254ed6c43b62aa8ddb  gcc/testsuite/c-c++-common/analyzer/pr96713.c
--- 18584,18590 ----
  aa029c0bea41b0e118a8ca1f50d23b60  gcc/testsuite/c-c++-common/analyzer/pr96650-2-notrans.c
  8493678def139ca7a82b058857427371  gcc/testsuite/c-c++-common/analyzer/pr96650-2-trans.c
  6839dc70e12ccfcef828a166458c4e34  gcc/testsuite/c-c++-common/analyzer/pr96651-1.c
! 8d831019fee6952f85392361989ec9d7  gcc/testsuite/c-c++-common/analyzer/pr96653.c
  93d3de68df9d3d71a9a39d6fc15caaee  gcc/testsuite/c-c++-common/analyzer/pr96699.c
  59b287a3143a88ac8698f48e67bca083  gcc/testsuite/c-c++-common/analyzer/pr96705.c
  4ca9c431f41a72254ed6c43b62aa8ddb  gcc/testsuite/c-c++-common/analyzer/pr96713.c
*************** ed19bd6035c229c80a63f4ee4d655992  gcc/te
*** 18625,18631 ****
  c3ed923d26f47c708b12b964c6261a71  gcc/testsuite/c-c++-common/analyzer/realloc-3.c
  d3fd9e6273dea53493741229b2b67559  gcc/testsuite/c-c++-common/analyzer/realloc-4.c
  52b12a0e6c5b99a983ba71f27045c0e5  gcc/testsuite/c-c++-common/analyzer/realloc-5.c
! a7c38aafc43d1698b07f6cdb050c22bb  gcc/testsuite/c-c++-common/analyzer/realloc-pr110014.c
  80fa663011e0905b551ff26c0f4ab6aa  gcc/testsuite/c-c++-common/analyzer/refcounting-1.c
  afd8314fa815d307327b637eb02db422  gcc/testsuite/c-c++-common/analyzer/rhbz1878600.c
  1b6422ac347f2b63d7aa05f856a88bf4  gcc/testsuite/c-c++-common/analyzer/sarif-path-role.c
--- 18631,18637 ----
  c3ed923d26f47c708b12b964c6261a71  gcc/testsuite/c-c++-common/analyzer/realloc-3.c
  d3fd9e6273dea53493741229b2b67559  gcc/testsuite/c-c++-common/analyzer/realloc-4.c
  52b12a0e6c5b99a983ba71f27045c0e5  gcc/testsuite/c-c++-common/analyzer/realloc-5.c
! 69fabefebcf961f65493cfc9524e1b73  gcc/testsuite/c-c++-common/analyzer/realloc-pr110014.c
  80fa663011e0905b551ff26c0f4ab6aa  gcc/testsuite/c-c++-common/analyzer/refcounting-1.c
  afd8314fa815d307327b637eb02db422  gcc/testsuite/c-c++-common/analyzer/rhbz1878600.c
  1b6422ac347f2b63d7aa05f856a88bf4  gcc/testsuite/c-c++-common/analyzer/sarif-path-role.c
*************** d2d0bf430ae5db83cb2eeb1d4c3c4844  gcc/te
*** 18644,18650 ****
  a97a1068bf67d70b5efb114f54a7aad1  gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c
  df79aefe937952285e9d24cbfc4d0438  gcc/testsuite/c-c++-common/analyzer/sprintf-pr117369.c
  0d17ba25adaab3e664c5b31f67e250f4  gcc/testsuite/c-c++-common/analyzer/stale-frame-1.c
! 44d8756f94c5eb1f54f1ad42b42b7c7e  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c
  565c27c80630eebb81d83c9cfbd163f5  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-ptr.c
  1e7d030baaceaf66501a55e6e522ff84  gcc/testsuite/c-c++-common/analyzer/stdarg-pr113509.c
  437bb25b72eb426ab31a4105ef80d41d  gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c
--- 18650,18656 ----
  a97a1068bf67d70b5efb114f54a7aad1  gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c
  df79aefe937952285e9d24cbfc4d0438  gcc/testsuite/c-c++-common/analyzer/sprintf-pr117369.c
  0d17ba25adaab3e664c5b31f67e250f4  gcc/testsuite/c-c++-common/analyzer/stale-frame-1.c
! 301e801928c3e79ba6e20ea5b7b46477  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c
  565c27c80630eebb81d83c9cfbd163f5  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-ptr.c
  1e7d030baaceaf66501a55e6e522ff84  gcc/testsuite/c-c++-common/analyzer/stdarg-pr113509.c
  437bb25b72eb426ab31a4105ef80d41d  gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c
*************** c02d2254f7ec2e1d0a71dadd15088d94  gcc/te
*** 18660,18666 ****
  af84b442d8f68452823319bf94649695  gcc/testsuite/c-c++-common/analyzer/strlen-pr123085.c
  188f94d7648b519e3d2cce6399a73f5f  gcc/testsuite/c-c++-common/analyzer/strncpy-1.c
  95822937a3320cebcdcd88c927eb703e  gcc/testsuite/c-c++-common/analyzer/strncpy-pr111361.c
! 5f63b79c771eee4d268d6bba34c9182c  gcc/testsuite/c-c++-common/analyzer/strndup-1.c
  3c614108330c0db6608c4a4ed728bcf3  gcc/testsuite/c-c++-common/analyzer/strstr-1.c
  e42278d4075df8df53e7bdf029fb1b32  gcc/testsuite/c-c++-common/analyzer/strtok-1.c
  5692f39f9e1eb1d0bffdef5855475c4a  gcc/testsuite/c-c++-common/analyzer/strtok-2.c
--- 18666,18672 ----
  af84b442d8f68452823319bf94649695  gcc/testsuite/c-c++-common/analyzer/strlen-pr123085.c
  188f94d7648b519e3d2cce6399a73f5f  gcc/testsuite/c-c++-common/analyzer/strncpy-1.c
  95822937a3320cebcdcd88c927eb703e  gcc/testsuite/c-c++-common/analyzer/strncpy-pr111361.c
! 82e3271a5096124caa0c997ffcef1866  gcc/testsuite/c-c++-common/analyzer/strndup-1.c
  3c614108330c0db6608c4a4ed728bcf3  gcc/testsuite/c-c++-common/analyzer/strstr-1.c
  e42278d4075df8df53e7bdf029fb1b32  gcc/testsuite/c-c++-common/analyzer/strtok-1.c
  5692f39f9e1eb1d0bffdef5855475c4a  gcc/testsuite/c-c++-common/analyzer/strtok-2.c
*************** b29c456f5de573bca10efffa5f55755e  gcc/te
*** 18683,18689 ****
  6e87afc5673ae20262e220886767a356  gcc/testsuite/c-c++-common/analyzer/taint-assert-BUG_ON.c
  86e51674ba773c6ee4e40340b9426dfe  gcc/testsuite/c-c++-common/analyzer/taint-divisor-2.c
  3bb40712dc19e9f4a8252502089ea73f  gcc/testsuite/c-c++-common/analyzer/taint-divisor-pr113619.c
! cd3ec43b10b0bcd2be2665d2fc3b1570  gcc/testsuite/c-c++-common/analyzer/taint-index-pr106229.c
  d4da70df696cd060b923bf542a7ddb33  gcc/testsuite/c-c++-common/analyzer/taint-merger.c
  142b7ecd00d0db6c2fd59f9e04c62c92  gcc/testsuite/c-c++-common/analyzer/taint-modulus-1.c
  d2d14a551b67f871c55a03892dc0bac5  gcc/testsuite/c-c++-common/analyzer/taint-realloc.c
--- 18689,18695 ----
  6e87afc5673ae20262e220886767a356  gcc/testsuite/c-c++-common/analyzer/taint-assert-BUG_ON.c
  86e51674ba773c6ee4e40340b9426dfe  gcc/testsuite/c-c++-common/analyzer/taint-divisor-2.c
  3bb40712dc19e9f4a8252502089ea73f  gcc/testsuite/c-c++-common/analyzer/taint-divisor-pr113619.c
! dbd3f0f2af65ec2d5d48656fce8cd1b3  gcc/testsuite/c-c++-common/analyzer/taint-index-pr106229.c
  d4da70df696cd060b923bf542a7ddb33  gcc/testsuite/c-c++-common/analyzer/taint-merger.c
  142b7ecd00d0db6c2fd59f9e04c62c92  gcc/testsuite/c-c++-common/analyzer/taint-modulus-1.c
  d2d14a551b67f871c55a03892dc0bac5  gcc/testsuite/c-c++-common/analyzer/taint-realloc.c
*************** dc18b7f43ca34ba2bdcf1f2293ef3567  gcc/te
*** 18696,18702 ****
  638b5163056df5101a7ad536d7314f7a  gcc/testsuite/c-c++-common/analyzer/uninit-alloca.c
  76c4fa43fef5c9ac975c951c831adb52  gcc/testsuite/c-c++-common/analyzer/uninit-pr104576.c
  29ba9a3ce1e65ae0d19ec63085e2d2ef  gcc/testsuite/c-c++-common/analyzer/uninit-pr106204.c
! c98f8534d7e8d5036a05a97de1ee6199  gcc/testsuite/c-c++-common/analyzer/uninit-pr108704.c
  0a73adc6c0372f590401056893f940e5  gcc/testsuite/c-c++-common/analyzer/uninit-pr108806-qemu.c
  81482db162fbbce047b1a5ce58113366  gcc/testsuite/c-c++-common/analyzer/uninit-pr108968-register.c
  5f2be8cb83f9bed0a69e89484bb54b9f  gcc/testsuite/c-c++-common/analyzer/uninit-pr94713.c
--- 18702,18708 ----
  638b5163056df5101a7ad536d7314f7a  gcc/testsuite/c-c++-common/analyzer/uninit-alloca.c
  76c4fa43fef5c9ac975c951c831adb52  gcc/testsuite/c-c++-common/analyzer/uninit-pr104576.c
  29ba9a3ce1e65ae0d19ec63085e2d2ef  gcc/testsuite/c-c++-common/analyzer/uninit-pr106204.c
! 95b4f8717c53ed3064c76402ef05bf84  gcc/testsuite/c-c++-common/analyzer/uninit-pr108704.c
  0a73adc6c0372f590401056893f940e5  gcc/testsuite/c-c++-common/analyzer/uninit-pr108806-qemu.c
  81482db162fbbce047b1a5ce58113366  gcc/testsuite/c-c++-common/analyzer/uninit-pr108968-register.c
  5f2be8cb83f9bed0a69e89484bb54b9f  gcc/testsuite/c-c++-common/analyzer/uninit-pr94713.c
*************** c28e1ac439c939abc244a2a941fb7631  gcc/te
*** 21431,21437 ****
  d37be4e494df6cbb370f405931df02e6  gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out
  400f1592b58fcc4b35c06abf08fee833  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob
  889ec5fde47e76be7c971e6deca40cd0  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
! c90fcc54da88587597082eced98af3d4  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
  40ee71e6000b91748c4cd8f864a83cd2  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
  3b3395124e485cab0b125054bc1df72f  gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
  be45653c43caf8a0b0646d86bae99bbc  gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.cob
--- 21437,21443 ----
  d37be4e494df6cbb370f405931df02e6  gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out
  400f1592b58fcc4b35c06abf08fee833  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob
  889ec5fde47e76be7c971e6deca40cd0  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
! 60f545218e5f5f22849f3a4303a8eafa  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
  40ee71e6000b91748c4cd8f864a83cd2  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
  3b3395124e485cab0b125054bc1df72f  gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
  be45653c43caf8a0b0646d86bae99bbc  gcc/testsuite/cobol.dg/group2/Checking_IS_NUMERIC.cob
*************** bc9c3feaf3b8988ac971cb14aa62f9b4  gcc/te
*** 21452,21457 ****
--- 21458,21465 ----
  67de1743f1747295bafa6eeaf0de9f70  gcc/testsuite/cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__1_.out
  097e2d9c5dbff7c36ef3a77888805784  gcc/testsuite/cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__2_.cob
  d10e3dae7438baabc01243fafad4ec8b  gcc/testsuite/cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__2_.out
+ d59bf08c34ea3a4bb667b351e731976f  gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.cob
+ d42a31cff1d6d815cefb65df5728a3f7  gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.out
  6ed868410b3731b3668cef0f11766dbc  gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob
  cda4428dac30cd85aca26da3ca3f7520  gcc/testsuite/cobol.dg/group2/Concatenation_operator.out
  a25badf06c59550348de0ef246cddae1  gcc/testsuite/cobol.dg/group2/Contained_program_visibility__3_.cob
*************** eccef25686e0bfe201ef27251120649e  gcc/te
*** 21654,21661 ****
  a1be70b77284fbc5f33f2a1fd01a3045  gcc/testsuite/cobol.dg/group2/FUNCTION_SIGN.cob
  d6b8570b1dbc1c85f32b299d25c997c7  gcc/testsuite/cobol.dg/group2/FUNCTION_SIN.cob
  b192279607d55fd018405c01f95dd231  gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT.cob
! 4f72b5abb5abd3ff307e8d7f925a9188  gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob
! cd74df35f207526ac9b3e80b12374d94  gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out
  e590589ccdef077159be44af249e7f79  gcc/testsuite/cobol.dg/group2/FUNCTION_STANDARD-DEVIATION.cob
  4aa223c746b8d9b1d02bc3563b87bd0e  gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE.cob
  a4098a55c5e67b15cfa488f27d97ca51  gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE_with_reference_mod.cob
--- 21662,21669 ----
  a1be70b77284fbc5f33f2a1fd01a3045  gcc/testsuite/cobol.dg/group2/FUNCTION_SIGN.cob
  d6b8570b1dbc1c85f32b299d25c997c7  gcc/testsuite/cobol.dg/group2/FUNCTION_SIN.cob
  b192279607d55fd018405c01f95dd231  gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT.cob
! 8bfb52d44250037d9df31f28f41aa131  gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob
! 86d00275a1d4cdb2edeb2ffeab3b8383  gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out
  e590589ccdef077159be44af249e7f79  gcc/testsuite/cobol.dg/group2/FUNCTION_STANDARD-DEVIATION.cob
  4aa223c746b8d9b1d02bc3563b87bd0e  gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE.cob
  a4098a55c5e67b15cfa488f27d97ca51  gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE_with_reference_mod.cob
*************** f651b21496f11b663a2113970aac6a39  gcc/te
*** 21692,21698 ****
  f9871f174981b321bce4c4bd8b035ddf  gcc/testsuite/cobol.dg/group2/FUNCTION_VARIANCE.cob
  da9aaeae3f9f8e55f4f8d35855b37827  gcc/testsuite/cobol.dg/group2/FUNCTION_WHEN-COMPILED.cob
  13e1f9c9eb18868b200f0abf5853f485  gcc/testsuite/cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob
! 936312d722e35dc56c402acb43afd6e0  gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob
  607cf19be0770d73f7d3b5ec45f2d2b9  gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out
  5717dcb6b27ba9da98e5d0598537ee49  gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob
  d64b7fc84a379356d3c1ace327a9ae49  gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out
--- 21700,21706 ----
  f9871f174981b321bce4c4bd8b035ddf  gcc/testsuite/cobol.dg/group2/FUNCTION_VARIANCE.cob
  da9aaeae3f9f8e55f4f8d35855b37827  gcc/testsuite/cobol.dg/group2/FUNCTION_WHEN-COMPILED.cob
  13e1f9c9eb18868b200f0abf5853f485  gcc/testsuite/cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob
! 1da54ef681561755b8b708b81741999b  gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob
  607cf19be0770d73f7d3b5ec45f2d2b9  gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out
  5717dcb6b27ba9da98e5d0598537ee49  gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob
  d64b7fc84a379356d3c1ace327a9ae49  gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out
*************** ac9d54d3b64dc15e5709743381a7c474  gcc/te
*** 23126,23139 ****
  50fe571f1a05ebe44e059946a0374d99  gcc/testsuite/g++.dg/contracts/cpp26/contract-violation-noexcept.C
  3ea03f0cb5928842c4413fa79d543dda  gcc/testsuite/g++.dg/contracts/cpp26/contract-violation-noexcept2.C
  e230ffaa5c2fae5ac62812d0c96d2091  gcc/testsuite/g++.dg/contracts/cpp26/contract_genericize.C
  4d16f193c0791ffb54d23cbe5c00caff  gcc/testsuite/g++.dg/contracts/cpp26/contracts-friend1.C
  d1853c2ad1397a25439c4cfa963c9e27  gcc/testsuite/g++.dg/contracts/cpp26/contracts-nested-class1.C
  a1999016ae180cf90bb9af89e255f98c  gcc/testsuite/g++.dg/contracts/cpp26/contracts-nested-class2.C
  241d2cf0448f169d8da759ade1f0cffd  gcc/testsuite/g++.dg/contracts/cpp26/contracts-tmpl-spec2.C
  84a7fde8a31f7e41b37379498acf8103  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p4.C
  4c7774344f58dfc19e3922ab7a31543f  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p6.C
! 456ff1a786fe2f1c8323cc8ef6ac8821  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t1.C
! 9e9656451c9f44813a94cd7274318c47  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t2.C
  be2e160e7e161c06c03d9dd04aaabcc0  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7.C
  242547f530a4b8ee83507839e03451a6  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.res.p1-2.C
  31de51f92bebd17cb1f7c7e8932f03d1  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.res.p1-NT.C
--- 23134,23148 ----
  50fe571f1a05ebe44e059946a0374d99  gcc/testsuite/g++.dg/contracts/cpp26/contract-violation-noexcept.C
  3ea03f0cb5928842c4413fa79d543dda  gcc/testsuite/g++.dg/contracts/cpp26/contract-violation-noexcept2.C
  e230ffaa5c2fae5ac62812d0c96d2091  gcc/testsuite/g++.dg/contracts/cpp26/contract_genericize.C
+ 07c3d5cafe590e64bb898a180c2b6c17  gcc/testsuite/g++.dg/contracts/cpp26/contracts-class1.C
  4d16f193c0791ffb54d23cbe5c00caff  gcc/testsuite/g++.dg/contracts/cpp26/contracts-friend1.C
  d1853c2ad1397a25439c4cfa963c9e27  gcc/testsuite/g++.dg/contracts/cpp26/contracts-nested-class1.C
  a1999016ae180cf90bb9af89e255f98c  gcc/testsuite/g++.dg/contracts/cpp26/contracts-nested-class2.C
  241d2cf0448f169d8da759ade1f0cffd  gcc/testsuite/g++.dg/contracts/cpp26/contracts-tmpl-spec2.C
  84a7fde8a31f7e41b37379498acf8103  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p4.C
  4c7774344f58dfc19e3922ab7a31543f  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p6.C
! c3df2735255ee4796628142e1d47ac5f  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t1.C
! efbf4a40bbb4eef00ce1a04829feb24b  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t2.C
  be2e160e7e161c06c03d9dd04aaabcc0  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7.C
  242547f530a4b8ee83507839e03451a6  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.res.p1-2.C
  31de51f92bebd17cb1f7c7e8932f03d1  gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.res.p1-NT.C
*************** f97289592c07f8ec90cf0426dc7fb24d  gcc/te
*** 23149,23154 ****
--- 23158,23164 ----
  7b85feb2692641a327f9da443c0864f8  gcc/testsuite/g++.dg/contracts/cpp26/expr.prim.id.unqual.p7-4.C
  b6a1abc97434f28d3e837d5d66adda4a  gcc/testsuite/g++.dg/contracts/cpp26/expr.prim.id.unqual.p7.C
  f56e1b41a7ecc513dfb3c45a0147ac17  gcc/testsuite/g++.dg/contracts/cpp26/expr.prim.lambda.closure.p10.C
+ d4fe13b772bb71f96ce6206875dd451f  gcc/testsuite/g++.dg/contracts/cpp26/fold-pr125645.C
  02ab754564954ef185777cf307e8b7dc  gcc/testsuite/g++.dg/contracts/cpp26/function-contract-specifier-seq-error.C
  753463b10345184f12cb46eb08a57c7c  gcc/testsuite/g++.dg/contracts/cpp26/function-contract-specifier-seq.C
  adc0af6b60c5a74750b3c0ff85f1c2b3  gcc/testsuite/g++.dg/contracts/cpp26/intro.compliance.general.p2.3.4.C
*************** f19aaf8f7386fda683dbac8ae1ef1b51  gcc/te
*** 23163,23171 ****
--- 23173,23184 ----
  fdda55e654375389d9662009987da0af  gcc/testsuite/g++.dg/contracts/cpp26/over.call.func.p3.1.C
  96ea1ad173add3d3c0cb78b9a3d27bde  gcc/testsuite/g++.dg/contracts/cpp26/pr113968.C
  5df7f189d345a86b0b3ecf0b4e5d5704  gcc/testsuite/g++.dg/contracts/cpp26/pr125904.C
+ 53226e4c69e8cba9b3e0c9763da8c6d4  gcc/testsuite/g++.dg/contracts/cpp26/specialization-pr125712.C
  941298c828ee5752525dc3ff9ff64f06  gcc/testsuite/g++.dg/contracts/cpp26/src-loc-0.C
  3411c6f4e870a85de9fcda8947457d10  gcc/testsuite/g++.dg/contracts/cpp26/src-loc-1.C
  250ff36467a544e6a031976bf666c803  gcc/testsuite/g++.dg/contracts/cpp26/src-loc-2.C
+ 8f00e64c55d12bed5661a870f0839130  gcc/testsuite/g++.dg/contracts/cpp26/template-post-pr125011.C
+ 1971252cfaaaa0da627b2a1f7f5abb96  gcc/testsuite/g++.dg/contracts/cpp26/template-post1.C
  27802d916a6f5ec77b570cdf2e237298  gcc/testsuite/g++.dg/contracts/cpp26/throwing-violation-handler.cc
  b4cae67120093a9f342066bb6c7fc435  gcc/testsuite/g++.dg/contracts/cpp26/unused_warning.C
  5985da8eae7f6eb747bdec15b4db189a  gcc/testsuite/g++.dg/contracts/cpp26/vaargs.C
*************** c1539f0705033df0e22199b4b49ccd45  gcc/te
*** 23647,23652 ****
--- 23660,23668 ----
  a742621bd13b9971b106e997d2b9e82c  gcc/testsuite/g++.dg/cpp/embed-9.C
  bd0754a02dda9dfe403c31a8275a7a42  gcc/testsuite/g++.dg/cpp/if-comma-1.C
  bb3c9b1e81779a43b584dae48604b8d1  gcc/testsuite/g++.dg/cpp/limits.C
+ 95392521a523ff3b00136a20929843c7  gcc/testsuite/g++.dg/cpp/line-1.C
+ 896148526a0307a503190e9de33021e0  gcc/testsuite/g++.dg/cpp/line-2.C
+ 3823089bddfad873b2a03384b1fc489b  gcc/testsuite/g++.dg/cpp/line-3.C
  8562d590f29cecfa0e0dc6c51d34a6eb  gcc/testsuite/g++.dg/cpp/named-universal-char-escape-1.C
  a17b4a7c45c8403b31af52f9108997ca  gcc/testsuite/g++.dg/cpp/named-universal-char-escape-2.C
  c41c3c60e8a193075ec6d307d58b6911  gcc/testsuite/g++.dg/cpp/paste1.C
*************** cc6f68db48a7d48195916001cb0b7b64  gcc/te
*** 23850,23855 ****
--- 23866,23872 ----
  0b019bac5dcafdd642abe83896a7483d  gcc/testsuite/g++.dg/cpp0x/alias-decl-equiv1.C
  e612eae08131c21ee29889099ea83336  gcc/testsuite/g++.dg/cpp0x/alias-decl-mem1.C
  2bb10f989c487746162ff9b96f780fb1  gcc/testsuite/g++.dg/cpp0x/alias-decl-nontype1.C
+ 86ff46bb250615e96c46d308c10e1592  gcc/testsuite/g++.dg/cpp0x/alias-decl-nontype2.C
  42802675fdf183e36c26b59ce2188fbd  gcc/testsuite/g++.dg/cpp0x/alias-decl-pmf1.C
  276db5de570a4b8f2cfb42b6fc5b0a0b  gcc/testsuite/g++.dg/cpp0x/alias-decl-pr92206-1.C
  035d1b35c1aef29db6e2a618ee9f17a0  gcc/testsuite/g++.dg/cpp0x/alias-decl-pr92206-1a.C
*************** d3992440eed37bacf3c1b2c2075afeca  gcc/te
*** 25052,25057 ****
--- 25069,25075 ----
  b8d0d7227f1835ae94108da2b2b1d06d  gcc/testsuite/g++.dg/cpp0x/initlist-array23.C
  4812e08c472dcdea2ca5a5c09dd6d4fc  gcc/testsuite/g++.dg/cpp0x/initlist-array24.C
  f1c869265be7444c4a6c2cfcb9d16874  gcc/testsuite/g++.dg/cpp0x/initlist-array25.C
+ 2bc942cc2def0aa8d6d3e18da865913d  gcc/testsuite/g++.dg/cpp0x/initlist-array26.C
  8c888f7ab5cc44480801a14718225380  gcc/testsuite/g++.dg/cpp0x/initlist-array3.C
  6c1907913d332611dd16d03002d759f9  gcc/testsuite/g++.dg/cpp0x/initlist-array4.C
  8758d8464674d29f4276f8d3ebc899c3  gcc/testsuite/g++.dg/cpp0x/initlist-array5.C
*************** a3a8cba4fbee69e46ecf1bdb30c7d924  gcc/te
*** 28634,28639 ****
--- 28652,28662 ----
  5d383c46973350353b641060d830143f  gcc/testsuite/g++.dg/cpp26/variadic-comma4.C
  4fe3609f7385a1f131df362a10ee6065  gcc/testsuite/g++.dg/cpp26/variadic-comma5.C
  6ca56d56bbd9d4ac1e7cb5313516359b  gcc/testsuite/g++.dg/cpp26/variadic-friend1.C
+ ce8a4e07a2818a6b42e91e32adc042f4  gcc/testsuite/g++.dg/cpp29/complex-req-noexcept1.C
+ f9d166b78ecc801f05311ed2a91ad7b8  gcc/testsuite/g++.dg/cpp29/complex-req-noexcept2.C
+ 4073b08293467969d56c7353a27b5b22  gcc/testsuite/g++.dg/cpp29/complex-req-noexcept3.C
+ 8fa92772683289a3922a4210859b6826  gcc/testsuite/g++.dg/cpp29/complex-req-noexcept4.C
+ 40183734a7cb754a281bf315446442da  gcc/testsuite/g++.dg/cpp29/complex-req-noexcept5.C
  bfd759702f3238655df26d94d570e2d2  gcc/testsuite/g++.dg/cpp29/cplusplus.C
  c7311413796bfcaf49e8df626564a11d  gcc/testsuite/g++.dg/cpp29/dealloc1.C
  7107326920773a76ba2e727819370f4f  gcc/testsuite/g++.dg/cpp29/defaulted1.C
*************** ba46b7c494e477a0aff228aa5b5b3c1c  gcc/te
*** 28659,28665 ****
  7fee074737ab6945133052603dfd871c  gcc/testsuite/g++.dg/cpp29/desig8.C
  b4156468848bfd7ac1b37c5aba874448  gcc/testsuite/g++.dg/cpp29/desig9.C
  3f7b16f4948f383cc9a4a2a13e0a3d0e  gcc/testsuite/g++.dg/cpp29/ext-floating1.C
! 612d5463b2a26a13ed64dbe834b06abb  gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
  c2dff1da8208f3291247a019d63b7dd9  gcc/testsuite/g++.dg/cpp29/lambda-order1.C
  59b50274ff1f8b0b48090fb61a763cf5  gcc/testsuite/g++.dg/cpp29/lambda-order2.C
  0492a660aacda6b5424130121221cc91  gcc/testsuite/g++.dg/cpp29/std-floating1.C
--- 28682,28688 ----
  7fee074737ab6945133052603dfd871c  gcc/testsuite/g++.dg/cpp29/desig8.C
  b4156468848bfd7ac1b37c5aba874448  gcc/testsuite/g++.dg/cpp29/desig9.C
  3f7b16f4948f383cc9a4a2a13e0a3d0e  gcc/testsuite/g++.dg/cpp29/ext-floating1.C
! ae99fff272ca00f5222fefe1dbbbb047  gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
  c2dff1da8208f3291247a019d63b7dd9  gcc/testsuite/g++.dg/cpp29/lambda-order1.C
  59b50274ff1f8b0b48090fb61a763cf5  gcc/testsuite/g++.dg/cpp29/lambda-order2.C
  0492a660aacda6b5424130121221cc91  gcc/testsuite/g++.dg/cpp29/std-floating1.C
*************** cbf5d5a37bc2a85bde738f9433003a39  gcc/te
*** 29274,29279 ****
--- 29297,29303 ----
  fbb69b1132a414de03ead400a5096fe7  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor18.C
  689d246063b0bcbe4166cc3472365f23  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor19.C
  18ceb8d2ffe5d8e310f40839d2edf0d5  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor2.C
+ 262afa3f4bd8f5b8178f62171748bc6b  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor20.C
  35d472b389db4ae79d8a0ba112cf7266  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor3.C
  780076eefadeb33a1dce586533960b80  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor4.C
  1ab49acfb4093ac63d8a1117dc494fcd  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor5.C
*************** da710eb2889fcf39c429bcbbfdc2abef  gcc/te
*** 29855,29860 ****
--- 29879,29885 ----
  4b52a1949fed25dc03d5cfb83047e7c5  gcc/testsuite/g++.dg/cpp2a/pr117317-2.C
  938acbb8068f7a8fc2c3f43271324ef4  gcc/testsuite/g++.dg/cpp2a/pr123578.C
  0695fd641b9e046ab279a8c21ce3e2b0  gcc/testsuite/g++.dg/cpp2a/pr123677.C
+ db023eabdd2467f43170feeef729f8f2  gcc/testsuite/g++.dg/cpp2a/pr125343.C
  7d1c1719a1c3e44cf69662819769f8a5  gcc/testsuite/g++.dg/cpp2a/pr88534.C
  3a4139bbe15eef2dce96cb020b2681f7  gcc/testsuite/g++.dg/cpp2a/pr88537.C
  b94ce4741edeca1190c4590e425522dc  gcc/testsuite/g++.dg/cpp2a/pr89913.C
*************** e0becb782bb1d8a5f80ddc28f09b76b5  gcc/te
*** 31911,31917 ****
  4a8a2d59d5236ab9b4239e9d5428b433  gcc/testsuite/g++.dg/gcov/gcov-1.C
  20e72f3ad73ed0f178f37612b68dbbd3  gcc/testsuite/g++.dg/gcov/gcov-10.C
  1a7aaf00bb4bb2cc7cc73c4e150758b1  gcc/testsuite/g++.dg/gcov/gcov-11.C
! 8b0b67098e32e4aa27b2e46d7c135b2e  gcc/testsuite/g++.dg/gcov/gcov-12.C
  950fee86112dc9cdbb62f26f95cd6103  gcc/testsuite/g++.dg/gcov/gcov-13.C
  c381c4b49afc01681227afe62ee90730  gcc/testsuite/g++.dg/gcov/gcov-14.C
  8d2f51c6219acb542e4c2677ca13822c  gcc/testsuite/g++.dg/gcov/gcov-15.C
--- 31936,31942 ----
  4a8a2d59d5236ab9b4239e9d5428b433  gcc/testsuite/g++.dg/gcov/gcov-1.C
  20e72f3ad73ed0f178f37612b68dbbd3  gcc/testsuite/g++.dg/gcov/gcov-10.C
  1a7aaf00bb4bb2cc7cc73c4e150758b1  gcc/testsuite/g++.dg/gcov/gcov-11.C
! bd0f0d034aacec26ed221ce0c2cfde02  gcc/testsuite/g++.dg/gcov/gcov-12.C
  950fee86112dc9cdbb62f26f95cd6103  gcc/testsuite/g++.dg/gcov/gcov-13.C
  c381c4b49afc01681227afe62ee90730  gcc/testsuite/g++.dg/gcov/gcov-14.C
  8d2f51c6219acb542e4c2677ca13822c  gcc/testsuite/g++.dg/gcov/gcov-15.C
*************** fd8e483532e07909315ca8711ef4503b  gcc/te
*** 40513,40518 ****
--- 40538,40544 ----
  9e83dc5ec48088cace8aa33ee2acb251  gcc/testsuite/g++.dg/torture/pr124875.C
  75f68370222f5d3a36c5db4ddabae923  gcc/testsuite/g++.dg/torture/pr125599.C
  ab33a0dbd1c39884371287aa72238a5a  gcc/testsuite/g++.dg/torture/pr126815-1.C
+ 11141490262eab9339c5c53f7cb3a27c  gcc/testsuite/g++.dg/torture/pr127049.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
  e980bf95890544d46879b89f7aa98df6  gcc/testsuite/g++.dg/torture/pr30567.C
*************** cba0d4ad4eb20d07d7b8faa8a679415f  gcc/te
*** 41335,41342 ****
  0fb08fd6d187247ae5872931e884061c  gcc/testsuite/g++.dg/tree-ssa/tmmti.C
  d0016ead88409af28f506089528155ae  gcc/testsuite/g++.dg/tree-ssa/value-expr1.C
  ee5f35c1e0d0183f37f4bef5ff673e11  gcc/testsuite/g++.dg/tree-ssa/value-expr2.C
! c6b9f3e7b5704648438f5e1532537ca3  gcc/testsuite/g++.dg/tree-ssa/vec-narrow-1.C
! d232fad76ee14d9d89cf1dd2f6454692  gcc/testsuite/g++.dg/tree-ssa/vec-narrow-minmax-2.C
  3305506c315412907d9095dfb88e572b  gcc/testsuite/g++.dg/tree-ssa/vector-compare-1.C
  67826d6c8638dba46a4b37835998f34a  gcc/testsuite/g++.dg/tree-ssa/volatile1.C
  927ac273b42ce90eecf5fb0ad135f1c0  gcc/testsuite/g++.dg/tree-ssa/volatile2.C
--- 41361,41368 ----
  0fb08fd6d187247ae5872931e884061c  gcc/testsuite/g++.dg/tree-ssa/tmmti.C
  d0016ead88409af28f506089528155ae  gcc/testsuite/g++.dg/tree-ssa/value-expr1.C
  ee5f35c1e0d0183f37f4bef5ff673e11  gcc/testsuite/g++.dg/tree-ssa/value-expr2.C
! 6b057462a46b590721b5d2f0ebea41dc  gcc/testsuite/g++.dg/tree-ssa/vec-narrow-1.C
! a4552ea8d72f145e6e0e9314cce74aa7  gcc/testsuite/g++.dg/tree-ssa/vec-narrow-minmax-2.C
  3305506c315412907d9095dfb88e572b  gcc/testsuite/g++.dg/tree-ssa/vector-compare-1.C
  67826d6c8638dba46a4b37835998f34a  gcc/testsuite/g++.dg/tree-ssa/volatile1.C
  927ac273b42ce90eecf5fb0ad135f1c0  gcc/testsuite/g++.dg/tree-ssa/volatile2.C
*************** d6ab64b605a24d07d95eb4282b431dac  gcc/te
*** 42213,42218 ****
--- 42239,42245 ----
  29d21222d7cb71568891661c219f4c98  gcc/testsuite/g++.dg/warn/Wuninitialized-33.C
  954ee8a8c8588bbf10d0e828d4c5c2f7  gcc/testsuite/g++.dg/warn/Wuninitialized-34.C
  3a7f20e52d738766db49016af0b45bf3  gcc/testsuite/g++.dg/warn/Wuninitialized-35.C
+ a76fe0b7947371b116b1fdea2c5ca1ec  gcc/testsuite/g++.dg/warn/Wuninitialized-36.C
  be5b47714ba41b25933660896d6c7427  gcc/testsuite/g++.dg/warn/Wuninitialized-4.C
  1f013ef9d737e679cea70e842d47a7ce  gcc/testsuite/g++.dg/warn/Wuninitialized-5.C
  5d5a54e16a8f1ca7a7dc521b9a20af28  gcc/testsuite/g++.dg/warn/Wuninitialized-6.C
*************** d2fc50e3e2e5832d3cb6945d13759363  gcc/te
*** 43997,44003 ****
  b0c65347d9c4f297c3a2a451a8826279  gcc/testsuite/g++.old-deja/g++.mike/eh28.C
  b7ee4c7bc6f0c7167eca23b9efdb9f8c  gcc/testsuite/g++.old-deja/g++.mike/eh29.C
  b7fa20379a5b48ef16b0a75fd8198fb6  gcc/testsuite/g++.old-deja/g++.mike/eh3.C
! 1daacd811e61437103af886d044c05c4  gcc/testsuite/g++.old-deja/g++.mike/eh30.C
  68bc71cf1693b679ec89fdfbdca319d7  gcc/testsuite/g++.old-deja/g++.mike/eh31.C
  17875da95a253b79fa1e5e982394cdf2  gcc/testsuite/g++.old-deja/g++.mike/eh32.C
  c57b3f69b4396a7bd59c0659cac52b65  gcc/testsuite/g++.old-deja/g++.mike/eh33.C
--- 44024,44030 ----
  b0c65347d9c4f297c3a2a451a8826279  gcc/testsuite/g++.old-deja/g++.mike/eh28.C
  b7ee4c7bc6f0c7167eca23b9efdb9f8c  gcc/testsuite/g++.old-deja/g++.mike/eh29.C
  b7fa20379a5b48ef16b0a75fd8198fb6  gcc/testsuite/g++.old-deja/g++.mike/eh3.C
! 395585ad97d564b58f3f4dc302772c4a  gcc/testsuite/g++.old-deja/g++.mike/eh30.C
  68bc71cf1693b679ec89fdfbdca319d7  gcc/testsuite/g++.old-deja/g++.mike/eh31.C
  17875da95a253b79fa1e5e982394cdf2  gcc/testsuite/g++.old-deja/g++.mike/eh32.C
  c57b3f69b4396a7bd59c0659cac52b65  gcc/testsuite/g++.old-deja/g++.mike/eh33.C
*************** c02eafb028d82f1c577cfa700db86211  gcc/te
*** 44194,44200 ****
  e79018dfdcda343a7caddbb25a5b7da3  gcc/testsuite/g++.old-deja/g++.mike/p4736a.C
  9fc1513d5865274bf37c59b71c8f97ae  gcc/testsuite/g++.old-deja/g++.mike/p4736b.C
  c1acbf8597dd2cbb95d9cb9fc5e04912  gcc/testsuite/g++.old-deja/g++.mike/p4736c.C
! 76e567545ba5a7549bd7c376716a8ba5  gcc/testsuite/g++.old-deja/g++.mike/p4750.C
  1a935fddf8f373c48dd3eee1ba9c897d  gcc/testsuite/g++.old-deja/g++.mike/p5469.C
  8ea133c89aeac2630522f766a59283bf  gcc/testsuite/g++.old-deja/g++.mike/p5469a.C
  7862ccbfc24631e1c8cc9f04873dfb41  gcc/testsuite/g++.old-deja/g++.mike/p5571.C
--- 44221,44227 ----
  e79018dfdcda343a7caddbb25a5b7da3  gcc/testsuite/g++.old-deja/g++.mike/p4736a.C
  9fc1513d5865274bf37c59b71c8f97ae  gcc/testsuite/g++.old-deja/g++.mike/p4736b.C
  c1acbf8597dd2cbb95d9cb9fc5e04912  gcc/testsuite/g++.old-deja/g++.mike/p4736c.C
! d7ca7c3d6ee07700890b21cfca7fe496  gcc/testsuite/g++.old-deja/g++.mike/p4750.C
  1a935fddf8f373c48dd3eee1ba9c897d  gcc/testsuite/g++.old-deja/g++.mike/p5469.C
  8ea133c89aeac2630522f766a59283bf  gcc/testsuite/g++.old-deja/g++.mike/p5469a.C
  7862ccbfc24631e1c8cc9f04873dfb41  gcc/testsuite/g++.old-deja/g++.mike/p5571.C
*************** ee83a1efbd7590614fbf204920c56047  gcc/te
*** 45734,45740 ****
  16b83875b8a1cbbdb43a0c94bc18228d  gcc/testsuite/g++.old-deja/g++.robertl/eb103.C
  d0815bd10637ef31f290d081ddbda880  gcc/testsuite/g++.old-deja/g++.robertl/eb104.C
  3659e47043ebbb544b5bad1e021405df  gcc/testsuite/g++.old-deja/g++.robertl/eb105.C
! 16a7df1eff310588240b57d7514b958a  gcc/testsuite/g++.old-deja/g++.robertl/eb106.C
  3e53dc52c997be42c47ab4e29c760531  gcc/testsuite/g++.old-deja/g++.robertl/eb107.C
  a3612f3f68ec2ae185d88189192c82c3  gcc/testsuite/g++.old-deja/g++.robertl/eb108.C
  2cb00c65a036089bf7eadb6cd1790e6e  gcc/testsuite/g++.old-deja/g++.robertl/eb109.C
--- 45761,45767 ----
  16b83875b8a1cbbdb43a0c94bc18228d  gcc/testsuite/g++.old-deja/g++.robertl/eb103.C
  d0815bd10637ef31f290d081ddbda880  gcc/testsuite/g++.old-deja/g++.robertl/eb104.C
  3659e47043ebbb544b5bad1e021405df  gcc/testsuite/g++.old-deja/g++.robertl/eb105.C
! 3368185f9082a5ab30d40b855974390f  gcc/testsuite/g++.old-deja/g++.robertl/eb106.C
  3e53dc52c997be42c47ab4e29c760531  gcc/testsuite/g++.old-deja/g++.robertl/eb107.C
  a3612f3f68ec2ae185d88189192c82c3  gcc/testsuite/g++.old-deja/g++.robertl/eb108.C
  2cb00c65a036089bf7eadb6cd1790e6e  gcc/testsuite/g++.old-deja/g++.robertl/eb109.C
*************** b745a307c6018d88262928962e2684e9  gcc/te
*** 46359,46366 ****
  8b43a5abf835a65b01bede55be8dd67a  gcc/testsuite/g++.target/i386/pr106627.C
  e10a0652aff7df3b5d31aabc5b83fc4e  gcc/testsuite/g++.target/i386/pr106875.C
  591a879661c63273581e832f22c0f96e  gcc/testsuite/g++.target/i386/pr107404.C
! 9056cfcb67fde8dc959682d76365d9e8  gcc/testsuite/g++.target/i386/pr107563-a.C
! 431deabcaf4118339f2e463337ec1e78  gcc/testsuite/g++.target/i386/pr107563-b.C
  67d8378f149029e8703f825a6227065a  gcc/testsuite/g++.target/i386/pr108711.C
  198bde5a37731f00084d791cde389e8b  gcc/testsuite/g++.target/i386/pr108934.C
  2a4ccb802022f75d63eec8145d6f1f29  gcc/testsuite/g++.target/i386/pr109676.C
--- 46386,46393 ----
  8b43a5abf835a65b01bede55be8dd67a  gcc/testsuite/g++.target/i386/pr106627.C
  e10a0652aff7df3b5d31aabc5b83fc4e  gcc/testsuite/g++.target/i386/pr106875.C
  591a879661c63273581e832f22c0f96e  gcc/testsuite/g++.target/i386/pr107404.C
! d4859c776af8b023be3770b5219a6725  gcc/testsuite/g++.target/i386/pr107563-a.C
! b0f1c94997adb96140184a9dba0fb851  gcc/testsuite/g++.target/i386/pr107563-b.C
  67d8378f149029e8703f825a6227065a  gcc/testsuite/g++.target/i386/pr108711.C
  198bde5a37731f00084d791cde389e8b  gcc/testsuite/g++.target/i386/pr108934.C
  2a4ccb802022f75d63eec8145d6f1f29  gcc/testsuite/g++.target/i386/pr109676.C
*************** a9182e6d928d363b56a91bded6231bb9  gcc/te
*** 46417,46423 ****
  6f35902f19eeea336cfa082d15cc8b42  gcc/testsuite/g++.target/i386/pr80566-1.C
  416c15961210911f05403163d661a2e5  gcc/testsuite/g++.target/i386/pr80566-2.C
  d4f5b66ebc38c1d8b40fcbe48e7a1f34  gcc/testsuite/g++.target/i386/pr81501-1.C
! 819ecf07fe897248c2153cdb9dee2292  gcc/testsuite/g++.target/i386/pr82625.C
  1356c14cb02d7fb590d2c63c2aabdd63  gcc/testsuite/g++.target/i386/pr85048.C
  595e95a52a8e7241531daede25387052  gcc/testsuite/g++.target/i386/pr85329-2.C
  83ee00a9e7a064242ad6f43457dfa886  gcc/testsuite/g++.target/i386/pr85329.C
--- 46444,46450 ----
  6f35902f19eeea336cfa082d15cc8b42  gcc/testsuite/g++.target/i386/pr80566-1.C
  416c15961210911f05403163d661a2e5  gcc/testsuite/g++.target/i386/pr80566-2.C
  d4f5b66ebc38c1d8b40fcbe48e7a1f34  gcc/testsuite/g++.target/i386/pr81501-1.C
! 203272f3d40d7b4726c16c2a692f1602  gcc/testsuite/g++.target/i386/pr82625.C
  1356c14cb02d7fb590d2c63c2aabdd63  gcc/testsuite/g++.target/i386/pr85048.C
  595e95a52a8e7241531daede25387052  gcc/testsuite/g++.target/i386/pr85329-2.C
  83ee00a9e7a064242ad6f43457dfa886  gcc/testsuite/g++.target/i386/pr85329.C
*************** c06ceb436623685585c49fb701481265  gcc/te
*** 46467,46480 ****
  6e6cf4082859ce3ba6d2d4c369ec6370  gcc/testsuite/g++.target/i386/ssp-global-1.C
  c0e20c67de050e011144193571546ba6  gcc/testsuite/g++.target/i386/ssp-global-2.C
  98b5a78a6bf25bb7a273f4de0fa366d9  gcc/testsuite/g++.target/i386/ssp-global-3.C
! 616662613e8a501c06cc21b11eedb631  gcc/testsuite/g++.target/i386/ssp-global-hidden-1.C
! ed0884fb25e4717a08c333333d1742fb  gcc/testsuite/g++.target/i386/ssp-global-hidden-2.C
! c1fd6b736a63177544fb914e5ec6918c  gcc/testsuite/g++.target/i386/ssp-global-hidden-3.C
  6d0d9132ecd5c558bd1ec20dcee32d5d  gcc/testsuite/g++.target/i386/vec-tmpl1.C
  d4dcded6122bb77c0450fd18568c030b  gcc/testsuite/g++.target/i386/vect-bfloat16-1.C
  b7eeb348c339c03fc0e89fe6ef631f76  gcc/testsuite/g++.target/i386/vect-cmp.C
! 99f041cd98285900f98c95042bbb14b5  gcc/testsuite/g++.target/i386/vect-pragma-target-1.C
! c8c24d88b9d93938e4018923d3db0ce3  gcc/testsuite/g++.target/i386/vect-pragma-target-2.C
  8df5f1183de744dc2a3a0c11278caec6  gcc/testsuite/g++.target/loongarch/atomic-cas-int.C
  f8bc85022b7adc985d76ed2766575abb  gcc/testsuite/g++.target/loongarch/bstrins-compile.C
  3d24eccefdd318d1bf2770dde9f60a08  gcc/testsuite/g++.target/loongarch/bstrins-run.C
--- 46494,46507 ----
  6e6cf4082859ce3ba6d2d4c369ec6370  gcc/testsuite/g++.target/i386/ssp-global-1.C
  c0e20c67de050e011144193571546ba6  gcc/testsuite/g++.target/i386/ssp-global-2.C
  98b5a78a6bf25bb7a273f4de0fa366d9  gcc/testsuite/g++.target/i386/ssp-global-3.C
! 6d518cd26cb461f2198c4c552363f0ee  gcc/testsuite/g++.target/i386/ssp-global-hidden-1.C
! 4c5be9800d1a601860e5b83eb21c01a9  gcc/testsuite/g++.target/i386/ssp-global-hidden-2.C
! aa84df3c43c2305fbb1fa1a53c67138d  gcc/testsuite/g++.target/i386/ssp-global-hidden-3.C
  6d0d9132ecd5c558bd1ec20dcee32d5d  gcc/testsuite/g++.target/i386/vec-tmpl1.C
  d4dcded6122bb77c0450fd18568c030b  gcc/testsuite/g++.target/i386/vect-bfloat16-1.C
  b7eeb348c339c03fc0e89fe6ef631f76  gcc/testsuite/g++.target/i386/vect-cmp.C
! 782dd5505ca7323c7bd52b969c2f7af9  gcc/testsuite/g++.target/i386/vect-pragma-target-1.C
! 65858203833f178e8bc483d822853685  gcc/testsuite/g++.target/i386/vect-pragma-target-2.C
  8df5f1183de744dc2a3a0c11278caec6  gcc/testsuite/g++.target/loongarch/atomic-cas-int.C
  f8bc85022b7adc985d76ed2766575abb  gcc/testsuite/g++.target/loongarch/bstrins-compile.C
  3d24eccefdd318d1bf2770dde9f60a08  gcc/testsuite/g++.target/loongarch/bstrins-run.C
*************** a7734e5364ed24050d64c549952e1930  gcc/te
*** 51324,51330 ****
  2fb7927f6cb43b738ac0c6c4695c7fed  gcc/testsuite/gcc.dg/Wno-all.c
  f273410ff764324a50afef028667ebe5  gcc/testsuite/gcc.dg/Wno-attribute-warning.c
  d45570f5347d0d2fceb2f46d5bb28195  gcc/testsuite/gcc.dg/Wno-c++-compat.c
! 6e383e84d7ec6abc4d8c5e07b2ccde58  gcc/testsuite/gcc.dg/Wno-frame-address.c
  78b26e55f8111808885390fc48d39f07  gcc/testsuite/gcc.dg/Wno-pointer-sign.c
  6d95980aecdac8446d00e9214cde295b  gcc/testsuite/gcc.dg/Wnonnull-2.c
  4c327d4422d95e3d9eae28144063cfe4  gcc/testsuite/gcc.dg/Wnonnull-3.c
--- 51351,51357 ----
  2fb7927f6cb43b738ac0c6c4695c7fed  gcc/testsuite/gcc.dg/Wno-all.c
  f273410ff764324a50afef028667ebe5  gcc/testsuite/gcc.dg/Wno-attribute-warning.c
  d45570f5347d0d2fceb2f46d5bb28195  gcc/testsuite/gcc.dg/Wno-c++-compat.c
! 49857cb977ad6af94625b791b3a188f4  gcc/testsuite/gcc.dg/Wno-frame-address.c
  78b26e55f8111808885390fc48d39f07  gcc/testsuite/gcc.dg/Wno-pointer-sign.c
  6d95980aecdac8446d00e9214cde295b  gcc/testsuite/gcc.dg/Wnonnull-2.c
  4c327d4422d95e3d9eae28144063cfe4  gcc/testsuite/gcc.dg/Wnonnull-3.c
*************** b3869c9bd68bb9659f230f48bf56f83c  gcc/te
*** 51684,51692 ****
  f69e8cd9fd4e56cc65e71a4dfef997a4  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue-2.c
  1a5f9e3123194efaadd5fb7ab38396df  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c
  86d6d6ec23a415364e5fca0ca3cc5e2e  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-minimal.c
! b38d1686617d8aa1933236608c29d4c8  gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c
  4656af16261a46b3b0a549b8e725fb72  gcc/testsuite/gcc.dg/analyzer/SARD-tc1909-stack_overflow_loop.c
! 05d3112c6482099e76531347972f0253  gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c
  d396ac30a4549605a8b91e88fb32d4e3  gcc/testsuite/gcc.dg/analyzer/SARD-tc841-basic-00182-min.c
  90d9154a7bf843287e4e70facbd3622b  gcc/testsuite/gcc.dg/analyzer/abs-1.c
  2fbe7c43718aa946f2698455261a0c9f  gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
--- 51711,51719 ----
  f69e8cd9fd4e56cc65e71a4dfef997a4  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue-2.c
  1a5f9e3123194efaadd5fb7ab38396df  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c
  86d6d6ec23a415364e5fca0ca3cc5e2e  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-minimal.c
! 4edf824f5158650ec8cd8e9fa0b5554a  gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c
  4656af16261a46b3b0a549b8e725fb72  gcc/testsuite/gcc.dg/analyzer/SARD-tc1909-stack_overflow_loop.c
! ca651360124116e9d51213846c5ea763  gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c
  d396ac30a4549605a8b91e88fb32d4e3  gcc/testsuite/gcc.dg/analyzer/SARD-tc841-basic-00182-min.c
  90d9154a7bf843287e4e70facbd3622b  gcc/testsuite/gcc.dg/analyzer/abs-1.c
  2fbe7c43718aa946f2698455261a0c9f  gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
*************** f1a4d668b7cdedcf120b9151c47abb67  gcc/te
*** 51695,51701 ****
  b79e0a62aa2f1f6ddbde53ae68723039  gcc/testsuite/gcc.dg/analyzer/analyzer.exp
  c8fea92fbe2674fd004d27f275db2d9f  gcc/testsuite/gcc.dg/analyzer/asm-x86-dyndbg-1.c
  d780518e28005b87079c2be1a96dab0e  gcc/testsuite/gcc.dg/analyzer/asm-x86-lp64-1.c
! 2c4c2f966df1374e865e63097f900194  gcc/testsuite/gcc.dg/analyzer/atoi-1.c
  0dedf67a08edba5166d29489ccfd969c  gcc/testsuite/gcc.dg/analyzer/atomic-builtins-1.c
  f0f367208592d7230b3e5a8859fcdc2b  gcc/testsuite/gcc.dg/analyzer/atomic-types-1.c
  823ae051f67de86d0b580c3046202e0f  gcc/testsuite/gcc.dg/analyzer/attr-format-1.c
--- 51722,51728 ----
  b79e0a62aa2f1f6ddbde53ae68723039  gcc/testsuite/gcc.dg/analyzer/analyzer.exp
  c8fea92fbe2674fd004d27f275db2d9f  gcc/testsuite/gcc.dg/analyzer/asm-x86-dyndbg-1.c
  d780518e28005b87079c2be1a96dab0e  gcc/testsuite/gcc.dg/analyzer/asm-x86-lp64-1.c
! b4f4eed84fb714faa523558126b08dab  gcc/testsuite/gcc.dg/analyzer/atoi-1.c
  0dedf67a08edba5166d29489ccfd969c  gcc/testsuite/gcc.dg/analyzer/atomic-builtins-1.c
  f0f367208592d7230b3e5a8859fcdc2b  gcc/testsuite/gcc.dg/analyzer/atomic-types-1.c
  823ae051f67de86d0b580c3046202e0f  gcc/testsuite/gcc.dg/analyzer/attr-format-1.c
*************** d21405ff7bef57360e2a0ce49f7b6578  gcc/te
*** 51721,51727 ****
  6fa62fa4ce6b89f125994523d89747a3  gcc/testsuite/gcc.dg/analyzer/conditionals-pr124451-_Bool.c
  f7f2f6440758ebcd9d9bdb513e1c1b24  gcc/testsuite/gcc.dg/analyzer/conditionals-pr124451-enum.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! 4b6883ad178c999b36372d45609f89e5  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  01dd89f886f8267655367177e67d8a7f  gcc/testsuite/gcc.dg/analyzer/data-model-13.c
  337c9beb072c81d3286e3a687c8e0abf  gcc/testsuite/gcc.dg/analyzer/data-model-15.c
--- 51748,51754 ----
  6fa62fa4ce6b89f125994523d89747a3  gcc/testsuite/gcc.dg/analyzer/conditionals-pr124451-_Bool.c
  f7f2f6440758ebcd9d9bdb513e1c1b24  gcc/testsuite/gcc.dg/analyzer/conditionals-pr124451-enum.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! 2b497ed383dfeeaaafae2b06a818e021  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  01dd89f886f8267655367177e67d8a7f  gcc/testsuite/gcc.dg/analyzer/data-model-13.c
  337c9beb072c81d3286e3a687c8e0abf  gcc/testsuite/gcc.dg/analyzer/data-model-15.c
*************** fd6b9c1ae3833951eb92de84a938f778  gcc/te
*** 51737,51743 ****
  2c7de07861c307654f6b81f8ba0df5ff  gcc/testsuite/gcc.dg/analyzer/data-model-9.c
  7cecbe3ff8f0a8faf72f48437253394d  gcc/testsuite/gcc.dg/analyzer/deref-before-check-1.c
  2b005f545877795663ba55a328aa9b60  gcc/testsuite/gcc.dg/analyzer/deref-before-check-macro.c
! 452ca8a442483b2507962d0dd1d5efdc  gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
  64840faa76375f58a4f02239bbee2133  gcc/testsuite/gcc.dg/analyzer/describe-1.c
  22db9e3264fdbf058db4870f31bd9e0f  gcc/testsuite/gcc.dg/analyzer/divide-by-zero-4.c
  16a76e260fd49626c4cfa19a65bd7002  gcc/testsuite/gcc.dg/analyzer/divide-by-zero-5.c
--- 51764,51770 ----
  2c7de07861c307654f6b81f8ba0df5ff  gcc/testsuite/gcc.dg/analyzer/data-model-9.c
  7cecbe3ff8f0a8faf72f48437253394d  gcc/testsuite/gcc.dg/analyzer/deref-before-check-1.c
  2b005f545877795663ba55a328aa9b60  gcc/testsuite/gcc.dg/analyzer/deref-before-check-macro.c
! 5e4ea0c50d550585f2c86fed38d99535  gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
  64840faa76375f58a4f02239bbee2133  gcc/testsuite/gcc.dg/analyzer/describe-1.c
  22db9e3264fdbf058db4870f31bd9e0f  gcc/testsuite/gcc.dg/analyzer/divide-by-zero-4.c
  16a76e260fd49626c4cfa19a65bd7002  gcc/testsuite/gcc.dg/analyzer/divide-by-zero-5.c
*************** e68d45a98a5c9f2419bc2200bddf6f57  gcc/te
*** 51778,51784 ****
  983aa8eb3b385c301b0f38e058072ad2  gcc/testsuite/gcc.dg/analyzer/fd-glibc-make_named_socket.h
  dfec44c9516f74c36a586e4fcca16e64  gcc/testsuite/gcc.dg/analyzer/fd-leak-pr108252.c
  a6c2c6cbd200de5abc7c929fe49fe265  gcc/testsuite/gcc.dg/analyzer/fd-listen.c
! faf3bb5b317286dfffce5086dc62bf48  gcc/testsuite/gcc.dg/analyzer/fd-mktemp-family.c
  8fb341e8fe6909ce190ae756b2789975  gcc/testsuite/gcc.dg/analyzer/fd-pr108633.c
  ebabbb9693ff5ff6e0081d269f719eeb  gcc/testsuite/gcc.dg/analyzer/fd-socket-misuse.c
  733c0a2c7f420da2e8b9bf01f57cbf4a  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket-active-open.c
--- 51805,51811 ----
  983aa8eb3b385c301b0f38e058072ad2  gcc/testsuite/gcc.dg/analyzer/fd-glibc-make_named_socket.h
  dfec44c9516f74c36a586e4fcca16e64  gcc/testsuite/gcc.dg/analyzer/fd-leak-pr108252.c
  a6c2c6cbd200de5abc7c929fe49fe265  gcc/testsuite/gcc.dg/analyzer/fd-listen.c
! 7dd549a4b14211c5c30e0fc5be9ce712  gcc/testsuite/gcc.dg/analyzer/fd-mktemp-family.c
  8fb341e8fe6909ce190ae756b2789975  gcc/testsuite/gcc.dg/analyzer/fd-pr108633.c
  ebabbb9693ff5ff6e0081d269f719eeb  gcc/testsuite/gcc.dg/analyzer/fd-socket-misuse.c
  733c0a2c7f420da2e8b9bf01f57cbf4a  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket-active-open.c
*************** bfcaf2a6892cf4c91bc0dac810231fdb  gcc/te
*** 51819,51830 ****
  ac65547952c25ba221985e37016c6fb2  gcc/testsuite/gcc.dg/analyzer/memcpy-1.c
  9c02a73028cac042acd872f0880e838c  gcc/testsuite/gcc.dg/analyzer/memmove-1.c
  acc662379756e41ce6873fb8ee91f0b1  gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c
! 921f478fbdef832cd2bca2616262029f  gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c
! 038154e6f7ad547c8c56ca9e4e3443bc  gcc/testsuite/gcc.dg/analyzer/mkostemp-1.c
! ffd48d4dbd1ac7c52d52f7dc4afb694b  gcc/testsuite/gcc.dg/analyzer/mkostemps-1.c
! 536843e50b01db99dea7e71b72640a03  gcc/testsuite/gcc.dg/analyzer/mkstemp-1.c
! 5ae22cecb7b04618ca0fab0434891f06  gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c
! b83c3fa603dbb061167664a24eaddff1  gcc/testsuite/gcc.dg/analyzer/mktemp-1.c
  5c81fadcddee7a5b13a23be5cad6701d  gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c
  249e92fa7bb08b66f184515348adf910  gcc/testsuite/gcc.dg/analyzer/named-constants-via-command-line.c
  0605ec7df17825d30fe4f6374f77bbe9  gcc/testsuite/gcc.dg/analyzer/named-constants-via-enum-and-macro.c
--- 51846,51857 ----
  ac65547952c25ba221985e37016c6fb2  gcc/testsuite/gcc.dg/analyzer/memcpy-1.c
  9c02a73028cac042acd872f0880e838c  gcc/testsuite/gcc.dg/analyzer/memmove-1.c
  acc662379756e41ce6873fb8ee91f0b1  gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c
! dacc94032819ec05fa759df20e2f26c0  gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c
! df18b1085a93045444804c35802611ea  gcc/testsuite/gcc.dg/analyzer/mkostemp-1.c
! 39eaf0529edef03920847952eec8d763  gcc/testsuite/gcc.dg/analyzer/mkostemps-1.c
! 981d8bd0895d824ef9206d212c268589  gcc/testsuite/gcc.dg/analyzer/mkstemp-1.c
! b616e869c34833d98b07785fa97f9e5b  gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c
! d1b4fe74d65b41e596c3c5248d9d4f06  gcc/testsuite/gcc.dg/analyzer/mktemp-1.c
  5c81fadcddee7a5b13a23be5cad6701d  gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c
  249e92fa7bb08b66f184515348adf910  gcc/testsuite/gcc.dg/analyzer/named-constants-via-command-line.c
  0605ec7df17825d30fe4f6374f77bbe9  gcc/testsuite/gcc.dg/analyzer/named-constants-via-enum-and-macro.c
*************** f4f1e3497a434ef6745436e53a443879  gcc/te
*** 51838,51844 ****
  86c2576df6e78cc46dfbd6f36acfcd54  gcc/testsuite/gcc.dg/analyzer/null-deref-pr123981-2.c
  5c1afdb0e8d48de62c20901771c1c269  gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
! 3b27232f5cf255ca8253bb7b23b7a3c0  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c
  51ae5882c3c42881ceafdbf1a92e54c3  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-container_of.c
  c3c3c0b1c78522f1ea066085de181f5f  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-ascii.c
  610ce7a6c49571d957c6eaeec5443c26  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-debug.c
--- 51865,51871 ----
  86c2576df6e78cc46dfbd6f36acfcd54  gcc/testsuite/gcc.dg/analyzer/null-deref-pr123981-2.c
  5c1afdb0e8d48de62c20901771c1c269  gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
! 603f3464e0f2196e69727da4e22769f4  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c
  51ae5882c3c42881ceafdbf1a92e54c3  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-container_of.c
  c3c3c0b1c78522f1ea066085de181f5f  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-ascii.c
  610ce7a6c49571d957c6eaeec5443c26  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-debug.c
*************** dda30cd044349ee501c693f82f3da35f  gcc/te
*** 51846,51864 ****
  65a02d5b5994428f75e63585105269d5  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-unicode.c
  0fadb1938eef78e492a293b4a6842905  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-10.c
  7c102e98d96b239b09101d24370bf17b  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-12.c
! 970c182d84888950b554d6040e57406a  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-13.c
  7cf7e60a0a90caa8a3f35f06e1f6b389  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-14.c
! 479243786654d63f489e5484f213d7e4  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-15.c
! 0bd4d4f35c90c5189ed0f3a3c0485c0d  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c
! 07f92d019f9852ac69f740b1d717f1e1  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c
! e2dd760aebba8c4ca67c66ab6ad548dd  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c
! e548e5478dab5252b297830c11d23da3  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c
  21af3c6a25d81d47e1243d69dc2439e7  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-2.c
! f974228525fb841fc986abce863fd450  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-4.c
! 95862fe01c511bd4a6029a090b626dff  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-ascii.c
! 17fa94ccc7a1b43a24bf83f1a1e064e7  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-unicode.c
  dd9bd714ddf00836a965698479925913  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-6.c
! 0a18a894a8537b60bd0aa10f98dda8c1  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-7.c
  246ff89fe6afc90e0f35238247b22481  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-9.c
  2eba6a9f9fe68062d9314fe95a5fd289  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-pr113222.c
  4cf772bd692044b2e359f8ec7ce1b3ee  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-multiline-1.c
--- 51873,51891 ----
  65a02d5b5994428f75e63585105269d5  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-unicode.c
  0fadb1938eef78e492a293b4a6842905  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-10.c
  7c102e98d96b239b09101d24370bf17b  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-12.c
! ce8d5e9e720c90b25a5e447fab142313  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-13.c
  7cf7e60a0a90caa8a3f35f06e1f6b389  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-14.c
! 363cb6902b0ee0e09d1fe335e530eac2  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-15.c
! 9e7a5a056412a28e9ec854f5fe51debc  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c
! 626e0b0aafacc01738cd4990398c435e  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c
! 3bff3d50fad147737cba2ccfe7f21077  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c
! 88c4e77116f763a7c05fe87ac07fb9dc  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c
  21af3c6a25d81d47e1243d69dc2439e7  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-2.c
! df7d0382e9282e1cc59d054d9755334a  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-4.c
! 6f0c2c982ef2a18d0d0aaaab14f0d0cf  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-ascii.c
! cda657aacd56f12dc041973632d8188b  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-unicode.c
  dd9bd714ddf00836a965698479925913  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-6.c
! 37bce320e2c1e88e4c42e13d1eb5661f  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-7.c
  246ff89fe6afc90e0f35238247b22481  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-9.c
  2eba6a9f9fe68062d9314fe95a5fd289  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-pr113222.c
  4cf772bd692044b2e359f8ec7ce1b3ee  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-multiline-1.c
*************** b76452713c6522655217df51194d0da5  gcc/te
*** 51977,51986 ****
  33e174f7352f52397f09f832a69b1fc0  gcc/testsuite/gcc.dg/analyzer/strcasecmp-1.c
  72744cf5b7689b54300874e863c831d8  gcc/testsuite/gcc.dg/analyzer/strcat-1.c
  134423fe242d5fcd6c70f9d027d95bbc  gcc/testsuite/gcc.dg/analyzer/strchr-1.c
! 73f2d5778cc33feca3cbd46c97af6cb3  gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
! 6289f2890ad200c3237f37dcb304fbd0  gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
! 6e61416a1a965596212f4c4d92797b7c  gcc/testsuite/gcc.dg/analyzer/strcpy-3.c
! e5ebb4cb43a0185a3db0a087bcc84310  gcc/testsuite/gcc.dg/analyzer/strcpy-4.c
  939f0764862017a61847c1022904c655  gcc/testsuite/gcc.dg/analyzer/strdup-1.c
  7257568ac07240de491ed3c6e6dc1d1d  gcc/testsuite/gcc.dg/analyzer/strdup-pr108252.c
  f0210a810518059661764eb58e636dbe  gcc/testsuite/gcc.dg/analyzer/strlen-1.c
--- 52004,52013 ----
  33e174f7352f52397f09f832a69b1fc0  gcc/testsuite/gcc.dg/analyzer/strcasecmp-1.c
  72744cf5b7689b54300874e863c831d8  gcc/testsuite/gcc.dg/analyzer/strcat-1.c
  134423fe242d5fcd6c70f9d027d95bbc  gcc/testsuite/gcc.dg/analyzer/strchr-1.c
! a7281f95a887d497e09841bf97ffc300  gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
! 88f2c54df19d374ecf7b3f8ab3ebc660  gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
! f4641840686a027556c056035c47be8e  gcc/testsuite/gcc.dg/analyzer/strcpy-3.c
! c4d2b411207a269f785c9d05e81b824a  gcc/testsuite/gcc.dg/analyzer/strcpy-4.c
  939f0764862017a61847c1022904c655  gcc/testsuite/gcc.dg/analyzer/strdup-1.c
  7257568ac07240de491ed3c6e6dc1d1d  gcc/testsuite/gcc.dg/analyzer/strdup-pr108252.c
  f0210a810518059661764eb58e636dbe  gcc/testsuite/gcc.dg/analyzer/strlen-1.c
*************** fc3cb70c2399af08002b58c02ec7dc52  gcc/te
*** 52005,52015 ****
  5f95cce6ddf19b0795d44431c206311d  gcc/testsuite/gcc.dg/analyzer/taint-assert.c
  94a5f5322aa801cf745282a4cb42bfc9  gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
  df0366e06e6b9d19dce5a23691e50271  gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c
! 720d8a76446c424458c3556aa734ee7e  gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c
  78e4b1ed06f4e63bcfa3802ec15ad857  gcc/testsuite/gcc.dg/analyzer/taint-size-1.c
  693f55ef817f864e0343827ad154c880  gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c
  507a86fc44de383ae22b8933825e4bd0  gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c
! 1fb46abadcd32472f1c507019f21e3c4  gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c
  5c37a718a5792e1d46f1e4ed86dbc98a  gcc/testsuite/gcc.dg/analyzer/test-alloca.h
  486419cac8d180eb2b80b19e520f0727  gcc/testsuite/gcc.dg/analyzer/test-assert.h
  bd601748927d5c75feb46ce9e4546e5e  gcc/testsuite/gcc.dg/analyzer/test-setjmp.h
--- 52032,52042 ----
  5f95cce6ddf19b0795d44431c206311d  gcc/testsuite/gcc.dg/analyzer/taint-assert.c
  94a5f5322aa801cf745282a4cb42bfc9  gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
  df0366e06e6b9d19dce5a23691e50271  gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c
! 3ee0efac4808b1b914beeb4aa117a3be  gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c
  78e4b1ed06f4e63bcfa3802ec15ad857  gcc/testsuite/gcc.dg/analyzer/taint-size-1.c
  693f55ef817f864e0343827ad154c880  gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c
  507a86fc44de383ae22b8933825e4bd0  gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c
! 988f7602fc642d5eb351e4ab4d69510f  gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c
  5c37a718a5792e1d46f1e4ed86dbc98a  gcc/testsuite/gcc.dg/analyzer/test-alloca.h
  486419cac8d180eb2b80b19e520f0727  gcc/testsuite/gcc.dg/analyzer/test-assert.h
  bd601748927d5c75feb46ce9e4546e5e  gcc/testsuite/gcc.dg/analyzer/test-setjmp.h
*************** c20da04ddcafb9fcbaf63d68a963fc64  gcc/te
*** 52063,52072 ****
  049209558c45a95b2d1cfb0369c75138  gcc/testsuite/gcc.dg/analyzer/torture/pr93947.c
  7826650ea8491ff0996ddb84facdd55e  gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c
  9ad091485049c3474ef15f305054d030  gcc/testsuite/gcc.dg/analyzer/torture/switch-2.c
! 25003174501570b799d3e3a948c66f5f  gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c
! 395de16f08102a554c60112d9f79a4ac  gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c
  d395542cab6151e7cd1ab370ab6a6181  gcc/testsuite/gcc.dg/analyzer/torture/switch-5.c
! c6607cf8f0a83f57db4d5d7e2592d22d  gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_floor.c
  2d17dc42388a5274764c1624ca93c80e  gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_maputl.c
  fee376fc039217ac8eadbd50e48b7797  gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-git-vreportf-1.c
  1fae21b0c67b5b679beeecb28014ef75  gcc/testsuite/gcc.dg/analyzer/torture/symbolic-10.c
--- 52090,52099 ----
  049209558c45a95b2d1cfb0369c75138  gcc/testsuite/gcc.dg/analyzer/torture/pr93947.c
  7826650ea8491ff0996ddb84facdd55e  gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c
  9ad091485049c3474ef15f305054d030  gcc/testsuite/gcc.dg/analyzer/torture/switch-2.c
! 9e7ce8ada2b77f9f3f9d0208011c5320  gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c
! f2ce64d6ea25644a7c5bbf114807a58f  gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c
  d395542cab6151e7cd1ab370ab6a6181  gcc/testsuite/gcc.dg/analyzer/torture/switch-5.c
! 77de0f54da3c5a72a6cf0592700e8853  gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_floor.c
  2d17dc42388a5274764c1624ca93c80e  gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_maputl.c
  fee376fc039217ac8eadbd50e48b7797  gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-git-vreportf-1.c
  1fae21b0c67b5b679beeecb28014ef75  gcc/testsuite/gcc.dg/analyzer/torture/symbolic-10.c
*************** a7483ba70d8c9ebf7ec07e6ccd73a26d  gcc/te
*** 52903,52909 ****
  9592adb58bb664e7d9b8270d44906bb8  gcc/testsuite/gcc.dg/builtin-protos-1.c
  3806bed440e718e6edf07514d052df9a  gcc/testsuite/gcc.dg/builtin-redefine.c
  246bb70bfe2055226e4764a8be22bdb1  gcc/testsuite/gcc.dg/builtin-return-1.c
! 3bb136f402d795adbeb8ffae4b5cc046  gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c
  90a16deb753105b3ee10f1ba254778b4  gcc/testsuite/gcc.dg/builtin-stdc-bit-2.c
  e63661178c9e2059aa6202e11fdcc53a  gcc/testsuite/gcc.dg/builtin-stdc-bit-3.c
  21738c966f4d73c031343f15b6bc4d60  gcc/testsuite/gcc.dg/builtin-stdc-rotate-1.c
--- 52930,52936 ----
  9592adb58bb664e7d9b8270d44906bb8  gcc/testsuite/gcc.dg/builtin-protos-1.c
  3806bed440e718e6edf07514d052df9a  gcc/testsuite/gcc.dg/builtin-redefine.c
  246bb70bfe2055226e4764a8be22bdb1  gcc/testsuite/gcc.dg/builtin-return-1.c
! 9f307bdf31c818abe52798f03c881b70  gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c
  90a16deb753105b3ee10f1ba254778b4  gcc/testsuite/gcc.dg/builtin-stdc-bit-2.c
  e63661178c9e2059aa6202e11fdcc53a  gcc/testsuite/gcc.dg/builtin-stdc-bit-3.c
  21738c966f4d73c031343f15b6bc4d60  gcc/testsuite/gcc.dg/builtin-stdc-rotate-1.c
*************** b545fd5015b04774ac8c95c87722bfc2  gcc/te
*** 56005,56011 ****
  76411379bc46f8e28491db8515c8b035  gcc/testsuite/gcc.dg/freestanding-main.c
  196d33dd29e6d3bd808b05c7472ef1d2  gcc/testsuite/gcc.dg/freestanding-nonint-main.c
  60aef7ab4a0a9bca44f5182276f77cc3  gcc/testsuite/gcc.dg/fshort-wchar.c
! c03b7986b16e324c69d30de40be5dec9  gcc/testsuite/gcc.dg/fstack-protector-strong.c
  e229fba1e745ea8e6ffbf5e48314ecd3  gcc/testsuite/gcc.dg/ftrapv-1.c
  674ce79cdefdee8408c64f5ff5fc573d  gcc/testsuite/gcc.dg/ftrapv-2.c
  9337f6ee91ecdc5686e015d1984a97a2  gcc/testsuite/gcc.dg/ftrapv-3.c
--- 56032,56038 ----
  76411379bc46f8e28491db8515c8b035  gcc/testsuite/gcc.dg/freestanding-main.c
  196d33dd29e6d3bd808b05c7472ef1d2  gcc/testsuite/gcc.dg/freestanding-nonint-main.c
  60aef7ab4a0a9bca44f5182276f77cc3  gcc/testsuite/gcc.dg/fshort-wchar.c
! 6c6fc1de6c887b4c72d5b471f6e6cccc  gcc/testsuite/gcc.dg/fstack-protector-strong.c
  e229fba1e745ea8e6ffbf5e48314ecd3  gcc/testsuite/gcc.dg/ftrapv-1.c
  674ce79cdefdee8408c64f5ff5fc573d  gcc/testsuite/gcc.dg/ftrapv-2.c
  9337f6ee91ecdc5686e015d1984a97a2  gcc/testsuite/gcc.dg/ftrapv-3.c
*************** c5401aea0b30d1fac33ea13c25a81660  gcc/te
*** 59425,59431 ****
  d0daddff69ce2a043bb9b98f92be76e3  gcc/testsuite/gcc.dg/pr126534.c
  c6636c48e0e666ab50ee29db9ab031fd  gcc/testsuite/gcc.dg/pr126536-1.c
  04d3f7019416a90a60d4483fa76d86c7  gcc/testsuite/gcc.dg/pr126536-2.c
! c822c6d0720283d2e184a90db7bd6e76  gcc/testsuite/gcc.dg/pr126538.c
  cb2e908e56265acf56829462158a2436  gcc/testsuite/gcc.dg/pr126569-1.c
  9453005db59e4e4da7e9340bbe287d1a  gcc/testsuite/gcc.dg/pr126641.c
  b0d8cd5bef1be5bafd5cc8e986aed427  gcc/testsuite/gcc.dg/pr126648.c
--- 59452,59458 ----
  d0daddff69ce2a043bb9b98f92be76e3  gcc/testsuite/gcc.dg/pr126534.c
  c6636c48e0e666ab50ee29db9ab031fd  gcc/testsuite/gcc.dg/pr126536-1.c
  04d3f7019416a90a60d4483fa76d86c7  gcc/testsuite/gcc.dg/pr126536-2.c
! 57be4cd46d5f07e659ab57b84e2b426b  gcc/testsuite/gcc.dg/pr126538.c
  cb2e908e56265acf56829462158a2436  gcc/testsuite/gcc.dg/pr126569-1.c
  9453005db59e4e4da7e9340bbe287d1a  gcc/testsuite/gcc.dg/pr126641.c
  b0d8cd5bef1be5bafd5cc8e986aed427  gcc/testsuite/gcc.dg/pr126648.c
*************** fd03802730b45d8460f0ca64801be083  gcc/te
*** 59435,59440 ****
--- 59462,59471 ----
  1fe80872415fa4195e6d5e8a7b0d4fae  gcc/testsuite/gcc.dg/pr126814.c
  a8fb6749607a2300d934e61cd66cf96c  gcc/testsuite/gcc.dg/pr126845.c
  0df304e16cbf1e0f7e3dac24e1a10869  gcc/testsuite/gcc.dg/pr126856.c
+ 3ea2d1d2e64dbff6dd4264318e9bdb8e  gcc/testsuite/gcc.dg/pr126999.c
+ 425e7396cfb37281b05316ca054ab9c8  gcc/testsuite/gcc.dg/pr127027.c
+ b6298553b07f4f37d9d3415a9adcb700  gcc/testsuite/gcc.dg/pr127039.c
+ 54fe035bc18978442adc85172ba879a4  gcc/testsuite/gcc.dg/pr127082.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
  86dc5cfaafafc79e11d0559d71baea6b  gcc/testsuite/gcc.dg/pr13804-1.c
  2a52cc05fb1415e0eafbc468a7ccc138  gcc/testsuite/gcc.dg/pr14092-1.c
*************** fe0dfbb4e9a3744d6ae829de7b0e4b76  gcc/te
*** 61545,61553 ****
  b5afa4a9423bfaaecdc7aed2175814dc  gcc/testsuite/gcc.dg/pthread-init-2.c
  1e43eff6196cdabcccbabb483e4e5469  gcc/testsuite/gcc.dg/pthread-init-common.h
  81c32e7aa8336105b10ad33457ae164f  gcc/testsuite/gcc.dg/pubtypes-1.c
! b86e198a5aac258c7d57d970aa82b11f  gcc/testsuite/gcc.dg/pubtypes-2.c
! 80bd21cc4e13f2e12df334af5c7fd0d6  gcc/testsuite/gcc.dg/pubtypes-3.c
! 787bc4a8508dc8b2170aa2aa036806d7  gcc/testsuite/gcc.dg/pubtypes-4.c
  e91f166b4de92c03f81d916150bf3333  gcc/testsuite/gcc.dg/pure-1.c
  7d38699cc36c0e41edf981a8e9f72075  gcc/testsuite/gcc.dg/pure-2.c
  1ba96c5459efa721e448123e79141819  gcc/testsuite/gcc.dg/pure-3.c
--- 61576,61584 ----
  b5afa4a9423bfaaecdc7aed2175814dc  gcc/testsuite/gcc.dg/pthread-init-2.c
  1e43eff6196cdabcccbabb483e4e5469  gcc/testsuite/gcc.dg/pthread-init-common.h
  81c32e7aa8336105b10ad33457ae164f  gcc/testsuite/gcc.dg/pubtypes-1.c
! 2022a23fb658669a38facf9c6f9b98a3  gcc/testsuite/gcc.dg/pubtypes-2.c
! 2bbaff3b2f83c95628295909e6e6ff6e  gcc/testsuite/gcc.dg/pubtypes-3.c
! cf8816854e9cbc5073017feece0d666d  gcc/testsuite/gcc.dg/pubtypes-4.c
  e91f166b4de92c03f81d916150bf3333  gcc/testsuite/gcc.dg/pure-1.c
  7d38699cc36c0e41edf981a8e9f72075  gcc/testsuite/gcc.dg/pure-2.c
  1ba96c5459efa721e448123e79141819  gcc/testsuite/gcc.dg/pure-3.c
*************** cee315c60d4bb9871399c0c79c06b497  gcc/te
*** 62839,62845 ****
  40e4d12da038d255d555bb9ecb768c35  gcc/testsuite/gcc.dg/torture/inline-mem-cpy-1.c
  2529600ee21ae9ddc90ef7b17f203c75  gcc/testsuite/gcc.dg/torture/inline-mem-cpy-cmp-1.c
  d9d7e0bbb351429b87cfc3d6828caa28  gcc/testsuite/gcc.dg/torture/inline-mem-move-1.c
! 0b1f6fa6ba2d2c75e662d5c3f6a45967  gcc/testsuite/gcc.dg/torture/inline-mem-set-1.c
  96926b050759d9ba7bb56a4b349cdba0  gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c
  d8de96ae2b044149f75e65807303c0d8  gcc/testsuite/gcc.dg/torture/ipa-pta-1.c
  215abff408789603b6bcd0b72b9dbb37  gcc/testsuite/gcc.dg/torture/ipa-pta-2.c
--- 62870,62876 ----
  40e4d12da038d255d555bb9ecb768c35  gcc/testsuite/gcc.dg/torture/inline-mem-cpy-1.c
  2529600ee21ae9ddc90ef7b17f203c75  gcc/testsuite/gcc.dg/torture/inline-mem-cpy-cmp-1.c
  d9d7e0bbb351429b87cfc3d6828caa28  gcc/testsuite/gcc.dg/torture/inline-mem-move-1.c
! ea7f56487ec16efbbffa8ef63574cd72  gcc/testsuite/gcc.dg/torture/inline-mem-set-1.c
  96926b050759d9ba7bb56a4b349cdba0  gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c
  d8de96ae2b044149f75e65807303c0d8  gcc/testsuite/gcc.dg/torture/ipa-pta-1.c
  215abff408789603b6bcd0b72b9dbb37  gcc/testsuite/gcc.dg/torture/ipa-pta-2.c
*************** fd4292c0fcabd728ea0a1a6dbef87843  gcc/te
*** 63049,63055 ****
  b6cc54f5d02a9045680d8ba8b767f7b8  gcc/testsuite/gcc.dg/torture/pr110924.c
  4dd66a9e59fc17c29835a93cd50deb03  gcc/testsuite/gcc.dg/torture/pr110979.c
  fa1cc5eb743efae6b534499912897d96  gcc/testsuite/gcc.dg/torture/pr111000.c
! 7423e38f878a6e56fb7be82847619a5b  gcc/testsuite/gcc.dg/torture/pr111036.c
  1dd35b4e28b7f72f0b12fbe3e5efb60a  gcc/testsuite/gcc.dg/torture/pr111048.c
  b3155d2832f93397879a73cc5d6f43b5  gcc/testsuite/gcc.dg/torture/pr111128.c
  a5aabe56aa9f2db146fb1185eabbfacb  gcc/testsuite/gcc.dg/torture/pr111137.c
--- 63080,63086 ----
  b6cc54f5d02a9045680d8ba8b767f7b8  gcc/testsuite/gcc.dg/torture/pr110924.c
  4dd66a9e59fc17c29835a93cd50deb03  gcc/testsuite/gcc.dg/torture/pr110979.c
  fa1cc5eb743efae6b534499912897d96  gcc/testsuite/gcc.dg/torture/pr111000.c
! 45349731af6dafa019743db80362c387  gcc/testsuite/gcc.dg/torture/pr111036.c
  1dd35b4e28b7f72f0b12fbe3e5efb60a  gcc/testsuite/gcc.dg/torture/pr111048.c
  b3155d2832f93397879a73cc5d6f43b5  gcc/testsuite/gcc.dg/torture/pr111128.c
  a5aabe56aa9f2db146fb1185eabbfacb  gcc/testsuite/gcc.dg/torture/pr111137.c
*************** cbf3e9074438c0fc59d7ba99a6377906  gcc/te
*** 63150,63156 ****
  164e88d40fc4ae642a6d4b4c04eb1f53  gcc/testsuite/gcc.dg/torture/pr116278-run-2.c
  d55420193b502affe4f12bc50e33bc30  gcc/testsuite/gcc.dg/torture/pr116296.c
  2681c6cd00e71033ee5e58d3d2e24776  gcc/testsuite/gcc.dg/torture/pr116343.c
! fbebe679c0053fe0dbd10a5567a4afc8  gcc/testsuite/gcc.dg/torture/pr116353.c
  99a6c1e6285db8d08064cd8aaa300ddd  gcc/testsuite/gcc.dg/torture/pr116380.c
  b0e70276ca1233459713c4c0637f5c31  gcc/testsuite/gcc.dg/torture/pr116409-1.c
  f27636f881a25ebf0106fc22010ddea9  gcc/testsuite/gcc.dg/torture/pr116409-2.c
--- 63181,63187 ----
  164e88d40fc4ae642a6d4b4c04eb1f53  gcc/testsuite/gcc.dg/torture/pr116278-run-2.c
  d55420193b502affe4f12bc50e33bc30  gcc/testsuite/gcc.dg/torture/pr116296.c
  2681c6cd00e71033ee5e58d3d2e24776  gcc/testsuite/gcc.dg/torture/pr116343.c
! cec84389a3921ae528e75dc34a1fb13f  gcc/testsuite/gcc.dg/torture/pr116353.c
  99a6c1e6285db8d08064cd8aaa300ddd  gcc/testsuite/gcc.dg/torture/pr116380.c
  b0e70276ca1233459713c4c0637f5c31  gcc/testsuite/gcc.dg/torture/pr116409-1.c
  f27636f881a25ebf0106fc22010ddea9  gcc/testsuite/gcc.dg/torture/pr116409-2.c
*************** d9a43196d2efe2fcc49c98e125a9d6b3  gcc/te
*** 63243,63249 ****
  a789d5fa70ddcb7ea1760ee8688e331c  gcc/testsuite/gcc.dg/torture/pr120813.c
  e23df6b1422011499b9a500d2bf25add  gcc/testsuite/gcc.dg/torture/pr120944.c
  2109362b50e367ef8730288e7461163d  gcc/testsuite/gcc.dg/torture/pr120951-1.c
! 8d649d57fe1e60239f2949a9cbec8646  gcc/testsuite/gcc.dg/torture/pr121103-1.c
  e0878b10bf90cdd28ee181056e4566f9  gcc/testsuite/gcc.dg/torture/pr121116.c
  a0f8ab77c0d77ef71974e1bd49ecec66  gcc/testsuite/gcc.dg/torture/pr121194.c
  d2430d6556dc52a9bbbe49c5c2c11a91  gcc/testsuite/gcc.dg/torture/pr121236-1.c
--- 63274,63280 ----
  a789d5fa70ddcb7ea1760ee8688e331c  gcc/testsuite/gcc.dg/torture/pr120813.c
  e23df6b1422011499b9a500d2bf25add  gcc/testsuite/gcc.dg/torture/pr120944.c
  2109362b50e367ef8730288e7461163d  gcc/testsuite/gcc.dg/torture/pr120951-1.c
! 966c4af635437aa3799efe4cdb1d31f6  gcc/testsuite/gcc.dg/torture/pr121103-1.c
  e0878b10bf90cdd28ee181056e4566f9  gcc/testsuite/gcc.dg/torture/pr121116.c
  a0f8ab77c0d77ef71974e1bd49ecec66  gcc/testsuite/gcc.dg/torture/pr121194.c
  d2430d6556dc52a9bbbe49c5c2c11a91  gcc/testsuite/gcc.dg/torture/pr121236-1.c
*************** e03287adad00d313766ecc2e039fb9b5  gcc/te
*** 63303,63309 ****
  ea90221ab80b5c3561ffc7665d2a343a  gcc/testsuite/gcc.dg/torture/pr123645-1.c
  c6c07c813f67e0f94f1352f2810dfcff  gcc/testsuite/gcc.dg/torture/pr123645-2.c
  0264a38a252a9bd05d889f4ee2e9545e  gcc/testsuite/gcc.dg/torture/pr123745-1.c
! 2b277b12c644f4c0f67813086cbd7ef8  gcc/testsuite/gcc.dg/torture/pr123778-1.c
  053ce33a7901c282d6579ebfeeb644e7  gcc/testsuite/gcc.dg/torture/pr123799.c
  6e235fefa779bbc6fdeefda19a5dd44e  gcc/testsuite/gcc.dg/torture/pr123822-1.c
  50838f4736657229a26dc1b011faf8d3  gcc/testsuite/gcc.dg/torture/pr123864.c
--- 63334,63340 ----
  ea90221ab80b5c3561ffc7665d2a343a  gcc/testsuite/gcc.dg/torture/pr123645-1.c
  c6c07c813f67e0f94f1352f2810dfcff  gcc/testsuite/gcc.dg/torture/pr123645-2.c
  0264a38a252a9bd05d889f4ee2e9545e  gcc/testsuite/gcc.dg/torture/pr123745-1.c
! f4b00220d714ffd0755fac88a1df43d2  gcc/testsuite/gcc.dg/torture/pr123778-1.c
  053ce33a7901c282d6579ebfeeb644e7  gcc/testsuite/gcc.dg/torture/pr123799.c
  6e235fefa779bbc6fdeefda19a5dd44e  gcc/testsuite/gcc.dg/torture/pr123822-1.c
  50838f4736657229a26dc1b011faf8d3  gcc/testsuite/gcc.dg/torture/pr123864.c
*************** d37f980a2ba8a3f7fef2d2c9a4f2a81d  gcc/te
*** 63359,63365 ****
  1443d1972260ff2e56dfdda315fb0452  gcc/testsuite/gcc.dg/torture/pr126136.c
  5d7dbe26c6352a8eb2fa8a8a76386e10  gcc/testsuite/gcc.dg/torture/pr126171-2.c
  672d0c44de1f67e02b896d92945db96c  gcc/testsuite/gcc.dg/torture/pr126313.c
! 01cb9d719e57df3f224da0cfe0cd6ec1  gcc/testsuite/gcc.dg/torture/pr126415.c
  33931213701c8ff6e961657ea59c35a1  gcc/testsuite/gcc.dg/torture/pr126458-1.c
  2380d03d281a4788bdba26fddddc27d4  gcc/testsuite/gcc.dg/torture/pr126464.c
  e3b97fe82bf44e7ca3ada5b69e89137b  gcc/testsuite/gcc.dg/torture/pr126470-1.c
--- 63390,63396 ----
  1443d1972260ff2e56dfdda315fb0452  gcc/testsuite/gcc.dg/torture/pr126136.c
  5d7dbe26c6352a8eb2fa8a8a76386e10  gcc/testsuite/gcc.dg/torture/pr126171-2.c
  672d0c44de1f67e02b896d92945db96c  gcc/testsuite/gcc.dg/torture/pr126313.c
! d3741cd20e805f4d04adcb57f71be154  gcc/testsuite/gcc.dg/torture/pr126415.c
  33931213701c8ff6e961657ea59c35a1  gcc/testsuite/gcc.dg/torture/pr126458-1.c
  2380d03d281a4788bdba26fddddc27d4  gcc/testsuite/gcc.dg/torture/pr126464.c
  e3b97fe82bf44e7ca3ada5b69e89137b  gcc/testsuite/gcc.dg/torture/pr126470-1.c
*************** e6132b99fe49e5ef626b8a5c49e9670a  gcc/te
*** 63368,63378 ****
  736e87c77f1f1665b5c1e6d96c002b57  gcc/testsuite/gcc.dg/torture/pr126564.c
  aa10a1eb9919015a063f6b2c6b1c583c  gcc/testsuite/gcc.dg/torture/pr126571-1.c
  d7e0a09a63a5caae0049b007353d53f4  gcc/testsuite/gcc.dg/torture/pr126576.c
! 3be74d126fd8d19b7c23404e503083de  gcc/testsuite/gcc.dg/torture/pr126650.c
  f5791b72734df0eaf9c54a4daeec8b27  gcc/testsuite/gcc.dg/torture/pr126658.c
  7c0d0b95ee5c87f0516cab7d10fbf1dc  gcc/testsuite/gcc.dg/torture/pr126686.c
  4be4065d432251aa12d90e44344176ee  gcc/testsuite/gcc.dg/torture/pr126925.c
  067b51a8632214c843cf0280f718d783  gcc/testsuite/gcc.dg/torture/pr126934-1.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
--- 63399,63412 ----
  736e87c77f1f1665b5c1e6d96c002b57  gcc/testsuite/gcc.dg/torture/pr126564.c
  aa10a1eb9919015a063f6b2c6b1c583c  gcc/testsuite/gcc.dg/torture/pr126571-1.c
  d7e0a09a63a5caae0049b007353d53f4  gcc/testsuite/gcc.dg/torture/pr126576.c
! a63d3ae4f1ac7bbcfa87b248f95a133b  gcc/testsuite/gcc.dg/torture/pr126650.c
  f5791b72734df0eaf9c54a4daeec8b27  gcc/testsuite/gcc.dg/torture/pr126658.c
  7c0d0b95ee5c87f0516cab7d10fbf1dc  gcc/testsuite/gcc.dg/torture/pr126686.c
  4be4065d432251aa12d90e44344176ee  gcc/testsuite/gcc.dg/torture/pr126925.c
  067b51a8632214c843cf0280f718d783  gcc/testsuite/gcc.dg/torture/pr126934-1.c
+ 2271defe61ae93a0d2f8ac6992b8220c  gcc/testsuite/gcc.dg/torture/pr126997.c
+ e0c5c38eee202de5ba43f4318da81f70  gcc/testsuite/gcc.dg/torture/pr127000.c
+ 4da36bc69d952cdd4a52f6ec249f89c8  gcc/testsuite/gcc.dg/torture/pr127085.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
*************** d583ad8ec3a0208319ac7ca2a2777572  gcc/te
*** 63592,63598 ****
  d2e8e8ec11a434bb591012dff5dfb3d4  gcc/testsuite/gcc.dg/torture/pr49169.c
  c76a42a4317e797c45b161adab53530a  gcc/testsuite/gcc.dg/torture/pr49217.c
  c07c91bf8b8b1cd1d6d5f578ceeb15d5  gcc/testsuite/gcc.dg/torture/pr49330-1.c
! 4be431d88f52bc75e52dc90970ab0a99  gcc/testsuite/gcc.dg/torture/pr49330-2.c
  fe91d9c51239c8d4bb750fa869683aef  gcc/testsuite/gcc.dg/torture/pr49518.c
  31f4b190fadae5b194a73d28988a0c56  gcc/testsuite/gcc.dg/torture/pr49603.c
  3f33f6456a27739e6e648a1b71ea26ff  gcc/testsuite/gcc.dg/torture/pr49651.c
--- 63626,63632 ----
  d2e8e8ec11a434bb591012dff5dfb3d4  gcc/testsuite/gcc.dg/torture/pr49169.c
  c76a42a4317e797c45b161adab53530a  gcc/testsuite/gcc.dg/torture/pr49217.c
  c07c91bf8b8b1cd1d6d5f578ceeb15d5  gcc/testsuite/gcc.dg/torture/pr49330-1.c
! 4137dcbb4d7cb2f03d1626f4fbe3c876  gcc/testsuite/gcc.dg/torture/pr49330-2.c
  fe91d9c51239c8d4bb750fa869683aef  gcc/testsuite/gcc.dg/torture/pr49518.c
  31f4b190fadae5b194a73d28988a0c56  gcc/testsuite/gcc.dg/torture/pr49603.c
  3f33f6456a27739e6e648a1b71ea26ff  gcc/testsuite/gcc.dg/torture/pr49651.c
*************** a2e7a9267052ac4ae19d933a4fe39c12  gcc/te
*** 65118,65125 ****
  77e49fec8819a28745200ccf32657ae6  gcc/testsuite/gcc.dg/tree-ssa/divide-7.c
  d1e7893bac97fbc28f3fa03eb0accdbd  gcc/testsuite/gcc.dg/tree-ssa/divide-8.c
  9dc48dbf30720e35f9134fdc5240fc51  gcc/testsuite/gcc.dg/tree-ssa/divmul-mod-1.c
! f32433617ee0c1e536728b3c1e9be519  gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c
! c1412ea31f56a4d7ba034e9257870de2  gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c
  0fe5e254134df06af63b1d15d6f35470  gcc/testsuite/gcc.dg/tree-ssa/dse-points-to.c
  0a7ff4f8ff2cbc2ad6ac233489b11964  gcc/testsuite/gcc.dg/tree-ssa/dump-1.c
  5d82d65865d66cefacac9df984f79919  gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
--- 65152,65159 ----
  77e49fec8819a28745200ccf32657ae6  gcc/testsuite/gcc.dg/tree-ssa/divide-7.c
  d1e7893bac97fbc28f3fa03eb0accdbd  gcc/testsuite/gcc.dg/tree-ssa/divide-8.c
  9dc48dbf30720e35f9134fdc5240fc51  gcc/testsuite/gcc.dg/tree-ssa/divmul-mod-1.c
! 8018febbd3cf13b782bcce4278c372c8  gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c
! 0e1f8b99f25b8f569c235b748994405f  gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c
  0fe5e254134df06af63b1d15d6f35470  gcc/testsuite/gcc.dg/tree-ssa/dse-points-to.c
  0a7ff4f8ff2cbc2ad6ac233489b11964  gcc/testsuite/gcc.dg/tree-ssa/dump-1.c
  5d82d65865d66cefacac9df984f79919  gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
*************** ebfd2de9c20bd860af0d147f7475ea60  gcc/te
*** 65678,65687 ****
  9c819f9de58d3593f450abbac3752fce  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-value-2.c
  853bb73e539fb11952babaad04094941  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-value-4.c
  2beeb0836a02610d35964e5fafa1adf2  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-value-5.c
! cef3bfd56530a07f8eb43ec1a8c7552d  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c
! 44b84455e4e32ef45ab0091bcb29e029  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c
! f26d2e01babf45dbaeac6dc0140557e7  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c
  d5f82ca4c500006079bdac0858cef071  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-4.c
  a39b55be53be7f30c85f02bc40f6fa4d  gcc/testsuite/gcc.dg/tree-ssa/phiprop-1.c
  fc9871f7cfc7b71c6c84a56391c7c2eb  gcc/testsuite/gcc.dg/tree-ssa/phiprop-10.c
  b714b8049e88c8949a36ee0a60e34437  gcc/testsuite/gcc.dg/tree-ssa/phiprop-11.c
--- 65712,65722 ----
  9c819f9de58d3593f450abbac3752fce  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-value-2.c
  853bb73e539fb11952babaad04094941  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-value-4.c
  2beeb0836a02610d35964e5fafa1adf2  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-value-5.c
! 5d8286987d4ebc69257ec811f0c5b214  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c
! db9823d70bede68e81474f40c725eed0  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c
! 928181286aec1b0e4f1e44f27035a19e  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c
  d5f82ca4c500006079bdac0858cef071  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-4.c
+ 1937861110a72a62caca787be302d10d  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-5.c
  a39b55be53be7f30c85f02bc40f6fa4d  gcc/testsuite/gcc.dg/tree-ssa/phiprop-1.c
  fc9871f7cfc7b71c6c84a56391c7c2eb  gcc/testsuite/gcc.dg/tree-ssa/phiprop-10.c
  b714b8049e88c8949a36ee0a60e34437  gcc/testsuite/gcc.dg/tree-ssa/phiprop-11.c
*************** eed236f4c0a3dab3cadb4c5cbce403da  gcc/te
*** 65835,65841 ****
  f5a620ca99a1fc9e267beab2ad387ade  gcc/testsuite/gcc.dg/tree-ssa/pr111972-1.c
  c146f88113f10fde3201b81b2eeb30fb  gcc/testsuite/gcc.dg/tree-ssa/pr112095.c
  c2ebdae32435fb3bedb9a03feb0fbf7b  gcc/testsuite/gcc.dg/tree-ssa/pr112104-1.c
! 0d2ea65d710489c44e6fc3a4dfcdabc5  gcc/testsuite/gcc.dg/tree-ssa/pr112104-2.c
  59cce6285e6c6d5aeda8bf41a51fa20a  gcc/testsuite/gcc.dg/tree-ssa/pr112472.c
  beccfabbbe0e25820c8a0bf1789cad24  gcc/testsuite/gcc.dg/tree-ssa/pr112706.c
  19ee66e2ab8d0fdea9f3e335e4a8fa86  gcc/testsuite/gcc.dg/tree-ssa/pr112721.c
--- 65870,65876 ----
  f5a620ca99a1fc9e267beab2ad387ade  gcc/testsuite/gcc.dg/tree-ssa/pr111972-1.c
  c146f88113f10fde3201b81b2eeb30fb  gcc/testsuite/gcc.dg/tree-ssa/pr112095.c
  c2ebdae32435fb3bedb9a03feb0fbf7b  gcc/testsuite/gcc.dg/tree-ssa/pr112104-1.c
! 8e5b7dc51543ee43e0ffa1554871a67c  gcc/testsuite/gcc.dg/tree-ssa/pr112104-2.c
  59cce6285e6c6d5aeda8bf41a51fa20a  gcc/testsuite/gcc.dg/tree-ssa/pr112472.c
  beccfabbbe0e25820c8a0bf1789cad24  gcc/testsuite/gcc.dg/tree-ssa/pr112706.c
  19ee66e2ab8d0fdea9f3e335e4a8fa86  gcc/testsuite/gcc.dg/tree-ssa/pr112721.c
*************** b8bc6aee646d4031c8e09f3cf11c2eb9  gcc/te
*** 65889,65895 ****
  dab88e25e03ff735e2c1de465e1513fc  gcc/testsuite/gcc.dg/tree-ssa/pr120231-2.c
  aeb12077d90e06af9a00cc755a37915a  gcc/testsuite/gcc.dg/tree-ssa/pr120231-3.c
  a365c498e4c994c568028e0338653133  gcc/testsuite/gcc.dg/tree-ssa/pr120702.c
! ef9f94de68c006babcf9169489ed1b51  gcc/testsuite/gcc.dg/tree-ssa/pr121264.c
  f4c56a02709c699f81b07b81dd1a2c1e  gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c
  1f4ed1b8fa56e5300281263805887fd0  gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c
  6564cdc8a2e0bef445546d4a4df278f9  gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c
--- 65924,65930 ----
  dab88e25e03ff735e2c1de465e1513fc  gcc/testsuite/gcc.dg/tree-ssa/pr120231-2.c
  aeb12077d90e06af9a00cc755a37915a  gcc/testsuite/gcc.dg/tree-ssa/pr120231-3.c
  a365c498e4c994c568028e0338653133  gcc/testsuite/gcc.dg/tree-ssa/pr120702.c
! 2848c4792e92779e00396eaa2245b823  gcc/testsuite/gcc.dg/tree-ssa/pr121264.c
  f4c56a02709c699f81b07b81dd1a2c1e  gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c
  1f4ed1b8fa56e5300281263805887fd0  gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c
  6564cdc8a2e0bef445546d4a4df278f9  gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c
*************** daf3fee63585def52d6c516a9bfa3503  gcc/te
*** 65909,65915 ****
  f0a08ed77be180f8c72684f8274f2548  gcc/testsuite/gcc.dg/tree-ssa/pr123966.c
  81303034f650b53ba67d0d2ec4436213  gcc/testsuite/gcc.dg/tree-ssa/pr123967-2.c
  ea753954e3d748d0fc657f06d315bb5d  gcc/testsuite/gcc.dg/tree-ssa/pr123967-3.c
! 6061559fcec7d251eadc1694c6234322  gcc/testsuite/gcc.dg/tree-ssa/pr123967.c
  d87a1ad6187c06f07e6ee3b7c6352e9e  gcc/testsuite/gcc.dg/tree-ssa/pr124151.c
  4f4c234f6b26b80a5db5588dada6c8b6  gcc/testsuite/gcc.dg/tree-ssa/pr124405.c
  5283f91d0eefda6d127eab3dcbb26458  gcc/testsuite/gcc.dg/tree-ssa/pr124560.c
--- 65944,65950 ----
  f0a08ed77be180f8c72684f8274f2548  gcc/testsuite/gcc.dg/tree-ssa/pr123966.c
  81303034f650b53ba67d0d2ec4436213  gcc/testsuite/gcc.dg/tree-ssa/pr123967-2.c
  ea753954e3d748d0fc657f06d315bb5d  gcc/testsuite/gcc.dg/tree-ssa/pr123967-3.c
! 6e85677e13869dde85a4fc5cc08dd559  gcc/testsuite/gcc.dg/tree-ssa/pr123967.c
  d87a1ad6187c06f07e6ee3b7c6352e9e  gcc/testsuite/gcc.dg/tree-ssa/pr124151.c
  4f4c234f6b26b80a5db5588dada6c8b6  gcc/testsuite/gcc.dg/tree-ssa/pr124405.c
  5283f91d0eefda6d127eab3dcbb26458  gcc/testsuite/gcc.dg/tree-ssa/pr124560.c
*************** ffffb4ba63f58edf32fd89260f95a6e8  gcc/te
*** 65934,65939 ****
--- 65969,65975 ----
  1efe5f1476d0567fc4877886d49ab9ae  gcc/testsuite/gcc.dg/tree-ssa/pr126646-1.c
  4b8458493d24288d315aa2d9cdb02af2  gcc/testsuite/gcc.dg/tree-ssa/pr126646-2.c
  66af4310bfb2fda212fd648ee60555c8  gcc/testsuite/gcc.dg/tree-ssa/pr126743.c
+ ae14d00c6253e7a1f4b971203998f84d  gcc/testsuite/gcc.dg/tree-ssa/pr126745.c
  a48a39d4dd0807e567de26f9e647e549  gcc/testsuite/gcc.dg/tree-ssa/pr126748.c
  c8848772d9f95336cf6a009cbfdeca57  gcc/testsuite/gcc.dg/tree-ssa/pr126876.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
*************** d66408c518c8dabc34c03159ce0ee317  gcc/te
*** 66644,66650 ****
  a16e6045a67747df1bbf4e0359c3ee89  gcc/testsuite/gcc.dg/tree-ssa/return-value-range-1.c
  4092eae65c8a5748f69475460f9b0738  gcc/testsuite/gcc.dg/tree-ssa/round-up-ior-1.c
  9a51956d7c41b002be8c4fcfb63cdcb4  gcc/testsuite/gcc.dg/tree-ssa/round-up-ior-2.c
! 688b8f762ac2c72c005673fa2d9c335c  gcc/testsuite/gcc.dg/tree-ssa/satd-hadamard.c
  310ffe1652a091173f8b7a52babddfb0  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-1.c
  ab194d20bae6e8d51cf4ece7aea8d83f  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-3.c
  54c48e1a9bd511ada4416949d51ce815  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-4.c
--- 66680,66686 ----
  a16e6045a67747df1bbf4e0359c3ee89  gcc/testsuite/gcc.dg/tree-ssa/return-value-range-1.c
  4092eae65c8a5748f69475460f9b0738  gcc/testsuite/gcc.dg/tree-ssa/round-up-ior-1.c
  9a51956d7c41b002be8c4fcfb63cdcb4  gcc/testsuite/gcc.dg/tree-ssa/round-up-ior-2.c
! 846dd78afbcd5c7f31ab52728625c298  gcc/testsuite/gcc.dg/tree-ssa/satd-hadamard.c
  310ffe1652a091173f8b7a52babddfb0  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-1.c
  ab194d20bae6e8d51cf4ece7aea8d83f  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-3.c
  54c48e1a9bd511ada4416949d51ce815  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-4.c
*************** e09d2755ec8b8dca170666824978501f  gcc/te
*** 67184,67190 ****
  a07b328f828c5a6dc6814d58e08a5752  gcc/testsuite/gcc.dg/tree-ssa/useless-1.c
  64f1cae87e015159454aabd1d7bcb893  gcc/testsuite/gcc.dg/tree-ssa/user-printf-warn-1.c
  76db98755bcf2873abe9e88c68154bf5  gcc/testsuite/gcc.dg/tree-ssa/vce-1.c
! ff25745de488d38a5e63ceb6c3b729a3  gcc/testsuite/gcc.dg/tree-ssa/vec-mask-zero-1.c
  abc1a24899f20c2d8bd973e72dfeec39  gcc/testsuite/gcc.dg/tree-ssa/vec-reduc-pair-1.c
  94ce03a1be13410057ae4f53c20aeb84  gcc/testsuite/gcc.dg/tree-ssa/vec-reduc-pair-2.c
  b1ec50a07825f55ffb0792772ed0fb01  gcc/testsuite/gcc.dg/tree-ssa/vec-reduc-pair-3.c
--- 67220,67226 ----
  a07b328f828c5a6dc6814d58e08a5752  gcc/testsuite/gcc.dg/tree-ssa/useless-1.c
  64f1cae87e015159454aabd1d7bcb893  gcc/testsuite/gcc.dg/tree-ssa/user-printf-warn-1.c
  76db98755bcf2873abe9e88c68154bf5  gcc/testsuite/gcc.dg/tree-ssa/vce-1.c
! f0739f778c432ec3a36d2082bc0ccf6b  gcc/testsuite/gcc.dg/tree-ssa/vec-mask-zero-1.c
  abc1a24899f20c2d8bd973e72dfeec39  gcc/testsuite/gcc.dg/tree-ssa/vec-reduc-pair-1.c
  94ce03a1be13410057ae4f53c20aeb84  gcc/testsuite/gcc.dg/tree-ssa/vec-reduc-pair-2.c
  b1ec50a07825f55ffb0792772ed0fb01  gcc/testsuite/gcc.dg/tree-ssa/vec-reduc-pair-3.c
*************** ca338e02e0e7f8d2527742eb4245b399  gcc/te
*** 67909,67915 ****
  3bd87bde81e79f84ec0a3836e08ea231  gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-1.c
  08f7d2104468f41c60713a915aec4048  gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-2.c
  ed7761151262e1545e5b7b7fb4ebd47a  gcc/testsuite/gcc.dg/vect/bb-slp-pattern-1.c
! 239d8e740244a4d7cd86a364c25b4eb6  gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c
  5face17b7bca252af575af588f27be32  gcc/testsuite/gcc.dg/vect/bb-slp-phis-1.c
  52950543b95fcddb7a612560c97928ed  gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c
  7188567f50eab07257fff15d8ec5a6b4  gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c
--- 67945,67951 ----
  3bd87bde81e79f84ec0a3836e08ea231  gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-1.c
  08f7d2104468f41c60713a915aec4048  gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-2.c
  ed7761151262e1545e5b7b7fb4ebd47a  gcc/testsuite/gcc.dg/vect/bb-slp-pattern-1.c
! 0d253d3fe9701696a23893ce0b2ee67c  gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c
  5face17b7bca252af575af588f27be32  gcc/testsuite/gcc.dg/vect/bb-slp-phis-1.c
  52950543b95fcddb7a612560c97928ed  gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c
  7188567f50eab07257fff15d8ec5a6b4  gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c
*************** a7669a1c1dc571390b300ec443900da4  gcc/te
*** 67940,67945 ****
--- 67976,67985 ----
  1ed6f63e2f5bbdb173079915e30c60d8  gcc/testsuite/gcc.dg/vect/bb-slp-pr126865.c
  775fac435121742a0754aa19ac63de40  gcc/testsuite/gcc.dg/vect/bb-slp-pr126926.c
  335ccd99a4cce8b80fd513c6fa6bcc86  gcc/testsuite/gcc.dg/vect/bb-slp-pr126936.c
+ 42587bd7dc18e343dcf21f8df045fec3  gcc/testsuite/gcc.dg/vect/bb-slp-pr126995-2.c
+ c78025143d07105c3fe5073b14de8c05  gcc/testsuite/gcc.dg/vect/bb-slp-pr126995.c
+ 45f8218f4f119131d2fa9d9d5c1d3167  gcc/testsuite/gcc.dg/vect/bb-slp-pr127018.c
+ c4dcb2ba9e4d88313031c90842880780  gcc/testsuite/gcc.dg/vect/bb-slp-pr127051.c
  c7ebf5ca82162d225346ddd17f7cd2e2  gcc/testsuite/gcc.dg/vect/bb-slp-pr50730.c
  d46400927215059ca9b31c5b97f6e386  gcc/testsuite/gcc.dg/vect/bb-slp-pr54400.c
  5472e7bf338627077f4e6ce8cce9944e  gcc/testsuite/gcc.dg/vect/bb-slp-pr58135.c
*************** f1a49246f84d8fbab3d2b6aa5c89949e  gcc/te
*** 68512,68518 ****
  98753a41f3e4540c72096a83675cd6cc  gcc/testsuite/gcc.dg/vect/pr122419.c
  e03974cf820416eaa10caff64b08ab41  gcc/testsuite/gcc.dg/vect/pr122475.c
  d5fa86813a9f054c9df50e4e05d5fbc3  gcc/testsuite/gcc.dg/vect/pr122680.c
! d2b36be7e59029cef1dd2fecf866de62  gcc/testsuite/gcc.dg/vect/pr122797.c
  72763d9273f88d0ae6d2adb1c7239efb  gcc/testsuite/gcc.dg/vect/pr122850.c
  ae7dd7b535828dd877ea453ce08b1b4b  gcc/testsuite/gcc.dg/vect/pr122855.c
  13a0e19b576c184d6a3d2a5e046b1d77  gcc/testsuite/gcc.dg/vect/pr122969.c
--- 68552,68558 ----
  98753a41f3e4540c72096a83675cd6cc  gcc/testsuite/gcc.dg/vect/pr122419.c
  e03974cf820416eaa10caff64b08ab41  gcc/testsuite/gcc.dg/vect/pr122475.c
  d5fa86813a9f054c9df50e4e05d5fbc3  gcc/testsuite/gcc.dg/vect/pr122680.c
! 35a292a6ef4d2b9301952935195044cd  gcc/testsuite/gcc.dg/vect/pr122797.c
  72763d9273f88d0ae6d2adb1c7239efb  gcc/testsuite/gcc.dg/vect/pr122850.c
  ae7dd7b535828dd877ea453ce08b1b4b  gcc/testsuite/gcc.dg/vect/pr122855.c
  13a0e19b576c184d6a3d2a5e046b1d77  gcc/testsuite/gcc.dg/vect/pr122969.c
*************** ae7dd7b535828dd877ea453ce08b1b4b  gcc/te
*** 68520,68526 ****
  1a89666cdf0f2352dc6a3b60a35d5526  gcc/testsuite/gcc.dg/vect/pr123038.c
  2838d9516eba265f0e0975f689ddd518  gcc/testsuite/gcc.dg/vect/pr123043.c
  17c5c38b2c03547dce34b548af8a2143  gcc/testsuite/gcc.dg/vect/pr123525.c
! 86e3be2c542c86cb2ddd62c5080014e5  gcc/testsuite/gcc.dg/vect/pr123731.c
  d5aa71d5c3c97ae8aba5aa2049a772e3  gcc/testsuite/gcc.dg/vect/pr125509.c
  6b35a64fcd03aca31a961f3e840b2ab4  gcc/testsuite/gcc.dg/vect/pr125567.c
  9345816cef1a19c03845e78efc0fb484  gcc/testsuite/gcc.dg/vect/pr125646.c
--- 68560,68566 ----
  1a89666cdf0f2352dc6a3b60a35d5526  gcc/testsuite/gcc.dg/vect/pr123038.c
  2838d9516eba265f0e0975f689ddd518  gcc/testsuite/gcc.dg/vect/pr123043.c
  17c5c38b2c03547dce34b548af8a2143  gcc/testsuite/gcc.dg/vect/pr123525.c
! 3d73d426277ccf87e30878a6804c93e3  gcc/testsuite/gcc.dg/vect/pr123731.c
  d5aa71d5c3c97ae8aba5aa2049a772e3  gcc/testsuite/gcc.dg/vect/pr125509.c
  6b35a64fcd03aca31a961f3e840b2ab4  gcc/testsuite/gcc.dg/vect/pr125567.c
  9345816cef1a19c03845e78efc0fb484  gcc/testsuite/gcc.dg/vect/pr125646.c
*************** da160a8349fe2e0daa932c3bd967f635  gcc/te
*** 69910,69915 ****
--- 69950,69957 ----
  090aafcb956b616f328a80c7570602a2  gcc/testsuite/gcc.dg/vect/vect-pr126159-2.c
  6f15db608de3b3df52942cc35f7e39b8  gcc/testsuite/gcc.dg/vect/vect-pr126404.c
  af2363c3657a936b2857b789e9845648  gcc/testsuite/gcc.dg/vect/vect-pr126457.c
+ b85486191b62caad7436b96688f9fe0e  gcc/testsuite/gcc.dg/vect/vect-pr126984.c
+ 00ebf3e67f5825007e443e836131a84c  gcc/testsuite/gcc.dg/vect/vect-pr127105.c
  464c872c62ad2fc5d241ed918e0cf5de  gcc/testsuite/gcc.dg/vect/vect-pr61247.c
  4d57df9e3b3522c9f1a6707c05f1da45  gcc/testsuite/gcc.dg/vect/vect-pr69848.c
  3a3a316ff2f2496494ecb0bd77d61aad  gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
*************** a79cc962357cf4f42a44efad158b03e6  gcc/te
*** 69985,69990 ****
--- 70027,70033 ----
  8593f0a78707f2d870196d3db8601bb9  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-7.c
  b6aeb022dde69e8ffe448352fd61d3bd  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-8.c
  7f56c49d37576baac4d44a6bd6013359  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c
+ 1d9e16a1ebdac3b787e3700f709cf8d9  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-pr126998.c
  3268b824b4f5acf39f6e18089d435db1  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16a.c
  4ac381c0ce01711ae42fa052dd047242  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16b.c
  3f79364b1434591b07c839635489cfd3  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16c.c
*************** ef4ea7d4216e9123244c1d14e75ca376  gcc/te
*** 70478,70483 ****
--- 70521,70527 ----
  4f8d055b663cb38e2bbb352f1cb7a53c  gcc/testsuite/gcc.dg/webizer.c
  b73fb0ba5d6e226781f1b052bc3742c5  gcc/testsuite/gcc.dg/wide-shift-128.c
  81a04bf47a86380caff11ddcb8294ecc  gcc/testsuite/gcc.dg/wide-shift-64.c
+ 45a96df781074519b057f6471640d6fc  gcc/testsuite/gcc.dg/widening-mul-conv-1.c
  c6a61511e6fb0917ffba55a76df61339  gcc/testsuite/gcc.dg/winline-1.c
  88e7f66c0121a205fddceb24c550fcec  gcc/testsuite/gcc.dg/winline-10.c
  a15fd6e57876c1630526049305bb1218  gcc/testsuite/gcc.dg/winline-2.c
*************** d578e201f80bef3bb20982775c575c47  gcc/te
*** 71667,71673 ****
  c598927685f903d2e9196018682bd563  gcc/testsuite/gcc.target/aarch64/callee_save_1.c
  73e8b9e5dce3ab4df5c539f6e68b0bd9  gcc/testsuite/gcc.target/aarch64/callee_save_2.c
  533f31b4725cf89fff2231fffe52b47b  gcc/testsuite/gcc.target/aarch64/callee_save_3.c
! 17bf06a4a3e5b8e0afd594e9f9efeb59  gcc/testsuite/gcc.target/aarch64/ccmp_1.c
  c944449cf5b356cfed6ac847f005db22  gcc/testsuite/gcc.target/aarch64/ccmp_2.c
  241d8ea25e2bb3fe6d39fe6f2201baf9  gcc/testsuite/gcc.target/aarch64/ccmp_3.c
  f19dc69c0aeda4c531ac93459c18637a  gcc/testsuite/gcc.target/aarch64/ccmp_4.c
--- 71711,71717 ----
  c598927685f903d2e9196018682bd563  gcc/testsuite/gcc.target/aarch64/callee_save_1.c
  73e8b9e5dce3ab4df5c539f6e68b0bd9  gcc/testsuite/gcc.target/aarch64/callee_save_2.c
  533f31b4725cf89fff2231fffe52b47b  gcc/testsuite/gcc.target/aarch64/callee_save_3.c
! 164a1a352afd5851f594094307358619  gcc/testsuite/gcc.target/aarch64/ccmp_1.c
  c944449cf5b356cfed6ac847f005db22  gcc/testsuite/gcc.target/aarch64/ccmp_2.c
  241d8ea25e2bb3fe6d39fe6f2201baf9  gcc/testsuite/gcc.target/aarch64/ccmp_3.c
  f19dc69c0aeda4c531ac93459c18637a  gcc/testsuite/gcc.target/aarch64/ccmp_4.c
*************** e86e43bc31e3b3d5ab3e88654009eef6  gcc/te
*** 71813,71818 ****
--- 71857,71863 ----
  a403728f848d92645dc2ca0776024d18  gcc/testsuite/gcc.target/aarch64/crc-crc32c-data16.c
  73b2f59e9c7eb35d01e8d5561ff56fee  gcc/testsuite/gcc.target/aarch64/crc-crc32c-data32.c
  e6a5a51c3643725f1b7e50d5ed0f283e  gcc/testsuite/gcc.target/aarch64/crc-crc32c-data8.c
+ 2e072f6fd3bc3205d9fb61326d26375d  gcc/testsuite/gcc.target/aarch64/crc32-zero.c
  f60e193f97909df16be53255aff6b126  gcc/testsuite/gcc.target/aarch64/crypto-alias-1.c
  ca0b70d3beab5754521910788949af95  gcc/testsuite/gcc.target/aarch64/csel-1.c
  ee34e8a0f6cd0fc71146a43e9432db5a  gcc/testsuite/gcc.target/aarch64/csel-neg-1.c
*************** e97b955f204e1a0d3642543b55763bb6  gcc/te
*** 71882,71887 ****
--- 71927,71938 ----
  e81304c89391c1aada178179ec2fbdca  gcc/testsuite/gcc.target/aarch64/f16_movs_1.c
  00e6e92ff613394f0a74acad3a55eb46  gcc/testsuite/gcc.target/aarch64/fabd.c
  aa99270f5a066f6f9f04bf9022c9f496  gcc/testsuite/gcc.target/aarch64/facg_1.c
+ 575cbae8a82079565f8c4b577177f466  gcc/testsuite/gcc.target/aarch64/fccmp-trap-1.c
+ 5613cd7e9d7ff8cb29f05bd5df024f38  gcc/testsuite/gcc.target/aarch64/fccmp-trap-2.c
+ 1672dd8e0a8d2de2c8277b53cb40ce38  gcc/testsuite/gcc.target/aarch64/fccmp-trap-3.c
+ 3135423b147462d5ad4d93105941e5e9  gcc/testsuite/gcc.target/aarch64/fccmp_1.c
+ acbd9856791cd63348ce92f982419e78  gcc/testsuite/gcc.target/aarch64/fccmp_2.c
+ d3cbbd7e080218effdcaab36b863861b  gcc/testsuite/gcc.target/aarch64/fccmp_3.c
  49ec90613c7d01f51b54ae0134ad9626  gcc/testsuite/gcc.target/aarch64/fcsel_1.c
  21b6229f5dc2c7385cfe7155dd182c43  gcc/testsuite/gcc.target/aarch64/fcvt.x
  23f3739e5016b29009e15024c1d116e9  gcc/testsuite/gcc.target/aarch64/fcvt_double_int.c
*************** e5f446ee7a8bf59f8a69767e708fbfb0  gcc/te
*** 72477,72482 ****
--- 72528,72535 ----
  c3d44b74cbd361a863813180478ad6c8  gcc/testsuite/gcc.target/aarch64/pr100075.c
  235c9a78e795ca8f27271070cefb4558  gcc/testsuite/gcc.target/aarch64/pr100518.c
  90ff787e2854382a010cb41d41d74b65  gcc/testsuite/gcc.target/aarch64/pr102008.c
+ bafb516e5fcd08d608b28c88d370f868  gcc/testsuite/gcc.target/aarch64/pr102055-loop.c
+ 96b884c9db5f48243b787f6572e000f6  gcc/testsuite/gcc.target/aarch64/pr102055.c
  2b4e17d3d8fabfd5192210873467463b  gcc/testsuite/gcc.target/aarch64/pr102376.c
  8f357d4ccc6a0a50914dfbcfa3ad7dec  gcc/testsuite/gcc.target/aarch64/pr103085.c
  46d6ff3fd00506e5bdc9c04d3d444c4e  gcc/testsuite/gcc.target/aarch64/pr103094.c
*************** c1b669eba35fd9ddf0fc4ad45466f77e  gcc/te
*** 72644,72649 ****
--- 72697,72703 ----
  e34fa368dd9500596d5b5ac83a80e7a9  gcc/testsuite/gcc.target/aarch64/pr126592.c
  09207d3233f7f2b1a419f53f7616481f  gcc/testsuite/gcc.target/aarch64/pr126593.c
  5a3f97eae040588308e8e2288c9392bf  gcc/testsuite/gcc.target/aarch64/pr126597.c
+ efb992cc4289bd10243fa9c359fb84cb  gcc/testsuite/gcc.target/aarch64/pr127056.c
  9adb42733d9f5e2b1f2dbb364b62100d  gcc/testsuite/gcc.target/aarch64/pr37780_1.c
  e668fb9e0d32efadd671247467dc90db  gcc/testsuite/gcc.target/aarch64/pr58460.c
  9023f817c07ddec673c5b546525fc184  gcc/testsuite/gcc.target/aarch64/pr60034.c
*************** b28ad75ae030029f6a891f12b81c0ebf  gcc/te
*** 72675,72681 ****
  065e6ab62eb109b24a2126e76d2447a1  gcc/testsuite/gcc.target/aarch64/pr69245_2.c
  029e51f05456a28a597add4730ec77aa  gcc/testsuite/gcc.target/aarch64/pr70044.c
  9357327a0e7073dde1ca415f103c86f2  gcc/testsuite/gcc.target/aarch64/pr70120-1.c
! bb6ce7a591647d506bc7a6dc956d2160  gcc/testsuite/gcc.target/aarch64/pr70120-2.c
  61ea50a51a3ed94b38acd7cd026cd077  gcc/testsuite/gcc.target/aarch64/pr70120-3.c
  a5a030e82205f8d9b2799618b27cc294  gcc/testsuite/gcc.target/aarch64/pr70398.c
  e7efe396ef16dbc7526785247ead6d84  gcc/testsuite/gcc.target/aarch64/pr70809_1.c
--- 72729,72735 ----
  065e6ab62eb109b24a2126e76d2447a1  gcc/testsuite/gcc.target/aarch64/pr69245_2.c
  029e51f05456a28a597add4730ec77aa  gcc/testsuite/gcc.target/aarch64/pr70044.c
  9357327a0e7073dde1ca415f103c86f2  gcc/testsuite/gcc.target/aarch64/pr70120-1.c
! 3a1b7560071f730f3fc2c486b9b34fdc  gcc/testsuite/gcc.target/aarch64/pr70120-2.c
  61ea50a51a3ed94b38acd7cd026cd077  gcc/testsuite/gcc.target/aarch64/pr70120-3.c
  a5a030e82205f8d9b2799618b27cc294  gcc/testsuite/gcc.target/aarch64/pr70398.c
  e7efe396ef16dbc7526785247ead6d84  gcc/testsuite/gcc.target/aarch64/pr70809_1.c
*************** e7efe396ef16dbc7526785247ead6d84  gcc/te
*** 72683,72693 ****
  4aa462ffa5914a7dd8ae0a2383731a49  gcc/testsuite/gcc.target/aarch64/pr71727-2.c
  667cc3acb7d77f45c25c6b9fa1a9ffcb  gcc/testsuite/gcc.target/aarch64/pr71727.c
  c8c052e3ffb361fbe4b0043b1414c58b  gcc/testsuite/gcc.target/aarch64/pr78038.c
! ed6579d962ab6988afc3e526e6c51275  gcc/testsuite/gcc.target/aarch64/pr78255.c
  f9f37ccfc032535c8079deb6b916aca7  gcc/testsuite/gcc.target/aarch64/pr78382.c
! 15de7f015106f4b337262f146247f86f  gcc/testsuite/gcc.target/aarch64/pr78561.c
! 0e650c278656cb2d6496aa147dda2e3e  gcc/testsuite/gcc.target/aarch64/pr78733.c
! 0e650c278656cb2d6496aa147dda2e3e  gcc/testsuite/gcc.target/aarch64/pr79041-2.c
  1074b04062fdbdecea7da7cc9a58423f  gcc/testsuite/gcc.target/aarch64/pr79794.c
  92bec76ed657f6f19ba682ebc8b5b343  gcc/testsuite/gcc.target/aarch64/pr80295.c
  105bb65b036f134453135d5817cd946c  gcc/testsuite/gcc.target/aarch64/pr81356.c
--- 72737,72747 ----
  4aa462ffa5914a7dd8ae0a2383731a49  gcc/testsuite/gcc.target/aarch64/pr71727-2.c
  667cc3acb7d77f45c25c6b9fa1a9ffcb  gcc/testsuite/gcc.target/aarch64/pr71727.c
  c8c052e3ffb361fbe4b0043b1414c58b  gcc/testsuite/gcc.target/aarch64/pr78038.c
! 2c66d1fa98ef482f8ecb3b1522f8799b  gcc/testsuite/gcc.target/aarch64/pr78255.c
  f9f37ccfc032535c8079deb6b916aca7  gcc/testsuite/gcc.target/aarch64/pr78382.c
! 078ab6a4bced436526a5ea06c54cf727  gcc/testsuite/gcc.target/aarch64/pr78561.c
! 2053c1250620cc8043297ce5d9979c97  gcc/testsuite/gcc.target/aarch64/pr78733.c
! 2053c1250620cc8043297ce5d9979c97  gcc/testsuite/gcc.target/aarch64/pr79041-2.c
  1074b04062fdbdecea7da7cc9a58423f  gcc/testsuite/gcc.target/aarch64/pr79794.c
  92bec76ed657f6f19ba682ebc8b5b343  gcc/testsuite/gcc.target/aarch64/pr80295.c
  105bb65b036f134453135d5817cd946c  gcc/testsuite/gcc.target/aarch64/pr81356.c
*************** a9e3fa9bf042d9c1c357a23c16f6b387  gcc/te
*** 72719,72725 ****
  9cfb3b160866ec3ddc9bc343efa6b2e8  gcc/testsuite/gcc.target/aarch64/pr94398.c
  d89f585a7ccbac10cff70c726d0dea2b  gcc/testsuite/gcc.target/aarch64/pr94435.c
  8d8f9b6336f8a3c7534960e50ea4d681  gcc/testsuite/gcc.target/aarch64/pr94514.c
! b8ad993fc1a2369e7ec58fd00adae7ca  gcc/testsuite/gcc.target/aarch64/pr94530.c
  d02361d46d457c69092b5b6779dc7a8f  gcc/testsuite/gcc.target/aarch64/pr94577.c
  1366814bb1b0d8bfd71ff640bd30b0df  gcc/testsuite/gcc.target/aarch64/pr94697.c
  c6eebf3e7952e61593d0c0e9db4a9363  gcc/testsuite/gcc.target/aarch64/pr94748.c
--- 72773,72779 ----
  9cfb3b160866ec3ddc9bc343efa6b2e8  gcc/testsuite/gcc.target/aarch64/pr94398.c
  d89f585a7ccbac10cff70c726d0dea2b  gcc/testsuite/gcc.target/aarch64/pr94435.c
  8d8f9b6336f8a3c7534960e50ea4d681  gcc/testsuite/gcc.target/aarch64/pr94514.c
! 2394b2c39e134fc8927e208ec8c92448  gcc/testsuite/gcc.target/aarch64/pr94530.c
  d02361d46d457c69092b5b6779dc7a8f  gcc/testsuite/gcc.target/aarch64/pr94577.c
  1366814bb1b0d8bfd71ff640bd30b0df  gcc/testsuite/gcc.target/aarch64/pr94697.c
  c6eebf3e7952e61593d0c0e9db4a9363  gcc/testsuite/gcc.target/aarch64/pr94748.c
*************** d0bcbc3d9ff4ecc6817a33d0d9f3aed3  gcc/te
*** 72768,72774 ****
  74688db113854841ef6e7ea639b44f4c  gcc/testsuite/gcc.target/aarch64/reg-alloc-2.c
  d6af8901d4df3dbbd85fb4a872ad6e99  gcc/testsuite/gcc.target/aarch64/reg-alloc-3.c
  0ab15f2e56392789e6c87021dce0be6f  gcc/testsuite/gcc.target/aarch64/reg-alloc-4.c
! c27a4c6f9c9e7aee309e6f023d713539  gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
  12027036f3324e61c799dd687707f327  gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c
  3a6d132840352f3644dba08c59522fcb  gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c
  b9524ac9c94a04e98f82c9c679c0b715  gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c
--- 72822,72828 ----
  74688db113854841ef6e7ea639b44f4c  gcc/testsuite/gcc.target/aarch64/reg-alloc-2.c
  d6af8901d4df3dbbd85fb4a872ad6e99  gcc/testsuite/gcc.target/aarch64/reg-alloc-3.c
  0ab15f2e56392789e6c87021dce0be6f  gcc/testsuite/gcc.target/aarch64/reg-alloc-4.c
! 090a574c84d68dd5e1f146cc93a5067f  gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
  12027036f3324e61c799dd687707f327  gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c
  3a6d132840352f3644dba08c59522fcb  gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c
  b9524ac9c94a04e98f82c9c679c0b715  gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c
*************** dd1e6bbf22f1b03feb2bfdbae38cab23  gcc/te
*** 78194,78199 ****
--- 78248,78257 ----
  5fb0645895263b97a1ef977e87ab3ff5  gcc/testsuite/gcc.target/aarch64/sve/vcond_8_run.c
  25b09859bd2413aed4599c5bc133578a  gcc/testsuite/gcc.target/aarch64/sve/vcond_9.c
  8e3bca719c354c3d01d4730b1a3ddc45  gcc/testsuite/gcc.target/aarch64/sve/vcond_9_run.c
+ 13e1fccec58280f5ac5da4b914a7bd01  gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-dup-1.c
+ 3b43752deb6971120e070a558750875f  gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-pattern-1.c
+ b70386e3a5751f86dfb73d8e4430be25  gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-snan-1.c
+ a7669417ea992ed729762e2705f27fd7  gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-uniform-1.c
  c0dc3b5582c5b7a3a6e420b9369201de  gcc/testsuite/gcc.target/aarch64/sve/vec_bool_cmp_1.c
  ad03609f7c5910d8e0ee4d989acbb564  gcc/testsuite/gcc.target/aarch64/sve/vec_bool_cmp_1_run.c
  7c6bdd35d49a882397ffe44d64984649  gcc/testsuite/gcc.target/aarch64/sve/vec_construct_1.c
*************** d807c78d9b80a1f49bc50cb0cae86706  gcc/te
*** 79956,79962 ****
  ba34d67f4c6f36f6b5dc39f0c28dcd45  gcc/testsuite/gcc.target/aarch64/sve2/zipq_1.c
  17262018079c9e93fbde6be04318f416  gcc/testsuite/gcc.target/aarch64/sve2/zipq_1_run.c
  7edd975b42fef37f221ec76013222098  gcc/testsuite/gcc.target/aarch64/swar_to_vec_cmp.c
! c1ccdcf1821a2a9f689561bfc74f48dc  gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
  b10293e89ee2df8eb55e37a5c18f3bd5  gcc/testsuite/gcc.target/aarch64/symbol-range.c
  d707fbbaf0d37436be7ea3b6ac3b81d7  gcc/testsuite/gcc.target/aarch64/sync-comp-swap-ool.c
  c210c6b6344e5119de7869315aefba48  gcc/testsuite/gcc.target/aarch64/sync-comp-swap.c
--- 80014,80020 ----
  ba34d67f4c6f36f6b5dc39f0c28dcd45  gcc/testsuite/gcc.target/aarch64/sve2/zipq_1.c
  17262018079c9e93fbde6be04318f416  gcc/testsuite/gcc.target/aarch64/sve2/zipq_1_run.c
  7edd975b42fef37f221ec76013222098  gcc/testsuite/gcc.target/aarch64/swar_to_vec_cmp.c
! ccc997a22b5785af588757ed8dc52890  gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
  b10293e89ee2df8eb55e37a5c18f3bd5  gcc/testsuite/gcc.target/aarch64/symbol-range.c
  d707fbbaf0d37436be7ea3b6ac3b81d7  gcc/testsuite/gcc.target/aarch64/sync-comp-swap-ool.c
  c210c6b6344e5119de7869315aefba48  gcc/testsuite/gcc.target/aarch64/sync-comp-swap.c
*************** a4115657ce208875caf4b39537d8f830  gcc/te
*** 80146,80151 ****
--- 80204,80210 ----
  86a847e5bf1fb5499432a6b5ad8911b4  gcc/testsuite/gcc.target/aarch64/vec-init-single-const-2.c
  94984b8886aab5d70d86c49c090fc10a  gcc/testsuite/gcc.target/aarch64/vec-init-single-const-be.c
  96c3d8151cec83da572adb52b5e4a648  gcc/testsuite/gcc.target/aarch64/vec-init-single-const.c
+ cc955b616a09ed2b900269e9f7f62e5e  gcc/testsuite/gcc.target/aarch64/vec-reduc-fmax-const-1.c
  c04188bb2b4a3589f00728d8e90d679f  gcc/testsuite/gcc.target/aarch64/vec-rot-exec.c
  f66a2dc11214cc437d96ec038cc0e85e  gcc/testsuite/gcc.target/aarch64/vec-set-zero.c
  b1c97e59631c205f913afab4e1ffde4a  gcc/testsuite/gcc.target/aarch64/vec_init_1.c
*************** ecd667d7ea25421b8101e2e8b25db455  gcc/te
*** 80358,80363 ****
--- 80417,80423 ----
  49a7ccfc7a8a3718a4b889282509f102  gcc/testsuite/gcc.target/alpha/asm-1.c
  72088d2975371a0383b6fa19c63a6ee4  gcc/testsuite/gcc.target/alpha/base-1.c
  30eb8e336f805cd7917f692c7aef8a9d  gcc/testsuite/gcc.target/alpha/cix-1.c
+ a9b772e437a3cb4cd1f5cb21e82fdc13  gcc/testsuite/gcc.target/alpha/frame-address-1.c
  a4b3895f56f571c896a9ae9b42d3d392  gcc/testsuite/gcc.target/alpha/frame-pointer-save-1.c
  c4eec60b3306ebc857f91dd9f92ff8fe  gcc/testsuite/gcc.target/alpha/max-1.c
  f4fb909d003bd5e874c195605f19c018  gcc/testsuite/gcc.target/alpha/memclr-a2-o1-c9-ptr-safe-partial.c
*************** e8114bf07057af87112369eea1796416  gcc/te
*** 80399,80404 ****
--- 80459,80465 ----
  cd838883196ae3723e8870c164f580d5  gcc/testsuite/gcc.target/alpha/pr83628-3.c
  7a9cc9a72c18ab7bbc675f1842a795cb  gcc/testsuite/gcc.target/alpha/pr86984.c
  fa0cbdad50252fc3351fccb792af2a36  gcc/testsuite/gcc.target/alpha/sqrt.c
+ 77b173237b4d6987f77a72d09300d16e  gcc/testsuite/gcc.target/alpha/stack-protector-1.c
  91c85c19e67417a35461c1be33f5747c  gcc/testsuite/gcc.target/alpha/stb-bwa.c
  ff343bf007441d7ac31c47508ffb7674  gcc/testsuite/gcc.target/alpha/stb-bwx.c
  dd31ba3fbb34719d0b0fae5b8e334941  gcc/testsuite/gcc.target/alpha/stb.c
*************** ebf2040b6c2e8ae5fd470d0d30d1f872  gcc/te
*** 80439,80444 ****
--- 80500,80506 ----
  8550a5b3c29ea1cc0e30bfe4a78741f9  gcc/testsuite/gcc.target/alpha/target-max-4.c
  bd154c8b7d7b609589acc5fe193348a9  gcc/testsuite/gcc.target/alpha/tlsgd-dup-1.c
  a4897d05e63a17e85b7de11a3325b5ae  gcc/testsuite/gcc.target/alpha/trunctfsf2-1.c
+ 335fed8685a645b6897bfc51cddada69  gcc/testsuite/gcc.target/alpha/unaligned-big-frame.c
  96315e3201d2fa31fb4cbdf30fb2ba4d  gcc/testsuite/gcc.target/arc/abitest.S
  a125f0012bfc0fdad155c9b9bcc0f009  gcc/testsuite/gcc.target/arc/abitest.h
  de6da4a52a0859ffa9a053a8c13e86cc  gcc/testsuite/gcc.target/arc/add_f-combine.c
*************** b4c1968ee63a61f92dc6808c44852bd9  gcc/te
*** 84627,84632 ****
--- 84689,84695 ----
  c8dee67a2567af17cd08c345a4ef3aea  gcc/testsuite/gcc.target/avr/pr122220.c
  abbae4b0f7390ccdb0c5394f5172173a  gcc/testsuite/gcc.target/avr/pr122222-sitod.c
  3bab20e720a24864ff16abcddb328b14  gcc/testsuite/gcc.target/avr/pr123583.c
+ 65f13fbc48100ed57042bbea5d3c0cf0  gcc/testsuite/gcc.target/avr/pr127031.c
  8d351de18b6ca99f76c43eaa14213d53  gcc/testsuite/gcc.target/avr/pr46779-1.c
  2887bd8c777e4696616590f0d60653b6  gcc/testsuite/gcc.target/avr/pr46779-2.c
  d92831f37e30237d1dc568f585e4c2c9  gcc/testsuite/gcc.target/avr/pr50739.c
*************** b5f3dac0a4aa3e456482d4b3162d64b6  gcc/te
*** 84770,84775 ****
--- 84833,84839 ----
  f5a1361523de0e3faf7dfdd815bbaedf  gcc/testsuite/gcc.target/avr/torture/pr125409-fx24-uur.c
  33205c0601ab01f0a0bb4fcfdc9bd796  gcc/testsuite/gcc.target/avr/torture/pr125409.h
  05f55291adecb6766031960a68688592  gcc/testsuite/gcc.target/avr/torture/pr127004.c
+ a191de98a42b86fd465aa24b4f900324  gcc/testsuite/gcc.target/avr/torture/pr127098.c
  42a74f28c740c9bd42dab79171f49a39  gcc/testsuite/gcc.target/avr/torture/pr39633.c
  8fb17af722ee890b7fa08b5610cdb80e  gcc/testsuite/gcc.target/avr/torture/pr41885.c
  70b849f57ecf42299230b99b7734dd2d  gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
*************** b1c00a7ddfee77205ad2ef00a4e0e094  gcc/te
*** 85199,85204 ****
--- 85263,85269 ----
  13bb951cd8fa603bfcd9410ef2934d90  gcc/testsuite/gcc.target/cris/asmreg-1.c
  cd4ab304971f895fd58f13ce450b0b01  gcc/testsuite/gcc.target/cris/biap-mul.c
  270adaf74fa16397a807cb2c1d43b11c  gcc/testsuite/gcc.target/cris/biap.c
+ bab6976e30a9b60f4c7381ab7c6cee79  gcc/testsuite/gcc.target/cris/btst-scc-1.c
  bbad42cbab80fb82cf59f6dcbddd39f2  gcc/testsuite/gcc.target/cris/builtin_bswap_v3.c
  da811515083d9ddf056500903ebb758b  gcc/testsuite/gcc.target/cris/builtin_bswap_v8.c
  1755c10821fb12742b14cd18621aeb8c  gcc/testsuite/gcc.target/cris/builtin_clz_v0.c
*************** ac94d44f6436117f85c7fee0f57bb69e  gcc/te
*** 85265,85270 ****
--- 85330,85345 ----
  d8c8b1ce3a4b37769ed85ccc3f38d44f  gcc/testsuite/gcc.target/cris/pr93372-9.c
  3d314ecc18a99e2b5bb66241cb3576d7  gcc/testsuite/gcc.target/cris/rld-legit1.c
  167ddc115a9368874024099f6cd878fc  gcc/testsuite/gcc.target/cris/rld-legit2.c
+ a279488c1df23645436b0814231e1568  gcc/testsuite/gcc.target/cris/swapnw_v3.c
+ b32cd9629baa0bb015108ab77acd1aec  gcc/testsuite/gcc.target/cris/swapnw_v8.c
+ 5a8cbac4292a860f626c3eb26097f913  gcc/testsuite/gcc.target/cris/swapnwb_v3.c
+ 3c09681f233a988a7dd301d16e701ede  gcc/testsuite/gcc.target/cris/swapnwb_v8.c
+ 0c5a26359d220b3487d0370e3caf9830  gcc/testsuite/gcc.target/cris/swapnwbr_v3.c
+ f8c63ce0ec66c392d0e38a1224ced873  gcc/testsuite/gcc.target/cris/swapnwbr_v8.c
+ 3251687889c1b996ae072a343a577de9  gcc/testsuite/gcc.target/cris/swapw_v3.c
+ 52871702955346697beebb09fbf0425b  gcc/testsuite/gcc.target/cris/swapw_v8.c
+ afa289225c63a3f1b77fa6866bdf8968  gcc/testsuite/gcc.target/cris/swapwbr_v3.c
+ 56fb07f422c2029a25d1faf63a2f022e  gcc/testsuite/gcc.target/cris/swapwbr_v8.c
  ea869a79da57cb841c5333cd120f0e6f  gcc/testsuite/gcc.target/cris/sync-1-v10.c
  7f3590b686ff172af3adbabfd5a084e7  gcc/testsuite/gcc.target/cris/sync-1.c
  057ba719f6c0d85a71617471ca814e84  gcc/testsuite/gcc.target/cris/sync-2c.c
*************** a1942f841fd2f6a8c62ff45bb98c8346  gcc/te
*** 85780,85798 ****
  9e8b8925bafe362fcf8ebd984ba486a3  gcc/testsuite/gcc.target/i386/apx-legacy-insn-check-norex2-asm.c
  0048c251e7a719f7b18c2f8a3c7defaf  gcc/testsuite/gcc.target/i386/apx-legacy-insn-check-norex2.c
  fc4c4391126114b2453f5c93481bf914  gcc/testsuite/gcc.target/i386/apx-ndd-2.c
! 7f8bc20ec8f18def15b87ad8d72b8edf  gcc/testsuite/gcc.target/i386/apx-ndd-adc.c
  f02238e467f2946d202f6d718be9db28  gcc/testsuite/gcc.target/i386/apx-ndd-base-index-1.c
  cada0f8a782f8acbce1e56dbe723fdd1  gcc/testsuite/gcc.target/i386/apx-ndd-cmov.c
  960ab354e033d407454cac5837a403c6  gcc/testsuite/gcc.target/i386/apx-ndd-mem-tune.c
  4e9e6b68850faa5f7d11d9ee9c827948  gcc/testsuite/gcc.target/i386/apx-ndd-no-seg-global-1.c
! af7a323d2943cf68087ba393f8306206  gcc/testsuite/gcc.target/i386/apx-ndd-sbb.c
  dc44128fffea608a1efc7355f7ec1a12  gcc/testsuite/gcc.target/i386/apx-ndd-seg-1.c
  c115469efb1006bea9c5b922c9d3f77a  gcc/testsuite/gcc.target/i386/apx-ndd-seg-2.c
  9752af50b256044659d6197ad0144135  gcc/testsuite/gcc.target/i386/apx-ndd-seg-3.c
  20fde25b67d83747a1a3d56edb583d2c  gcc/testsuite/gcc.target/i386/apx-ndd-seg-4.c
  093dd32852a9f9df1b81d85151dc47d7  gcc/testsuite/gcc.target/i386/apx-ndd-seg-5.c
  e6cf1f57117a327c2a8403e9bd727fce  gcc/testsuite/gcc.target/i386/apx-ndd-shld-shrd.c
! 72665232e4e20114192126c16383477e  gcc/testsuite/gcc.target/i386/apx-ndd-ti-shift.c
  a98fe0707c6ff1ebf16461739a1bd17f  gcc/testsuite/gcc.target/i386/apx-ndd-tls-1a.c
  080ff0969444b894aae0f8c08309fa89  gcc/testsuite/gcc.target/i386/apx-ndd-tls-1b.c
  21f61a37661bcb2d9262601db70b0300  gcc/testsuite/gcc.target/i386/apx-ndd-tls-2.c
--- 85855,85873 ----
  9e8b8925bafe362fcf8ebd984ba486a3  gcc/testsuite/gcc.target/i386/apx-legacy-insn-check-norex2-asm.c
  0048c251e7a719f7b18c2f8a3c7defaf  gcc/testsuite/gcc.target/i386/apx-legacy-insn-check-norex2.c
  fc4c4391126114b2453f5c93481bf914  gcc/testsuite/gcc.target/i386/apx-ndd-2.c
! b146b2884d6bce42ac90cfc12b66c8dd  gcc/testsuite/gcc.target/i386/apx-ndd-adc.c
  f02238e467f2946d202f6d718be9db28  gcc/testsuite/gcc.target/i386/apx-ndd-base-index-1.c
  cada0f8a782f8acbce1e56dbe723fdd1  gcc/testsuite/gcc.target/i386/apx-ndd-cmov.c
  960ab354e033d407454cac5837a403c6  gcc/testsuite/gcc.target/i386/apx-ndd-mem-tune.c
  4e9e6b68850faa5f7d11d9ee9c827948  gcc/testsuite/gcc.target/i386/apx-ndd-no-seg-global-1.c
! 8e0e21be35bd67d2458cf81e5187b439  gcc/testsuite/gcc.target/i386/apx-ndd-sbb.c
  dc44128fffea608a1efc7355f7ec1a12  gcc/testsuite/gcc.target/i386/apx-ndd-seg-1.c
  c115469efb1006bea9c5b922c9d3f77a  gcc/testsuite/gcc.target/i386/apx-ndd-seg-2.c
  9752af50b256044659d6197ad0144135  gcc/testsuite/gcc.target/i386/apx-ndd-seg-3.c
  20fde25b67d83747a1a3d56edb583d2c  gcc/testsuite/gcc.target/i386/apx-ndd-seg-4.c
  093dd32852a9f9df1b81d85151dc47d7  gcc/testsuite/gcc.target/i386/apx-ndd-seg-5.c
  e6cf1f57117a327c2a8403e9bd727fce  gcc/testsuite/gcc.target/i386/apx-ndd-shld-shrd.c
! 7942863da4b91559db00c4d405747ea7  gcc/testsuite/gcc.target/i386/apx-ndd-ti-shift.c
  a98fe0707c6ff1ebf16461739a1bd17f  gcc/testsuite/gcc.target/i386/apx-ndd-tls-1a.c
  080ff0969444b894aae0f8c08309fa89  gcc/testsuite/gcc.target/i386/apx-ndd-tls-1b.c
  21f61a37661bcb2d9262601db70b0300  gcc/testsuite/gcc.target/i386/apx-ndd-tls-2.c
*************** d492956a81debfaf73314310c70144c2  gcc/te
*** 85925,85941 ****
  76d6b702876a0992afab452caaf3dc29  gcc/testsuite/gcc.target/i386/avx-init-v2df-2.c
  81075c15eeac3a1bc1daa4e59f97c5e5  gcc/testsuite/gcc.target/i386/avx-init-v2di-1.c
  e571c1daf21e372402aa8fd026a0e7bf  gcc/testsuite/gcc.target/i386/avx-init-v2di-2.c
! 0f65c59cea2fa64ccc23238479c3ccd9  gcc/testsuite/gcc.target/i386/avx-init-v4sf-1.c
! 0d5baccdcd2d0f70870a9e487bfd3101  gcc/testsuite/gcc.target/i386/avx-init-v4sf-2.c
  76654b0bf59704da5121798e9b7fd74d  gcc/testsuite/gcc.target/i386/avx-init-v4si-1.c
  ab8e2e25d84eb4c4c10f883a5b098f55  gcc/testsuite/gcc.target/i386/avx-init-v8hi-1.c
  00da02db70f133be74dae17241af27eb  gcc/testsuite/gcc.target/i386/avx-inline.c
  6ce5bb66230471952f8d93ba742e9287  gcc/testsuite/gcc.target/i386/avx-int-covert-1.c
! bb988640d708e14bbba7f036d1d900dc  gcc/testsuite/gcc.target/i386/avx-loadu2-m128-1.c
  9b015dd71e4cc5b0c3ce5f45923f1124  gcc/testsuite/gcc.target/i386/avx-loadu2-m128-2.c
! 5ab72f17054521df29b8e40e0c3f91b0  gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-1.c
  f5710388bf6592fabf21f6aa05044790  gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-2.c
! 0ec5c0ccc15a7672b459a529ccb96446  gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-1.c
  62dcb1b3273a6b6b1c27912629c0295d  gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-2.c
  0573dc96587f464eab32fb45381cd9c3  gcc/testsuite/gcc.target/i386/avx-lrint-vec.c
  3391c9dd1dd0dbbac597a660fd5fb010  gcc/testsuite/gcc.target/i386/avx-lrintf-vec.c
--- 86000,86016 ----
  76d6b702876a0992afab452caaf3dc29  gcc/testsuite/gcc.target/i386/avx-init-v2df-2.c
  81075c15eeac3a1bc1daa4e59f97c5e5  gcc/testsuite/gcc.target/i386/avx-init-v2di-1.c
  e571c1daf21e372402aa8fd026a0e7bf  gcc/testsuite/gcc.target/i386/avx-init-v2di-2.c
! a12ed67be156150884ae552d22393b72  gcc/testsuite/gcc.target/i386/avx-init-v4sf-1.c
! 16cccd0e580bd5f6aa0d3535a6b60587  gcc/testsuite/gcc.target/i386/avx-init-v4sf-2.c
  76654b0bf59704da5121798e9b7fd74d  gcc/testsuite/gcc.target/i386/avx-init-v4si-1.c
  ab8e2e25d84eb4c4c10f883a5b098f55  gcc/testsuite/gcc.target/i386/avx-init-v8hi-1.c
  00da02db70f133be74dae17241af27eb  gcc/testsuite/gcc.target/i386/avx-inline.c
  6ce5bb66230471952f8d93ba742e9287  gcc/testsuite/gcc.target/i386/avx-int-covert-1.c
! 9cb9df891eb3c3976df1514832ef97bc  gcc/testsuite/gcc.target/i386/avx-loadu2-m128-1.c
  9b015dd71e4cc5b0c3ce5f45923f1124  gcc/testsuite/gcc.target/i386/avx-loadu2-m128-2.c
! 7d9b636ac1a7aa857111d82cc0d73dbe  gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-1.c
  f5710388bf6592fabf21f6aa05044790  gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-2.c
! 91cede769dd3187f6b4ac1cea1c45ceb  gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-1.c
  62dcb1b3273a6b6b1c27912629c0295d  gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-2.c
  0573dc96587f464eab32fb45381cd9c3  gcc/testsuite/gcc.target/i386/avx-lrint-vec.c
  3391c9dd1dd0dbbac597a660fd5fb010  gcc/testsuite/gcc.target/i386/avx-lrintf-vec.c
*************** f0863fb8f23bebdbacbfd59947bc3392  gcc/te
*** 86018,86028 ****
  a699792cdc6745e1e35a0300cf21d18a  gcc/testsuite/gcc.target/i386/avx-setzero-pd-256-1.c
  039ee0fd34a5184789b0feca6b1052fb  gcc/testsuite/gcc.target/i386/avx-setzero-ps-256-1.c
  fa5e50debd56b914e210f9d0925322c8  gcc/testsuite/gcc.target/i386/avx-setzero-si256-1.c
! cc308e03970fb41ca863bd4650d48891  gcc/testsuite/gcc.target/i386/avx-storeu2-m128-1.c
  7b898938b4f76648223b4a353c97fcbe  gcc/testsuite/gcc.target/i386/avx-storeu2-m128-2.c
! 4d025c387a98c9ed785e7ea1955ac475  gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-1.c
  e8d710d46bdf661036baf71569cbe9c1  gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-2.c
! 570aa066e18c1776bdf61d3205d1f367  gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-1.c
  b5791c3bc653f89c4744ca3acd8a64ef  gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-2.c
  1f52afbf19b1cd58a97490fac47be979  gcc/testsuite/gcc.target/i386/avx-stv-1.c
  d523b3f47fa58cc0883378457357193f  gcc/testsuite/gcc.target/i386/avx-trunc-vec.c
--- 86093,86103 ----
  a699792cdc6745e1e35a0300cf21d18a  gcc/testsuite/gcc.target/i386/avx-setzero-pd-256-1.c
  039ee0fd34a5184789b0feca6b1052fb  gcc/testsuite/gcc.target/i386/avx-setzero-ps-256-1.c
  fa5e50debd56b914e210f9d0925322c8  gcc/testsuite/gcc.target/i386/avx-setzero-si256-1.c
! 4b4781316b87491d91bb36dc421cf5ad  gcc/testsuite/gcc.target/i386/avx-storeu2-m128-1.c
  7b898938b4f76648223b4a353c97fcbe  gcc/testsuite/gcc.target/i386/avx-storeu2-m128-2.c
! 77cf8c1b9601c2a8168ca60af98f357c  gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-1.c
  e8d710d46bdf661036baf71569cbe9c1  gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-2.c
! 8ca3823a90d8fdcc3f4e1d14ff90e087  gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-1.c
  b5791c3bc653f89c4744ca3acd8a64ef  gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-2.c
  1f52afbf19b1cd58a97490fac47be979  gcc/testsuite/gcc.target/i386/avx-stv-1.c
  d523b3f47fa58cc0883378457357193f  gcc/testsuite/gcc.target/i386/avx-trunc-vec.c
*************** bdb1dbd34e41a723a3f7e19c6659fddd  gcc/te
*** 86779,86785 ****
  a1d47036a9ce365a559716be2cf89ec1  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-2.c
  84e6e6a5c3c2b77b0d28a411f41a0a26  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-3.c
  132568e07b06a6440e09bc976ef49452  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-4.c
! 79482eb6b23ee3cfdfee498671b5dd95  gcc/testsuite/gcc.target/i386/avx2-init-v4sf-1.c
  eed8c042327d65693753e7394bbb3219  gcc/testsuite/gcc.target/i386/avx2-init-v4si-1.c
  7741cccac7e40b320201a88c8f646e40  gcc/testsuite/gcc.target/i386/avx2-init-v4si-2.c
  9d7021f10aab16079c5f9602e594cd42  gcc/testsuite/gcc.target/i386/avx2-mpsadbw-1.c
--- 86854,86860 ----
  a1d47036a9ce365a559716be2cf89ec1  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-2.c
  84e6e6a5c3c2b77b0d28a411f41a0a26  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-3.c
  132568e07b06a6440e09bc976ef49452  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-4.c
! a14a01b9324e9a3f12fb21d0fbdf1ffe  gcc/testsuite/gcc.target/i386/avx2-init-v4sf-1.c
  eed8c042327d65693753e7394bbb3219  gcc/testsuite/gcc.target/i386/avx2-init-v4si-1.c
  7741cccac7e40b320201a88c8f646e40  gcc/testsuite/gcc.target/i386/avx2-init-v4si-2.c
  9d7021f10aab16079c5f9602e594cd42  gcc/testsuite/gcc.target/i386/avx2-mpsadbw-1.c
*************** ae6b05eb60ec60c92e6f0b3a7d4e3adf  gcc/te
*** 87230,87235 ****
--- 87305,87313 ----
  1bc03df9d4275e9b41e7f0e356b06088  gcc/testsuite/gcc.target/i386/avx512bitalgvl-vpopcntw-1.c
  687030be4c7de0df65d352c6e5e2741b  gcc/testsuite/gcc.target/i386/avx512bitalgvl-vpshufbitqmb-1.c
  6581ef9df6c5a4405444da740b69c52b  gcc/testsuite/gcc.target/i386/avx512bmm-1.c
+ a933b0ce906ff7d4e75ad8c944677499  gcc/testsuite/gcc.target/i386/avx512bmm-check-1.c
+ 16e6a9c741f7dfea79e3684fae4aceb2  gcc/testsuite/gcc.target/i386/avx512bmm-check-2.c
+ 5ae0735191844cbef4204caf6a81378d  gcc/testsuite/gcc.target/i386/avx512bmm-check-3.c
  cd81465cf03fcdafd419bd70419a61a9  gcc/testsuite/gcc.target/i386/avx512bmmvl-1.c
  34f70835661397c9f3bdb5572f6d8ce1  gcc/testsuite/gcc.target/i386/avx512bw-check.h
  2e4baf9c42678da5e49f8dcae5df06ec  gcc/testsuite/gcc.target/i386/avx512bw-extendbf2sf.c
*************** d2fddfa7bc1e37a2ad1ca1d7acb2872b  gcc/te
*** 91654,91660 ****
  732eb589da116456399d4986f2bbee2c  gcc/testsuite/gcc.target/i386/pr106746.c
  554ff25f596284886f56c2aaa02f626a  gcc/testsuite/gcc.target/i386/pr106748.c
  1ba09abc788e14765d429f80f97f5eee  gcc/testsuite/gcc.target/i386/pr106905.c
! bea78a92e53b000893295e176a668a68  gcc/testsuite/gcc.target/i386/pr106910-1.c
  0c9cf96197202ea56a56b353995f0f07  gcc/testsuite/gcc.target/i386/pr106933-1.c
  ae1d9a465c5a85bd604ce1465bcf1aa4  gcc/testsuite/gcc.target/i386/pr106933-2.c
  acf19b986d49be7e37d7e04397ccc58f  gcc/testsuite/gcc.target/i386/pr106959-1.c
--- 91732,91738 ----
  732eb589da116456399d4986f2bbee2c  gcc/testsuite/gcc.target/i386/pr106746.c
  554ff25f596284886f56c2aaa02f626a  gcc/testsuite/gcc.target/i386/pr106748.c
  1ba09abc788e14765d429f80f97f5eee  gcc/testsuite/gcc.target/i386/pr106905.c
! 0d36bc977b8b511385aae795f1f5a392  gcc/testsuite/gcc.target/i386/pr106910-1.c
  0c9cf96197202ea56a56b353995f0f07  gcc/testsuite/gcc.target/i386/pr106933-1.c
  ae1d9a465c5a85bd604ce1465bcf1aa4  gcc/testsuite/gcc.target/i386/pr106933-2.c
  acf19b986d49be7e37d7e04397ccc58f  gcc/testsuite/gcc.target/i386/pr106959-1.c
*************** ddb512c25f71170e25c3f5334dda428f  gcc/te
*** 92026,92033 ****
  9a294391b2e28707e1a33ce1d944df06  gcc/testsuite/gcc.target/i386/pr118713-9-x32.c
  a394dff414dbdd14f78e4cd8a7ec17d4  gcc/testsuite/gcc.target/i386/pr118713-9.c
  e12ace984bb5ee071207675ca43c7e58  gcc/testsuite/gcc.target/i386/pr118739.c
! 991b7f7f44e28179f98bb458fdb69ea6  gcc/testsuite/gcc.target/i386/pr11877-2.c
! e7f6a568e551d3786797d6f56294b949  gcc/testsuite/gcc.target/i386/pr11877.c
  61d1a6c7aba6d7071f54e24b6dc92da7  gcc/testsuite/gcc.target/i386/pr118776.c
  b8172e9b0b80f9484c5df81036fc03af  gcc/testsuite/gcc.target/i386/pr118815.c
  0f3590e2e1a5ad51d95272730fbebe25  gcc/testsuite/gcc.target/i386/pr118936.c
--- 92104,92111 ----
  9a294391b2e28707e1a33ce1d944df06  gcc/testsuite/gcc.target/i386/pr118713-9-x32.c
  a394dff414dbdd14f78e4cd8a7ec17d4  gcc/testsuite/gcc.target/i386/pr118713-9.c
  e12ace984bb5ee071207675ca43c7e58  gcc/testsuite/gcc.target/i386/pr118739.c
! c1800c6a13d50d676f077594b85618a9  gcc/testsuite/gcc.target/i386/pr11877-2.c
! e0f076f6cb45a026000a38277ace20cb  gcc/testsuite/gcc.target/i386/pr11877.c
  61d1a6c7aba6d7071f54e24b6dc92da7  gcc/testsuite/gcc.target/i386/pr118776.c
  b8172e9b0b80f9484c5df81036fc03af  gcc/testsuite/gcc.target/i386/pr118815.c
  0f3590e2e1a5ad51d95272730fbebe25  gcc/testsuite/gcc.target/i386/pr118936.c
*************** d3fd8df69f54080b300d3fa63445f693  gcc/te
*** 92054,92059 ****
--- 92132,92138 ----
  499323eca85489bbeb8478e0a1c91241  gcc/testsuite/gcc.target/i386/pr120032-1.c
  8b7deb747f63c3654334325f025937b4  gcc/testsuite/gcc.target/i386/pr120032-2.c
  20bea83e4863880948ed90566766c909  gcc/testsuite/gcc.target/i386/pr120032-3.c
+ f43b7a903550350645251444db68c8b9  gcc/testsuite/gcc.target/i386/pr120192.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
*************** a7914bedf774cd238c5877b4c741b754  gcc/te
*** 92233,92239 ****
  1212d4cdb8cd4262def0965fb2ac0fad  gcc/testsuite/gcc.target/i386/pr125100-3.c
  e49515b6a30e4a6e5895e158edb8a0c5  gcc/testsuite/gcc.target/i386/pr125100-4.c
  2452d87d24cd7ed49934ad5aecd255e2  gcc/testsuite/gcc.target/i386/pr125180.c
! df76ec06f1f94b77cb1652a61b635dcd  gcc/testsuite/gcc.target/i386/pr125238.c
  02bcd898871c488722d8481d6020b391  gcc/testsuite/gcc.target/i386/pr125239.c
  014fb32893a5812986a3d672ecf6682d  gcc/testsuite/gcc.target/i386/pr125245.c
  83da3f12f4b2e9f51434bf8ad312884d  gcc/testsuite/gcc.target/i386/pr125308.c
--- 92312,92318 ----
  1212d4cdb8cd4262def0965fb2ac0fad  gcc/testsuite/gcc.target/i386/pr125100-3.c
  e49515b6a30e4a6e5895e158edb8a0c5  gcc/testsuite/gcc.target/i386/pr125100-4.c
  2452d87d24cd7ed49934ad5aecd255e2  gcc/testsuite/gcc.target/i386/pr125180.c
! 4681c56f02314dd4d9f47f25a138dbd9  gcc/testsuite/gcc.target/i386/pr125238.c
  02bcd898871c488722d8481d6020b391  gcc/testsuite/gcc.target/i386/pr125239.c
  014fb32893a5812986a3d672ecf6682d  gcc/testsuite/gcc.target/i386/pr125245.c
  83da3f12f4b2e9f51434bf8ad312884d  gcc/testsuite/gcc.target/i386/pr125308.c
*************** f2099bc106c1fca535c8b7e3e7dafb6c  gcc/te
*** 92248,92253 ****
--- 92327,92333 ----
  119c9e5ccf10666da36f1c6df132d21d  gcc/testsuite/gcc.target/i386/pr125436-4.c
  20e05cf993391a61cf15835793091a43  gcc/testsuite/gcc.target/i386/pr125614.c
  92ee0e508226594fb395b77e261e4345  gcc/testsuite/gcc.target/i386/pr125708-2.c
+ a821b32f84b96a374bf8b825367ac071  gcc/testsuite/gcc.target/i386/pr125746.c
  1f67cd0f9980b605cafe7d50af23cbf9  gcc/testsuite/gcc.target/i386/pr125883.c
  b74c2af473afb9b45ec43c61dc46e8e7  gcc/testsuite/gcc.target/i386/pr125893-1.c
  21d39d0f18706b517f71101ec469f85d  gcc/testsuite/gcc.target/i386/pr125893-10.c
*************** bc56c56148a2774047b7e4a9c116cda5  gcc/te
*** 92342,92347 ****
--- 92422,92429 ----
  c5b822cf883ad86dc871d35e2e74ea57  gcc/testsuite/gcc.target/i386/pr126959-1b.c
  b075578545d76a598ae1c07222bbaef7  gcc/testsuite/gcc.target/i386/pr126959-2a.c
  624e5b170a48a03957c0be78b4a598e4  gcc/testsuite/gcc.target/i386/pr126959-2b.c
+ d8a152bb2b01bccd6a656c09d99b15f1  gcc/testsuite/gcc.target/i386/pr127023.c
+ 9600020759d4edca1e0f24a261d03f54  gcc/testsuite/gcc.target/i386/pr127045.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
  31ead0ee84b382ba03e3561931bc6e40  gcc/testsuite/gcc.target/i386/pr14289-1.c
*************** d0b7fcf64dcc7eeb7b55de961f082c51  gcc/te
*** 92634,92640 ****
  80146b2e69256d2c47bb4044363cdca8  gcc/testsuite/gcc.target/i386/pr45500.c
  8449334fd0f8840e44063160dbb79bda  gcc/testsuite/gcc.target/i386/pr45617.c
  4e87c6a94af4398bcde091ef45a5335e  gcc/testsuite/gcc.target/i386/pr45670.c
! 4d22938323fc27ae22babb7090794660  gcc/testsuite/gcc.target/i386/pr45685.c
  5324945d68598822c0e748d9756dba9e  gcc/testsuite/gcc.target/i386/pr45739.c
  254b3ac4b7e5e3cbe45ab3c8234933d7  gcc/testsuite/gcc.target/i386/pr45830.c
  cf761d31404f19b45a1b3c1d823fe90f  gcc/testsuite/gcc.target/i386/pr45852.c
--- 92716,92722 ----
  80146b2e69256d2c47bb4044363cdca8  gcc/testsuite/gcc.target/i386/pr45500.c
  8449334fd0f8840e44063160dbb79bda  gcc/testsuite/gcc.target/i386/pr45617.c
  4e87c6a94af4398bcde091ef45a5335e  gcc/testsuite/gcc.target/i386/pr45670.c
! f520d45206ac27632e8cacf71cbd9b5c  gcc/testsuite/gcc.target/i386/pr45685.c
  5324945d68598822c0e748d9756dba9e  gcc/testsuite/gcc.target/i386/pr45739.c
  254b3ac4b7e5e3cbe45ab3c8234933d7  gcc/testsuite/gcc.target/i386/pr45830.c
  cf761d31404f19b45a1b3c1d823fe90f  gcc/testsuite/gcc.target/i386/pr45852.c
*************** f87405c6bc34723d3a6beec60ff1e327  gcc/te
*** 92697,92702 ****
--- 92779,92785 ----
  be400ddaa3be56c18065c4f1cb7c507a  gcc/testsuite/gcc.target/i386/pr48335-1.c
  3dfc1c2aadd0b2a9c8222b36204d9c89  gcc/testsuite/gcc.target/i386/pr48389.c
  b2e52d110baeb793e1257a2183b9b378  gcc/testsuite/gcc.target/i386/pr48609-2.c
+ a67372e4dccc54747fd91018ea9fe5b2  gcc/testsuite/gcc.target/i386/pr48609.c
  a0e8df751a0532abc2f56fae74b35ceb  gcc/testsuite/gcc.target/i386/pr48678.c
  962e6910e237be3f3f6321cb982ac739  gcc/testsuite/gcc.target/i386/pr48688.c
  2a341a4e00b9beab43e6507b79108513  gcc/testsuite/gcc.target/i386/pr48708.c
*************** bf2393d8cff61fcca6102e240816f68e  gcc/te
*** 93691,93697 ****
  266dc94dd0950d634bdb7aa431fb3cda  gcc/testsuite/gcc.target/i386/pr85819-3.c
  29b584fc0a33d2cf3a562f1486993c1c  gcc/testsuite/gcc.target/i386/pr85860.c
  dd2eb8b8e0da9871c78cecc6af291003  gcc/testsuite/gcc.target/i386/pr85934.c
! c19a9d9e41959574f6c21d72429137da  gcc/testsuite/gcc.target/i386/pr85950.c
  2360ffb748aff9fb6627cff8522f74d8  gcc/testsuite/gcc.target/i386/pr85984.c
  e68e510c245a1586dead99573f2e33d2  gcc/testsuite/gcc.target/i386/pr86048.c
  926130d343ce505b99901b7c06918b57  gcc/testsuite/gcc.target/i386/pr86194.c
--- 93774,93780 ----
  266dc94dd0950d634bdb7aa431fb3cda  gcc/testsuite/gcc.target/i386/pr85819-3.c
  29b584fc0a33d2cf3a562f1486993c1c  gcc/testsuite/gcc.target/i386/pr85860.c
  dd2eb8b8e0da9871c78cecc6af291003  gcc/testsuite/gcc.target/i386/pr85934.c
! ad2c28275aef5ed6b4de65e5b0e695df  gcc/testsuite/gcc.target/i386/pr85950.c
  2360ffb748aff9fb6627cff8522f74d8  gcc/testsuite/gcc.target/i386/pr85984.c
  e68e510c245a1586dead99573f2e33d2  gcc/testsuite/gcc.target/i386/pr86048.c
  926130d343ce505b99901b7c06918b57  gcc/testsuite/gcc.target/i386/pr86194.c
*************** d9b72f271f61a1292d8be12ea7a23b54  gcc/te
*** 93834,93841 ****
  3672969c19203520cc6589315eed1976  gcc/testsuite/gcc.target/i386/pr89386-1.c
  d3a8987a5abf21a54d239ef42d6de91f  gcc/testsuite/gcc.target/i386/pr89386.c
  e1a2182c13ba381247eae97c6ab0c494  gcc/testsuite/gcc.target/i386/pr89474.c
! 741d1c44cbb9ba8dfdfc363a84b46d20  gcc/testsuite/gcc.target/i386/pr89523-1a.c
! bcb8ff722b8b594bcfd9075d37eaff6f  gcc/testsuite/gcc.target/i386/pr89523-1b.c
  1a7b71dea5f1b81b4c20d53bd27d1604  gcc/testsuite/gcc.target/i386/pr89523-2.c
  c477d7333d280aa9ba0232f363826175  gcc/testsuite/gcc.target/i386/pr89523-3.c
  37d95d0f23ac1bfc04510b1a7b4a0ed7  gcc/testsuite/gcc.target/i386/pr89523-4.c
--- 93917,93924 ----
  3672969c19203520cc6589315eed1976  gcc/testsuite/gcc.target/i386/pr89386-1.c
  d3a8987a5abf21a54d239ef42d6de91f  gcc/testsuite/gcc.target/i386/pr89386.c
  e1a2182c13ba381247eae97c6ab0c494  gcc/testsuite/gcc.target/i386/pr89474.c
! 3c839bea3d55c454fb7a8f8919756423  gcc/testsuite/gcc.target/i386/pr89523-1a.c
! 81b5e0ac5d0abd63b40ece16a984649c  gcc/testsuite/gcc.target/i386/pr89523-1b.c
  1a7b71dea5f1b81b4c20d53bd27d1604  gcc/testsuite/gcc.target/i386/pr89523-2.c
  c477d7333d280aa9ba0232f363826175  gcc/testsuite/gcc.target/i386/pr89523-3.c
  37d95d0f23ac1bfc04510b1a7b4a0ed7  gcc/testsuite/gcc.target/i386/pr89523-4.c
*************** fd5403ac26bbe83c4c9a50fff34fd61f  gcc/te
*** 93991,93997 ****
  5f53809106eb4f515eef2f02170d4add  gcc/testsuite/gcc.target/i386/pr92645-6.c
  c689d7bd208a6bbb908ec089abdd00ef  gcc/testsuite/gcc.target/i386/pr92645-7.c
  3982c7bc8cfe7849b34d333c7e3b2b20  gcc/testsuite/gcc.target/i386/pr92645.c
! 6c6abd7fc9af36fe781df4cf2ef54a16  gcc/testsuite/gcc.target/i386/pr92651.c
  6b30805bc47b76314701de39182024c7  gcc/testsuite/gcc.target/i386/pr92658-avx2-2.c
  2d1dbf18bcc052068a31667f01a26b12  gcc/testsuite/gcc.target/i386/pr92658-avx2.c
  a6d944350614d95163bf09072cee89ea  gcc/testsuite/gcc.target/i386/pr92658-avx512bw-2.c
--- 94074,94080 ----
  5f53809106eb4f515eef2f02170d4add  gcc/testsuite/gcc.target/i386/pr92645-6.c
  c689d7bd208a6bbb908ec089abdd00ef  gcc/testsuite/gcc.target/i386/pr92645-7.c
  3982c7bc8cfe7849b34d333c7e3b2b20  gcc/testsuite/gcc.target/i386/pr92645.c
! 511103e020526065f6e8b994635a5ea6  gcc/testsuite/gcc.target/i386/pr92651.c
  6b30805bc47b76314701de39182024c7  gcc/testsuite/gcc.target/i386/pr92658-avx2-2.c
  2d1dbf18bcc052068a31667f01a26b12  gcc/testsuite/gcc.target/i386/pr92658-avx2.c
  a6d944350614d95163bf09072cee89ea  gcc/testsuite/gcc.target/i386/pr92658-avx512bw-2.c
*************** d50d43b015ccca4bdcef40a3a09478ce  gcc/te
*** 94206,94212 ****
  da7936c976f9e834f5cbd253109ebc0e  gcc/testsuite/gcc.target/i386/pr97950.c
  92012a0367451349c2462298350c2bd6  gcc/testsuite/gcc.target/i386/pr97971.c
  e3d35c4b9c35829e096fbb3d11b860df  gcc/testsuite/gcc.target/i386/pr97978.c
! 670c12a0948ada55645036481c5bd816  gcc/testsuite/gcc.target/i386/pr98060.c
  de9a29845d5a93f4882c3e21249e708f  gcc/testsuite/gcc.target/i386/pr98063.c
  b7ddfcf2edaca40780663862d490b44f  gcc/testsuite/gcc.target/i386/pr98079.c
  3e550210eceaa9555180fcdc5434cf50  gcc/testsuite/gcc.target/i386/pr98086.c
--- 94289,94295 ----
  da7936c976f9e834f5cbd253109ebc0e  gcc/testsuite/gcc.target/i386/pr97950.c
  92012a0367451349c2462298350c2bd6  gcc/testsuite/gcc.target/i386/pr97971.c
  e3d35c4b9c35829e096fbb3d11b860df  gcc/testsuite/gcc.target/i386/pr97978.c
! fed426c1e8e6e3071d9a56e5babebb9f  gcc/testsuite/gcc.target/i386/pr98060.c
  de9a29845d5a93f4882c3e21249e708f  gcc/testsuite/gcc.target/i386/pr98063.c
  b7ddfcf2edaca40780663862d490b44f  gcc/testsuite/gcc.target/i386/pr98079.c
  3e550210eceaa9555180fcdc5434cf50  gcc/testsuite/gcc.target/i386/pr98086.c
*************** ad39067f20435454291b1687c53a813b  gcc/te
*** 94587,94594 ****
  8eb54b19a0555f5d5edd257613764743  gcc/testsuite/gcc.target/i386/sse-init-v2di-2.c
  e41b0032514bd98819d07cc4bbcd2e12  gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
  bb408838f48f3bff5e57b21b3ec99129  gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
! 091e9ea4f156cee09806290e554c0e47  gcc/testsuite/gcc.target/i386/sse-init-v4sf-2.c
! 76f1040b34807d2132b4fbeef6a54cce  gcc/testsuite/gcc.target/i386/sse-init-v4sf-3.c
  910e9105f2b5ee699fcc263bfb11cd92  gcc/testsuite/gcc.target/i386/sse-init-v4si-1.c
  ccd02e344d27f26a8b340992781eb2ba  gcc/testsuite/gcc.target/i386/sse-init-v8hi-1.c
  be63d01c33082ac86b6798bbcdf39f53  gcc/testsuite/gcc.target/i386/sse-int-covert-1.c
--- 94670,94677 ----
  8eb54b19a0555f5d5edd257613764743  gcc/testsuite/gcc.target/i386/sse-init-v2di-2.c
  e41b0032514bd98819d07cc4bbcd2e12  gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
  bb408838f48f3bff5e57b21b3ec99129  gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
! 6e394e715af2d99b58eac22652480015  gcc/testsuite/gcc.target/i386/sse-init-v4sf-2.c
! af68dd5095b2ca5acf23e181fd45d3ab  gcc/testsuite/gcc.target/i386/sse-init-v4sf-3.c
  910e9105f2b5ee699fcc263bfb11cd92  gcc/testsuite/gcc.target/i386/sse-init-v4si-1.c
  ccd02e344d27f26a8b340992781eb2ba  gcc/testsuite/gcc.target/i386/sse-init-v8hi-1.c
  be63d01c33082ac86b6798bbcdf39f53  gcc/testsuite/gcc.target/i386/sse-int-covert-1.c
*************** b9c64c23f0f67e694047dcdc7e4ce92d  gcc/te
*** 94692,94699 ****
  a483238e8a216ddeb00c43d4921dd054  gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c
  b8976b9c64bb590acd6790b169b58b33  gcc/testsuite/gcc.target/i386/sse2-init-v2di-3.c
  b38a6996bfd6e481c2a20e2d85f697ea  gcc/testsuite/gcc.target/i386/sse2-init-v2di-4.c
! a54ccc676e6a4b3aa0438b47de3ad7cd  gcc/testsuite/gcc.target/i386/sse2-init-v4sf-1.c
! 259b32801d636905b94f8c11c471b966  gcc/testsuite/gcc.target/i386/sse2-init-v4sf-2.c
  22cfc5e0e378015ed2ae19d500d60459  gcc/testsuite/gcc.target/i386/sse2-init-v4si-1.c
  37f4035b939cb25685594ab580947472  gcc/testsuite/gcc.target/i386/sse2-init-v4si-2.c
  aed1b9df37d34e50ddddbcb943bc885f  gcc/testsuite/gcc.target/i386/sse2-init-v8hi-1.c
--- 94775,94782 ----
  a483238e8a216ddeb00c43d4921dd054  gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c
  b8976b9c64bb590acd6790b169b58b33  gcc/testsuite/gcc.target/i386/sse2-init-v2di-3.c
  b38a6996bfd6e481c2a20e2d85f697ea  gcc/testsuite/gcc.target/i386/sse2-init-v2di-4.c
! 35a99766fcbbec1274c50ae817d14426  gcc/testsuite/gcc.target/i386/sse2-init-v4sf-1.c
! 88538b0cab7e2b036e9e991331b36a19  gcc/testsuite/gcc.target/i386/sse2-init-v4sf-2.c
  22cfc5e0e378015ed2ae19d500d60459  gcc/testsuite/gcc.target/i386/sse2-init-v4si-1.c
  37f4035b939cb25685594ab580947472  gcc/testsuite/gcc.target/i386/sse2-init-v4si-2.c
  aed1b9df37d34e50ddddbcb943bc885f  gcc/testsuite/gcc.target/i386/sse2-init-v8hi-1.c
*************** c8e314bac263e55f2fcbbdf16df8d2d1  gcc/te
*** 94970,94976 ****
  04c7f1d587293a9a31152e40da4c0e82  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-1.c
  6cb5dc8ee93873f6daf9348cfc7e5905  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-2.c
  2f5b5390fcecc53735672f68927f9cdb  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-3.c
! 44b5efea3dad2df6243820aea41c77e6  gcc/testsuite/gcc.target/i386/sse2-v1ti-logic-2.c
  7c08c8089d2cd264085f8f1f27aaaa4c  gcc/testsuite/gcc.target/i386/sse2-v1ti-logic.c
  9903085d39d7b4b8be1b9dc73e11aab9  gcc/testsuite/gcc.target/i386/sse2-v1ti-mov-1.c
  34aa9ecda1e867a6b58a66613bbfbba9  gcc/testsuite/gcc.target/i386/sse2-v1ti-mov-2.c
--- 95053,95059 ----
  04c7f1d587293a9a31152e40da4c0e82  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-1.c
  6cb5dc8ee93873f6daf9348cfc7e5905  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-2.c
  2f5b5390fcecc53735672f68927f9cdb  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-3.c
! 5c72d0b46d91af0492beba2552327f55  gcc/testsuite/gcc.target/i386/sse2-v1ti-logic-2.c
  7c08c8089d2cd264085f8f1f27aaaa4c  gcc/testsuite/gcc.target/i386/sse2-v1ti-logic.c
  9903085d39d7b4b8be1b9dc73e11aab9  gcc/testsuite/gcc.target/i386/sse2-v1ti-mov-1.c
  34aa9ecda1e867a6b58a66613bbfbba9  gcc/testsuite/gcc.target/i386/sse2-v1ti-mov-2.c
*************** c154f58bcc158020b2ec001ffe01917f  gcc/te
*** 95041,95048 ****
  638b4f9c21b75eff1991d2756bbf299f  gcc/testsuite/gcc.target/i386/sse4_1-init-v2di-2.c
  0a4afcafb9eeed5ab5a1f0adb71188e3  gcc/testsuite/gcc.target/i386/sse4_1-init-v2di-3.c
  8f3390d1b4b53a23ee7608e2d7647fca  gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-1.c
! fa495078fb696333ed8718f061aa7ca8  gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-2.c
! 69d40f737274331d02d17220c72441e4  gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-3.c
  3fd300d166748ae79a88589044240f93  gcc/testsuite/gcc.target/i386/sse4_1-init-v4si-1.c
  9d4ddff90709902054121abe9f291593  gcc/testsuite/gcc.target/i386/sse4_1-init-v4si-2.c
  9697ffdb1e10ae3cb3b7e1c2c8cfaa01  gcc/testsuite/gcc.target/i386/sse4_1-insertps-1.c
--- 95124,95131 ----
  638b4f9c21b75eff1991d2756bbf299f  gcc/testsuite/gcc.target/i386/sse4_1-init-v2di-2.c
  0a4afcafb9eeed5ab5a1f0adb71188e3  gcc/testsuite/gcc.target/i386/sse4_1-init-v2di-3.c
  8f3390d1b4b53a23ee7608e2d7647fca  gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-1.c
! 483e4dbf1f917d50461cca7aff7f4f7d  gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-2.c
! 0848fc91f9d610728e481b85e9b3587e  gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-3.c
  3fd300d166748ae79a88589044240f93  gcc/testsuite/gcc.target/i386/sse4_1-init-v4si-1.c
  9d4ddff90709902054121abe9f291593  gcc/testsuite/gcc.target/i386/sse4_1-init-v4si-2.c
  9697ffdb1e10ae3cb3b7e1c2c8cfaa01  gcc/testsuite/gcc.target/i386/sse4_1-insertps-1.c
*************** fcaa09f9da1b7cb7bf668016fbdeeb62  gcc/te
*** 95117,95123 ****
  d43f57b93ce30d26aca624ea0e35e1ed  gcc/testsuite/gcc.target/i386/sse4_1-rint-vec.c
  9fbf789cd91add6ae19e8818885f7c6d  gcc/testsuite/gcc.target/i386/sse4_1-rintf-sfix-vec.c
  17add71bcbc9decc8b2e9be39e2a0360  gcc/testsuite/gcc.target/i386/sse4_1-rintf-vec.c
! e0f960460e529ef952b05ebb55d458e4  gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-1.c
  1c8d6900c468bf1f753a3d3f72b9c242  gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-2.c
  9f9fefc9d75dc17aa08a8d3b9bddb5f1  gcc/testsuite/gcc.target/i386/sse4_1-round-sfix-vec.c
  d7d336332563c034a90b8a60d8fe5379  gcc/testsuite/gcc.target/i386/sse4_1-round-vec.c
--- 95200,95206 ----
  d43f57b93ce30d26aca624ea0e35e1ed  gcc/testsuite/gcc.target/i386/sse4_1-rint-vec.c
  9fbf789cd91add6ae19e8818885f7c6d  gcc/testsuite/gcc.target/i386/sse4_1-rintf-sfix-vec.c
  17add71bcbc9decc8b2e9be39e2a0360  gcc/testsuite/gcc.target/i386/sse4_1-rintf-vec.c
! 17f830d2d7ecddb4fb790c77e8979032  gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-1.c
  1c8d6900c468bf1f753a3d3f72b9c242  gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-2.c
  9f9fefc9d75dc17aa08a8d3b9bddb5f1  gcc/testsuite/gcc.target/i386/sse4_1-round-sfix-vec.c
  d7d336332563c034a90b8a60d8fe5379  gcc/testsuite/gcc.target/i386/sse4_1-round-vec.c
*************** ff4a381ee5305c9a18c5754c13c12790  gcc/te
*** 95148,95157 ****
  e74f5b8f16d9e3c28227ea31186f816a  gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-3.c
  a2f5b0c7365f7c93751ba3a6aa3eee83  gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-3a.c
  72524fc8a79531162d13f560e0d144fe  gcc/testsuite/gcc.target/i386/sse4_1-stv-1.c
! 9ce5a17c10cee7fb9d36935428716f0a  gcc/testsuite/gcc.target/i386/sse4_1-stv-10.c
! 829dfd2a2a0b2fdc7afb230e794b5e3a  gcc/testsuite/gcc.target/i386/sse4_1-stv-11.c
! 02b9051251a317f88ea262388e1a7158  gcc/testsuite/gcc.target/i386/sse4_1-stv-12.c
  4bdff08a6ef3122fc59c16d3a6fce216  gcc/testsuite/gcc.target/i386/sse4_1-stv-13.c
  0d4ea3fb9a13317ac032d3b746eb211a  gcc/testsuite/gcc.target/i386/sse4_1-stv-2.c
  7ccf320367db828d9231b02a5a2706de  gcc/testsuite/gcc.target/i386/sse4_1-stv-3.c
  60adbd8686ae10af58220efca0984cce  gcc/testsuite/gcc.target/i386/sse4_1-stv-4.c
--- 95231,95241 ----
  e74f5b8f16d9e3c28227ea31186f816a  gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-3.c
  a2f5b0c7365f7c93751ba3a6aa3eee83  gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-3a.c
  72524fc8a79531162d13f560e0d144fe  gcc/testsuite/gcc.target/i386/sse4_1-stv-1.c
! 4ea753a8d16d5a298213db35c314ed1c  gcc/testsuite/gcc.target/i386/sse4_1-stv-10.c
! d92407dd3809faf3a8f8d152f09e560c  gcc/testsuite/gcc.target/i386/sse4_1-stv-11.c
! cc46ca77a41752361778e50e2326e4c4  gcc/testsuite/gcc.target/i386/sse4_1-stv-12.c
  4bdff08a6ef3122fc59c16d3a6fce216  gcc/testsuite/gcc.target/i386/sse4_1-stv-13.c
+ e07fb3b85fdfa9321f288c95584eb262  gcc/testsuite/gcc.target/i386/sse4_1-stv-14.c
  0d4ea3fb9a13317ac032d3b746eb211a  gcc/testsuite/gcc.target/i386/sse4_1-stv-2.c
  7ccf320367db828d9231b02a5a2706de  gcc/testsuite/gcc.target/i386/sse4_1-stv-3.c
  60adbd8686ae10af58220efca0984cce  gcc/testsuite/gcc.target/i386/sse4_1-stv-4.c
*************** f3af6c8731509036aac69fd020088034  gcc/te
*** 95215,95223 ****
  af71d3eb294bc7831563da40676fd174  gcc/testsuite/gcc.target/i386/ssp-global-2.c
  fa0296343fcddacd96d95176af575f8d  gcc/testsuite/gcc.target/i386/ssp-global-3.c
  a198eb70bbb0751085ece5a2d9c5b707  gcc/testsuite/gcc.target/i386/ssp-global-4.c
! d160b3604341d9d8e7adf7bde93e461f  gcc/testsuite/gcc.target/i386/ssp-global-hidden-1.c
! ed0884fb25e4717a08c333333d1742fb  gcc/testsuite/gcc.target/i386/ssp-global-hidden-2.c
! 687b364f57ef4e6178183d938c365a8e  gcc/testsuite/gcc.target/i386/ssp-global-hidden-3.c
  af71d3eb294bc7831563da40676fd174  gcc/testsuite/gcc.target/i386/ssp-global.c
  a0e47f84ef019a0c0609e9c44732ef14  gcc/testsuite/gcc.target/i386/ssp-strong-reg.c
  81a7be5b11bbf9853287f943766c6b38  gcc/testsuite/gcc.target/i386/ssse3-check.h
--- 95299,95307 ----
  af71d3eb294bc7831563da40676fd174  gcc/testsuite/gcc.target/i386/ssp-global-2.c
  fa0296343fcddacd96d95176af575f8d  gcc/testsuite/gcc.target/i386/ssp-global-3.c
  a198eb70bbb0751085ece5a2d9c5b707  gcc/testsuite/gcc.target/i386/ssp-global-4.c
! a49082cb3d779214355af9c116be1d6e  gcc/testsuite/gcc.target/i386/ssp-global-hidden-1.c
! 965d1d683fd5652f248dba911adaf777  gcc/testsuite/gcc.target/i386/ssp-global-hidden-2.c
! 05d039b5a4bce46e84660900c4dd1d96  gcc/testsuite/gcc.target/i386/ssp-global-hidden-3.c
  af71d3eb294bc7831563da40676fd174  gcc/testsuite/gcc.target/i386/ssp-global.c
  a0e47f84ef019a0c0609e9c44732ef14  gcc/testsuite/gcc.target/i386/ssp-strong-reg.c
  81a7be5b11bbf9853287f943766c6b38  gcc/testsuite/gcc.target/i386/ssse3-check.h
*************** eea325a3ec07f551da45222800b264fa  gcc/te
*** 95298,95305 ****
  d44614fd5596d1f2a2a55c835ee50727  gcc/testsuite/gcc.target/i386/testround-1.c
  b20b310f3636a1d1d5c3491de30c7a3b  gcc/testsuite/gcc.target/i386/testround-2.c
  832965b06213f2066439fd1482fcb8a7  gcc/testsuite/gcc.target/i386/tpause-1.c
! 04ea04a285e79ac7b10b6bcfc9c1ad23  gcc/testsuite/gcc.target/i386/truncsfbf-1.c
! ceb8eb8fe5daae6005c48dfb01006a5c  gcc/testsuite/gcc.target/i386/truncsfbf-2.c
  ed802e5785edad05c6b1796ffc7404fb  gcc/testsuite/gcc.target/i386/tsxldtrk-1.c
  93d9979dbb1eca4f0954ae4f9ab2dd58  gcc/testsuite/gcc.target/i386/udivmod-1.c
  8950d7bf5681f03b1ac271428565f90d  gcc/testsuite/gcc.target/i386/udivmod-2.c
--- 95382,95394 ----
  d44614fd5596d1f2a2a55c835ee50727  gcc/testsuite/gcc.target/i386/testround-1.c
  b20b310f3636a1d1d5c3491de30c7a3b  gcc/testsuite/gcc.target/i386/testround-2.c
  832965b06213f2066439fd1482fcb8a7  gcc/testsuite/gcc.target/i386/tpause-1.c
! 7e9526b2ffcbf299154948137c977a8f  gcc/testsuite/gcc.target/i386/truncsfbf-1.c
! cad65d87bdb57159bd7c8701874f9ffa  gcc/testsuite/gcc.target/i386/truncsfbf-2.c
! 2353b26f5fd8f955fd8670d27bc30969  gcc/testsuite/gcc.target/i386/truncsfbf-3.c
! cb219c31369865c25c1ae23a2b51ca19  gcc/testsuite/gcc.target/i386/truncsfbf-4.c
! 47c46fc851b71428becf0649fcddbd9a  gcc/testsuite/gcc.target/i386/truncsfbf-5.c
! c8d8d95504fcf3505149e0306fdee8a3  gcc/testsuite/gcc.target/i386/truncsfbf-6.c
! e9dca79a1b5656f98de7b4e43632e5fc  gcc/testsuite/gcc.target/i386/truncsfbf-check.h
  ed802e5785edad05c6b1796ffc7404fb  gcc/testsuite/gcc.target/i386/tsxldtrk-1.c
  93d9979dbb1eca4f0954ae4f9ab2dd58  gcc/testsuite/gcc.target/i386/udivmod-1.c
  8950d7bf5681f03b1ac271428565f90d  gcc/testsuite/gcc.target/i386/udivmod-2.c
*************** eda0d442fd95aa4f91e9f15d67b2a009  gcc/te
*** 95376,95382 ****
  ba85333fb178da98ba30d0c3d66f7655  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-128.c
  ab69d9bbd51cf998202e39a5a3e247fa  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-256.c
  0e1652680d35183ac540c92e1d5e4771  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-run.c
! 246ab3ef90910058a6b6a85a9f600a4a  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c
  dbb78f1bef26196a639e80bcc8d71b56  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-256.c
  8aaa43fe98fdf158a893490222afa06d  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-run.c
  3d489bc48a081c0ab96b9806cea428ca  gcc/testsuite/gcc.target/i386/vect-compare-cost.c
--- 95465,95471 ----
  ba85333fb178da98ba30d0c3d66f7655  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-128.c
  ab69d9bbd51cf998202e39a5a3e247fa  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-256.c
  0e1652680d35183ac540c92e1d5e4771  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-run.c
! 4df804f3b7c971129b184b942bafe163  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c
  dbb78f1bef26196a639e80bcc8d71b56  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-256.c
  8aaa43fe98fdf158a893490222afa06d  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-run.c
  3d489bc48a081c0ab96b9806cea428ca  gcc/testsuite/gcc.target/i386/vect-compare-cost.c
*************** e80eb96074dc5330cca76e675ed3fa81  gcc/te
*** 95648,95655 ****
  2d48bc1ca6ab4e88a21ee834c33003c2  gcc/testsuite/gcc.target/i386/zext-avx10-1.c
  c6063326a2b694e6d1a38885c29a0d69  gcc/testsuite/gcc.target/i386/zext-avx512f-1.c
  896ef5303350659a4abcfa97df81a146  gcc/testsuite/gcc.target/i386/zext-avx512fp16-1.c
! a1a1c69476de051ab57e5d9505ed4b2d  gcc/testsuite/gcc.target/i386/zext-sse-1.c
! d3e6307956b90d151b6e99f9fab09eb6  gcc/testsuite/gcc.target/i386/zext-sse-2.c
  09fb6852403bb7a0b9b3339c49e09efb  gcc/testsuite/gcc.target/ia64/20010423-1.c
  d42256aef37a73ae61dad2030303738b  gcc/testsuite/gcc.target/ia64/20020313-1.c
  80710ab442f553a1629beb106d8276a3  gcc/testsuite/gcc.target/ia64/20020326-1.c
--- 95737,95744 ----
  2d48bc1ca6ab4e88a21ee834c33003c2  gcc/testsuite/gcc.target/i386/zext-avx10-1.c
  c6063326a2b694e6d1a38885c29a0d69  gcc/testsuite/gcc.target/i386/zext-avx512f-1.c
  896ef5303350659a4abcfa97df81a146  gcc/testsuite/gcc.target/i386/zext-avx512fp16-1.c
! c915bdb0885a9a317027c95bd0eb93d1  gcc/testsuite/gcc.target/i386/zext-sse-1.c
! 36ebcfde0f1e3b48b0b1a1fe11b66e2b  gcc/testsuite/gcc.target/i386/zext-sse-2.c
  09fb6852403bb7a0b9b3339c49e09efb  gcc/testsuite/gcc.target/ia64/20010423-1.c
  d42256aef37a73ae61dad2030303738b  gcc/testsuite/gcc.target/ia64/20020313-1.c
  80710ab442f553a1629beb106d8276a3  gcc/testsuite/gcc.target/ia64/20020326-1.c
*************** d2a0d498fd73b9c4321c054d794a4050  gcc/te
*** 98970,98975 ****
--- 99059,99065 ----
  3f71797daae2c3767c09bb421554943f  gcc/testsuite/gcc.target/powerpc/pr115688.c
  faee8c356a7851d893a6c1a079c081d5  gcc/testsuite/gcc.target/powerpc/pr115713-1.c
  deb12224fed195721b2ddc8b70e46a23  gcc/testsuite/gcc.target/powerpc/pr115713-2.c
+ 06b76d82ede7705a855dd35a13da966a  gcc/testsuite/gcc.target/powerpc/pr116004.c
  1737969c505469a6fec1082c5f4ada8f  gcc/testsuite/gcc.target/powerpc/pr116030.c
  3944b7ca9b08abe29fedfeabbbd32d5a  gcc/testsuite/gcc.target/powerpc/pr116170.c
  68e7a002ed920723f1529e366afe30de  gcc/testsuite/gcc.target/powerpc/pr116415.c
*************** da26cb6383a24e6a94a6c247d777f6b8  gcc/te
*** 98979,98985 ****
--- 99069,99077 ----
  177d357517a2880aed3319c629f8a1ad  gcc/testsuite/gcc.target/powerpc/pr120681.c
  800df636a3d7634e8c0d66c59de11951  gcc/testsuite/gcc.target/powerpc/pr121007.c
  5dc8065d72c427b79c75ffd95b743639  gcc/testsuite/gcc.target/powerpc/pr124637.c
+ 322739b564519dabcfedac5303e8ff96  gcc/testsuite/gcc.target/powerpc/pr125138.c
  dc2d3a4c7ab86e1b45428b2a6f0d94f6  gcc/testsuite/gcc.target/powerpc/pr125327.c
+ ed4dbff524cca18832ff35da5d02bcaf  gcc/testsuite/gcc.target/powerpc/pr126512.c
  059fa3f6c58e73b7eb349ff628b2e844  gcc/testsuite/gcc.target/powerpc/pr126513-acmp-tst-1.c
  c6b26c7724ebb9cc3e22a696915d2ed8  gcc/testsuite/gcc.target/powerpc/pr126513-acmp-tst-2.c
  43b6052bd91664fcfa4b854e6d9a9151  gcc/testsuite/gcc.target/powerpc/pr126513-acmp-tst-3.c
*************** eb5af8f9b9993b4069f49d0049d05e87  gcc/te
*** 100845,100850 ****
--- 100937,100955 ----
  6929dceee52571d33d74aeaf77aa5b81  gcc/testsuite/gcc.target/riscv/core_bench_list.c
  cc2941f3dabb2ba9df05f8e62bd343b7  gcc/testsuite/gcc.target/riscv/core_init_matrix.c
  a9f179cd56442e765d568724c13e3d64  gcc/testsuite/gcc.target/riscv/core_list_init.c
+ bc5ea09c17c5fbecfa971060b38ffa7b  gcc/testsuite/gcc.target/riscv/cpunative/info_0
+ 3ef640eb3d7d34a7ebfc6e94382ab39c  gcc/testsuite/gcc.target/riscv/cpunative/info_1
+ 057b4754d3d18556e01d4d2231692aab  gcc/testsuite/gcc.target/riscv/cpunative/info_2
+ e6c1c5e35cdace01b6e303518a08c6c4  gcc/testsuite/gcc.target/riscv/cpunative/info_3
+ cf08072fd1049425693fe5c2297489b2  gcc/testsuite/gcc.target/riscv/cpunative/info_4
+ d36b35f1ea1c35992b3b4ee0cdb0f652  gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c
+ df84f6adb562a29d68e541e24272d62d  gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c
+ 51e62811e96f611dea27349dffabf981  gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c
+ 684c258fc7698b14669d9b73ce2867e3  gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c
+ 59e88ef79ddf8ece6336aafb055f5bf1  gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c
+ c0da4f76b78ece142e44415a63da4ed9  gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c
+ 374f8bd6fa0cc452409d4755b11b7659  gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c
+ 369dc36ba368630f39a632972dbbceb6  gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp
  da7018048a2f8abf32640890d4b206be  gcc/testsuite/gcc.target/riscv/cpymem-32-ooo.c
  43e997784ea5cad989d86a3e1b2871ac  gcc/testsuite/gcc.target/riscv/cpymem-32.c
  513d1cb5460f349b31013e476f554d62  gcc/testsuite/gcc.target/riscv/cpymem-64-ooo.c
*************** a9f24eff74b34541ebef24d8965f1336  gcc/te
*** 101199,101204 ****
--- 101304,101310 ----
  b5b03b4580c0a785c21ea9454eef6421  gcc/testsuite/gcc.target/riscv/lto/pr110812_1.c
  f7b7f525bf208a2c94029f5066e420ac  gcc/testsuite/gcc.target/riscv/lto/riscv-lto.exp
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/lto/riscv_vector.h
+ cc688c5d62994205e2d8d20b766bacbf  gcc/testsuite/gcc.target/riscv/march-native-1.c
  7a85a9d76321b19b1c9a5242b0715dd4  gcc/testsuite/gcc.target/riscv/matrix_add_const.c
  921c846f9d343bd139a635f83e6db437  gcc/testsuite/gcc.target/riscv/mcpu-1.c
  84a4693e36dd49686414997cb37fc127  gcc/testsuite/gcc.target/riscv/mcpu-2.c
*************** efcb2d5344bde460bcbee76b9e33c09d  gcc/te
*** 101208,101214 ****
--- 101314,101322 ----
  b1501e176991bdafb852ead7111b522d  gcc/testsuite/gcc.target/riscv/mcpu-6.c
  37fcd96e3fe6090dd8f4bc56dc45afb5  gcc/testsuite/gcc.target/riscv/mcpu-7.c
  5159d9e2aee2c7fa385187b01c43e187  gcc/testsuite/gcc.target/riscv/mcpu-sifive-p450.c
+ 217d08591dfd860a9b2dd1be8a4593f7  gcc/testsuite/gcc.target/riscv/mcpu-sifive-p550.c
  11dd7483f027ab8263d3f7bf312bc40f  gcc/testsuite/gcc.target/riscv/mcpu-sifive-p670.c
+ e2e06d92fa899e26709c994713bb58b9  gcc/testsuite/gcc.target/riscv/mcpu-sifive-p870-d.c
  0f7ebc2d65ebdb64c7b00775db650cdd  gcc/testsuite/gcc.target/riscv/mcpu-sifive-x280.c
  1e98805082752ae19404fb6ab5adf407  gcc/testsuite/gcc.target/riscv/mcpu-spacemit-a100.c
  6aca92b845bddc5351f8aaa2c10dc848  gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x100.c
*************** d90ca4ab32f893e58362b7afbe85e6fd  gcc/te
*** 102387,102393 ****
  edd0a4ba6a9489214ca39d04c6a65fdc  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store-2.c
  107743a69f58f28cf14e8a598bd333e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-1.c
  c1274e3ee15699a124ca1ff4e24fd55b  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-2.c
! 7148ee8088200dd6254954fa78a6dbfd  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h
  744e1d9bf456f63d1459b76959635e65  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vfwcvt_f-f16-m1.c
  2edd9f50633fb2bb265afe189912b331  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vfwcvt_f-f16-m2.c
  15f1fc409628c7f79c90d0634d242e01  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vfwcvt_f-f16-m4.c
--- 102495,102501 ----
  edd0a4ba6a9489214ca39d04c6a65fdc  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store-2.c
  107743a69f58f28cf14e8a598bd333e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-1.c
  c1274e3ee15699a124ca1ff4e24fd55b  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-2.c
! 96c0b86d421f5a4a7253c1496b538570  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h
  744e1d9bf456f63d1459b76959635e65  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vfwcvt_f-f16-m1.c
  2edd9f50633fb2bb265afe189912b331  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vfwcvt_f-f16-m2.c
  15f1fc409628c7f79c90d0634d242e01  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vfwcvt_f-f16-m4.c
*************** c1c95f8d765fe7164844664c83716c7e  gcc/te
*** 102626,102631 ****
--- 102734,102754 ----
  486ebca72941b6e8e33009b4f5534912  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vv-i8-mf2.c
  b46a5c8e35a40e7a86435ba28e987f91  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vv-i8-mf4.c
  13fe020091e83be4523007df549e0b76  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vv-i8-mf8.c
+ 093e05a9b331db4408b28a56f496ad9f  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m1.c
+ de4514b1c8ef8041cdf00db430c8b77f  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m2.c
+ 85a4a0333d90a74ffa2c7ef6695efc86  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m4.c
+ bf5bb02d7cfa449d5eb8f7518a4ff083  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf2.c
+ 7ea8653bedf7de9e7f9118225974b9e8  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf4.c
+ 19c86f4a796df72638f3ae294710d022  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m1.c
+ 3fe94b8774e1550b7e7ca0523b5044f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m2.c
+ 6ab18a85835e71ff3c0b8752d1eb246e  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m4.c
+ df233bc9ae6aa9ba833229e2f07efe28  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-mf2.c
+ ced4be019c118ee4188819479cee3e3a  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m1.c
+ e5578fff35c06f60985e00ffe04f114d  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m2.c
+ fa1acb3286ca6fc3a60a7e63deba1cc9  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m4.c
+ 0a1183514a4fa2a3908554764d03436b  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf2.c
+ d7acf075b197b5ecb2410e78bc47a982  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf4.c
+ 19abe5da0b98cba47cc87a9d83ceae71  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf8.c
  a72302619429f9faa686f08e764a054d  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccsu_vv-i16-m1.c
  618e22ee33b31d6a1e2e74f3450c2de5  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccsu_vv-i16-m2.c
  9d3773e1747e7e79699bc13b645fd401  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccsu_vv-i16-m4.c
*************** cb785d0cb899e2ad06d0d8e55dc4810d  gcc/te
*** 102656,102661 ****
--- 102779,102799 ----
  03be217f0915e375143fb426913ac0c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vv-u8-mf2.c
  fd150604edd8fd0d963cd991fa49be7a  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vv-u8-mf4.c
  8d369cfd316d0dbaf59f3634b38195ff  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vv-u8-mf8.c
+ 0c61e6725d7c59eb2bab08afc3134d69  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m1.c
+ 2076f5303fbc330cc1a513a72f9db0ba  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m2.c
+ 2c3552e4b9e400c6a09bbb1b21b80740  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m4.c
+ c2b271409f02dd03249580ba687d4a6d  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf2.c
+ f136c0854485ef057006284089c19585  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf4.c
+ e048ee6386da1f4ea703744a51e51af0  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m1.c
+ 4e0d5ca32e54d0f988fd68a198ab1723  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m2.c
+ 0b4746a84734a6d18234016ce59985f5  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m4.c
+ e4586c13a9d26d307eadfb80fc846b17  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-mf2.c
+ d5e011fbd0dbd9173c626f5677d2a200  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m1.c
+ 3039424a4c4bdd94b022a6f766b5d098  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m2.c
+ 3d03e42aced5ed96bf7e7354bcbe7cb0  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m4.c
+ e5e919951c989c3153a7b5d5c8070469  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf2.c
+ e199d0cbc29f2ec5a7381f6edcfbe5e3  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf4.c
+ a96602f01ee5e772b7613a1e09239e37  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf8.c
  94108ee3c2471e1657d866ed7d378c89  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vv-i16-m1.c
  3540913da2d7b5347df0bf92db72d263  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vv-i16-m2.c
  d951a9590d405580b0973f343eb8a620  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vv-i16-m4.c
*************** b1e09e6300c59404039e382fd4ae0032  gcc/te
*** 102701,102706 ****
--- 102839,102859 ----
  84635d2d6dcf2ff93bab936eb00bd0e0  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vv-i8-mf2.c
  4cfedb15deb397f4e1a5e98b73fa7ff2  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vv-i8-mf4.c
  10deb2ac65ebc26777e850f2a12ba6b1  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vv-i8-mf8.c
+ 2f268eba8834f0a549715494d7f2c888  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m1.c
+ a557fde61ae95a18c286a7134216893f  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m2.c
+ ee524fc08c2cd0baff9548a860c9a82d  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m4.c
+ 5c3fd179f52e9d5f9ba12e1e5b559e8c  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf2.c
+ 00a4d8884f9ca3cf40b0dcd37bb66b03  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf4.c
+ 885740f20867dd3cabb1f3291f98b7ff  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m1.c
+ ad8ccc6240820379ed2804d1706740e3  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m2.c
+ 238e9065e79390a1e079f4045a1b51e1  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m4.c
+ d4257f20d88fcd3e44ed87016305984e  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-mf2.c
+ 150bd0237061b4e4ec9c232c5617d1ec  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m1.c
+ 316a89ba512384a3f87b6dee4ed9495b  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m2.c
+ de78c7ac0b919e8be147bdb3232c7143  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m4.c
+ 2df05d24507ecab69d6215855898d8e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf2.c
+ f2963bd48bea26856fbf1cf93ed6dff5  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf4.c
+ d0d31dbd9857f6d68a0273911d7f4ebc  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf8.c
  b71b943ba97502ba3caccd8b6fa29632  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vv-u16-m1.c
  9aba943321e9a93d7f37dd507066b231  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vv-u16-m2.c
  e2ca7daed10f2278f124fe6fdb3c062b  gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vv-u16-m4.c
*************** c45fc8b957d3795551007dc8778f0905  gcc/te
*** 103101,103107 ****
  806b456b7c04a495d9c07f1c78339fd5  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last_run-7.c
  dcd95e6b0ffbcd67134508285cf0dd7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last_run-8.c
  079315192f9f57442a4c0d1132f7ec72  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last_run-9.c
! 92189b0ad615f2d3623f1b871af4cb09  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/pr123501.c
  32208ad008f41245be33936306a955c8  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-1.c
  e1f86fc6350b92e9f73b5a34874e1310  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-10.c
  2166358447adcc350e54279c2a70a7b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-2.c
--- 103254,103260 ----
  806b456b7c04a495d9c07f1c78339fd5  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last_run-7.c
  dcd95e6b0ffbcd67134508285cf0dd7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last_run-8.c
  079315192f9f57442a4c0d1132f7ec72  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last_run-9.c
! 8673fa31c3fb061a3e5057372be8f8cd  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/pr123501.c
  32208ad008f41245be33936306a955c8  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-1.c
  e1f86fc6350b92e9f73b5a34874e1310  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-10.c
  2166358447adcc350e54279c2a70a7b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-2.c
*************** e4cf82cf74ec3ebf31aab7aa4c710c21  gcc/te
*** 105634,105642 ****
  5df3afe63166ec978356fc0e7df63fb7  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-2.c
  1a7558800b040b8dda24bcc3d94f5729  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-20.c
  096b804168636ee17c9d4636018e26fb  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
! ddfc52ce3e11b16f5826a17400d5173d  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-22.c
! 01113869871bb1fbcb103fb4d9b60577  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-23.c
! dfb14b9db17d26fe2fff40418d1cf459  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-24.c
  3e6c34e695fb3ef4e9cc700bb4ea321e  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-25.c
  2d98f142716429721a11ef36b65d7de7  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-26.c
  ab1c2cc74c4984acd4b0ec4d31680345  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-27.c
--- 105787,105795 ----
  5df3afe63166ec978356fc0e7df63fb7  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-2.c
  1a7558800b040b8dda24bcc3d94f5729  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-20.c
  096b804168636ee17c9d4636018e26fb  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
! 291d98476e4f71712c0f11cc04703e80  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-22.c
! f5800d0bcf7434aa6943457eb941950e  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-23.c
! cf900775d36dc924857ebd43abe80364  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-24.c
  3e6c34e695fb3ef4e9cc700bb4ea321e  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-25.c
  2d98f142716429721a11ef36b65d7de7  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-26.c
  ab1c2cc74c4984acd4b0ec4d31680345  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-27.c
*************** d0449abd622c085a684b0e2415ec2117  gcc/te
*** 105667,105672 ****
--- 105820,105828 ----
  19140a4383e8b06d1d20ab5f9e1496c5  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-5.c
  614a6309e9d349c2e49f14a8691d8d8a  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-50.c
  c009d5cd4db76dd4d10012cdac89a1a1  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-51.c
+ efd8c8e6ba412acaf1bfa595053be3c8  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-52.c
+ 303b1d90756a33915afc539c4091a1fb  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-53.c
+ b3c5c691f15e477666239b8f25f71988  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-54.c
  2ed4fb55a4dc2e5bba7bdac02954f3c2  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-6.c
  6c90b3544a064a82a7d8cc3dde89a693  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-7.c
  33f46e06c303fb898c34975b7d932871  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-8.c
*************** b0032fffb6e1860da7ca94cd7252c411  gcc/te
*** 105728,105733 ****
--- 105884,105890 ----
  c05efbdfaafc64ad34b3d1c4b60a38eb  gcc/testsuite/gcc.target/riscv/rvv/base/pr90263.c
  be75fd39ea9b3d01e3e22294359fb482  gcc/testsuite/gcc.target/riscv/rvv/base/pragma-2.c
  20a3b581af8087da2c1170d56ff52971  gcc/testsuite/gcc.target/riscv/rvv/base/pragma-3.c
+ 6eeeb89b978efbcb050fb1d52a385441  gcc/testsuite/gcc.target/riscv/rvv/base/reduc-xor-uniform-1.c
  86c44b60c63c607bd05bceb103ef463e  gcc/testsuite/gcc.target/riscv/rvv/base/reg_order-1.c
  a93ad9a03d35d2909cca41cafc2c280f  gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-1.c
  81f5742c5f97bf91ea3d9ddf2d291853  gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-10.c
*************** b2d190bbc93bb8aca63abd0ddf20aefc  gcc/te
*** 107917,107922 ****
--- 108074,108080 ----
  3f47aa8acdf98bd432971c2997721537  gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c
  b46d13a1308787ce2b7a3bb9f83f6524  gcc/testsuite/gcc.target/riscv/sle.c
  7932cde858379cf62bae15befab52987  gcc/testsuite/gcc.target/riscv/sleu.c
+ 67788fda0603ea45eee8d0e927e9fbaf  gcc/testsuite/gcc.target/riscv/slliw-shifted-bitfield-rtl.c
  33017ee48637167310cc697349833aba  gcc/testsuite/gcc.target/riscv/slt-1.c
  ec91ff7ca498fc3a01ccd107f5e73ad9  gcc/testsuite/gcc.target/riscv/small-frame-indexed-base.c
  a2a3683590a6c12a010cfd0b3f03b095  gcc/testsuite/gcc.target/riscv/smax-ieee.c
*************** edf7b3ac6a922fa0ac818384392a4ae2  gcc/te
*** 109230,109236 ****
  63f494eb0c77b6672de13219c5eabd4c  gcc/testsuite/gcc.target/sh/pr51244-18.c
  13e52fb72118f422f094f08bf076f58c  gcc/testsuite/gcc.target/sh/pr51244-19.c
  9c65d17b7b64f22f6a1d62c84f17103c  gcc/testsuite/gcc.target/sh/pr51244-2.c
! b313b547e0cfe73e61eadf5b437b4092  gcc/testsuite/gcc.target/sh/pr51244-20.c
  3cb128b8f4983f4febbc61832b43b108  gcc/testsuite/gcc.target/sh/pr51244-4.c
  6e4c5cde318eef072127d08a5d2726c8  gcc/testsuite/gcc.target/sh/pr51244-5.c
  8c2cae86c941a5aea43181ef181c963c  gcc/testsuite/gcc.target/sh/pr51244-6.c
--- 109388,109394 ----
  63f494eb0c77b6672de13219c5eabd4c  gcc/testsuite/gcc.target/sh/pr51244-18.c
  13e52fb72118f422f094f08bf076f58c  gcc/testsuite/gcc.target/sh/pr51244-19.c
  9c65d17b7b64f22f6a1d62c84f17103c  gcc/testsuite/gcc.target/sh/pr51244-2.c
! 3c3d99b89219afd88fc0f332d1db427a  gcc/testsuite/gcc.target/sh/pr51244-20.c
  3cb128b8f4983f4febbc61832b43b108  gcc/testsuite/gcc.target/sh/pr51244-4.c
  6e4c5cde318eef072127d08a5d2726c8  gcc/testsuite/gcc.target/sh/pr51244-5.c
  8c2cae86c941a5aea43181ef181c963c  gcc/testsuite/gcc.target/sh/pr51244-6.c
*************** c024a7d3605725f398283d3e6351a637  gcc/te
*** 115477,115483 ****
  4ea579a901f2ba867f7acca09b97b2d8  gcc/testsuite/gfortran.dg/assumed_present.f90
  553be15ef977f991d775c0fd75e2cf7d  gcc/testsuite/gfortran.dg/assumed_rank_1.f90
  593ff93dc858f1b225edb727134ccc09  gcc/testsuite/gfortran.dg/assumed_rank_10.f90
! 902ad8d66d78f508c5a7a8e21a177906  gcc/testsuite/gfortran.dg/assumed_rank_11.f90
  7b5ed633a8322cf6570abdcd1f341dad  gcc/testsuite/gfortran.dg/assumed_rank_12.f90
  93ff0ad792c55f57799a102080fa1412  gcc/testsuite/gfortran.dg/assumed_rank_13.f90
  db38a8bc3741440823daac3739cdf86a  gcc/testsuite/gfortran.dg/assumed_rank_14.f90
--- 115635,115641 ----
  4ea579a901f2ba867f7acca09b97b2d8  gcc/testsuite/gfortran.dg/assumed_present.f90
  553be15ef977f991d775c0fd75e2cf7d  gcc/testsuite/gfortran.dg/assumed_rank_1.f90
  593ff93dc858f1b225edb727134ccc09  gcc/testsuite/gfortran.dg/assumed_rank_10.f90
! 186a31cc9f7cf02615298ea1cccedc97  gcc/testsuite/gfortran.dg/assumed_rank_11.f90
  7b5ed633a8322cf6570abdcd1f341dad  gcc/testsuite/gfortran.dg/assumed_rank_12.f90
  93ff0ad792c55f57799a102080fa1412  gcc/testsuite/gfortran.dg/assumed_rank_13.f90
  db38a8bc3741440823daac3739cdf86a  gcc/testsuite/gfortran.dg/assumed_rank_14.f90
*************** f71d849cf530ccd35a21d3feeee74cfc  gcc/te
*** 115909,115915 ****
  acc32b807a8cf30697ac24ce85728d0d  gcc/testsuite/gfortran.dg/c-interop/c516.f90
  edaab2c750f1a2a6f3a06ed229a72e2a  gcc/testsuite/gfortran.dg/c-interop/c524a.f90
  9f82c13e409f84c4bada41d2d628ff11  gcc/testsuite/gfortran.dg/c-interop/c535a-1.f90
! 694baf5913b33a35d3d4957d7e789782  gcc/testsuite/gfortran.dg/c-interop/c535a-2.f90
  6139dbae912b19b95cabc946abd19b7f  gcc/testsuite/gfortran.dg/c-interop/c535b-1.f90
  62e8725aa061392325e4bd8ce8caf441  gcc/testsuite/gfortran.dg/c-interop/c535b-2.f90
  dae80a004a4226b757cd9a6c03d70b3b  gcc/testsuite/gfortran.dg/c-interop/c535b-3.f90
--- 116067,116073 ----
  acc32b807a8cf30697ac24ce85728d0d  gcc/testsuite/gfortran.dg/c-interop/c516.f90
  edaab2c750f1a2a6f3a06ed229a72e2a  gcc/testsuite/gfortran.dg/c-interop/c524a.f90
  9f82c13e409f84c4bada41d2d628ff11  gcc/testsuite/gfortran.dg/c-interop/c535a-1.f90
! 001fc34c485a9f99fcca71a03101e086  gcc/testsuite/gfortran.dg/c-interop/c535a-2.f90
  6139dbae912b19b95cabc946abd19b7f  gcc/testsuite/gfortran.dg/c-interop/c535b-1.f90
  62e8725aa061392325e4bd8ce8caf441  gcc/testsuite/gfortran.dg/c-interop/c535b-2.f90
  dae80a004a4226b757cd9a6c03d70b3b  gcc/testsuite/gfortran.dg/c-interop/c535b-3.f90
*************** c5a256733781be2dc88ea518b8758391  gcc/te
*** 119364,119370 ****
  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
  4f65ccf420e9a7c519d9a87031a8248d  gcc/testsuite/gfortran.dg/guality/guality.exp
  d4160e104059a3b57d5b80ddb9140570  gcc/testsuite/gfortran.dg/guality/pr119190.f90
  f6dc189e3efd8e05cb4f9668eaf8fdbe  gcc/testsuite/gfortran.dg/guality/pr120193.f90
--- 119522,119528 ----
  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
! e198c783c5ef076e142abff19f776e4c  gcc/testsuite/gfortran.dg/guality/arg1.f90
  4f65ccf420e9a7c519d9a87031a8248d  gcc/testsuite/gfortran.dg/guality/guality.exp
  d4160e104059a3b57d5b80ddb9140570  gcc/testsuite/gfortran.dg/guality/pr119190.f90
  f6dc189e3efd8e05cb4f9668eaf8fdbe  gcc/testsuite/gfortran.dg/guality/pr120193.f90
*************** e5dfa7c2f8ba90de7a4892a9bc45ed42  gcc/te
*** 120009,120014 ****
--- 120167,120173 ----
  b389f1a32e81ff22d612b413b7fdb3ad  gcc/testsuite/gfortran.dg/iso_fortran_binding_uint8_array.f90
  493057e4406e417cddbd004e96386bd4  gcc/testsuite/gfortran.dg/iso_fortran_binding_uint8_array_driver.c
  84a50740ea41615ea1822c929d822f56  gcc/testsuite/gfortran.dg/iso_fortran_env_1.f90
+ ac0c0e0237e09068a98454638965b231  gcc/testsuite/gfortran.dg/iso_fortran_env_10.f90
  97f70359a4ebf271cf65c225b7542c8a  gcc/testsuite/gfortran.dg/iso_fortran_env_2.f90
  dcf43aa63a8733ded28e4e330d5c91a5  gcc/testsuite/gfortran.dg/iso_fortran_env_3.f90
  240e024c618e7b6016659afe3dc5cb44  gcc/testsuite/gfortran.dg/iso_fortran_env_4.f90
*************** ee4028c15df35bd899fb0f4ccdae563b  gcc/te
*** 121226,121231 ****
--- 121385,121391 ----
  1e6e6c4d7228b11f3a30141f4e909e7b  gcc/testsuite/gfortran.dg/pr126242.f90
  79f761eaecad212ada45e8ca1650129e  gcc/testsuite/gfortran.dg/pr126303.f
  4183207535f24d22a9ef08e88256897f  gcc/testsuite/gfortran.dg/pr126909.f90
+ 07362aeed5d1ba45ec22e0d56c35921a  gcc/testsuite/gfortran.dg/pr127100.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  2b5f18b773a5db29b0a2ee2d8cce767c  gcc/testsuite/gfortran.dg/pr15140.f90
*************** a8c69bca898ff29ba3a6ae2924078fa7  gcc/te
*** 122843,122848 ****
--- 123003,123009 ----
  3dbdb30cf91d1bfe2aefcf7e2101376b  gcc/testsuite/gfortran.dg/structure_constructor_17.f90
  949cce9e2d0fec5e875130d9d4185ead  gcc/testsuite/gfortran.dg/structure_constructor_18.f90
  34b1847b506e1397548db8e0aa2a5dee  gcc/testsuite/gfortran.dg/structure_constructor_2.f03
+ dce65274fa90d51b956ad3ff118ab922  gcc/testsuite/gfortran.dg/structure_constructor_22.f90
  b4cea5ac2c6cc89ab88ca3d7673f1483  gcc/testsuite/gfortran.dg/structure_constructor_3.f03
  cf05250e492fd4f294f0298ffb5c8bdb  gcc/testsuite/gfortran.dg/structure_constructor_4.f03
  89fa3200d7136ede426b295c5df3dc61  gcc/testsuite/gfortran.dg/structure_constructor_5.f03
*************** cec1ec6b2f905bb78b1700c94091bc21  gcc/te
*** 123379,123391 ****
  d9dd875d352eebf761e5e47e756ab344  gcc/testsuite/gfortran.dg/utf8_3.f03
  17a95a4c64acfd3e2b0ddfd821176912  gcc/testsuite/gfortran.dg/value_1.f90
  1ea47d2a65e7d0581521acdc773b080f  gcc/testsuite/gfortran.dg/value_10.f90
  c0b7e645eca87d1072072c6b6e4a9126  gcc/testsuite/gfortran.dg/value_2.f90
! f55ce021238826090cc2feb968b15b3d  gcc/testsuite/gfortran.dg/value_3.f90
  044c3ac7d69169cd8171c69b76f48001  gcc/testsuite/gfortran.dg/value_4.c
  81cc5897f9202983678b62dcd60ff750  gcc/testsuite/gfortran.dg/value_4.f90
! f0b6d172971190f9810729d6cf81bef7  gcc/testsuite/gfortran.dg/value_5.f90
  e0681ebf1cc0d7c0c6333d4894f4bb3d  gcc/testsuite/gfortran.dg/value_6.f03
  976eb36133da7e21bc4e6438427f2a37  gcc/testsuite/gfortran.dg/value_7.f03
  570bf3e723d57b65078a2b23e25f93e5  gcc/testsuite/gfortran.dg/value_8.f90
  b46ba5ff0e0f3d11a40f4fd27e154383  gcc/testsuite/gfortran.dg/value_9.f90
  5497ec582b3049523e60926b1e6a663e  gcc/testsuite/gfortran.dg/value_optional_1.f90
--- 123540,123562 ----
  d9dd875d352eebf761e5e47e756ab344  gcc/testsuite/gfortran.dg/utf8_3.f03
  17a95a4c64acfd3e2b0ddfd821176912  gcc/testsuite/gfortran.dg/value_1.f90
  1ea47d2a65e7d0581521acdc773b080f  gcc/testsuite/gfortran.dg/value_10.f90
+ 6acc79a3e9ddd157551e7bc6ed49d16e  gcc/testsuite/gfortran.dg/value_11.f90
+ 0423a514e7a016a5b61f6111dd41b164  gcc/testsuite/gfortran.dg/value_12.f90
+ 9fdb5d43b19f030672ff18f63effde3e  gcc/testsuite/gfortran.dg/value_13.f90
+ 8060a661aea700758d4e345468aafdcf  gcc/testsuite/gfortran.dg/value_14.f90
+ d116a2371bfbb1643ff6ed5ff5067c39  gcc/testsuite/gfortran.dg/value_15.f90
+ 439db345cce42fc48a11f6f77f0657cc  gcc/testsuite/gfortran.dg/value_16.f90
+ 28f1a91d19098019c0eded0482c8c7fe  gcc/testsuite/gfortran.dg/value_17.f90
+ 583fe56912415fddadc3e23c29a99b0a  gcc/testsuite/gfortran.dg/value_18.f90
  c0b7e645eca87d1072072c6b6e4a9126  gcc/testsuite/gfortran.dg/value_2.f90
! 7d385486fd28ab47bd3aa846ca7a0d45  gcc/testsuite/gfortran.dg/value_3.f90
  044c3ac7d69169cd8171c69b76f48001  gcc/testsuite/gfortran.dg/value_4.c
  81cc5897f9202983678b62dcd60ff750  gcc/testsuite/gfortran.dg/value_4.f90
! c4af4f146e4930a50a0f2305c9a9d442  gcc/testsuite/gfortran.dg/value_5.f90
  e0681ebf1cc0d7c0c6333d4894f4bb3d  gcc/testsuite/gfortran.dg/value_6.f03
+ 2fb15e796e79eb539199645a85639189  gcc/testsuite/gfortran.dg/value_6.f90
  976eb36133da7e21bc4e6438427f2a37  gcc/testsuite/gfortran.dg/value_7.f03
+ 40c1ecfefd9571892bd590b821ef96cf  gcc/testsuite/gfortran.dg/value_7.f90
  570bf3e723d57b65078a2b23e25f93e5  gcc/testsuite/gfortran.dg/value_8.f90
  b46ba5ff0e0f3d11a40f4fd27e154383  gcc/testsuite/gfortran.dg/value_9.f90
  5497ec582b3049523e60926b1e6a663e  gcc/testsuite/gfortran.dg/value_optional_1.f90
*************** b6cbc2d7f0f983561ecfb1e889cc9564  gcc/te
*** 123426,123431 ****
--- 123597,123603 ----
  968b7f70f6ea492d4668938e2d929b2c  gcc/testsuite/gfortran.dg/vect/pr123016.f90
  69ce1acd2174b1da669fa0ee2dcfcd74  gcc/testsuite/gfortran.dg/vect/pr123986.f90
  586131e6c904729b8febde3dbc667a68  gcc/testsuite/gfortran.dg/vect/pr125431.f90
+ 292ca56b4d6ac43ef4a0305d02c0c5c4  gcc/testsuite/gfortran.dg/vect/pr127058.f90
  a17cb1ab891a5af3471298da97331dda  gcc/testsuite/gfortran.dg/vect/pr19049.f90
  fdb4a5f5d5eff2fd75822f14875bd776  gcc/testsuite/gfortran.dg/vect/pr32377.f90
  bbb6998ea100c6c2039976c6446a0c10  gcc/testsuite/gfortran.dg/vect/pr32380.f
*************** ff8d86344e3cf4b355165a6b1650c479  gcc/te
*** 126469,126474 ****
--- 126641,126647 ----
  65bdf5c810fd15d3e47f76d9f6f98ff9  gcc/testsuite/gnat.dg/array41.ads
  cb2b3a0811f1ec09ea2fe486cccb5614  gcc/testsuite/gnat.dg/array42.adb
  910ed0700f4bd9451b29b115aeaa5d82  gcc/testsuite/gnat.dg/array42_pkg.ads
+ 58886ddf8858e4214056702b503dc6f7  gcc/testsuite/gnat.dg/array43.adb
  3d29182d58b83e2662df3d9534b80184  gcc/testsuite/gnat.dg/array5.adb
  a9a0725729c4b56fd51ac830fd3cdc3a  gcc/testsuite/gnat.dg/array6.adb
  c428e267874da1cd58bd5e0392d75d62  gcc/testsuite/gnat.dg/array7.adb
*************** ba997a6963d1723f3440798cec09d743  gcc/te
*** 127641,127646 ****
--- 127814,127820 ----
  5d50fb38b1ab84c39760906cb103c522  gcc/testsuite/gnat.dg/opt10_pkg.ads
  603264d4afdd2fd2174ea9c4cf4653ed  gcc/testsuite/gnat.dg/opt11.adb
  53160585b3a5d820b653e1e0d5f14c75  gcc/testsuite/gnat.dg/opt11.ads
+ bf8c85152eee7c99ba3ad4496b71ed7c  gcc/testsuite/gnat.dg/opt110.adb
  0ecfecb7cdec59e764b4d1588e562ce3  gcc/testsuite/gnat.dg/opt12.adb
  72c3b17bb6f9660ef255a74a583de996  gcc/testsuite/gnat.dg/opt12_pkg.adb
  c69a3ee399fc531084209990f13930a6  gcc/testsuite/gnat.dg/opt12_pkg.ads
*************** d8b0ac4d429708884c384b15b26da1c4  gcc/te
*** 131249,131255 ****
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! fc3bb13780086ac3983561498be95900  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
--- 131423,131429 ----
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! 171d2f8977f53e4c20df6df4143bc0af  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
*************** f6230fc0d600174a276b14cbea9f0e37  gcc/tr
*** 134180,134186 ****
  480f4f005dd70d7a5b13f4f8d453180c  gcc/tree-core.h
  52c5a671b1bb3224dba45336f53f7dad  gcc/tree-data-ref.cc
  8a41e760788789609c052d419c155691  gcc/tree-data-ref.h
! 89ef786b9c4639015bae3652c90fa60f  gcc/tree-dfa.cc
  e4c2f21e28741c793a32ae0fc8dbfa4c  gcc/tree-dfa.h
  0747c6d31b270b2ef08edf37adc78e96  gcc/tree-diagnostic-cfg.cc
  6249f69b6938f0c765dfd5c8b8919870  gcc/tree-diagnostic-client-data-hooks.cc
--- 134354,134360 ----
  480f4f005dd70d7a5b13f4f8d453180c  gcc/tree-core.h
  52c5a671b1bb3224dba45336f53f7dad  gcc/tree-data-ref.cc
  8a41e760788789609c052d419c155691  gcc/tree-data-ref.h
! fd0a5e0900b6e834c021f619ec74bc76  gcc/tree-dfa.cc
  e4c2f21e28741c793a32ae0fc8dbfa4c  gcc/tree-dfa.h
  0747c6d31b270b2ef08edf37adc78e96  gcc/tree-diagnostic-cfg.cc
  6249f69b6938f0c765dfd5c8b8919870  gcc/tree-diagnostic-client-data-hooks.cc
*************** c3f03b9ec39a5dd9d9d6328f439b796c  gcc/tr
*** 134194,134200 ****
  0cb6286531ef1298c60bd670fe8a1f62  gcc/tree-emutls.cc
  278ef0d1cc8f017ae51affd9a1e110a5  gcc/tree-hash-traits.h
  f8be97e59befb22cc3869e742a095cca  gcc/tree-hasher.h
! cdd5b6e337c42a25898e156aa6966042  gcc/tree-if-conv.cc
  87f110e202a07bb1d7e6402808531851  gcc/tree-if-conv.h
  a732d62d3abbd72dc1de3342a12fd876  gcc/tree-inline.cc
  8e4dac1ee5fbcab0629042db2f9ece45  gcc/tree-inline.h
--- 134368,134374 ----
  0cb6286531ef1298c60bd670fe8a1f62  gcc/tree-emutls.cc
  278ef0d1cc8f017ae51affd9a1e110a5  gcc/tree-hash-traits.h
  f8be97e59befb22cc3869e742a095cca  gcc/tree-hasher.h
! 06e293896007b9a6f9a2f8b6d0fce77c  gcc/tree-if-conv.cc
  87f110e202a07bb1d7e6402808531851  gcc/tree-if-conv.h
  a732d62d3abbd72dc1de3342a12fd876  gcc/tree-inline.cc
  8e4dac1ee5fbcab0629042db2f9ece45  gcc/tree-inline.h
*************** b1c1f1362ac401ede3373f8aa23c02f1  gcc/tr
*** 134250,134256 ****
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
  d318cb186caea47cbda1132b6c111843  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 0fabb8517c1852a297b33aefae0a4f8d  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
  f084337b877c38fa179ae0f14738ee83  gcc/tree-ssa-loop-manip.cc
  035c28a41f0d6337f42b24ced6477de5  gcc/tree-ssa-loop-manip.h
--- 134424,134430 ----
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
  d318cb186caea47cbda1132b6c111843  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 7be967c107f833bcf72c34bdbd18ff5e  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
  f084337b877c38fa179ae0f14738ee83  gcc/tree-ssa-loop-manip.cc
  035c28a41f0d6337f42b24ced6477de5  gcc/tree-ssa-loop-manip.h
*************** f084337b877c38fa179ae0f14738ee83  gcc/tr
*** 134258,134278 ****
  4b19cd267d749c27d7e2b616b46fe8d6  gcc/tree-ssa-loop-niter.h
  1b3164ae2d55cbf742ebf0774d0106cf  gcc/tree-ssa-loop-prefetch.cc
  f7b409734eec08cd9a87244dc663df3a  gcc/tree-ssa-loop-split.cc
! b40e503b1c066e432f44fab811edde5a  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! 54030144b22461574bcb5df4b36da06b  gcc/tree-ssa-math-opts.cc
  d9c1a707b0689a42a82fe1fed6004f53  gcc/tree-ssa-math-opts.h
! 56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! ebd873d370c7679b934448f40ae3ec17  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
  f02a6ba2c827456d0c3cdb49275920e4  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
  d38017eb69a50f24b5e47ee97928afde  gcc/tree-ssa-propagate.h
  6e6117c73429cd3635e978bbc73398a5  gcc/tree-ssa-reassoc.cc
  9a67eb78dfcbdb36f2fbf9b5dd4ff29c  gcc/tree-ssa-reassoc.h
! b429ac04bc5706ac8fcdb73291acea81  gcc/tree-ssa-sccvn.cc
  5383ea87af0b46b54348af602d9b6243  gcc/tree-ssa-sccvn.h
  2b138ac94e5d6a2e499018e91e58a737  gcc/tree-ssa-scopedtables.cc
  f9f30b312deca96b11a781af60153767  gcc/tree-ssa-scopedtables.h
--- 134432,134452 ----
  4b19cd267d749c27d7e2b616b46fe8d6  gcc/tree-ssa-loop-niter.h
  1b3164ae2d55cbf742ebf0774d0106cf  gcc/tree-ssa-loop-prefetch.cc
  f7b409734eec08cd9a87244dc663df3a  gcc/tree-ssa-loop-split.cc
! 9d2e3603fb8acf2f41af51c81148c532  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! 457c18b4a2b2fa19362c2552de1c5da0  gcc/tree-ssa-math-opts.cc
  d9c1a707b0689a42a82fe1fed6004f53  gcc/tree-ssa-math-opts.h
! 864b9616ff3845590bc20245a988014f  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! a09f8c21421aa07630931595b9480d9e  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
  f02a6ba2c827456d0c3cdb49275920e4  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
  d38017eb69a50f24b5e47ee97928afde  gcc/tree-ssa-propagate.h
  6e6117c73429cd3635e978bbc73398a5  gcc/tree-ssa-reassoc.cc
  9a67eb78dfcbdb36f2fbf9b5dd4ff29c  gcc/tree-ssa-reassoc.h
! 8783b80a3923bd7e7ddae51c74b4a333  gcc/tree-ssa-sccvn.cc
  5383ea87af0b46b54348af602d9b6243  gcc/tree-ssa-sccvn.h
  2b138ac94e5d6a2e499018e91e58a737  gcc/tree-ssa-scopedtables.cc
  f9f30b312deca96b11a781af60153767  gcc/tree-ssa-scopedtables.h
*************** f3e7c56f55d15a7ad4c88bc40bad8aa5  gcc/tr
*** 134285,134292 ****
  4835f0b56bdf88ee25d6d6e08808a7db  gcc/tree-ssa-ter.cc
  ade30359e437d413371ab6bf896f2aa8  gcc/tree-ssa-ter.h
  f5075a603491d0b4b548a248cbdc32cd  gcc/tree-ssa-threadbackward.cc
! 5957c03e6224f408fea9feda5dc9ade5  gcc/tree-ssa-threadedge.cc
! 68901eab6fa42a8561fa69c7ce55bf1d  gcc/tree-ssa-threadedge.h
  8416f93e46cc19ba1ed45d9116a65f7c  gcc/tree-ssa-threadupdate.cc
  6ae22a129e976993fbaac3835c48fed3  gcc/tree-ssa-threadupdate.h
  0b038be05a994656b633b1dad37e5247  gcc/tree-ssa-uncprop.cc
--- 134459,134466 ----
  4835f0b56bdf88ee25d6d6e08808a7db  gcc/tree-ssa-ter.cc
  ade30359e437d413371ab6bf896f2aa8  gcc/tree-ssa-ter.h
  f5075a603491d0b4b548a248cbdc32cd  gcc/tree-ssa-threadbackward.cc
! d394dcc1502554825e7052dfaf4aeef8  gcc/tree-ssa-threadedge.cc
! 8542db41913e7878be6bd1d062906ce8  gcc/tree-ssa-threadedge.h
  8416f93e46cc19ba1ed45d9116a65f7c  gcc/tree-ssa-threadupdate.cc
  6ae22a129e976993fbaac3835c48fed3  gcc/tree-ssa-threadupdate.h
  0b038be05a994656b633b1dad37e5247  gcc/tree-ssa-uncprop.cc
*************** f8119a019450befbbf3e3e40b010cf74  gcc/tr
*** 134304,134322 ****
  5c9352e02cad1ec310b10d331d908304  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! 1e5f0f6998c2e3dbfb189897ae86b2f6  gcc/tree-vect-data-refs.cc
  43fbcc51e0b7cfe300481b1408f494ea  gcc/tree-vect-generic.cc
  10dc735c7b271ce8c1ba325571ec3a59  gcc/tree-vect-loop-manip.cc
! 525520454568aa2ac104fdd2e856c0a0  gcc/tree-vect-loop.cc
  0cc046a7dcbeca6803fafbcb38ce07aa  gcc/tree-vect-patterns.cc
! c9a63a1d9504fc1c0c16dd1cee09fc33  gcc/tree-vect-slp-patterns.cc
! b2de9d43937b13b67a245c20e8245902  gcc/tree-vect-slp.cc
! 9de846d8a4ca63954d7e6c152e32ce91  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
  a87f80d9a1405f816a0b6d544400beef  gcc/tree-vectorizer.cc
! 952e2adf81b3d26e58847c1888f78f0c  gcc/tree-vectorizer.h
! a95d3232c0c2f689728a28b57249b8f7  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
  a4ab2585ba7a7ead01f4206ea9b0bd59  gcc/tree.cc
  5e9c53a573546d9a37c30e50e76f7e61  gcc/tree.def
--- 134478,134496 ----
  5c9352e02cad1ec310b10d331d908304  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! e8cbe632cd556aee8ed1d8594c1f5ba9  gcc/tree-vect-data-refs.cc
  43fbcc51e0b7cfe300481b1408f494ea  gcc/tree-vect-generic.cc
  10dc735c7b271ce8c1ba325571ec3a59  gcc/tree-vect-loop-manip.cc
! 7c58d2244bf7b55dff908aab854c223d  gcc/tree-vect-loop.cc
  0cc046a7dcbeca6803fafbcb38ce07aa  gcc/tree-vect-patterns.cc
! adc8fd9779ef4fcb38ee08bd29c7fb3b  gcc/tree-vect-slp-patterns.cc
! 3943dd11e0f8657f96401f2bc0b97c1b  gcc/tree-vect-slp.cc
! 2a643a1ba8245a01c2ccfc3e66d2eaae  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
  a87f80d9a1405f816a0b6d544400beef  gcc/tree-vectorizer.cc
! 5b64f0c9d87e8800980cb1e36ade761c  gcc/tree-vectorizer.h
! 9dcd7277d58f4c7c310cfc56d652ae80  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
  a4ab2585ba7a7ead01f4206ea9b0bd59  gcc/tree.cc
  5e9c53a573546d9a37c30e50e76f7e61  gcc/tree.def
*************** cffdeae41b78da05839b193e90188f55  libcod
*** 134652,134658 ****
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! 87ae1d41aca127acd6637d3d733fa64b  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  4f1e80b433907c013fc6e4eaf2b0e8aa  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
--- 134826,134832 ----
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! 28457dddfa7655504c2bc92d9f23d1dc  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  4f1e80b433907c013fc6e4eaf2b0e8aa  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
*************** e6648c5f8f4e111883be81dc9e8dd630  libcpp
*** 134667,134675 ****
  492ac13a792a1dcf2f9c99dae6140d14  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  bf0c57c21ee2aeaa654ee6781e41cad5  libcpp/identifiers.cc
! f4c0de4a7c7ad294e865f549c13b28f0  libcpp/include/cpplib.h
  a5730f5ab9435bb5d8446830fe8f3706  libcpp/include/label-text.h
! a1437b4af2ebadc3d027a5323db61b96  libcpp/include/line-map.h
  6c27e4af6058e741469234cdf0f74c01  libcpp/include/mkdeps.h
  0c5086e2180aacc727c73843682f1fe9  libcpp/include/rich-location.h
  1e65760d4159f777cf02dedef8a52357  libcpp/include/symtab.h
--- 134841,134849 ----
  492ac13a792a1dcf2f9c99dae6140d14  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  bf0c57c21ee2aeaa654ee6781e41cad5  libcpp/identifiers.cc
! 3319cdb10a7f02bded3efb6b1eb93ac7  libcpp/include/cpplib.h
  a5730f5ab9435bb5d8446830fe8f3706  libcpp/include/label-text.h
! 73cac049a7890b825d0634b09ec76720  libcpp/include/line-map.h
  6c27e4af6058e741469234cdf0f74c01  libcpp/include/mkdeps.h
  0c5086e2180aacc727c73843682f1fe9  libcpp/include/rich-location.h
  1e65760d4159f777cf02dedef8a52357  libcpp/include/symtab.h
*************** c861703e5b987a207224e25a42109628  libga6
*** 135237,135243 ****
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  155cefb69ce6e5cbc63301ec31ca4bcb  libga68/sppp.awk
  2fa97828e3e0465a81a613f3f4173bdd  libga68/standard.a68.in
! ee1afce52172575c1bb2dcdd9d7e5951  libgcc/ChangeLog
  6926dcea143d4f6166d7feff9e8ee35a  libgcc/Makefile.in
  2784b3778636af2fb69b003fd8743e11  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
--- 135411,135417 ----
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  155cefb69ce6e5cbc63301ec31ca4bcb  libga68/sppp.awk
  2fa97828e3e0465a81a613f3f4173bdd  libga68/standard.a68.in
! f19de86051e61cbd2f4039ed4da17fef  libgcc/ChangeLog
  6926dcea143d4f6166d7feff9e8ee35a  libgcc/Makefile.in
  2784b3778636af2fb69b003fd8743e11  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
*************** d1bc698652ed847a9a315e51f8dfecc1  libgcc
*** 135388,135394 ****
  df0aad854e7aaf3c4ab3e718b6953ce6  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
! 122bbba7b2f0ed4283449af510301a17  libgcc/config/avr/libf7/ChangeLog
  1b3a595323fbea22cd1737fc614cc808  libgcc/config/avr/libf7/asm-defs.h
  9bd59f1ae77ab1aca77f15fb5ede4792  libgcc/config/avr/libf7/f7-renames.h
  92bbb0397c760b4e93af191f49964ad4  libgcc/config/avr/libf7/f7-wraps.h
--- 135562,135568 ----
  df0aad854e7aaf3c4ab3e718b6953ce6  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
! b53e6dffbcdd297b511f2632f622d531  libgcc/config/avr/libf7/ChangeLog
  1b3a595323fbea22cd1737fc614cc808  libgcc/config/avr/libf7/asm-defs.h
  9bd59f1ae77ab1aca77f15fb5ede4792  libgcc/config/avr/libf7/f7-renames.h
  92bbb0397c760b4e93af191f49964ad4  libgcc/config/avr/libf7/f7-wraps.h
*************** b9901623ec29c1c4dd98d6fae040518c  libgcc
*** 135396,135402 ****
  d250706c46cb1217dd828894cbba2d45  libgcc/config/avr/libf7/f7wraps.sh
  21c3bae3e2a940175ece1853b7992808  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! b4cb39f6c19743988cc2a1748ed19cd1  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
  894bb7590b14eeb4fa15f02a1445749c  libgcc/config/avr/libf7/libf7-common.mk
  92d858f8a00be9163a745497796e81c2  libgcc/config/avr/libf7/libf7-const.def
--- 135570,135576 ----
  d250706c46cb1217dd828894cbba2d45  libgcc/config/avr/libf7/f7wraps.sh
  21c3bae3e2a940175ece1853b7992808  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 3b0a5f11a1cf5095cfdc188d7c366bc3  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
  894bb7590b14eeb4fa15f02a1445749c  libgcc/config/avr/libf7/libf7-common.mk
  92d858f8a00be9163a745497796e81c2  libgcc/config/avr/libf7/libf7-const.def
*************** badb073cfbf15031442110b1cfaeab5f  libgcc
*** 135405,135414 ****
  3e4fb67c778390ccd964ce9b3b53ed69  libgcc/config/avr/libf7/libf7.h
  2921a86fef727ada45668b8c0f091e33  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
! 761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
  f9bd9d2ce3bb47680d79fd9507b16545  libgcc/config/avr/t-avr
! 42e21fd8b00be58d09a62b8654a8ba20  libgcc/config/avr/t-avrlibc
! 77d29be9a46b600293b32c93c09dacbf  libgcc/config/avr/t-copy-libgcc
  a2c28c9fd8e63f29ab5a369ef41e8b3b  libgcc/config/bfin/crti.S
  c807465774083c5a262478112bb960c3  libgcc/config/bfin/crtlibid.S
  bb4adfa09458aa770201b95e13b50a0d  libgcc/config/bfin/crtn.S
--- 135579,135587 ----
  3e4fb67c778390ccd964ce9b3b53ed69  libgcc/config/avr/libf7/libf7.h
  2921a86fef727ada45668b8c0f091e33  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
! 70fe7cb214a70e4b852ed001855cca4c  libgcc/config/avr/libf7/t-libf7-math-symbols
  f9bd9d2ce3bb47680d79fd9507b16545  libgcc/config/avr/t-avr
! 2982871abe13fbaed3df1b502fb18d2f  libgcc/config/avr/t-avrlibc
  a2c28c9fd8e63f29ab5a369ef41e8b3b  libgcc/config/bfin/crti.S
  c807465774083c5a262478112bb960c3  libgcc/config/bfin/crtlibid.S
  bb4adfa09458aa770201b95e13b50a0d  libgcc/config/bfin/crtn.S
*************** bbd10af0f21bbb60b8dcb578d21ea8fc  libgcc
*** 136294,136300 ****
  b542071feaa6f1914ec810a91b9f0e4c  libgcc/config/riscv/crti.S
  196894f3e59520659e3b0ba14bb0a903  libgcc/config/riscv/crtn.S
  3e8b5b53e342b916e5c14f9af338c109  libgcc/config/riscv/div.S
! 15bf4bccce1d3e67ee72c9509a21ebf0  libgcc/config/riscv/feature_bits.c
  3c665a373e2a4309fc79a25e5b436964  libgcc/config/riscv/libgcc-riscv.ver
  ee6e30cc4a2ad7734a1c0eacad56a515  libgcc/config/riscv/linux-unwind.h
  fc4c3defc96f140cf5aa4a7b4a7dfc66  libgcc/config/riscv/muldi3.S
--- 136467,136473 ----
  b542071feaa6f1914ec810a91b9f0e4c  libgcc/config/riscv/crti.S
  196894f3e59520659e3b0ba14bb0a903  libgcc/config/riscv/crtn.S
  3e8b5b53e342b916e5c14f9af338c109  libgcc/config/riscv/div.S
! 477e3b3150023761b6130cd032bf672b  libgcc/config/riscv/feature_bits.c
  3c665a373e2a4309fc79a25e5b436964  libgcc/config/riscv/libgcc-riscv.ver
  ee6e30cc4a2ad7734a1c0eacad56a515  libgcc/config/riscv/linux-unwind.h
  fc4c3defc96f140cf5aa4a7b4a7dfc66  libgcc/config/riscv/muldi3.S
*************** b7bdc64c03d62f87f61d3d8a61a75d2d  libgcc
*** 136811,136817 ****
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 863186be67c00fab368b012bf940754d  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
--- 136984,136990 ----
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! b0290e98d01f9684f6c0f4f252d69b20  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
*************** a69c3f28d1be90eb0b0287fa450c3684  libgco
*** 136821,136827 ****
  25a2c096c350f42299b74a614e669690  libgcobol/charmaps.cc
  b97e5e3959be046772be7195e17b3bbc  libgcobol/charmaps.h
  c6f3fa55b7a75f8923a1121bea070575  libgcobol/cobol-endian.h
! e67b1d478e73531e6903730ef813115b  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
  cd939f69cddc5b160139ea6907d79ef4  libgcobol/compat/gnu/cpy/cbltypes.cpy
--- 136994,137000 ----
  25a2c096c350f42299b74a614e669690  libgcobol/charmaps.cc
  b97e5e3959be046772be7195e17b3bbc  libgcobol/charmaps.h
  c6f3fa55b7a75f8923a1121bea070575  libgcobol/cobol-endian.h
! c9893e74b9108ddc25393efd51822a45  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
  cd939f69cddc5b160139ea6907d79ef4  libgcobol/compat/gnu/cpy/cbltypes.cpy
*************** a5821ed24abf64b452f15f29da418d17  libgco
*** 136860,136874 ****
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
  d66e2e5f90017f5c8cf2bb59f76147bb  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 965132412de3bbbabf6937cc10d90241  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! 2e5cc371a2a7e96c53286cd39cc0fd16  libgcobol/inspect.cc
  8ce19238ab1b69a66932695b3a66bc63  libgcobol/intrinsic.cc
  39a69263ea925e87b4be6a7a46fef00e  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
  39a9dbab64d7e5acec671784d7ca4cde  libgcobol/libgcobol-fp.h
! db909eb177d56d8e01ec76d50d4876ff  libgcobol/libgcobol.cc
! 19a12a69d98b1b2b0a80009a9d568a52  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
  3c13ce94849ae290e0e9f10c0d2e04de  libgcobol/posix/README.md
--- 137033,137047 ----
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
  d66e2e5f90017f5c8cf2bb59f76147bb  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 9eeefa0aebeff96f4e7f883c3a1a4590  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! ea960dfe82971d2aac5a27c915f34015  libgcobol/inspect.cc
  8ce19238ab1b69a66932695b3a66bc63  libgcobol/intrinsic.cc
  39a69263ea925e87b4be6a7a46fef00e  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
  39a9dbab64d7e5acec671784d7ca4cde  libgcobol/libgcobol-fp.h
! a8841c8499c5f5c7493c96451ab14c70  libgcobol/libgcobol.cc
! b753dac349f7878c0952d34e65f1445a  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
  3c13ce94849ae290e0e9f10c0d2e04de  libgcobol/posix/README.md
*************** c04e4e4d264af0c1d4e39e88a93d6258  libgfo
*** 137985,138007 ****
  ac9900506f66729b67b81e0404c39eb1  libgfortran/runtime/select_inc.c
  fdc5bc5ac9f0f6c3348f4f076be6db95  libgfortran/runtime/stop.c
  48bdb4b17463d0fcaca2653d6e84ddaf  libgfortran/runtime/string.c
! 566c63fc1be005a43a2d78319e6cf39b  libgm2/ChangeLog
  2ec18ce57d522f873f67d3b396ec3a36  libgm2/Makefile.am
! f4e170fb8d37996ab1fed13f33516611  libgm2/Makefile.in
  cc0e852d9771f65adf2905912e55f880  libgm2/acinclude.m4
! cfcbb5f38aa0e0fdc2e8100b2edcd7e2  libgm2/aclocal.m4
! d69a25175a3d3835eaf6db2e0122cde2  libgm2/ax_python_devel.m4
! 72338d383a268933dc15683208ba5c56  libgm2/config.h.in
! 03bf5228f067dbd9842158b68ed64ac6  libgm2/configure
! 4eefa102080e284c4d614c8f1da05e43  libgm2/configure.ac
  452a5ac96f20a98b63f24d27a1643c9b  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
  eba71a8a55cf6f4642cca217c2b9ca66  libgm2/libm2cor/Makefile.am
! 93d17fa8c7cd4011679ad9053e8f3cbe  libgm2/libm2cor/Makefile.in
  256f893d9141ee50fb703d08f0c7ce3a  libgm2/libm2iso/ChanConsts.h
  87d5ba33acc7d56c7dd0f43a7d6660ca  libgm2/libm2iso/ErrnoCategory.cc
  3a7a3fe2b04df696c07ac593772c09bf  libgm2/libm2iso/Makefile.am
! 3b5ef46025c5d2c2cc4f1f889f854bd2  libgm2/libm2iso/Makefile.in
  55e7456cbf4c00590b7d5c26437bf683  libgm2/libm2iso/RTco.cc
  911847bdf8d4ef8b97f150f284d2ec8f  libgm2/libm2iso/m2rts.h
  9cb2d2fda0da4de1596491a1ba383634  libgm2/libm2iso/wrapclock.cc
--- 138158,138180 ----
  ac9900506f66729b67b81e0404c39eb1  libgfortran/runtime/select_inc.c
  fdc5bc5ac9f0f6c3348f4f076be6db95  libgfortran/runtime/stop.c
  48bdb4b17463d0fcaca2653d6e84ddaf  libgfortran/runtime/string.c
! c4ce04041cf64c14b879b176e021a91c  libgm2/ChangeLog
  2ec18ce57d522f873f67d3b396ec3a36  libgm2/Makefile.am
! f98ac7c0222a61feeee6a964dc39a050  libgm2/Makefile.in
  cc0e852d9771f65adf2905912e55f880  libgm2/acinclude.m4
! 000f031aa5381b78420105239b2d1643  libgm2/aclocal.m4
! e8adc12e9f128f11ac5e6235995fa659  libgm2/ax_python_interpreter.m4
! ec51f8ac3552cbacd95bf08e21a6568a  libgm2/config.h.in
! a02fea5655b5980ef667cf4fcf80399c  libgm2/configure
! 15ea071eb3b9776c2c9dcec941a71c26  libgm2/configure.ac
  452a5ac96f20a98b63f24d27a1643c9b  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
  eba71a8a55cf6f4642cca217c2b9ca66  libgm2/libm2cor/Makefile.am
! b97157d9ffe050470c1bd3615888737c  libgm2/libm2cor/Makefile.in
  256f893d9141ee50fb703d08f0c7ce3a  libgm2/libm2iso/ChanConsts.h
  87d5ba33acc7d56c7dd0f43a7d6660ca  libgm2/libm2iso/ErrnoCategory.cc
  3a7a3fe2b04df696c07ac593772c09bf  libgm2/libm2iso/Makefile.am
! 269a211da77641fcaf63408113dadc15  libgm2/libm2iso/Makefile.in
  55e7456cbf4c00590b7d5c26437bf683  libgm2/libm2iso/RTco.cc
  911847bdf8d4ef8b97f150f284d2ec8f  libgm2/libm2iso/m2rts.h
  9cb2d2fda0da4de1596491a1ba383634  libgm2/libm2iso/wrapclock.cc
*************** e3037b97506181892bc760a12d9c5f69  libgm2
*** 138009,138021 ****
  33246d6ec18583a1eb0fc89ca61f4fd8  libgm2/libm2iso/wraptime.cc
  eb003ee7f1b2cf1972500be967c4d5eb  libgm2/libm2log/Break.c
  f45fbd032cc829fdc22061592bda8a26  libgm2/libm2log/Makefile.am
! ffff56a00e7f308d347042c9bdfe9c58  libgm2/libm2log/Makefile.in
  d40e2577868c3e431cc6fc8eca77b4d4  libgm2/libm2min/Makefile.am
! 7b6239035b65f4e0bcc446c1faf3758e  libgm2/libm2min/Makefile.in
  a9f05e5da997bab66d457b3be2773189  libgm2/libm2min/libc.c
  672db9b5f503b1b02773144313a13746  libgm2/libm2pim/CFileSysOp.cc
  f8bfb289685e02ce70ca7728a8d7c53d  libgm2/libm2pim/Makefile.am
! dde44b8aa2b6bab7daa7aed922589089  libgm2/libm2pim/Makefile.in
  944531ee3e0d441b1c7209ac2c2355eb  libgm2/libm2pim/Selective.cc
  635915386732139700506c42de8b469d  libgm2/libm2pim/SysExceptions.cc
  04512543e0711f8f6f6e1fb2a995330e  libgm2/libm2pim/UnixArgs.cc
--- 138182,138194 ----
  33246d6ec18583a1eb0fc89ca61f4fd8  libgm2/libm2iso/wraptime.cc
  eb003ee7f1b2cf1972500be967c4d5eb  libgm2/libm2log/Break.c
  f45fbd032cc829fdc22061592bda8a26  libgm2/libm2log/Makefile.am
! 723baecc206cb9597b5a9a5da7f0b2df  libgm2/libm2log/Makefile.in
  d40e2577868c3e431cc6fc8eca77b4d4  libgm2/libm2min/Makefile.am
! f95cd95aa6b51884a497155a02af330c  libgm2/libm2min/Makefile.in
  a9f05e5da997bab66d457b3be2773189  libgm2/libm2min/libc.c
  672db9b5f503b1b02773144313a13746  libgm2/libm2pim/CFileSysOp.cc
  f8bfb289685e02ce70ca7728a8d7c53d  libgm2/libm2pim/Makefile.am
! a31bda08d284241c06d063c534d1783f  libgm2/libm2pim/Makefile.in
  944531ee3e0d441b1c7209ac2c2355eb  libgm2/libm2pim/Selective.cc
  635915386732139700506c42de8b469d  libgm2/libm2pim/SysExceptions.cc
  04512543e0711f8f6f6e1fb2a995330e  libgm2/libm2pim/UnixArgs.cc
*************** a73d560a3ba317c5ad0a7919d87b4b6d  libssp
*** 149219,149225 ****
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 0c0485189f662b2000042967eed6544e  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 149392,149398 ----
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 5efaa5854feae836c05493816de864d4  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** e2f6bc8455578b451d2fad8a29b3812a  libstd
*** 149620,149626 ****
  d0d45f15e189e6eac6d7b09d58e62126  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! 5485184cdb9c6d317bb3791fdeefc4f5  libstdc++-v3/doc/html/manual/status.html
  2bb0a804b7a221e3efd638dcc9157992  libstdc++-v3/doc/html/manual/std_contents.html
  f19ec003f120129cc9642be7180e6573  libstdc++-v3/doc/html/manual/streambufs.html
  2a262c4a0f123859ea1ea62fc6c5a226  libstdc++-v3/doc/html/manual/strings.html
--- 149793,149799 ----
  d0d45f15e189e6eac6d7b09d58e62126  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! 35d5bb5ea0c627913879645a284dd031  libstdc++-v3/doc/html/manual/status.html
  2bb0a804b7a221e3efd638dcc9157992  libstdc++-v3/doc/html/manual/std_contents.html
  f19ec003f120129cc9642be7180e6573  libstdc++-v3/doc/html/manual/streambufs.html
  2a262c4a0f123859ea1ea62fc6c5a226  libstdc++-v3/doc/html/manual/strings.html
*************** f2cec4c0413bb66fff26d54e511e7bc4  libstd
*** 149866,149873 ****
  489d722dcc0ffd803381783b8fe62624  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
  c9b4dfcbbb3aa2ab7b1e0df423f53f8f  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
  1e5265ce142bba4140e33ee4187dd0cd  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! 4e4f4842d5244693666cfcd2d939433f  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
! 12dc8470bfec67f359432bf984a558fb  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
  4a168e3f16ad2df6f448f8f55481a09d  libstdc++-v3/doc/xml/manual/status_cxx2023.xml
  e12241b98a6c1e835b7b1d1bb31761ca  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
  24e5c202f6a55504167ccc0c8395b881  libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
--- 150039,150046 ----
  489d722dcc0ffd803381783b8fe62624  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
  c9b4dfcbbb3aa2ab7b1e0df423f53f8f  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
  1e5265ce142bba4140e33ee4187dd0cd  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! b8b6f0e190809d433156bf86b15e032f  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
! ddcfb8a83610c16288f327d77b3193b4  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
  4a168e3f16ad2df6f448f8f55481a09d  libstdc++-v3/doc/xml/manual/status_cxx2023.xml
  e12241b98a6c1e835b7b1d1bb31761ca  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
  24e5c202f6a55504167ccc0c8395b881  libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
*************** d0c15c840deae482dec44e2172ecee5c  libstd
*** 149913,149919 ****
  5cbbd0fafb904f86c9ddce3fc54380f1  libstdc++-v3/include/bits/char_traits.h
  9a3227d14b324832ae22b4c7ec6979e2  libstdc++-v3/include/bits/charconv.h
  a15f9dcf8ee271924862e5e3c21b9bd5  libstdc++-v3/include/bits/chrono.h
! 4afff0951e01d3e90fe0cc9f7f1779ad  libstdc++-v3/include/bits/chrono_io.h
  1f26067336c4957237db887ab1ce6b55  libstdc++-v3/include/bits/codecvt.h
  53f7e45e350f1bb99b3d67e27f914b61  libstdc++-v3/include/bits/concept_check.h
  57c20bfd264af582740709b6953c165f  libstdc++-v3/include/bits/cow_string.h
--- 150086,150092 ----
  5cbbd0fafb904f86c9ddce3fc54380f1  libstdc++-v3/include/bits/char_traits.h
  9a3227d14b324832ae22b4c7ec6979e2  libstdc++-v3/include/bits/charconv.h
  a15f9dcf8ee271924862e5e3c21b9bd5  libstdc++-v3/include/bits/chrono.h
! 8eeac1cd6f94473ba90c216579c5242e  libstdc++-v3/include/bits/chrono_io.h
  1f26067336c4957237db887ab1ce6b55  libstdc++-v3/include/bits/codecvt.h
  53f7e45e350f1bb99b3d67e27f914b61  libstdc++-v3/include/bits/concept_check.h
  57c20bfd264af582740709b6953c165f  libstdc++-v3/include/bits/cow_string.h
*************** f431aa799cd5cc175e6d5af7130ac487  libstd
*** 150678,150684 ****
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  7235332847d63e07816e2413bfeb06b0  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
! fe7a6e270c022ad901db09ccea37802d  libstdc++-v3/include/std/optional
  bcf1c0b79e2efd9cd34763d368f40966  libstdc++-v3/include/std/ostream
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  f21d4fb805e3d8adee59a573e5e0e306  libstdc++-v3/include/std/queue
--- 150851,150857 ----
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  7235332847d63e07816e2413bfeb06b0  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
! d2eff63978fc35617270b82b357759a0  libstdc++-v3/include/std/optional
  bcf1c0b79e2efd9cd34763d368f40966  libstdc++-v3/include/std/ostream
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  f21d4fb805e3d8adee59a573e5e0e306  libstdc++-v3/include/std/queue
*************** d9b30ac9f13a2d342a56ff319aca749e  libstd
*** 150693,150699 ****
  88afd00cee949042aba6fd1cbaf15a6f  libstdc++-v3/include/std/simd
  b3171714703fcfc5d8fe69ffe22d9cc8  libstdc++-v3/include/std/source_location
  e691e3e1c795a2e57f49580a98fc2058  libstdc++-v3/include/std/span
! b3f5400b3e99e8767f9ec53ef2385b67  libstdc++-v3/include/std/spanstream
  622e32cb4f822b51d4c1c6a9a6e5dc31  libstdc++-v3/include/std/sstream
  b6722fe0aede85ed4a17876751fe8b59  libstdc++-v3/include/std/stack
  88bb9b1fd74e5e06e1aeef52917d3612  libstdc++-v3/include/std/stacktrace
--- 150866,150872 ----
  88afd00cee949042aba6fd1cbaf15a6f  libstdc++-v3/include/std/simd
  b3171714703fcfc5d8fe69ffe22d9cc8  libstdc++-v3/include/std/source_location
  e691e3e1c795a2e57f49580a98fc2058  libstdc++-v3/include/std/span
! 0f3df3a8f01bd5b1e143efeccc3919fb  libstdc++-v3/include/std/spanstream
  622e32cb4f822b51d4c1c6a9a6e5dc31  libstdc++-v3/include/std/sstream
  b6722fe0aede85ed4a17876751fe8b59  libstdc++-v3/include/std/stack
  88bb9b1fd74e5e06e1aeef52917d3612  libstdc++-v3/include/std/stacktrace
*************** c2bd27af25e57adce5807e0f01a2d0dc  libstd
*** 151016,151022 ****
  a270ee65b1040ddec3d1ccf46a1d71d3  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  0dfa4a770289b4e926b8281770732d5a  libstdc++-v3/src/c++20/tzdata.zi
! b0f3e9515e49ea6826dd6aa75c8dd057  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
  f5e1e9704d6f3d356622774831b83e80  libstdc++-v3/src/c++23/Makefile.am
  0c345dbda3ed85d407f5334532049106  libstdc++-v3/src/c++23/Makefile.in
--- 151189,151195 ----
  a270ee65b1040ddec3d1ccf46a1d71d3  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  0dfa4a770289b4e926b8281770732d5a  libstdc++-v3/src/c++20/tzdata.zi
! fe3f04b248a8eab03b8a232b68a098c3  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
  f5e1e9704d6f3d356622774831b83e80  libstdc++-v3/src/c++23/Makefile.am
  0c345dbda3ed85d407f5334532049106  libstdc++-v3/src/c++23/Makefile.in
*************** babc984473ac742cba4e40b7ca0044a5  libstd
*** 158656,158661 ****
--- 158829,158835 ----
  1fcb896c44256929a07977ca21fe5196  libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc
  37900198219b3bf746a84814e92c58b9  libstdc++-v3/testsuite/27_io/rvalue_streams.cc
  9f91196bd2ee848a8c2cfc4258d112cb  libstdc++-v3/testsuite/27_io/spanstream/1.cc
+ 3594f52a64f56373d233b505e211d1ba  libstdc++-v3/testsuite/27_io/spanstream/127006.cc
  d8cec34c2a6b668a6dc232e2f6df1ff5  libstdc++-v3/testsuite/27_io/spanstream/2.cc
  33aa6ce2c2e3d3959e5a01a4971407e1  libstdc++-v3/testsuite/27_io/spanstream/version.cc
  0289439f25a083a7baf572a21ffb21b6  libstdc++-v3/testsuite/27_io/types/1.cc
*************** b9e1cd9af09021808a764909a324097b  libstd
*** 160838,160843 ****
--- 161012,161018 ----
  3c922068cf98b21e732c0de16c319289  libstdc++-v3/testsuite/std/time/tzdb/1.cc
  c142573e06d5c52d53f0f20e1e72e973  libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
  6950b88828afb2cebccd6617fe0d64a5  libstdc++-v3/testsuite/std/time/tzdb/links.cc
+ dd190f49f5cf57dcbaf596dc7a7085a1  libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc
  fbaa899641d17201d9f891486537af1b  libstdc++-v3/testsuite/std/time/tzdb_list/1.cc
  5c4efe4c1fd019cb6e7bfda4081a2dbe  libstdc++-v3/testsuite/std/time/tzdb_list/pr118811.cc
  3f7dc336d0ee3feaddb94ae16964cbf1  libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
diff -Nrcpad gcc-17-20260823/gcc/ChangeLog gcc-17-20260830/gcc/ChangeLog
*** gcc-17-20260823/gcc/ChangeLog	Sun Aug 23 22:32:05 2026
--- gcc-17-20260830/gcc/ChangeLog	Sun Aug 30 22:32:05 2026
***************
*** 1,3 ****
--- 1,891 ----
+ 2026-08-29  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* tree-ssa-loop-ivopts.cc (ivopts_estimate_reg_pressure): Remove
+ 	stray semi-colon and fix formatting.
+ 
+ 2026-08-29  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* common.opt.urls: Regenerate.
+ 
+ 2026-08-29  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/install.texi (Configuration): Update SARIF website.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* config/alpha/alpha.md (UNSPEC_SSP_SET, UNSPEC_SSP_TEST): New
+ 	unspecs.
+ 	(stack_protect_set, stack_protect_setdi): New patterns.
+ 	(stack_protect_test, stack_protect_testdi): Likewise.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* config/alpha/alpha.h (FRAME_GROWS_DOWNWARD): Define.
+ 	* config/alpha/alpha.cc (alpha_initial_elimination_offset): Resolve
+ 	FRAME_POINTER_REGNUM to the high end of the local variables when
+ 	FRAME_GROWS_DOWNWARD.
+ 	(alpha_vms_initial_elimination_offset): Likewise.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* config/alpha/alpha.cc (alpha_expand_unaligned_load): Use
+ 	copy_addr_to_reg to compute the byte address.
+ 	(alpha_expand_unaligned_store_safe_partial): Likewise.
+ 
+ 2026-08-29  Jovan Dmitrovic  <jovan.dmitrovic@htecgroup.com>
+ 	    Radosav Krunić  <radosav.krunic@htecgroup.com>
+ 
+ 	* tree-ssa-loop-ivopts.cc (ivopts_estimate_reg_pressure):
+ 	Change register pressure estimate in order to respect
+ 	the impact of spilling induction variables, compared
+ 	to spilling loop invariants.
+ 
+ 2026-08-29  Jovan Dmitrovic  <jovan.dmitrovic@htecgroup.com>
+ 
+ 	* tree-ssa-loop-ivopts.cc (ivopts_estimate_reg_pressure):
+ 	Remove target_reg_cost from the computation of register pressure
+ 	and target_res_regs from the computation of available registers.
+ 
+ 2026-08-29  Jovan Dmitrovic  <jovan.dmitrovic@htecgroup.com>
+ 	    Radosav Krunić  <radosav.krunic@htecgroup.com>
+ 
+ 	* tree-ssa-loop-ivopts.cc (ivopts_estimate_reg_pressure):
+ 	Remove n_cands bias from reg pressure cost calculation.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* config/alpha/alpha.h (FRAME_ADDR_RTX): Define.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* builtins.cc (expand_builtin_return_addr): Pass COUNT to
+ 	FRAME_ADDR_RTX.
+ 	* defaults.h (FRAME_ADDR_RTX): Add COUNT argument.
+ 	* config/epiphany/epiphany.h (FRAME_ADDR_RTX): Likewise.
+ 	* config/s390/s390.h (FRAME_ADDR_RTX): Likewise.
+ 	* config/sparc/sparc.h (FRAME_ADDR_RTX): Likewise.
+ 	* doc/tm.texi.in (FRAME_ADDR_RTX): Document COUNT and the
+ 	NULL_RTX return value.
+ 	* doc/tm.texi: Regenerate.
+ 
+ 2026-08-29  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/extend.texi (ARM ARMv8-M Security Extensions): Update URL.
+ 	* doc/invoke.texi (ARM Options): Ditto.
+ 
+ 2026-08-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR middle-end/127098
+ 	* config/avr/avr.md (MPUSH): Add TImode to mode iterator.
+ 	* config/avr/avr.h (PUSH_ROUNDING): Adjust comment.
+ 
+ 2026-08-29  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/126896
+ 	* tree-ssa-phiopt.cc (pass_phiopt::execute): Run
+ 	replicate_conds_over_phis in early phiopt too.
+ 
+ 2026-08-28  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127039
+ 	* fold-const-call.cc (fold_const_reduction): Fold non-stepped constants
+ 	when the available lane-count information determines the result.
+ 	* match.pd (reduction of a vector duplicate): New simplifications to
+ 	the duplicated element or zero.
+ 
+ 2026-08-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127105
+ 	* tree-vect-slp.cc (vect_analyze_slp_reduc_chain): Access
+ 	scalar_stmts[0] only after we determined it exists.
+ 
+ 2026-08-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	* common.opt (ftree-loop-if-convert): Mark as ignored.
+ 	* doc/invoke.texi (ftree-loop-if-convert): Remove.
+ 	* tree-ssa-phiopt.cc (cond_if_else_store_replacement):
+ 	Do not check !flag_tree_loop_if_convert.
+ 	* tree-if-conv.cc (pass_if_conversion::gate): Only
+ 	run when loop vectorization is enabled on any loop.
+ 	(pass_if_conversion::execute): Adjust.
+ 	(tree_if_conversion): Likewise.  Simplify as we now
+ 	always version.
+ 	(convert_scalar_cond_reduction): Remove loop_versioned
+ 	argument which is now always true.
+ 	(predicate_scalar_phi): Likewise.
+ 	(predicate_all_scalar_phis): Likewise.
+ 	(combine_blocks): Likewise.
+ 
+ 2026-08-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-operands.cc (operands_scanner::verify_ssa_operands):
+ 	Verify there are no operands that need renaming.
+ 
+ 2026-08-28  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/127094
+ 	* gimple-range-phi.cc (phi_analyzer::process_phi): Do not process
+ 	the same name multiple times.
+ 
+ 2026-08-28  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/127082
+ 	* range-op.cc (operator_trunc_mod::same_quotient): New.
+ 	(operator_trunc_mod::wi_fold): Call same_quotient.
+ 
+ 2026-08-28  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/vector.md: Leverage Wvr constraint.
+ 
+ 2026-08-27  Pengxuan Zheng  <pengxuan.zheng@oss.qualcomm.com>
+ 
+ 	PR target/102055
+ 	* config/aarch64/aarch64.cc (is_bb_in_loop): New.
+ 	(aarch64_evpc_rev64_ext): New.
+ 	(aarch64_expand_vec_perm_const_1): Call aarch64_evpc_rev64_ext.
+ 
+ 2026-08-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/127100
+ 	* doc/md.texi (vec_mask_len_load_lanes@var{m}@var{n}): Use
+ 	operand4 - operand5 rather than operand4 + operand5.
+ 	(vec_mask_len_store_lanes@var{m}@var{n}): Use
+ 	operand3 - operand4 rather than operand3 + operand4.
+ 	(mask_len_gather_load@var{m}@var{n}): Use operand 7 - operand 8
+ 	rather than operand 7 + operand 8.
+ 	(mask_len_strided_load@var{m}): Use operand 4 - operand 5 rather
+ 	than operand 4 + operand 5.
+ 	(mask_len_scatter_store@var{m}@var{n}): Use operand 6 - operand 7
+ 	rather than operand 6 + operand 7.
+ 	(mask_len_strided_store@var{m}): Use operand 4 - operand 5 rather
+ 	than operand 4 + operand 5.
+ 	(len_load_@var{m}): Use operand 3 - operand 4 rather than
+ 	operand 3 + operand 4.
+ 	(len_store_@var{m}): Use operand 2 - operand 3 rather than
+ 	operand 2 + operand 3.
+ 	(mask_len_load@var{m}@var{n}): Use operand 4 - operand 5 rather
+ 	than operand 3 + operand 4 or operand 4 + operand 5.  Use
+ 	Operand 5 rather than Operand 4 when talking about bias QI mode.
+ 	(mask_len_store@var{m}@var{n}): Use operand 3 - operand 4 rather
+ 	than operand 3 + operand 4 or operand 2 + operand 4.
+ 	(cond_len_neg@var{mode}): Use operand 4 - operand 5 rather than
+ 	operand 4 + operand 5.  Use ops[4] - ops[5] rather than
+ 	ops[4] + ops[5].
+ 	(cond_len_add@var{mode}): Use operand 5 - operand 6 rather than
+ 	operand 5 + operand 6.  Use ops[5] - ops[6] rather than
+ 	ops[5] + ops[6].
+ 	(cond_len_fma@var{mode}): Use ops[6] - ops[7] rather than
+ 	ops[6] + ops[7].
+ 	* gimple-fold.cc (partial_load_store_mask_state): Compute wlen
+ 	as wi::to_poly_widest (len) - wi::to_widest (bias) rather than
+ 	wi::to_poly_widest (len) + wi::to_widest (bias).
+ 
+ 2026-08-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* common.opt (Wunsafe-loop-optimizations): Use 2 spaces instead of
+ 	1 between sentences in the description.
+ 	(Wunreachable-code, fargument-alias, fargument-noalias,
+ 	fargument-noalias-global, fargument-noalias-anything,
+ 	floop-flatten, fipa-matrix-reorg, fipa-struct-reorg,
+ 	foptimize-register-move, fregmove, ftree-vect-loop-version):
+ 	Likewise.
+ 	* config/alpha/alpha.opt (mgas): Use 2 spaces instead of 1 between
+ 	sentences in the description.
+ 
+ 2026-08-27  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
+ 
+ 	PR target/120192
+ 	* cfgexpand.cc (defer_stack_allocation): Use align_local_variable
+ 	to compute the alignment, matching expand_one_stack_var_1.
+ 
+ 2026-08-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_tree_3): Move stmt-local
+ 	checks first.  Check unsupported BIT_FIELD_REFs for all stmts.
+ 
+ 2026-08-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_tree_3): New function,
+ 	split out from ...
+ 	(vect_build_slp_tree_1): ... here.
+ 
+ 2026-08-27  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/127085
+ 	* tree-ssa-phiopt.cc (preserves_loop_structure_p): Remove.
+ 	(replicate_cond_into_pred): Do not call it.
+ 	(replicate_conds_over_phis): Never duplicate loop headers; do
+ 	not mark back edges; set LOOPS_NEED_FIXUP when the CFG changed.
+ 
+ 2026-08-27  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/9175.md: Complete list of instructions which are
+ 	utilizing the LSU/FXA/FXB.
+ 
+ 2026-08-27  Manjunath Matti  <mmatti@linux.ibm.com>
+ 
+ 	PR target/126512
+ 	* config/rs6000/rs6000-builtins.def (__builtin_altivec_vperm_1ti,
+ 	__builtin_altivec_vperm_1ti_uns, __builtin_altivec_vsel_1ti,
+ 	__builtin_altivec_vsel_1ti_uns, __builtin_altivec_vsldoi_v1ti): Move
+ 	from the [altivec] stanza to the [vsx] stanza.
+ 
+ 2026-08-27  Vijay Shankar  <vijay@linux.ibm.com>
+ 
+ 	PR target/116004
+ 	* config/rs6000/vsx.md (first_mismatch_or_eos_index): Remove redundant
+ 	emit_insns.
+ 
+ 2026-08-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126998
+ 	* tree-vectorizer.h (vect_get_num_copies_for_invariant):
+ 	Declare.
+ 	* tree-vect-slp.cc (vect_get_num_copies_for_invariant): Export.
+ 	* tree-vect-loop.cc (vectorizable_lane_reducing): Use
+ 	vect_get_num_copies_for_invariant on the SLP input.
+ 
+ 2026-08-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126998
+ 	* tree-vect-loop.cc (vect_reduction_update_partial_vector_usage):
+ 	Return a bool, defer vect_record_loop_{len,mask} to the caller.
+ 	(vectorizable_lane_reducing): Adjust.
+ 	(vectorizable_reduction): Likewise.
+ 
+ 2026-08-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126998
+ 	* tree-vect-loop.cc (vect_transform_reduction): Remove
+ 	redundant effec_reduc_ncopies, compute vec_num based on
+ 	the actual vector inputs and rename to vec_in_num.
+ 
+ 2026-08-27  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/cris/cris.md (*bswapsi2_not<setcc><setnz><setnzvc>):
+ 	New define_insn.
+ 	(cris_swap_bits): Rename to...
+ 	(<acc><anz><anzvc>bitreversesi2<setcc><setnz><setnzvc>): Renamed
+ 	from cris_swap_bits.
+ 	(*bitreversesi2_not<setcc><setnz><setnzvc>): New define_insn.
+ 	(*rotsi2_16<setcc><setnz><setnzvc>): Likewise.
+ 	(*rotsi2_16_not<setcc><setnz><setnzvc>): Likewise.
+ 
+ 2026-08-27  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.md ("*cstore<mode>4_btstqb0_<CC>"): New
+ 	define_insn_and_split.
+ 
+ 2026-08-27  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.md ("*btst<mode>): Simplify; iterate only over
+ 	ZnNNZSET and compare only to a zero_extract result of SImode.
+ 	Just add sanity checks for the mode of operand 0 in the condition.
+ 	("*cbranch<mode>4_btstrq1_<CC>", "*cbranch<mode>4_btstqb0_<CC>"):
+ 	Generate a zero_extract in SImode.
+ 
+ 2026-08-27  Sammy Al Hashemi  <sammy@salh.xyz>
+ 
+ 	* doc/invoke.texi (-Wstrict-aliasing): Document that the
+ 	front-end type-based checking runs without -fstrict-aliasing
+ 	when the warning is requested explicitly.
+ 	(-Wstrict-aliasing=n): Likewise.
+ 
+ 2026-08-27  Shreesh Adiga  <16567adigashreesh@gmail.com>
+ 
+ 	* config/aarch64/aarch64.md: allow usage of zero reg for CRC32
+ 	instructions
+ 
+ 2026-08-26  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.gcc: Default the 64b arch to core2.
+ 
+ 2026-08-26  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64.cc (aarch64_gen_ccmp_next): Reject a
+ 	comparison that would lose an observable exception.
+ 	* target.def (gen_ccmp_next): Document the rule.
+ 	* doc/tm.texi: Regenerate.
+ 
+ 2026-08-26  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64.cc (aarch64_fp_cc_mode): New function.
+ 	Use CCFPmode when the FCMPE exception is not observable.
+ 	(aarch64_select_cc_mode): Use it.
+ 
+ 2026-08-26  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127039
+ 	* match.pd (REDUC (@0 op VECTOR_CST)): Require FMAX and FMIN
+ 	constant reductions to simplify.
+ 
+ 2026-08-26  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
+ 
+ 	PR target/125138
+ 	* config/rs6000/vsx.md (xxpermx): Use a temporary register for the
+ 	negated control vector.
+ 
+ 2026-08-26  Léo Hardt  <leom.hardt@inf.ufrgs.br>
+ 
+ 	* cgraph.cc (cgraph_nodes_queue): Removed.
+ 	(cgraph_cc_finalize): Removed cgraph_nodes_queue
+ 	initialization.
+ 
+ 2026-08-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/125984
+ 	* tree-dfa.cc (get_ref_base_and_extent) <ARRAY_REF>: Use the range
+ 	of the difference between the index expression and the low bound,
+ 	instead of that of the index expression itself, to constrain the
+ 	maximum size of the access.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR rtl-optimization/127056
+ 	* lra-constraints.cc (process_address_1): Canonicalize a complete
+ 	address reload.
+ 
+ 2026-08-25  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	PR target/125746
+ 	* config/i386/i386.cc (ix86_hard_regno_mode_ok): For SSEv1,
+ 	reject 16-bit modes.
+ 
+ 2026-08-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/126999
+ 	* tree-vrp.cc (remove_unreachable::m_list): Change from a std::pair
+ 	to an edge vector.
+ 	(remove_unreachable::maybe_register): Save edge.
+ 	(remove_unreachable::remove): Use the edge.
+ 	(remove_unreachable::remove_and_update_globals): Likewise.
+ 
+ 2026-08-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/127027
+ 	* gimple-range-infer.cc (exit_range::bbi): Change from stmt.
+ 	(infer_range_manager::add_range): Update block index not stmt.
+ 	(infer_range_manager::clear): Remove from specified block list.
+ 
+ 2026-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127049
+ 	* tree-vect-data-refs.cc (vect_analyze_data_refs): Build
+ 	a MEM_REF of the DR_REF type for analyzing the innermost
+ 	loop behavior for outer loop vectorization.
+ 
+ 2026-08-25  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR target/48609
+ 	* rtl.cc (rtvec_series_p): Enhance to allow START to be a
+ 	poly_int64 instead of just an int.
+ 	* rtl.h (rtvec_series_p): Update function prototype.
+ 	* rtlanal.cc (vec_series_highpart_p): Now that rtxvec_series_p
+ 	can handle poly_int64, we handle modes that aren't constant size.
+ 	(vec_series_lowpart_p): Likewise.
+ 	(get_ref_base_and_offset): New function to determine the base RTX
+ 	and byte offset of an arbitrary expression, typically a SUBREG.
+ 	* rtlanal.h (get_ref_base_and_offset): Prototype here.
+ 	* simplify-rtx.cc (simplify_binary_operation_1) <case VEC_CONCAT>:
+ 	Generalize the existing (vec_concat (first_half) (second_half))
+ 	optimization using the new get_ref_base_and_offset function.
+ 
+ 2026-08-25  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	PR target/126619
+ 	* config/i386/i386-expand.cc
+ 	(ix86_expand_vector_init_one_nonzero) <case E_V4SFmode>:
+ 	Improved initialization of one non-zero element V4SF vectors.
+ 	(ix86_expand_vector_init_v4sf): Reuse the above function
+ 	ix86_expand_vector_init_one_nonzero where possible.  Various
+ 	improvements.  Fall back to using (the original)
+ 	ix86_expand_vector_init_concat in the general case, when
+ 	SSE 4.1 instructions aren't available.
+ 	* config/i386/sse.md (vec_set<mode>_0): Prefer to avoid
+ 	inter-unit moves to general purpose registers in reload.
+ 	(vec_setv4sf_sse4_1): Remove asterisk to expose to i386-expand.
+ 	(sse4_1_insertps_v4sf_init): Variant of insertps that clears
+ 	all the other elements of the destination to zero.
+ 	(sse2_insertps_v4sf_3): Implementation of the above instruction
+ 	available on SSE2 by using the pslldq instruction.
+ 
+ 2026-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127058
+ 	PR tree-optimization/127051
+ 	* tree-vect-slp.cc (vect_create_constant_vectors): Zero-pad
+ 	excess elements.
+ 	* tree-vect-stmts.cc (vect_create_vectorized_demotion_stmts):
+ 	Change 'half' parameter to indicate optional fixed number
+ 	of vectors to produce.
+ 	(vectorizable_conversion): Adjust.
+ 
+ 2026-08-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/127032
+ 	* config/avr/avr.md (Tag_GNU_AVR_BITS_LONG_DOUBLE)
+ 	(Tag_GNU_AVR_BITS_DOUBLE): New define_constants.
+ 	* config/avr/avr.cc (avr_uses_long_double_p)
+ 	(avr_uses_double_p): New static variables.
+ 	(avr_find_double): New function.
+ 	(avr_file_end) [HAVE_AS_AVR_GNU_ATTRIBUTE]: Run avr_find_double
+ 	on each varpool node.  Output .gnu_attribute according to
+ 	avr_uses_long_double_p and avr_uses_double_p.
+ 	* config/avr/avr-passes.cc (gimple-walk.h): Include.
+ 	(avr_pass_has) <op_callback>: New static method.
+ 	<scan_bb>: Use it in walk_gimple_op.
+ 	<execute>: Set up walk_stmt_info and pass it to scan_bb.
+ 	* config/avr/avr-passes.def (avr_pass_has): Adjust comment.
+ 	* config/avr/avr-protos.h (avr_find_double): New proto.
+ 
+ 2026-08-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* configure.ac [avr] <HAVE_AS_AVR_GNU_ATTRIBUTE>: Set
+ 	according to gcc_GAS_CHECK_FEATURE for .gnu_attribute.
+ 	* configure: Rebuild.
+ 	* config.in: Rebuild.
+ 	* config/avr/avr.h (avr_addrspace_t) <gnu_attr_val>: New field.
+ 	* config/avr/avr.cc (avr_addrspace): Adjust initializer.
+ 	(avr_uses_vtable_p): New global variable.
+ 	(avr_file_end): Update avr_uses_vtable_p according to varpool,
+ 	then output .gnu_attribute 4 according to avr_uses_vtable_p.
+ 	* config/avr/avr-passes.cc (gimple.h): Include.
+ 	(gimple-iterator.h): Include.
+ 	(avr_pass_data_has): New pass data.
+ 	(avr_pass_has): New gimple pass.
+ 	(make_avr_pass_has): New function.
+ 	* config/avr/avr-passes.def (avr_pass_has): Insert pass.
+ 	* config/avr/avr-protos.h (avr_uses_vtable_p): New global var.
+ 	(class gimple_opt_pass): Declare.
+ 	(make_avr_pass_has): New proto.
+ 	* config/avr/avr.md (Tag_GNU_AVR_VTABLE_AS)
+ 	(Val_GNU_AVR_VTABLE_NONE, Val_GNU_AVR_VTABLE_RAM)
+ 	(Val_GNU_AVR_VTABLE_FLASH, Val_GNU_AVR_VTABLE_FLASH1)
+ 	(Val_GNU_AVR_VTABLE_FLASH2, Val_GNU_AVR_VTABLE_FLASH3)
+ 	(Val_GNU_AVR_VTABLE_FLASH4, Val_GNU_AVR_VTABLE_FLASH5)
+ 	(Val_GNU_AVR_VTABLE_FLASHX): Define constants.
+ 
+ 2026-08-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.opt (-mfuse-ifelse): New option.
+ 	* config/avr/avr-passes.cc (avr_pass_ifelse::gate): Don't
+ 	return true when avropt_fuse_ifelse is false.
+ 	* config/avr/avr.opt.urls (mfuse-ifelse): Add URL.
+ 	* common/config/avr/avr-common.cc (avr_option_optimization_table)
+ 	[OPT_LEVELS_1_PLUS]: Set OPT_mfuse_ifelse to 1.
+ 	* doc/invoke.texi (AVR Options): Document it.
+ 
+ 2026-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126995
+ 	* tree-vect-slp.cc (vect_schedule_slp_node): When we cannot
+ 	place according to constraints for possibly trapping stmts,
+ 	fail.
+ 
+ 2026-08-25  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR middle-end/127031
+ 	* expmed.h (struct algorithm): Add one slot to the op and log
+ 	arrays for the operation synth_mult appends to a full
+ 	sub-algorithm before discarding it.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* tree-ssa-math-opts.cc (convert_plusminus_to_widen): Require the
+ 	result of an intervening conversion to be single-use.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64.cc (aarch64_gen_ccmp_first): Handle HFmode.
+ 	(aarch64_gen_ccmp_next): Likewise.  Reject unsupported HFmode early.
+ 	* config/aarch64/aarch64.md
+ 	(@ccmp<CCFP_CCFPE:mode><GPF_F16:mode>): Use GPF_F16 and stype.
+ 	(@ccmp<CCFP_CCFPE:mode><GPF_F16:mode>_rev): Likewise.
+ 
+ 2026-08-25  Dipesh Sharma  <Dipesh.Sharma@amd.com>
+ 
+ 	* common/config/i386/cpuinfo.h (get_available_features): Detect AVX512BMM from
+ 	extended features instead of standard leaf.
+ 	* config/i386/cpuid.h (bit_AVX512BMM): Move to extended features
+ 	section.
+ 
+ 2026-08-25  Josef Melcr  <josef.melcr@suse.com>
+ 
+ 	PR ipa/127023
+ 	* multiple_target.cc (create_dispatcher_calls): Use the call
+ 	statement variant of create_reference.
+ 
+ 2026-08-25  Josef Melcr  <josef.melcr@suse.com>
+ 
+ 	PR plugins/126882
+ 	* plugin.cc (struct callback_info): Put the struct into an
+ 	anonymous namespace.
+ 
+ 2026-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127000
+ 	* match.pd ((T *)(ptr - ptr_cst)): Canonicalize directly
+ 	to (T *)ptr p+ cst.
+ 
+ 2026-08-25  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/126896
+ 	* tree-ssa-phiopt.cc: Include tree-ssa-threadedge.h.
+ 	(preserves_loop_structure_p): New.
+ 	(replicate_cond_into_pred): New.
+ 	(replicate_conds_over_phis): New.
+ 	(pass_phiopt::execute): Call replicate_conds_over_phis.
+ 
+ 2026-08-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/127045
+ 	* config/i386/i386.md (*fix_trunc<mode>si_sse_zext): Removed.
+ 	(*fix_trunc<mode>si_sse_2_zext): Likewise.
+ 
+ 2026-08-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/127020
+ 	* config/i386/i386-features.cc
+ 	(timode_scalar_chain::compute_convert_gain): Check TARGET_SSE4_1
+ 	instead of TARGET_AVX for pinsrq and pextrq.
+ 
+ 2026-08-25  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/vector.md: Leverage Wvr constraint.
+ 
+ 2026-08-24  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/126991
+ 	* genmatch.cc (dt_node::gen_kids): New in_gcond argument.
+ 	(dt_node::gen_kids_1): New in_gcond argument.
+ 	Disable SSA_NAME generation when in_gcond is true.
+ 	(dt_operand::gen): Pass false to gen_kids.
+ 	(decision_tree::gen): Likewise.
+ 	(write_predicate): Likewise.
+ 	(dt_operand::gen_phi_on_cond): Pass true to gen_kids.
+ 
+ 2026-08-24  Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/126745
+ 	* range-op.cc (operator_div::op1_op2_relation_effect): add
+ 	VREL_EQ range equal one for op1/op2 and op1%op2 if op1 == op2.
+ 
+ 2026-08-24  Kishan Parmar  <kishan@linux.ibm.com>
+ 
+ 	PR target/126738
+ 	* config/rs6000/rs6000.opt: Fix formatting of the -mfuture warning.
+ 	Co-authored-by: Göran Uddeborg <goeran@uddeborg.se>
+ 
+ 2026-08-24  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127039
+ 	* match.pd (REDUC (@0 op VECTOR_CST)): Require the constant reduction
+ 	to simplify.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.cc (vect_get_vector_types_for_stmt): Remove
+ 	nunits_vectype_out parameter and code computing it.
+ 	* tree-vectorizer.h (vect_get_vector_types_for_stmt): Adjust.
+ 	(vect_get_smallest_scalar_type): Remove.
+ 	* tree-vect-data-refs.cc (vect_get_smallest_scalar_type): Likewise.
+ 	(simd_clone_call_p): Likewise.
+ 	* tree-vect-slp.cc (vect_build_slp_tree_1): Adjust.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_record_vectype): Inline ...
+ 	(vect_build_slp_tree_2): ... here.
+ 	(vect_build_slp_tree_1): ... and here.  Use vectype to
+ 	guide splitting for BB vectorization.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_tree_1): Hard-fail early
+ 	due to BB SLP unrolling.
+ 
+ 2026-08-24  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/126896
+ 	* tree-ssa-threadedge.cc
+ 	(edge_forwards_cmp_to_conditional_jump_through_empty_bb_p): Make
+ 	static.  Split into...
+ 	(cond_on_phi_p): ...this...
+ 	(phi_arg_from_cmp_p): ...and this.
+ 	* tree-ssa-threadedge.h (cond_on_phi_p): Declare.
+ 	(phi_arg_from_cmp_p): Declare.
+ 
+ 2026-08-24  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/126896
+ 	* cfghooks.cc (can_duplicate_block_on_edge_p): New.
+ 	* cfghooks.h (can_duplicate_block_on_edge_p): Declare.
+ 	* tree-ssa-threadedge.cc: Include cfghooks.h.
+ 	(jump_threader::thread_across_edge): Use
+ 	can_duplicate_block_on_edge_p.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127018
+ 	* tree-vect-slp.cc (vect_schedule_scc): For SCCs of
+ 	multiple components update the scheduling state and
+ 	propagate it to all nodes.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127018
+ 	* tree-vect-slp.cc (slp_scc_info::res): New member.
+ 	(vect_schedule_scc): Initialize res for invariants
+ 	and when pushing to the stack.  Record result for
+ 	singletons and look it up for already visited entries.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127000
+ 	* match.pd ((T *)(ptr - ptr_cst)): Use build1 to build
+ 	an ADDR_EXPR.
+ 	* tree-ssa-sccvn.cc (vn_nary_build_or_lookup_1): Avoid
+ 	creating GIMPLE_SINGLE_RHS to insert stmts.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126984
+ 	* tree-vect-slp-patterns.cc (complex_pattern::build):
+ 	Rename to ...
+ 	(complex_pattern::build_common): ... this.
+ 	(complex_pattern::build): Likewise and adjust.
+ 	(complex_pattern::m_rep): New.
+ 	(complex_pattern::complex_pattern): Initialize m_rep.
+ 	(complex_add_pattern::build): Call build_common instead
+ 	of complex_pattern::build.
+ 	(complex_mul_pattern::build): Likewise.
+ 	(complex_fms_pattern::build): Likewise.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126995
+ 	* tree-vect-slp.cc (vect_schedule_slp_node): Keep
+ 	schedule when we schedule to a point dominated by the
+ 	trapping stmt.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/126933
+ 	* config/i386/i386-expand.cc (ix86_expand_truncsfbf2): New.
+ 	* config/i386/i386-protos.h (ix86_expand_truncsfbf2): Likewise.
+ 	* config/i386/i386.md (truncsfbf2): Changed to define_expand
+ 	and update comments.
+ 	(truncsfbf2_vcvtneps2bf16): New.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126997
+ 	* tree-ssa-loop-unswitch.cc (tree_ssa_unswitch_loops):
+ 	Perform invariant motion when we unswitched a loop.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/driver-riscv.cc (riscv_arch_from_hwprobe): Use
+ 	RISCV_HWPROBE_EXT_V rather than the removed RISCV_HWPROBE_IMA_V.
+ 
+ 2026-08-24  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* Makefile.in (check_p_min_slots, check_p_jobs, check_p_slots): New
+ 	variables.
+ 	(check_p_subdirs): Use check_p_slots.
+ 
+ 2026-08-24  Kugan Vivekanandarajah  <kvivekananda@nvidia.com>
+ 
+ 	* ipa-cp.cc (adjust_clone_incoming_counts): Adjust counts only when
+ 	ipa quality.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv-cores.def (RISCV_TUNE): Add sifive-p550 and
+ 	sifive-p870-d.
+ 	(RISCV_CORE): Add sifive-p550 and sifive-p870-d.
+ 	* config/riscv/riscv.cc (sifive_p550_tune_info): New.
+ 	(sifive_p870_tune_info): New.
+ 	* doc/riscv-mcpu.texi: Regenerate.
+ 	* doc/riscv-mtune.texi: Regenerate.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* common/config/riscv/riscv-common.cc (standard_extensions_p):
+ 	Rename to...
+ 	(riscv_ext_is_known_p): ...this, and export.
+ 	(riscv_subset_list::parse_single_std_ext): Update the callers.
+ 	(riscv_subset_list::parse_single_multiletter_ext): Likewise.
+ 	* config/riscv/riscv-subset.h (riscv_ext_is_known_p): Declare.
+ 	* config/riscv/driver-riscv.cc: Include riscv-subset.h.
+ 	(riscv_native_arch): Split the hwprobe half out into...
+ 	(riscv_arch_from_hwprobe): ...this new function.
+ 	(struct riscv_cpuinfo): New.
+ 	(riscv_cpuinfo_file, riscv_cpuinfo_forced, riscv_cpuinfo_cpu)
+ 	(riscv_cpuinfo_field, riscv_read_cpuinfo, riscv_cpuinfo)
+ 	(riscv_filter_isa, riscv_arch_from_cpuinfo): New functions.
+ 	* config/riscv/x-riscv: Update the dependencies.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config.host: Build driver-riscv.o for riscv*-*-linux* hosts.
+ 	* config/riscv/driver-riscv.cc: New file.
+ 	* config/riscv/x-riscv: New file.
+ 	* config/riscv/riscv.h (host_detect_local_cpu): Declare.
+ 	(HAVE_LOCAL_CPU_DETECT): Define.
+ 	(RISCV_NATIVE_SPEC_FUNCTIONS): Define.
+ 	(RISCV_NATIVE_SPECS): Define.
+ 	(EXTRA_SPEC_FUNCTIONS): Add RISCV_NATIVE_SPEC_FUNCTIONS.
+ 	(DRIVER_SELF_SPECS): Add RISCV_NATIVE_SPECS.
+ 	* doc/invoke.texi (RISC-V Options): Document -march=native.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* common/config/riscv/riscv-hwprobe.def: New file.
+ 	* common/config/riscv/riscv-hwprobe.h: New file.
+ 
+ 2026-08-24  vekumar  <Venkataramanan.Kumar@amd.com>
+ 
+ 	* config/i386/x86-tune-costs.h (znver4_cost): Increase branch
+ 	mispredict scale from COSTS_N_INSNS (2) to COSTS_N_INSNS (2) + 3.
+ 	(znver5_cost): Likewise.
+ 
+ 2026-08-23  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/127004
+ 	* config/avr/avr-passes.cc (rtl-iter.h): Include.
+ 	(insninfo_t::scratch_mask): New method.
+ 	(optimize_data_t::try_split_ldi): Use it for ignore_mask.
+ 	(optimize_data_t::try_split_any): Same.
+ 	(optimize_data_t::emit_sequence): Dump ignore_mask prior to
+ 	calling fatal_insn.
+ 
+ 2026-08-23  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-forwprop.cc (struct long_mul_summand): Add
+ 	constructors and methods and operator bool.
+ 	(long_mul_set_summand): Rename to ...
+ 	(long_mul_summand::set): This. Remove the info argument.
+ 	(long_mul_classify_carry): Rename to ...
+ 	(long_mul_summand::classify_carry): This. Remove the
+ 	info argument.
+ 	(long_mul_classify_plus_kinds): Rename to ...
+ 	(long_mul_summand::classify_plus_kinds): This. Remove the
+ 	info argument.
+ 	(long_mul_classify_hi_extract): Rename to ...
+ 	(long_mul_summand::classify_hi_extract): This. Remove the
+ 	info argument.
+ 	(long_mul_classify_lo_extract): Rename to ...
+ 	(long_mul_summand::classify_lo_extract): This. Remove the
+ 	info argument.
+ 	(long_mul_classify_shl_extract): Rename to ...
+ 	(long_mul_summand::classify_shl_extract): This.  Remove the
+ 	info argument.
+ 	(long_mul_classify_bare): Rename to ...
+ 	(long_mul_summand::classify_bare): This.  Remove the
+ 	info argument.
+ 	(long_mul_classify_summand): Rename to ...
+ 	(long_mul_summand::long_mul_summand): This.  Remove the
+ 	info argument.
+ 	(long_mul_classify_chain): Update for the long_mul_summand
+ 	constructor.
+ 
+ 2026-08-23  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-forwprop.cc (enum long_mul_kind): Add LMK_INVALID.
+ 	(long_mul_set_summand): Add default case to switch.
+ 	(long_mul_summand_compare): Add checking to make sure
+ 	the kinds are not LMK_INVALID.
+ 	(long_mul_find_summand): Likewise.
+ 	(long_mul_classify_chain): Add checking right before
+ 	the push to check for LMK_INVALID.
+ 	(match_long_mul_phi): Simpilify stynx for initializing carry.
+ 
+ 2026-08-23  Kael Andrew Alonzo Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/59429
+ 	* match.pd: Combine four loops into one loop for spaceship.
+ 
+ 2026-08-23  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-forwprop.cc (enum long_mul_kind): Fix to unsigned char.
+ 	(enum long_mul_extract): Likewise.
+ 
+ 2026-08-23  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-forwprop.cc (enum long_mul_kind): Put in an anonymous namespace.
+ 	(enum long_mul_extract): Likewise.
+ 	(struct long_mul_summand): Likewise.
+ 
+ 2026-08-23  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-forwprop.cc (long_mul_set_summand): Update
+ 	comment on the shift.
+ 
+ 2026-08-23  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* combine.cc (combine_simplify_rtx): Handle PREFETCH like MEM when
+ 	simplifying the address.
+ 
+ 2026-08-23  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR rtl-optimization/126501
+ 	PR rtl-optimization/126747
+ 	* ifcvt.cc (noce_cc_reg_set): New struct.
+ 	(noce_record_cc_reg_set): New function.
+ 	(noce_clobbers_live_cc_p): New function.
+ 	(end_ifcvt_sequence): Use it to reject sequences that clobber a
+ 	condition-code register that is live out of the test block.
+ 	(noce_convert_multiple_sets): Likewise.
+ 
+ 2026-08-23  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* compare-elim.cc (find_comparisons_in_bb): Test the live-in set
+ 	of the successor block rather than of the current block.
+ 
+ 2026-08-23  Bohan Lei  <garthlei@linux.alibaba.com>
+ 
+ 	* config/riscv/riscv.cc (struct riscv_tune_param): New member.
+ 	(xt_c9501_tune_info): Set autoprefetcher model to weak.
+ 	(riscv_override_options_internal): Set
+ 	param_sched_autopref_queue_depth based on autoprefetcher model.
+ 
+ 2026-08-23  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/126827
+ 	* gimple-range-op.cc (class cfn_fp_nonnegative): New class.
+ 	(class cfn_fp_nonnegative_arg0): New class.
+ 	(gimple_range_op_handler::maybe_builtin_call): Handle some
+ 	functions which were handled in nonnegative.
+ 
+ 2026-08-23  Dominic P  <gcc@gcc.dp11.uk>
+ 
+ 	PR target/71048
+ 	* expmed.cc (store_fixed_bit_field_1): When OP0 is a memory
+ 	reference that the field fills entirely, store VALUE directly
+ 	instead of doing a read-modify-write, so that no read of OP0 is
+ 	emitted.
+ 
+ 2026-08-23  Dominic P  <gcc@gcc.dp11.uk>
+ 
+ 	* expmed.cc (last_div_const): New variable, moved out of...
+ 	(expand_divmod): ...here.
+ 	* expmed.h (last_div_const): Declare.
+ 	* function.cc (prepare_function_start): Reset last_div_const.
+ 
+ 2026-08-23  Dominic P  <gcc@gcc.dp11.uk>
+ 
+ 	PR tree-optimization/111000
+ 	* tree-ssa-loop-im.cc (movement_possibility_1): Require
+ 	MOVE_PRESERVE_EXECUTION for an out-of-range constant shift
+ 	count, not an in-range one.
+ 
+ 2026-08-23  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/vector.md: Leverage Wvr constraint.
+ 
  2026-08-22  Luke Zhuang  <luke.zhuang@linux.alibaba.com>
  
  	* config/riscv/riscv.md: Restrict slliw shifted bitfield split
diff -Nrcpad gcc-17-20260823/gcc/DATESTAMP gcc-17-20260830/gcc/DATESTAMP
*** gcc-17-20260823/gcc/DATESTAMP	Sun Aug 23 22:32:06 2026
--- gcc-17-20260830/gcc/DATESTAMP	Sun Aug 30 22:32:05 2026
***************
*** 1 ****
! 20260823
--- 1 ----
! 20260830
diff -Nrcpad gcc-17-20260823/gcc/Makefile.in gcc-17-20260830/gcc/Makefile.in
*** gcc-17-20260823/gcc/Makefile.in	Sun Aug 23 22:32:06 2026
--- gcc-17-20260830/gcc/Makefile.in	Sun Aug 30 22:32:05 2026
*************** check_p_tool=$(firstword $(subst _, ,$*)
*** 4760,4767 ****
  check_p_count=$(check_$(check_p_tool)_parallelize)
  check_p_subno=$(word 2,$(subst _, ,$*))
  check_p_subdir=$(subst _,,$*)
  check_p_subdirs=$(wordlist 1,$(check_p_count),$(wordlist 1, \
! 		$(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),128), \
  		$(one_to_9999)))
  
  # For parallelized check-% targets, this decides whether parallelization
--- 4760,4784 ----
  check_p_count=$(check_$(check_p_tool)_parallelize)
  check_p_subno=$(word 2,$(subst _, ,$*))
  check_p_subdir=$(subst _,,$*)
+ # Number of runtest instances to start.  An explicit GCC_TEST_PARALLEL_SLOTS
+ # wins.  Otherwise start one per job token, but never fewer than
+ # check_p_min_slots: the instances claim work in batches of ten tests, so a
+ # batch that runs long is the tail of the whole target, and having more
+ # instances than tokens lets the ones that are left pick up the slack.  Above
+ # that floor the token count is the useful number, since 128 instances on a
+ # machine given -j256 leave half of it idle.  GNU make 4.0 and later put the
+ # level in MFLAGS.  A bare -j, and older make, do not, and there the floor
+ # stands on its own.
+ check_p_min_slots=128
+ check_p_jobs=$(patsubst -j%,%,$(filter -j%,$(MFLAGS)))
+ # max(check_p_jobs, check_p_min_slots).  A number is <= the floor exactly when
+ # it appears among the first check_p_min_slots counting numbers.
+ check_p_slots=$(strip $(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),\
+ 	$(if $(check_p_jobs),$(if $(filter $(check_p_jobs),\
+ 		$(wordlist 1,$(check_p_min_slots),$(one_to_9999))),\
+ 		$(check_p_min_slots),$(check_p_jobs)),$(check_p_min_slots))))
  check_p_subdirs=$(wordlist 1,$(check_p_count),$(wordlist 1, \
! 		$(check_p_slots), \
  		$(one_to_9999)))
  
  # For parallelized check-% targets, this decides whether parallelization
diff -Nrcpad gcc-17-20260823/gcc/ada/ChangeLog gcc-17-20260830/gcc/ada/ChangeLog
*** gcc-17-20260823/gcc/ada/ChangeLog	Sun Aug 23 22:32:06 2026
--- gcc-17-20260830/gcc/ada/ChangeLog	Sun Aug 30 22:32:05 2026
***************
*** 1,3 ****
--- 1,19 ----
+ 2026-08-26  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/127026
+ 	* exp_aggr.adb (Must_Slide): Check for the unconstrained case only
+ 	after all the negative tests.
+ 
+ 2026-08-24  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/127026
+ 	* exp_aggr.adb (Must_Slide): Reorder parameters, rename Obj_Type to
+ 	Ob_Typ and add Assign boolean parameter.  Return Assign's value in
+ 	the case where Obj_Typ is unconstrained.
+ 	(Build_Array_Aggr_Code): Adjust call to Must_Slide.
+ 	(In_Place_Assign_OK): Likewise.
+ 	(Expand_Array_Aggregate): Likewise.
+ 
  2026-08-19  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/126928
diff -Nrcpad gcc-17-20260823/gcc/ada/exp_aggr.adb gcc-17-20260830/gcc/ada/exp_aggr.adb
*** gcc-17-20260823/gcc/ada/exp_aggr.adb	Sun Aug 23 22:32:06 2026
--- gcc-17-20260830/gcc/ada/exp_aggr.adb	Sun Aug 30 22:32:05 2026
*************** package body Exp_Aggr is
*** 138,156 ****
     --  constants that are done in place.
  
     function Must_Slide
!      (Aggr     : Node_Id;
!       Obj_Type : Entity_Id;
!       Typ      : Entity_Id) return Boolean;
     --  A static array aggregate in an object declaration can in most cases be
     --  expanded in place. The one exception is when the aggregate is given
     --  with component associations that specify different bounds from those of
     --  the type definition in the object declaration. In this pathological
     --  case the aggregate must slide, and we must introduce an intermediate
!    --  temporary to hold it.
!    --
!    --  The same holds in an assignment to multi-dimensional arrays, when
!    --  components may be given with bounds that differ from those of the
!    --  component type.
  
     function Number_Of_Choices (N : Node_Id) return Nat;
     --  Returns the number of discrete choices (not including the others choice
--- 138,159 ----
     --  constants that are done in place.
  
     function Must_Slide
!      (Aggr    : Node_Id;
!       Typ     : Entity_Id;
!       Obj_Typ : Entity_Id;
!       Assign  : Boolean) return Boolean;
!    --  Return whether an array aggregate Aggr whose subtype is Typ must slide
!    --  when assigned to an object whose (nominal) subtype is Obj_Typ. Assign
!    --  is True when the context is an assignment statement and False when it
!    --  is an object declaration or an allocator.
! 
     --  A static array aggregate in an object declaration can in most cases be
     --  expanded in place. The one exception is when the aggregate is given
     --  with component associations that specify different bounds from those of
     --  the type definition in the object declaration. In this pathological
     --  case the aggregate must slide, and we must introduce an intermediate
!    --  temporary to hold it. The same holds in an assignment, when components
!    --  may be given with bounds that differ from those of the target.
  
     function Number_Of_Choices (N : Node_Id) return Nat;
     --  Returns the number of discrete choices (not including the others choice
*************** package body Exp_Aggr is
*** 1443,1449 ****
                 if Nkind (Parent (N)) = N_Assignment_Statement
                   and then Is_Array_Type (Comp_Typ)
                   and then Present (Component_Associations (Expr_Q))
!                  and then Must_Slide (N, Comp_Typ, Etype (Expr_Q))
                 then
                    Set_Expansion_Delayed (Expr_Q, False);
                    Set_Analyzed (Expr_Q, False);
--- 1446,1453 ----
                 if Nkind (Parent (N)) = N_Assignment_Statement
                   and then Is_Array_Type (Comp_Typ)
                   and then Present (Component_Associations (Expr_Q))
!                  and then
!                    Must_Slide (N, Etype (Expr_Q), Comp_Typ, Assign => True)
                 then
                    Set_Expansion_Delayed (Expr_Q, False);
                    Set_Analyzed (Expr_Q, False);
*************** package body Exp_Aggr is
*** 4251,4257 ****
        --  statically equal to those of the target.
  
        if Is_Array
!         and then Must_Slide (N, Etype (Name (Parent_Node)), Etype (N))
        then
           return False;
        end if;
--- 4255,4262 ----
        --  statically equal to those of the target.
  
        if Is_Array
!         and then
!           Must_Slide (N, Etype (N), Etype (Name (Parent_Node)), Assign => True)
        then
           return False;
        end if;
*************** package body Exp_Aggr is
*** 6276,6283 ****
                         or else Needs_Finalization (Typ)
                         or else not Must_Slide
                                       (N,
                                        Designated_Type (Etype (Parent_Node)),
!                                       Typ)))
  
           --  Object declaration (see Convert_Aggr_In_Object_Decl). Sliding
           --  cannot be done in place for the time being.
--- 6281,6289 ----
                         or else Needs_Finalization (Typ)
                         or else not Must_Slide
                                       (N,
+                                       Typ,
                                        Designated_Type (Etype (Parent_Node)),
!                                       Assign => False)))
  
           --  Object declaration (see Convert_Aggr_In_Object_Decl). Sliding
           --  cannot be done in place for the time being.
*************** package body Exp_Aggr is
*** 6291,6299 ****
                                   (Defining_Identifier (Parent_Node))
                         or else not Must_Slide
                                       (N,
                                        Etype
                                          (Defining_Identifier (Parent_Node)),
!                                       Typ)))
  
           --  Safe assignment (see Convert_Aggr_In_Assignment). So far only the
           --  assignments in init procs are taken into account, as well those
--- 6297,6306 ----
                                   (Defining_Identifier (Parent_Node))
                         or else not Must_Slide
                                       (N,
+                                       Typ,
                                        Etype
                                          (Defining_Identifier (Parent_Node)),
!                                       Assign => False)))
  
           --  Safe assignment (see Convert_Aggr_In_Assignment). So far only the
           --  assignments in init procs are taken into account, as well those
*************** package body Exp_Aggr is
*** 9610,9643 ****
     ----------------
  
     function Must_Slide
!      (Aggr     : Node_Id;
!       Obj_Type : Entity_Id;
!       Typ      : Entity_Id) return Boolean
     is
     begin
!       --  No sliding if the type of the object is not established yet, if it is
!       --  an unconstrained type whose actual subtype comes from the aggregate,
!       --  or if the two types are identical. If the aggregate contains only
!       --  an Others_Clause it gets its type from the context and no sliding
!       --  is involved either.
! 
!       if not Is_Array_Type (Obj_Type) then
!          return False;
  
!       elsif not Is_Constrained (Obj_Type) then
           return False;
  
!       elsif Typ = Obj_Type then
           return False;
  
        elsif Is_Others_Aggregate (Aggr) then
           return False;
  
        --  Check if sliding is required
  
        else
           declare
!             Obj_Index  : Node_Id := First_Index (Obj_Type);
              Obj_Bounds : Range_Nodes;
              Typ_Index  : Node_Id := First_Index (Typ);
              Typ_Bounds : Range_Nodes;
--- 9617,9651 ----
     ----------------
  
     function Must_Slide
!      (Aggr    : Node_Id;
!       Typ     : Entity_Id;
!       Obj_Typ : Entity_Id;
!       Assign  : Boolean) return Boolean
     is
     begin
!       --  No sliding if the type of the object is not established yet, or if
!       --  the two types are identical. And if the aggregate contains only an
!       --  Others_Clause, it gets its type from the context and no sliding is
!       --  involved either. When the type of the object is unconstrained, no
!       --  sliding either if its actual subtype comes from the aggregate.
  
!       if not Is_Array_Type (Obj_Typ) then
           return False;
  
!       elsif Typ = Obj_Typ then
           return False;
  
        elsif Is_Others_Aggregate (Aggr) then
           return False;
  
+       elsif not Is_Constrained (Obj_Typ) then
+          return Assign;
+ 
        --  Check if sliding is required
  
        else
           declare
!             Obj_Index  : Node_Id := First_Index (Obj_Typ);
              Obj_Bounds : Range_Nodes;
              Typ_Index  : Node_Id := First_Index (Typ);
              Typ_Bounds : Range_Nodes;
diff -Nrcpad gcc-17-20260823/gcc/analyzer/ChangeLog gcc-17-20260830/gcc/analyzer/ChangeLog
*** gcc-17-20260823/gcc/analyzer/ChangeLog	Sun Aug 23 22:32:06 2026
--- gcc-17-20260830/gcc/analyzer/ChangeLog	Sun Aug 30 22:32:06 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-08-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* analyzer.opt (fanalyzer-fine-grained): Use 2 spaces instead of 1
+ 	between sentences in the description.
+ 	(fdump-analyzer-callgraph): Likewise.
+ 
  2026-08-18  Egas Ribeiro  <egas.g.ribeiro@gmail.com>
  
  	PR analyzer/110578
diff -Nrcpad gcc-17-20260823/gcc/analyzer/analyzer.opt gcc-17-20260830/gcc/analyzer/analyzer.opt
*** gcc-17-20260823/gcc/analyzer/analyzer.opt	Sun Aug 23 22:32:06 2026
--- gcc-17-20260830/gcc/analyzer/analyzer.opt	Sun Aug 30 22:32:06 2026
*************** Add extra annotations to diagrams.
*** 308,314 ****
  
  fanalyzer-fine-grained
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fanalyzer-feasibility
  Common Var(flag_analyzer_feasibility) Init(1)
--- 308,314 ----
  
  fanalyzer-fine-grained
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fanalyzer-feasibility
  Common Var(flag_analyzer_feasibility) Init(1)
*************** Dump various analyzer internals to stder
*** 372,378 ****
  
  fdump-analyzer-callgraph
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fdump-analyzer-exploded-graph
  Common RejectNegative Var(flag_dump_analyzer_exploded_graph)
--- 372,378 ----
  
  fdump-analyzer-callgraph
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fdump-analyzer-exploded-graph
  Common RejectNegative Var(flag_dump_analyzer_exploded_graph)
diff -Nrcpad gcc-17-20260823/gcc/builtins.cc gcc-17-20260830/gcc/builtins.cc
*** gcc-17-20260823/gcc/builtins.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/builtins.cc	Sun Aug 30 22:32:06 2026
*************** expand_builtin_return_addr (enum built_i
*** 863,869 ****
    /* For __builtin_frame_address, return what we've got.  But, on
       the SPARC for example, we may have to add a bias.  */
    if (fndecl_code == BUILT_IN_FRAME_ADDRESS)
!     return FRAME_ADDR_RTX (tem);
  
    /* For __builtin_return_address, get the return address from that frame.  */
  #ifdef RETURN_ADDR_RTX
--- 863,869 ----
    /* For __builtin_frame_address, return what we've got.  But, on
       the SPARC for example, we may have to add a bias.  */
    if (fndecl_code == BUILT_IN_FRAME_ADDRESS)
!     return FRAME_ADDR_RTX (count, tem);
  
    /* For __builtin_return_address, get the return address from that frame.  */
  #ifdef RETURN_ADDR_RTX
diff -Nrcpad gcc-17-20260823/gcc/c-family/ChangeLog gcc-17-20260830/gcc/c-family/ChangeLog
*** gcc-17-20260823/gcc/c-family/ChangeLog	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/c-family/ChangeLog	Sun Aug 30 22:32:06 2026
***************
*** 1,3 ****
--- 1,25 ----
+ 2026-08-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c.opt (Wsynth): Use 2 spaces instead of 1 between
+ 	sentences in the description.
+ 	(fallow-parameterless-variadic-functions): Likewise.
+ 
+ 2026-08-27  Sammy Al Hashemi  <sammy@salh.xyz>
+ 
+ 	* c-common.h (class temp_override): Move from cp-tree.h.
+ 	(type_identity_t): Likewise.
+ 	(make_temp_override): Likewise.
+ 	* c-warn.cc: Include opts.h.
+ 	(strict_aliasing_warning): Do not gate on flag_strict_aliasing.
+ 	Temporarily enable it around the alias set queries when
+ 	-Wstrict-aliasing was requested explicitly.
+ 
+ 2026-08-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125822
+ 	* c-cppbuiltin.cc (c_cpp_builtins): Define __cpp_concepts to
+ 	202606L rather than 202002L for C++29.
+ 
  2026-08-12  Jørgen Kvalsvik  <j@lambda.is>
  
  	* c-attribs.cc (handle_suppress_coverage_attribute): New
diff -Nrcpad gcc-17-20260823/gcc/c-family/c-common.h gcc-17-20260830/gcc/c-family/c-common.h
*** gcc-17-20260823/gcc/c-family/c-common.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/c-family/c-common.h	Sun Aug 30 22:32:06 2026
*************** namespace selftest {
*** 1752,1755 ****
--- 1752,1806 ----
  } // namespace selftest
  #endif /* #if CHECKING_P */
  
+ /* Wrapping a template parameter in type_identity_t hides it from template
+    argument deduction.  */
+ #if __cpp_lib_type_identity
+ using std::type_identity_t;
+ #else
+ template <typename T>
+ struct type_identity { typedef T type; };
+ template <typename T>
+ using type_identity_t = typename type_identity<T>::type;
+ #endif
+ 
+ /* RAII sentinel that saves the value of a variable, optionally
+    overrides it right away, and restores its value when the sentinel
+    id destructed.  */
+ 
+ template <typename T>
+ class temp_override
+ {
+   T& overridden_variable;
+   T saved_value;
+ public:
+   temp_override (T& var) : overridden_variable (var), saved_value (var) {}
+   temp_override (T& var, type_identity_t<T> overrider)
+     : overridden_variable (var), saved_value (var)
+   {
+     overridden_variable = overrider;
+   }
+   ~temp_override() { overridden_variable = saved_value; }
+ };
+ 
+ /* Object generator function for temp_override, so you don't need to write the
+    type of the object as a template argument.
+ 
+    Use as auto x = make_temp_override (flag); */
+ 
+ template <typename T>
+ inline temp_override<T>
+ make_temp_override (T& var)
+ {
+   return { var };
+ }
+ 
+ /* Likewise, but use as auto x = make_temp_override (flag, value); */
+ 
+ template <typename T>
+ inline temp_override<T>
+ make_temp_override (T& var, type_identity_t<T> overrider)
+ {
+   return { var, overrider };
+ }
+ 
  #endif /* ! GCC_C_COMMON_H */
diff -Nrcpad gcc-17-20260823/gcc/c-family/c-cppbuiltin.cc gcc-17-20260830/gcc/c-family/c-cppbuiltin.cc
*** gcc-17-20260823/gcc/c-family/c-cppbuiltin.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/c-family/c-cppbuiltin.cc	Sun Aug 30 22:32:06 2026
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1133,1139 ****
  	  cpp_define (pfile, "__cpp_designated_initializers=202606L");
  	}
        if (flag_concepts && cxx_dialect > cxx14)
! 	cpp_define (pfile, "__cpp_concepts=202002L");
        else if (cxx_dialect >= cxx20)
  	cpp_warn (pfile, "__cpp_concepts");
        if (flag_contracts)
--- 1133,1144 ----
  	  cpp_define (pfile, "__cpp_designated_initializers=202606L");
  	}
        if (flag_concepts && cxx_dialect > cxx14)
! 	{
! 	  if (cxx_dialect > cxx26)
! 	    cpp_define (pfile, "__cpp_concepts=202606L");
! 	  else
! 	    cpp_define (pfile, "__cpp_concepts=202002L");
! 	}
        else if (cxx_dialect >= cxx20)
  	cpp_warn (pfile, "__cpp_concepts");
        if (flag_contracts)
diff -Nrcpad gcc-17-20260823/gcc/c-family/c-warn.cc gcc-17-20260830/gcc/c-family/c-warn.cc
*** gcc-17-20260823/gcc/c-family/c-warn.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/c-family/c-warn.cc	Sun Aug 30 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 41,46 ****
--- 41,47 ----
  #include "tree-pretty-print.h"
  #include "langhooks.h"
  #include "gcc-urlifier.h"
+ #include "opts.h"
  
  /* Print a warning if a constant expression had overflow in folding.
     Invoke this function on every expression that the language
*************** strict_aliasing_warning (location_t loc,
*** 701,708 ****
    STRIP_NOPS (expr);
    tree otype = TREE_TYPE (expr);
  
!   if (!(flag_strict_aliasing
! 	&& POINTER_TYPE_P (type)
  	&& POINTER_TYPE_P (otype)
  	&& !VOID_TYPE_P (TREE_TYPE (type)))
        /* If the type we are casting to is a ref-all pointer
--- 702,708 ----
    STRIP_NOPS (expr);
    tree otype = TREE_TYPE (expr);
  
!   if (!(POINTER_TYPE_P (type)
  	&& POINTER_TYPE_P (otype)
  	&& !VOID_TYPE_P (TREE_TYPE (type)))
        /* If the type we are casting to is a ref-all pointer
*************** strict_aliasing_warning (location_t loc,
*** 710,715 ****
--- 710,722 ----
        || TYPE_REF_CAN_ALIAS_ALL (type))
      return false;
  
+   /* Temporarily enable strict aliasing so that the alias set query
+      functions return meaningful results for the warning.
+      Only do this if the user explicitly asked for `-Wstrict-aliasing`  */
+   temp_override<int> save (flag_strict_aliasing,
+ 			   OPTION_SET_P (warn_strict_aliasing) ?
+ 			   1 : flag_strict_aliasing);
+ 
    if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
        && (DECL_P (TREE_OPERAND (expr, 0))
  	  || handled_component_p (TREE_OPERAND (expr, 0))))
diff -Nrcpad gcc-17-20260823/gcc/c-family/c.opt gcc-17-20260830/gcc/c-family/c.opt
*** gcc-17-20260823/gcc/c-family/c.opt	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/c-family/c.opt	Sun Aug 30 22:32:06 2026
*************** Warn when __sync_fetch_and_nand and __sy
*** 1522,1528 ****
  
  Wsynth
  C++ ObjC++ Warning Ignore
! Does nothing. Preserved for backward compatibility.
  
  Wsystem-headers
  C ObjC C++ ObjC++ Warning
--- 1522,1528 ----
  
  Wsynth
  C++ ObjC++ Warning Ignore
! Does nothing.  Preserved for backward compatibility.
  
  Wsystem-headers
  C ObjC C++ ObjC++ Warning
*************** C++ ObjC++ WarnRemoved
*** 1743,1749 ****
  
  fallow-parameterless-variadic-functions
  C ObjC Ignore
! Does nothing. Preserved for backward compatibility.
  
  falt-external-templates
  C++ ObjC++ WarnRemoved
--- 1743,1749 ----
  
  fallow-parameterless-variadic-functions
  C ObjC Ignore
! Does nothing.  Preserved for backward compatibility.
  
  falt-external-templates
  C++ ObjC++ WarnRemoved
diff -Nrcpad gcc-17-20260823/gcc/cfgexpand.cc gcc-17-20260830/gcc/cfgexpand.cc
*** gcc-17-20260823/gcc/cfgexpand.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cfgexpand.cc	Sun Aug 30 22:32:06 2026
*************** defer_stack_allocation (tree var, bool t
*** 1995,2003 ****
    if (flag_stack_protect || asan_sanitize_stack_p ())
      return true;
  
!   unsigned int align = TREE_CODE (var) == SSA_NAME
!     ? TYPE_ALIGN (TREE_TYPE (var))
!     : DECL_ALIGN (var);
  
    /* We handle "large" alignment via dynamic allocation.  We want to handle
       this extra complication in only one place, so defer them.  */
--- 1995,2005 ----
    if (flag_stack_protect || asan_sanitize_stack_p ())
      return true;
  
!   /* Use the same effective alignment that expand_one_stack_var_1 would use.
!      If that alignment exceeds MAX_SUPPORTED_STACK_ALIGNMENT, defer
!      the variable so that expand_stack_vars handles its large alignment,
!      rather than calling expand_one_stack_var_1 and failing its assertion.  */
!   unsigned int align = align_local_variable (var, false) * BITS_PER_UNIT;
  
    /* We handle "large" alignment via dynamic allocation.  We want to handle
       this extra complication in only one place, so defer them.  */
diff -Nrcpad gcc-17-20260823/gcc/cfghooks.cc gcc-17-20260830/gcc/cfghooks.cc
*** gcc-17-20260823/gcc/cfghooks.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cfghooks.cc	Sun Aug 30 22:32:06 2026
*************** can_duplicate_block_p (const_basic_block
*** 1141,1146 ****
--- 1141,1169 ----
    return cfg_hooks->can_duplicate_block_p (bb);
  }
  
+ /* Returns true if we can duplicate E's destination with E redirected to the
+    copy.  */
+ 
+ bool
+ can_duplicate_block_on_edge_p (edge e)
+ {
+   basic_block bb = e->dest;
+ 
+   if (!can_duplicate_block_p (bb))
+     return false;
+ 
+   if (e->flags & EDGE_COMPLEX)
+     return false;
+ 
+   edge s;
+   edge_iterator ei;
+   FOR_EACH_EDGE (s, ei, bb->succs)
+     if (s->flags & EDGE_COMPLEX)
+       return false;
+ 
+   return true;
+ }
+ 
  /* Duplicate basic block BB, place it after AFTER (if non-null) and redirect
     edge E to it (if non-null).  Return the new basic block.
  
diff -Nrcpad gcc-17-20260823/gcc/cfghooks.h gcc-17-20260830/gcc/cfghooks.h
*** gcc-17-20260823/gcc/cfghooks.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cfghooks.h	Sun Aug 30 22:32:06 2026
*************** extern void tidy_fallthru_edges (void);
*** 252,257 ****
--- 252,258 ----
  extern void predict_edge (edge e, enum br_predictor predictor, int probability);
  extern bool predicted_by_p (const_basic_block bb, enum br_predictor predictor);
  extern bool can_duplicate_block_p (const_basic_block);
+ extern bool can_duplicate_block_on_edge_p (edge);
  extern basic_block duplicate_block (basic_block, edge, basic_block,
  				    copy_bb_data * = NULL);
  extern bool block_ends_with_call_p (basic_block bb);
diff -Nrcpad gcc-17-20260823/gcc/cgraph.cc gcc-17-20260830/gcc/cgraph.cc
*** gcc-17-20260823/gcc/cgraph.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cgraph.cc	Sun Aug 30 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 75,84 ****
  /* FIXME: Only for PROP_loops, but cgraph shouldn't have to know about this.  */
  #include "tree-pass.h"
  
- /* Queue of cgraph nodes scheduled to be lowered.  */
- symtab_node *x_cgraph_nodes_queue;
- #define cgraph_nodes_queue ((cgraph_node *)x_cgraph_nodes_queue)
- 
  /* Symbol table global context.  */
  symbol_table *symtab;
  
--- 75,80 ----
*************** cgraph_cc_finalize (void)
*** 4721,4728 ****
    callback_info_sum_t::free_info_sum ();
    symtab = NULL;
  
-   x_cgraph_nodes_queue = NULL;
- 
    cgraph_fnver_htab = NULL;
    version_info_node = NULL;
  }
--- 4717,4722 ----
diff -Nrcpad gcc-17-20260823/gcc/cobol/ChangeLog gcc-17-20260830/gcc/cobol/ChangeLog
*** gcc-17-20260823/gcc/cobol/ChangeLog	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/ChangeLog	Sun Aug 30 22:32:06 2026
***************
*** 1,3 ****
--- 1,147 ----
+ 2026-08-28  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/126612
+ 	PR cobol/126614
+ 	* cdf.y: Add TRACE syntax.
+ 	* parse.y: Add ACCEPT ... WITH grammar.
+ 	* scan_post.h (is_cdf_token): Add trace tokens.
+ 
+ 2026-08-28  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cbldiag.h (enum cbl_diag_id_t): Add MfRedefinesTable.
+ 	* cobol1.cc (cobol_langhook_handle_option): Handle Wredefines-table.
+ 	* gcobol.1: Document Wredefines-table.
+ 	* lang-specs.h: Add Wredefines-table to spec string.
+ 	* lang.opt: Define Wredefines-table.
+ 	* messages.cc: Add Wredefines-table to -dialect mf.
+ 	* parse_ante.h (valid_redefine): Honor new diagnostic.
+ 
+ 2026-08-28  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* scan.l: Add VALUE to fd_state Start Condition.
+ 
+ 2026-08-28  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* scan.l: Ubiquitous LENGTH OF patterns.
+ 
+ 2026-08-28  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cbldiag.h (enum cbl_diag_id_t): Introduce MfDisplayScreen.
+ 	* cdf.y: Renumber tokens.
+ 	* cobol1.cc (cobol_langhook_handle_option): Handle Wdisplay_screen.
+ 	* gcobol.1: Document option.
+ 	* lang-specs.h: Add option to spec string.
+ 	* lang.opt: Define Wdisplay_screen.
+ 	* messages.cc: Add Wdisplay_screen to -dialect mf.
+ 	* parse.y: Rename implementation tokens.  Extend DISPLAY
+ 	grammar and revise COBOL-WORDS grammar to accept lists.
+ 	* parse_ante.h (with_gnu_stuff): Ignore DISPLAY keywords.
+ 	(with_gnu_names): Same.
+ 	(with_gnu_color): Same.
+ 	* scan.l: Use new token names and revise COBOL-WORDS lexing.
+ 	* scan_ante.h (bcomputable): Use new token names.
+ 	(binary_integer_usage_of): Same.
+ 	* scan_post.h (prelex): Whitespace.
+ 	* symbols.h (keyword_alias_add): Return bool, too.
+ 	(class current_tokens_t): Use diagnostic quotes.
+ 	* token_names.h: Regenerate.
+ 
+ 2026-08-26  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/126611
+ 	* parse.y: Modify COBOL WORDS grammar.
+ 	* scan.l: Add support for $DISPLAY.
+ 	* util.cc: Add Boolean bit-operators to reserved-word list.
+ 
+ 2026-08-26  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/126611
+ 	* cdf.y: Renumber tokens.
+ 	* parse.y: Add tokens from ISO CDF reserved word list.
+ 	* scan.l: Same, and reposition.
+ 	* token_names.h: Regenerate.
+ 
+ 2026-08-25  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cbldiag.h (enum cbl_diag_id_t): Add ParDynamicCall.
+ 	* cdf-copy.cc (verify_bounds): Use diagnostic quotes.
+ 	* cobol1.cc (cobol_langhook_handle_option): Handle new option.
+ 	* gcobol.1: Document new option.
+ 	* lang-specs.h: Add new option to spec string.
+ 	* lang.opt: Add Wdynamic-call option.
+ 	* messages.cc (cbl_diagnostic_kind): Same.
+ 	(cobol_warning): Use diagnostics::kind::note for option.
+ 	* parse.y: Use new option.
+ 
+ 2026-08-25  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* lexio.cc (find_filter): Remove verbose_file_reader.
+ 	(cdftext::open_input): Remove reliance on GCOBOL_TEMPDIR.
+ 	* messages.cc (cobol_warning): Use diagnostics::kind::note.
+ 
+ 2026-08-25  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/126492
+ 	* cobol1.cc (enable_exceptions): Use diagnostic quotes.
+ 	(complain): New function honors EcUnknownW.
+ 	* exceptg.h (class exception_turn_t): Remove unconditional diagnostic.
+ 	* parse_ante.h (procedure_division_ready): Whitespace.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	PR cobol/123890
+ 	* Make-lang.in: Remove unneeded message suppression for scan.l.
+ 	* parse.y: SORT uses tableish, not tableref.
+ 	* scan.l: Use usual Procedure Division name recognition for SORT.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* gcobol.1: Add new section.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* parse.y: Supply locations to arith_t object.
+ 	* parse_ante.h (struct arith_t): Add and use numeric_ok and
+ 	helper functions.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* genapi.cc (parser_sleep): Use RETURN_IF_PARSE_ONLY.
+ 	* genmath.cc (parser_compute): Same.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cbldiag.h (cbl_diagnostic_ignored): Declare function.
+ 	* lexio.cc (cdftext::free_form_reference_format):
+ 	Honor -Wno-stray-indicator.
+ 	* messages.cc (cbl_diagnostic_ignored): New function.
+ 	* parse.y: Persist in the face of lexio errors.
+ 	* parse_ante.h (parser_move_carefully): Use cbl_field_type_name.
+ 	* scan_post.h (start_condition_str): Add fd_state.
+ 	* util.cc (cbl_field_type_str): Report name as "???" if confused.
+ 	(valid_move): Allow MOVE literal to numeric-edited.
+ 	(ERROR_MSG_BODY): Remove macro.
+ 	(error_msg): Use old macro body directly in function.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* parse.y: Accept device name as filename in SELECT.
+ 	* scan.l: Remove CR exclusion and rename STRING to STRING2.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cbldiag.h (enum cbl_diag_id_t): Add IbmContentExpr.
+ 	* cobol1.cc (cobol_langhook_handle_option): Process OPT_Wcontent_expr.
+ 	* gcobol.1: Document Wno-content-expr and recent Wno-redefines-grow.
+ 	* genapi.cc (create_and_call): Remove unqualified diagnostic.
+ 	* lang-specs.h: Add option to spec string.
+ 	* lang.opt: Define Wno-content-expr.
+ 	* messages.cc: Add IbmContentExpr to ibm dialect.
+ 	* parse.y: Verify BY CONTENT with by_content_ok().
+ 	* parse_ante.h (by_content_ok): New function.
+ 	* scan.l: Reduce overambitious TITLE scan.
+ 	* symbols.h (struct cbl_ffi_arg_t): Add by_content() for convenience.
+ 
  2026-08-21  James K. Lowden  <jklowden@cobolworx.com>
  
  	* cbldiag.h (enum cbl_diag_id_t): Define IsoRedefinesGrow.
diff -Nrcpad gcc-17-20260823/gcc/cobol/Make-lang.in gcc-17-20260830/gcc/cobol/Make-lang.in
*** gcc-17-20260823/gcc/cobol/Make-lang.in	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/Make-lang.in	Sun Aug 30 22:32:06 2026
*************** cobol/cdf.cc: cobol/cdf.y
*** 159,173 ****
  	$(BISON) -o $@ $(YFLAGS)						\
  		--defines=cobol/cdf.h --report-file=cobol/cdf.out $<
  
- # See "Trailing context is getting confused with trailing optional patterns"
- # in Flex manual. We suppress those messages, as a convenience.
- FLEX_WARNING = warning, dangerous trailing context
- 
  cobol/scan.cc: cobol/scan.l
! 	$(FLEX) -o$@ $(LFLAGS) $< 2>$@~ || { cat $@~ >&1; exit 1; }
! 	awk  '! /$(FLEX_WARNING)/ {print > "/dev/stderr"; nerr++}	\
! 	     END {print "$(FLEX):", NR, "messages" > "/dev/stderr"}' $@~
! 
  
  # To establish prerequisites for parse.o, cdf.o, and scan.o,
  #   1. capture the "make -n" output
--- 159,166 ----
  	$(BISON) -o $@ $(YFLAGS)						\
  		--defines=cobol/cdf.h --report-file=cobol/cdf.out $<
  
  cobol/scan.cc: cobol/scan.l
! 	$(FLEX) -o$@ $(LFLAGS) $<
  
  # To establish prerequisites for parse.o, cdf.o, and scan.o,
  #   1. capture the "make -n" output
diff -Nrcpad gcc-17-20260823/gcc/cobol/cbldiag.h gcc-17-20260830/gcc/cobol/cbldiag.h
*** gcc-17-20260823/gcc/cobol/cbldiag.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/cbldiag.h	Sun Aug 30 22:32:06 2026
*************** enum cbl_diag_id_t : uint64_t {
*** 177,182 ****
--- 177,183 ----
  
    IbmCallFd,
    IbmCdf,
+   IbmContentExpr,
    IbmEjectE,
    IbmEqualAssignE,
    IbmLengthOf, 
*************** enum cbl_diag_id_t : uint64_t {
*** 196,201 ****
--- 197,203 ----
    MfBinaryLongLong,
    MfCallGiving,
    MfCallLiteral,
+   MfDisplayScreen, 
    MfCdfDollar, 
    MfComp6,
    MfCompX,
*************** enum cbl_diag_id_t : uint64_t {
*** 205,216 ****
--- 207,220 ----
    MfMoveIndex, 
    MfMovePointer, 
    MfRedefinesFirst,
+   MfRedefinesTable,
    MfReturningNum,
    MfSetNumeric,
    MfTrailing,
    MfUsageTypename,
    
    Par78CdfDefinedW,
+   ParDynamicCall,
    ParIconvE, 
    ParInfoI,
    ParLangInfoW,
*************** dialect_not_ok( const cbl_loc_t& loc, cb
*** 250,255 ****
--- 254,261 ----
    return dialect_ok(loc, id, term, false);
  }
  
+ bool cbl_diagnostic_ignored( cbl_diag_id_t id );
+ 
  // Diagnostic format specifiers are documented in gcc/pretty-print.cc
  // an error at a location, called from the parser for semantic errors
  void error_msg( const cbl_loc_t& loc, const char gmsgid[], ... )
diff -Nrcpad gcc-17-20260823/gcc/cobol/cdf-copy.cc gcc-17-20260830/gcc/cobol/cdf-copy.cc
*** gcc-17-20260823/gcc/cobol/cdf-copy.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/cdf-copy.cc	Sun Aug 30 22:32:06 2026
*************** static void
*** 103,110 ****
  verify_bounds( size_t pos, size_t size, const char input[] ) {
    gcc_assert(pos < size );
    if( !( pos < size) ) {
!     cbl_internal_error( "REPLACING %zu characters exceeds system capacity"
!                         "'%s'", pos, input);
    }
  }
  
--- 103,110 ----
  verify_bounds( size_t pos, size_t size, const char input[] ) {
    gcc_assert(pos < size );
    if( !( pos < size) ) {
!     cbl_internal_error( "REPLACING %lu characters exceeds system capacity %qs",
!                         (unsigned long)pos, input);
    }
  }
  
diff -Nrcpad gcc-17-20260823/gcc/cobol/cdf.y gcc-17-20260830/gcc/cobol/cdf.y
*** gcc-17-20260823/gcc/cobol/cdf.y	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/cdf.y	Sun Aug 30 22:32:06 2026
*************** apply_cdf_turn( const exception_turn_t&
*** 297,303 ****
  %type	<cdfarg>	namelit name_any name_one
  %type	<string>	name subscript subscripts inof
  %token <boolean>  BOOL
! %token <number>  FEATURE 368  NUMBER 304  EXCEPTION_NAME 280    "EXCEPTION NAME"
  
  %type	<cdfval>	cdf_expr
  %type	<cdfval>	cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
--- 297,303 ----
  %type	<cdfarg>	namelit name_any name_one
  %type	<string>	name subscript subscripts inof
  %token <boolean>  BOOL
! %token <number>  FEATURE 400  NUMBER 308  EXCEPTION_NAME 284    "EXCEPTION NAME"
  
  %type	<cdfval>	cdf_expr
  %type	<cdfval>	cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
*************** apply_cdf_turn( const exception_turn_t&
*** 309,363 ****
  
  %type   <number>        cdf_stackable
  
! %token BY 488
! %token COPY 365
! %token CDF_DISPLAY 386    ">>DISPLAY"
! %token IN 606
! %token NAME 286
! %token NUMSTR 306    "numeric literal"
! %token OF 689
! %token PSEUDOTEXT 724
! %token REPLACING 746
! %token LITERAL 299
! %token SUPPRESS 379
  
! %token LSUB 370    "("
! %token SUBSCRIPT 378  RSUB 375    ")"
  
! %token CDF_DEFINE 385    ">>DEFINE"
! %token CDF_IF 387    ">>IF"
! %token CDF_ELSE 388    ">>ELSE"
! %token CDF_END_IF 389    ">>END-IF"
! %token CDF_EVALUATE 390    ">>EVALUATE"
! %token CDF_WHEN 391    ">>WHEN"
! %token CDF_END_EVALUATE 392    ">>END-EVALUATE"
  
! %token ALL 452
! %token CALL_CONVENTION 393    ">>CALL-CONVENTION"
! %token COBOL_WORDS 382    ">>COBOL-WORDS"
! %token CDF_PUSH 396    ">>PUSH"
! %token CDF_POP 397    ">>POP"
! %token SOURCE_FORMAT 398    ">>SOURCE FORMAT"
  
! %token AS 470  CONSTANT 364  DEFINED 366
  %type	<boolean>	     DEFINED
! %token OTHER 701  PARAMETER_kw 371    "PARAMETER"
! %token OFF 690  OVERRIDE 372
! %token THRU 947
! %token TRUE_kw 816    "True"
  
! %token CALL_COBOL 394    "CALL"
! %token CALL_VERBATIM 395    "CALL (as C)"
  
! %token TURN 818  CHECKING 498  LOCATION 650  ON 692  WITH 845
  
! %left OR 948
! %left AND 949
! %right NOT 950
! %left '<'  '>'  EQ 298    "EQUAL"  NE 951  LE 952  GE 953
  %left '-'  '+'
  %left '*'  '/'
! %right NEG 955
  
  %require "3.8.2"  // for C++ output
  %language "c++"
--- 309,364 ----
  
  %type   <number>        cdf_stackable
  
! %token BY 520
! %token COPY 397
! %token CDF_DISPLAY 418    ">>DISPLAY"
! %token IN 638
! %token NAME 290
! %token NUMSTR 310    "numeric literal"
! %token OF 721
! %token PSEUDOTEXT 755
! %token REPLACING 777
! %token READY 405  TRACE 412  RESET 406
! %token LITERAL 303
! %token SUPPRESS 411
  
! %token LSUB 402    "("
! %token SUBSCRIPT 410  RSUB 407    ")"
  
! %token CDF_DEFINE 417    ">>DEFINE"
! %token CDF_IF 419    ">>IF"
! %token CDF_ELSE 420    ">>ELSE"
! %token CDF_END_IF 421    ">>END-IF"
! %token CDF_EVALUATE 422    ">>EVALUATE"
! %token CDF_WHEN 423    ">>WHEN"
! %token CDF_END_EVALUATE 424    ">>END-EVALUATE"
  
! %token ALL 484
! %token CALL_CONVENTION 425    ">>CALL-CONVENTION"
! %token COBOL_WORDS 414    ">>COBOL-WORDS"
! %token CDF_PUSH 428    ">>PUSH"
! %token CDF_POP 429    ">>POP"
! %token SOURCE_FORMAT 430    ">>SOURCE FORMAT"
  
! %token AS 502  CONSTANT 396  DEFINED 398
  %type	<boolean>	     DEFINED
! %token OTHER 733  PARAMETER_kw 403    "PARAMETER"
! %token OFF 722  OVERRIDE 404
! %token THRU 979
! %token TRUE_kw 848    "True"
  
! %token CALL_COBOL 426    "CALL"
! %token CALL_VERBATIM 427    "CALL (as C)"
  
! %token TURN 850  CHECKING 530  LOCATION 682  ON 724  WITH 877
  
! %left OR 980
! %left AND 982
! %right NOT 983
! %left '<'  '>'  _EQ 302    "EQUAL"  _NE 984  _LE 985  _GE 986
  %left '-'  '+'
  %left '*'  '/'
! %right NEG 988
  
  %require "3.8.2"  // for C++ output
  %language "c++"
*************** completes:	complete
*** 392,397 ****
--- 393,399 ----
  		;
  complete:	cdf_define
  	|	cdf_display
+ 	|	cdf_trace
  	|	cdf_turn
          |       cdf_call_convention
          |       cdf_push
*************** cdf_define:	CDF_DEFINE cdf_constant NAME
*** 466,472 ****
                    cdf_field_add( @NAME, $NAME, $value );
  
  		}
! 	|	CDF_DEFINE cdf_constant NAME EQ cdf_expr[value] override
  		{  /* accept, but as error */
  		  if( scanner_parsing() ) {
  		    error_msg(@NAME, "CDF error: %s = value invalid", $NAME);
--- 468,474 ----
                    cdf_field_add( @NAME, $NAME, $value );
  
  		}
! 	|	CDF_DEFINE cdf_constant NAME _EQ cdf_expr[value] override
  		{  /* accept, but as error */
  		  if( scanner_parsing() ) {
  		    error_msg(@NAME, "CDF error: %s = value invalid", $NAME);
*************** override:	%empty   { $$ = false; }
*** 513,518 ****
--- 515,524 ----
  	|	OVERRIDE { $$ = true; }
  		;
  
+ cdf_trace:      READY TRACE
+         |       RESET TRACE
+                 ;
+ 
  cdf_turn:	TURN except_names except_check
  		{
  		  apply_cdf_turn(exception_turn);
*************** cdf_reloper:	    cdf_relexpr
*** 671,678 ****
  		;
  
  cdf_relexpr:	cdf_relexpr '<' cdf_expr { $$ = $1(@1) <  $3(@3); }
! 	|	cdf_relexpr LE  cdf_expr { $$ = $1(@1) <= $3(@3); }
! 	|	cdf_relexpr EQ cdf_expr {
  		  $$ = cdfval_t(false);
  		  if( ( $1.string &&  $3.string) ||
  		      (!$1.string && !$3.string) )
--- 677,684 ----
  		;
  
  cdf_relexpr:	cdf_relexpr '<' cdf_expr { $$ = $1(@1) <  $3(@3); }
! 	|	cdf_relexpr _LE  cdf_expr { $$ = $1(@1) <= $3(@3); }
! 	|	cdf_relexpr _EQ cdf_expr {
  		  $$ = cdfval_t(false);
  		  if( ( $1.string &&  $3.string) ||
  		      (!$1.string && !$3.string) )
*************** cdf_relexpr:	cdf_relexpr '<' cdf_expr {
*** 685,691 ****
  		    error_msg(@1, "%s", msg);
  		  }
  		}
! 	|	cdf_relexpr NE cdf_expr
  		{
  		  $$ = cdfval_t(false);
  		  if( ( $1.string &&  $3.string) ||
--- 691,697 ----
  		    error_msg(@1, "%s", msg);
  		  }
  		}
! 	|	cdf_relexpr _NE cdf_expr
  		{
  		  $$ = cdfval_t(false);
  		  if( ( $1.string &&  $3.string) ||
*************** cdf_relexpr:	cdf_relexpr '<' cdf_expr {
*** 699,705 ****
  		    error_msg(@1, "%s", msg);
  		  }
  		}
! 	|	cdf_relexpr GE  cdf_expr { $$ = $1(@1) >= $3(@3); }
  	|	cdf_relexpr '>' cdf_expr { $$ = $1(@1) >  $3(@3); }
  	|	cdf_expr
  		;
--- 705,711 ----
  		    error_msg(@1, "%s", msg);
  		  }
  		}
! 	|	cdf_relexpr _GE  cdf_expr { $$ = $1(@1) >= $3(@3); }
  	|	cdf_relexpr '>' cdf_expr { $$ = $1(@1) >  $3(@3); }
  	|	cdf_expr
  		;
diff -Nrcpad gcc-17-20260823/gcc/cobol/cobol1.cc gcc-17-20260830/gcc/cobol/cobol1.cc
*** gcc-17-20260823/gcc/cobol/cobol1.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/cobol1.cc	Sun Aug 30 22:32:06 2026
*************** create_our_type_nodes_init()
*** 163,168 ****
--- 163,170 ----
    int128_five_node    = build_int_cst_type(INT128,  5);
    int128_ten_node     = build_int_cst_type(INT128, 10);
    char_ptr_type_node  = build_pointer_type(CHAR);
+   const_char_ptr_type_node = build_pointer_type(build_qualified_type(CHAR,
+                                                              TYPE_QUAL_CONST));
    uchar_ptr_type_node = build_pointer_type(UCHAR);
    wchar_ptr_type_node = build_pointer_type(WCHAR);
    long_double_ten_node = build_real_from_int_cst(
*************** enable_exceptions( bool enable ) {
*** 358,364 ****
         NULL != (name = strtok(name, ",")); name = NULL ) {
      ec_type_t type = ec_type_of(name);
      if( type == ec_none_e ) {
!       cbl_message(EcUnknownW, "unrecognized exception '%s'", name);
        continue;
      }
      add_cobol_exception(type, enable );
--- 360,366 ----
         NULL != (name = strtok(name, ",")); name = NULL ) {
      ec_type_t type = ec_type_of(name);
      if( type == ec_none_e ) {
!       cbl_message(EcUnknownW, "unrecognized exception %qs", name);
        continue;
      }
      add_cobol_exception(type, enable );
*************** append_copybook_prefix(const char *prefi
*** 437,442 ****
--- 439,466 ----
  void cobol_warning( cbl_diag_id_t id, int yn, bool );
  void cobol_warning_suppress( cbl_dialect_t dialect );
  
+ /*
+  * If an unrecognized/unimplmemented EC is specified, emit a warning.  If the
+  * warning is turned off, keep quiet.
+  * 
+  * Tue Aug 25 09:41:37 2026: For reasons unclear gcobol duplicates some
+  * command-line options to cobol1.  In any case if the user specifies the ssme
+  * EC twice, or uses it more than once in the body of the code, he doesn't
+  * need two messages.
+  */
+ void cbl_enabled_exceptions_t::
+ complain( ec_type_t type ) {
+   static std::set<ec_type_t> said_so;
+   auto p = said_so.insert(type);
+   if( p.second ) {
+     ec_disposition_t disposition = ec_type_disposition(type);
+     if( disposition != ec_implemented(disposition) ) {
+       cbl_message(EcUnknownW, "sorry, exception %qs not implemented",
+                   ec_type_str(type));
+     }
+   }
+ }
+ 
  static bool
  cobol_langhook_handle_option (size_t scode,
                                const char *arg,
*************** cobol_langhook_handle_option (size_t sco
*** 589,594 ****
--- 613,622 ----
            cobol_warning(IbmCallFd, cobol_call_fd, warning_as_error);
            return true;
  
+         case OPT_Wdynamic_call:
+           cobol_warning(ParDynamicCall, cobol_dynamic_call, warning_as_error);
+           return true;
+ 
          case OPT_Wcall_giving:
            cobol_warning(MfCallGiving, call_giving, warning_as_error);
            return true;
*************** cobol_langhook_handle_option (size_t sco
*** 597,602 ****
--- 625,634 ----
            cobol_warning(MfCallLiteral, call_literal, warning_as_error);
            return true;
  
+         case OPT_Wdisplay_screen:
+           cobol_warning(MfDisplayScreen, display_screen, warning_as_error);
+           return true;
+ 
          case OPT_Wcdf_dollar:
            cobol_warning(MfCdfDollar, cdf_dollar, warning_as_error);
            return true;
*************** cobol_langhook_handle_option (size_t sco
*** 645,650 ****
--- 677,686 ----
            cobol_warning(MfRedefinesFirst, redefines_first, warning_as_error);
            return true;
  
+         case OPT_Wredefines_table:
+           cobol_warning(MfRedefinesTable, redefines_table, warning_as_error);
+           return true;
+ 
          case OPT_Wredefines_grow:
            cobol_warning(IsoRedefinesGrow, redefines_grow, warning_as_error);
            return true;
*************** cobol_langhook_handle_option (size_t sco
*** 757,762 ****
--- 793,802 ----
            cobol_warning(IbmCdf, cobol_ibmcdf, warning_as_error);
            return true;
  
+         case OPT_Wcontent_expr:
+           cobol_warning(IbmContentExpr, content_expr, warning_as_error);
+           return true;
+ 
          case OPT_Woperator_space:
            cobol_warning(LexSeparatorE, operator_space, warning_as_error);
            return true;
diff -Nrcpad gcc-17-20260823/gcc/cobol/compare.cc gcc-17-20260830/gcc/cobol/compare.cc
*** gcc-17-20260823/gcc/cobol/compare.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/compare.cc	Sun Aug 30 22:32:06 2026
*************** digiter(int &digits, int &rdigits, const
*** 172,181 ****
      if( rdigits < 0 )
        {
        // This is like 999PPPP with rdigits = -4
!       // So, digits becomes 7, and rdigits becomes 0
        // Our caller will have to multiply by 10^4 to get the 999 digits into
        // the right place.
-       digits += rdigits;
        rdigits = 0;
        }
      else
--- 172,180 ----
      if( rdigits < 0 )
        {
        // This is like 999PPPP with rdigits = -4
!       // So, digits evntually becomes 7, and rdigits becomes 0
        // Our caller will have to multiply by 10^4 to get the 999 digits into
        // the right place.
        rdigits = 0;
        }
      else
*************** digiter(int &digits, int &rdigits, const
*** 189,229 ****
  static int
  total_digits(int &left_rdigits,
               int &right_rdigits,
               const cbl_refer_t &left_side,
               const cbl_refer_t &right_side)
    {
!   // This routine is called when neither parameter is intermediate_e, and thus
!   // we can use the compile-time values:
!   int left_digits=0;
!   int right_digits=0;
!   digiter(left_digits,  left_rdigits,  left_side);
    digiter(right_digits, right_rdigits, right_side);
  
!   if( (left_side.field->attr & scaled_e) && left_side.field->data.rdigits < 0)
      {
      right_rdigits -= left_side.field->data.rdigits;
      }
!   if( (right_side.field->attr & scaled_e) && right_side.field->data.rdigits < 0)
      {
      left_rdigits -= right_side.field->data.rdigits;
      }
  
-   // We can reduce the two rdigits values by the common portion of both:
    int excess_digits = std::min(left_rdigits, right_rdigits);
  
    left_rdigits  -= excess_digits;
    right_rdigits -= excess_digits;
  
-   // And now we can scale up both left_digits and right_digits by the rdigits
-   // of the other side.  Keep in mind that at this point, one of them is
-   // zero:
- 
    left_digits  += right_rdigits;
    right_digits += left_rdigits;
  
!   // Our return value is the larger of those two numbers:
!   int retval = std::max(left_digits, right_digits);
!   return retval;
    }
  
  static void
--- 188,251 ----
  static int
  total_digits(int &left_rdigits,
               int &right_rdigits,
+              int &left_discard,
+              int &right_discard,
               const cbl_refer_t &left_side,
               const cbl_refer_t &right_side)
    {
!   int left_digits = 0;
!   int right_digits = 0;
! 
!   left_discard = 0;
!   right_discard = 0;
! 
!   digiter(left_digits, left_rdigits, left_side);
    digiter(right_digits, right_rdigits, right_side);
  
!   if(    (left_side.field->attr & scaled_e)
!       && left_side.field->data.rdigits < 0 )
      {
      right_rdigits -= left_side.field->data.rdigits;
      }
! 
!   if(    (right_side.field->attr & scaled_e)
!       && right_side.field->data.rdigits < 0 )
      {
      left_rdigits -= right_side.field->data.rdigits;
      }
  
    int excess_digits = std::min(left_rdigits, right_rdigits);
  
    left_rdigits  -= excess_digits;
    right_rdigits -= excess_digits;
  
    left_digits  += right_rdigits;
    right_digits += left_rdigits;
  
!   int ntotal_digits = std::max(left_digits, right_digits);
!   int too_much = ntotal_digits - MAX_INT128_DIGITS;
! 
!   if( too_much > 0 )
!     {
!     gcc_assert(left_rdigits || right_rdigits);
! 
!     if( left_rdigits )
!       {
!       gcc_assert(too_much <= left_rdigits);
!       left_rdigits -= too_much;
!       left_discard = too_much;
!       }
!     else
!       {
!       gcc_assert(too_much <= right_rdigits);
!       right_rdigits -= too_much;
!       right_discard = too_much;
!       }
! 
!     ntotal_digits = MAX_INT128_DIGITS;
!     }
! 
!   return ntotal_digits;
    }
  
  static void
*************** total_digits_tree( tree &left_rdigits,
*** 320,325 ****
--- 342,355 ----
  static tree
  type_based_on_digits(int digits, bool signable)
    {
+   /* When working one's way through this code, it is useful to know that the
+      underlying design assumptions are:
+ 
+      Supported targets are LP64.
+      Values entering the 128-bit comparison path fit in signed INT128.
+      Intermediate rdigits is nonnegative.
+      intermediate_e and scaled_e are mutually exclusive.  */
+ 
    tree retval;
    if( signable )
      {
*************** numeric_compare(tree        &left,
*** 403,511 ****
      {
      int left_rdigits;
      int right_rdigits;
      int ntotal_digits = total_digits( left_rdigits,
                                        right_rdigits,
                                        left_side,
                                        right_side);
!     if( ntotal_digits <= MAX_INT128_DIGITS )
        {
!       // Our interest is comparison, so we need both left and right to be
!       // big enough to hold ntotal_digits, and we need both to be the same
!       // class of signable.  If signables don't match, we use unsigned, and
!       // we check later for a high-order bit to be on.
!       bool mismatched =    (left_side.field->attr  & signable_e)
!                         != (right_side.field->attr & signable_e) ;
  
!       bool are_signed = mismatched || (left_side.field->attr  & signable_e) ;
!       tree type = type_based_on_digits(ntotal_digits, are_signed);
  
!       get_binary_value(left, left_side, type);
!       get_binary_value(right, right_side, type);
!       // We have two good binary values, and they are the same size.
  
!       // If they were mismatched in signable, they were both assigned to
!       // signed types.  We need to check to see if the one that is
!       // signable was negative.  If so, we return 0 and 1 so that the
!       // test comes out right.
  
!       if(     (left_side.field->attr  & signable_e)
!           && !(right_side.field->attr & signable_e) )
!         {
!         tree signable_type = type_based_on_digits(ntotal_digits, true);
!         IF( gg_cast(signable_type, left),
!             lt_op,
!             gg_cast(signable_type, integer_zero_node) )
!           {
!           gg_assign(left,  gg_cast(type, integer_zero_node));
!           gg_assign(right, gg_cast(type, integer_one_node));
!           }
!         ELSE
!           {
!           }
!         ENDIF
!         }
!       else if(   !(left_side.field->attr  & signable_e)
!               &&  (right_side.field->attr & signable_e) )
          {
!         tree signable_type = type_based_on_digits(ntotal_digits, true);
!         IF( gg_cast(signable_type, right),
!             lt_op,
!             gg_cast(signable_type, integer_zero_node) )
!           {
!           gg_assign(left,  gg_cast(type, integer_one_node));
!           gg_assign(right, gg_cast(type, integer_zero_node));
!           }
!         ELSE
!           {
!           }
!         ENDIF
          }
!       // If left_rdigits and right_rdigits are different, then one of the
!       // values needs to be scaled by the other's rdigits:
  
!       static uint64_t powt[] =
!         {
!         1UL,                       // 00
!         10UL,                      // 01
!         100UL,                     // 02
!         1000UL,                    // 03
!         10000UL,                   // 04
!         100000UL,                  // 05
!         1000000UL,                 // 06
!         10000000UL,                // 07
!         100000000UL,               // 08
!         1000000000UL,              // 09
!         10000000000UL,             // 10
!         100000000000UL,            // 11
!         1000000000000UL,           // 12
!         10000000000000UL,          // 13
!         100000000000000UL,         // 14
!         1000000000000000UL,        // 15
!         10000000000000000UL,       // 16
!         };
  
!       while(left_rdigits)
!         {
!         // We need to multiply right by 10^left_rdigits
!         int next = std::min(left_rdigits, 16);
!         left_rdigits -= next;
!         gg_assign(right,
!                   gg_multiply(right,
!                               gg_cast(type,
!                                       build_int_cst_type(ULONG,
!                                                          powt[next]))));
!         }
!       while(right_rdigits)
!         {
!         // We need to multiply left by 10^right_rdigits
!         int next = std::min(right_rdigits, 9);
!         right_rdigits -= next;
!         gg_assign(left,
!                   gg_multiply(left,
!                               gg_cast(type,
!                                       build_int_cst_type(ULONG,
!                                                          powt[next]))));
!         }
        }
      compared = true;
      }
--- 433,536 ----
      {
      int left_rdigits;
      int right_rdigits;
+     int left_discard;
+     int right_discard;
      int ntotal_digits = total_digits( left_rdigits,
                                        right_rdigits,
+                                       left_discard,
+                                       right_discard,
                                        left_side,
                                        right_side);
!     gcc_assert( ntotal_digits <= MAX_INT128_DIGITS );
!     if( left_discard )
        {
!       scale_by_power_of_ten_N(left, -left_discard);
!       }
  
!     if( right_discard )
!       {
!       scale_by_power_of_ten_N(right, -right_discard);
!       }
  
!     // Our interest is in comparison.  So, we need the two values to be
!     // of the same type.  This is complicated by the problem of comparing
!     // a signed value to an unsigned value.  To be sure of doing that, we
!     // convert both the signed and unsigned values to be signed values of a
!     // larger type.
  
!     bool mismatched =    (left_side.field->attr  & signable_e)
!                       != (right_side.field->attr & signable_e) ;
  
!     bool are_signed = mismatched || (left_side.field->attr  & signable_e) ;
!     tree type = type_based_on_digits(ntotal_digits, are_signed);
! 
!     if( mismatched )
!       {
!       switch( gg_sizeof(type) )
          {
!         case 1:
!           type = SHORT;
!           break;
!         case 2:
!           type = INT;
!           break;
!         case 4:
!           type = LONG;
!           break;
!         default:
!           type = INT128;
!           break;
          }
!       }
  
!     left  = get_binary_value(left_side, type);
!     right = get_binary_value(right_side, type);
  
!     // We have two good binary values, and they are the same size.
! 
!     // If left_rdigits and right_rdigits are different, then one of the
!     // values needs to be scaled by the other's rdigits:
! 
!     static uint64_t powt[] =
!       {
!       1UL,                       // 00
!       10UL,                      // 01
!       100UL,                     // 02
!       1000UL,                    // 03
!       10000UL,                   // 04
!       100000UL,                  // 05
!       1000000UL,                 // 06
!       10000000UL,                // 07
!       100000000UL,               // 08
!       1000000000UL,              // 09
!       10000000000UL,             // 10
!       100000000000UL,            // 11
!       1000000000000UL,           // 12
!       10000000000000UL,          // 13
!       100000000000000UL,         // 14
!       1000000000000000UL,        // 15
!       10000000000000000UL,       // 16
!       };
! 
!     while(left_rdigits)
!       {
!       // We need to multiply right by 10^left_rdigits
!       int next = std::min(left_rdigits, 16);
!       left_rdigits -= next;
!       right =   gg_multiply(right,
!                             gg_cast(type,
!                                     build_int_cst_type(ULONG,
!                                                        powt[next])));
!       }
!     while(right_rdigits)
!       {
!       // We need to multiply left by 10^right_rdigits
!       int next = std::min(right_rdigits, 9);
!       right_rdigits -= next;
!       left =    gg_multiply(left,
!                             gg_cast(type,
!                                     build_int_cst_type(ULONG,
!                                                        powt[next])));
        }
      compared = true;
      }
*************** numeric_compare(tree        &left,
*** 522,587 ****
                        left_side,
                        right_side);
  
!     // Our interest is comparison.
      tree type = INT128;
  
!     get_binary_value(left, left_side, type);
!     get_binary_value(right, right_side, type);
  
      // We have two good binary values, and they are the same size.
  
-     // If they were mismatched in signable, they were both assigned to
-     // signed types.  We need to check to see if the one that is
-     // signable was negative.  If so, we return 0 and 1 so that the
-     // test comes out right.
- 
-     if(     (left_side.field->attr  & signable_e)
-         && !(right_side.field->attr & signable_e) )
-       {
-       tree signable_type = INT128;
-       IF( gg_cast(signable_type, left),
-           lt_op,
-           gg_cast(signable_type, integer_zero_node) )
-         {
-         gg_assign(left,  gg_cast(type, integer_zero_node));
-         gg_assign(right, gg_cast(type, integer_one_node));
-         }
-       ELSE
-         {
-         }
-       ENDIF
-       }
-     else if(    !(left_side.field->attr  & signable_e)
-               && (right_side.field->attr & signable_e) )
-       {
-       tree signable_type = INT128;
-       IF( gg_cast(signable_type, right),
-           lt_op,
-           gg_cast(signable_type, integer_zero_node) )
-         {
-         gg_assign(left,  gg_cast(type, integer_one_node));
-         gg_assign(right, gg_cast(type, integer_zero_node));
-         }
-       ELSE
-         {
-         }
-       ENDIF
-       }
- 
      // To normalize the positions of decimal points, each number has to be
      // multiplied by the rdigits of the other
!     gg_assign(right,
!               gg_multiply(right,
                            gg_call_expr(INT128,
                                         "__gg__power_of_ten",
                                         left_rdigits,
!                                        NULL_TREE)));
!     gg_assign(left,
!               gg_multiply(left,
                            gg_call_expr(INT128,
                                         "__gg__power_of_ten",
                                         right_rdigits,
!                                        NULL_TREE)));
      // The left and right values are ready to be compared
      compared = true;
      }
--- 547,572 ----
                        left_side,
                        right_side);
  
!     // Our interest is comparison, so we convert them both to INT128.
      tree type = INT128;
  
!     left  = get_binary_value(left_side, type);
!     right = get_binary_value(right_side, type);
  
      // We have two good binary values, and they are the same size.
  
      // To normalize the positions of decimal points, each number has to be
      // multiplied by the rdigits of the other
!     right =   gg_multiply(right,
                            gg_call_expr(INT128,
                                         "__gg__power_of_ten",
                                         left_rdigits,
!                                        NULL_TREE));
!     left =   gg_multiply(left,
                            gg_call_expr(INT128,
                                         "__gg__power_of_ten",
                                         right_rdigits,
!                                        NULL_TREE));
      // The left and right values are ready to be compared
      compared = true;
      }
*************** alpha_compare_figconst( tree        &lef
*** 599,614 ****
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
  
!   tree location_left;
!   tree length_left;
! 
!   get_location(location_left, left_side);
!   get_length(length_left, left_side);
  
    const charmap_t *charmap_left =
                         __gg__get_charmap(left_side.field->codeset.encoding);
- ////  charmap_t *charmap_right =
- ////                       __gg__get_charmap(right_side.field->codeset.encoding);
  
    // We know the result of this mapping has to be an 8-bit value, because
    // all figconsts map to a single byte.  HIGH-VALUE is a bit of a problem,
--- 584,594 ----
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
  
!   tree location_left = get_location(left_side);
!   tree length_left = get_length(left_side);
  
    const charmap_t *charmap_left =
                         __gg__get_charmap(left_side.field->codeset.encoding);
  
    // We know the result of this mapping has to be an 8-bit value, because
    // all figconsts map to a single byte.  HIGH-VALUE is a bit of a problem,
*************** alpha_compare_figconst( tree        &lef
*** 623,629 ****
      {
      // Comparing an alphanumeric to a figconst
      // We need to convert the char_right to the left's encoding:
!     converted = __gg__iconverter(right_side.field->codeset.encoding,
                                   left_side.field->codeset.encoding,
                                   &char_right,
                                   1,
--- 603,609 ----
      {
      // Comparing an alphanumeric to a figconst
      // We need to convert the char_right to the left's encoding:
!     converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                   left_side.field->codeset.encoding,
                                   &char_right,
                                   1,
*************** alpha_compare_figconst( tree        &lef
*** 638,654 ****
                                   right_side.field->data.capacity(),
                                   &nbytes);
      }
!   left  = gg_define_variable(INT);
!   right = gg_define_variable(INT, 0L);
!   gg_call(VOID,
!           "__gg__compare_string_all",
!           gg_get_address_of(left),
!           location_left,
!           length_left,
!           build_int_cst_type(INT, charmap_left->stride()),
!           build_string_literal(nbytes, converted),
!           build_int_cst_type(SIZE_T, nbytes),
!           NULL_TREE);
    }
  
  static bool
--- 618,632 ----
                                   right_side.field->data.capacity(),
                                   &nbytes);
      }
!   right = integer_zero_node;
!   left = gg_call_expr(INT,
!                       "__gg__compare_string_all",
!                       location_left,
!                       length_left,
!                       build_int_cst_type(INT, charmap_left->stride()),
!                       build_string_literal(nbytes, converted),
!                       build_int_cst_type(SIZE_T, nbytes),
!                       NULL_TREE);
    }
  
  static bool
*************** alpha_compare(tree        &left,
*** 763,784 ****
        {
        // Call the library routine that converts the right side to the left
        // encoding.
!       get_location(location_left, left_side);
!       get_length(length_left, left_side);
!       get_location(location_right, right_side);
!       get_length(length_right, right_side);
!       left  = gg_define_variable(INT);
!       right = gg_define_variable(INT, 0L);
!       gg_call(VOID,
!               "__gg_compare_string_different",
!               gg_get_address_of(left),
!               location_left,
!               length_left,
!               build_int_cst_type(INT, left_side.field->codeset.encoding),
!               location_right,
!               length_right,
!               build_int_cst_type(INT, right_side.field->codeset.encoding),
!               NULL_TREE);
        retval = true;
        goto done;
        }
--- 741,760 ----
        {
        // Call the library routine that converts the right side to the left
        // encoding.
!       location_left = get_location(left_side);
!       length_left   = get_length(left_side);
!       location_right = get_location(right_side);
!       length_right   = get_length(right_side);
!       right = integer_zero_node;
!       left = gg_call_expr(INT,
!                           "__gg_compare_string_different",
!                           location_left,
!                           length_left,
!                           build_int_cst_type(INT, left_side.field->codeset.encoding),
!                           location_right,
!                           length_right,
!                           build_int_cst_type(INT, right_side.field->codeset.encoding),
!                           NULL_TREE);
        retval = true;
        goto done;
        }
*************** alpha_compare(tree        &left,
*** 799,804 ****
--- 775,781 ----
      // R.J.Dubner; 2026-05-08
      static const long MAGIC_NUMBER = 16;
  
+     // The conversion of a space can be no more than four bytes.
      char ach_space[4];
      char ch = ascii_space;
      size_t nbytes;
*************** alpha_compare(tree        &left,
*** 807,812 ****
--- 784,791 ----
                                               &ch,
                                               1,
                                               &nbytes);
+     gcc_assert(nbytes <= sizeof(ach_space));
+     gcc_assert(nbytes == static_cast<size_t>(charmap_left->stride()));
      memcpy(ach_space, converted, nbytes);
      const char *the_routine;
      switch( charmap_left->stride() )
*************** alpha_compare(tree        &left,
*** 823,841 ****
            {
            size_t length_l = left_side.field->data.capacity();
            size_t length_r = right_side.field->data.capacity();
            if(    refer_is_super_clean(left_side)
                && refer_is_super_clean(right_side)
!               && std::abs(   static_cast<long>(length_l)
!                            - static_cast<long>(length_r)) <= MAGIC_NUMBER )
              {
              // There is no collation table in use, we are single-byte encoded,
              // and both variables are in working storage at known locations and
              // with known lengths.  We can build code that is extremely
              // efficient.
!             get_location(location_left, left_side);
!             get_location(location_right, right_side);
              left  = gg_define_variable(INT);
!             right = gg_define_variable(INT, 0L);
              size_t length = std::min(length_l, length_r);
              gg_assign(left,
                        gg_memcmp(location_left,
--- 802,820 ----
            {
            size_t length_l = left_side.field->data.capacity();
            size_t length_r = right_side.field->data.capacity();
+           ssize_t diff = length_l - length_r;
            if(    refer_is_super_clean(left_side)
                && refer_is_super_clean(right_side)
!               && std::abs(diff) <= MAGIC_NUMBER )
              {
              // There is no collation table in use, we are single-byte encoded,
              // and both variables are in working storage at known locations and
              // with known lengths.  We can build code that is extremely
              // efficient.
!             location_left  = get_location(left_side);
!             location_right = get_location(right_side);
              left  = gg_define_variable(INT);
!             right = integer_zero_node;
              size_t length = std::min(length_l, length_r);
              gg_assign(left,
                        gg_memcmp(location_left,
*************** alpha_compare(tree        &left,
*** 848,857 ****
                // char.
                IF( left, eq_op, integer_zero_node )
                  {
!                 tree count = gg_define_variable(INT);
!                 gg_assign(count, build_int_cst_type(INT,
                                                     length));
!                 WHILE( count, lt_op, build_int_cst_type(INT,
                                                          length_l) )
                    {
                    IF( gg_indirect(location_left, count),
--- 827,836 ----
                // char.
                IF( left, eq_op, integer_zero_node )
                  {
!                 tree count = gg_define_variable(SIZE_T);
!                 gg_assign(count, build_int_cst_type(SIZE_T,
                                                     length));
!                 WHILE( count, lt_op, build_int_cst_type(SIZE_T,
                                                          length_l) )
                    {
                    IF( gg_indirect(location_left, count),
*************** alpha_compare(tree        &left,
*** 871,885 ****
                        }
                      ENDIF
                      // Force the end of the loop:
!                     gg_assign(count, build_int_cst_type(INT,
                                                          length_l));
                      }
                    ELSE
                      {
                      // The *left is a space; keep going
                      }
                    ENDIF
-                   gg_increment(count);
                    }
                  WEND
                  }
--- 850,864 ----
                        }
                      ENDIF
                      // Force the end of the loop:
!                     gg_assign(count, build_int_cst_type(SIZE_T,
                                                          length_l));
                      }
                    ELSE
                      {
                      // The *left is a space; keep going
+                     gg_increment(count);
                      }
                    ENDIF
                    }
                  WEND
                  }
*************** alpha_compare(tree        &left,
*** 895,904 ****
                // char.
                IF( left, eq_op, integer_zero_node )
                  {
!                 tree count = gg_define_variable(INT);
!                 gg_assign(count, build_int_cst_type(INT,
                                                     length));
!                 WHILE( count, lt_op, build_int_cst_type(INT,
                                                          length_r) )
                    {
                    IF( gg_indirect(location_right, count),
--- 874,883 ----
                // char.
                IF( left, eq_op, integer_zero_node )
                  {
!                 tree count = gg_define_variable(SIZE_T);
!                 gg_assign(count, build_int_cst_type(SIZE_T,
                                                     length));
!                 WHILE( count, lt_op, build_int_cst_type(SIZE_T,
                                                          length_r) )
                    {
                    IF( gg_indirect(location_right, count),
*************** alpha_compare(tree        &left,
*** 918,932 ****
                        }
                      ENDIF
                      // Force the end of the loop:
!                     gg_assign(count, build_int_cst_type(INT,
                                                          length_r));
                      }
                    ELSE
                      {
                      // The *right is a space; keep going
                      }
                    ENDIF
-                   gg_increment(count);
                    }
                  WEND
                  }
--- 897,911 ----
                        }
                      ENDIF
                      // Force the end of the loop:
!                     gg_assign(count, build_int_cst_type(SIZE_T,
                                                          length_r));
                      }
                    ELSE
                      {
                      // The *right is a space; keep going
+                     gg_increment(count);
                      }
                    ENDIF
                    }
                  WEND
                  }
*************** alpha_compare(tree        &left,
*** 986,1006 ****
          break;
          }
        }
!     get_location(location_left, left_side);
!     get_length(length_left, left_side);
!     get_location(location_right, right_side);
!     get_length(length_right, right_side);
!     left  = gg_define_variable(INT);
!     right = gg_define_variable(INT, 0L);
!     gg_call(VOID,
!             the_routine,
!             gg_get_address_of(left),
!             location_left,
!             length_left,
!             location_right,
!             length_right,
!             build_string_literal(charmap_left->stride(), ach_space),
!             NULL_TREE);
      retval = true;
      goto done;
      }
--- 965,983 ----
          break;
          }
        }
!     location_left = get_location(left_side);
!     length_left   = get_length(left_side);
!     location_right = get_location(right_side);
!     length_right   = get_length(right_side);
!     right = integer_zero_node;
!     left = gg_call_expr(INT,
!                         the_routine,
!                         location_left,
!                         length_left,
!                         location_right,
!                         length_right,
!                         build_string_literal(charmap_left->stride(), ach_space),
!                         NULL_TREE);
      retval = true;
      goto done;
      }
*************** numeric_alpha_compare(tree        &left,
*** 1026,1037 ****
  
    const charmap_t *charmap_left =
                            __gg__get_charmap(left_side.field->codeset.encoding);
- 
-   charmap_t *charmap_right =
-                          __gg__get_charmap(right_side.field->codeset.encoding);
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
!   uint8_t char_right = charmap_right->figconst_character(figconst_right);
  
    if( left_side.field->type == FldLiteralN )
      {
--- 1003,1011 ----
  
    const charmap_t *charmap_left =
                            __gg__get_charmap(left_side.field->codeset.encoding);
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
!   uint8_t char_right = char_from_figconst(figconst_right);
  
    if( left_side.field->type == FldLiteralN )
      {
*************** numeric_alpha_compare(tree        &left,
*** 1059,1065 ****
          {
          // Comparing an alphanumeric to a figconst
          // We need to convert the char_right to the left's encoding:
!         converted = __gg__iconverter(right_side.field->codeset.encoding,
                                       left_side.field->codeset.encoding,
                                       &char_right,
                                       1,
--- 1033,1039 ----
          {
          // Comparing an alphanumeric to a figconst
          // We need to convert the char_right to the left's encoding:
!         converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                       left_side.field->codeset.encoding,
                                       &char_right,
                                       1,
*************** numeric_alpha_compare(tree        &left,
*** 1074,1110 ****
                                       right_side.field->data.capacity(),
                                       &nbytes);
          }
!       left  = gg_define_variable(INT);
!       right = gg_define_variable(INT, 0L);
!       gg_call(VOID,
!               "__gg__compare_string_all",
!               gg_get_address_of(left),
!               location_left,
!               length_left,
!               build_int_cst_type(INT, charmap_left->stride()),
!               build_string_literal(nbytes, converted),
!               build_int_cst_type(SIZE_T, nbytes),
!               NULL_TREE);
        compared = true;
        }
      else if( right_side.field->type == FldLiteralA )
        {
        // Corner cases.  One grows to dislike them.  Here we are comparing a
        // FieldLiteraN to a FldLiteralA
!       left  = gg_define_variable(INT);
!       right = gg_define_variable(INT, 0L);
        tree str = gg_string_literal(right_side.field->data.original());
        tree length = build_int_cst_type(SIZE_T,
                                      strlen(right_side.field->data.original()));
!       gg_call( VOID,
!                "__gg__compare_string_1a",
!                 gg_get_address_of(left),
!                 location_left,
!                 length_left,
!                 str,
!                 length,
!                 integer_zero_node,
!                 NULL_TREE);
        compared = true;
        }
      }
--- 1048,1080 ----
                                       right_side.field->data.capacity(),
                                       &nbytes);
          }
!       right = integer_zero_node;
!       left = gg_call_expr(INT,
!                           "__gg__compare_string_all",
!                           location_left,
!                           length_left,
!                           build_int_cst_type(INT, charmap_left->stride()),
!                           build_string_literal(nbytes, converted),
!                           build_int_cst_type(SIZE_T, nbytes),
!                           NULL_TREE);
        compared = true;
        }
      else if( right_side.field->type == FldLiteralA )
        {
        // Corner cases.  One grows to dislike them.  Here we are comparing a
        // FieldLiteraN to a FldLiteralA
!       right = integer_zero_node;
        tree str = gg_string_literal(right_side.field->data.original());
        tree length = build_int_cst_type(SIZE_T,
                                      strlen(right_side.field->data.original()));
!       left = gg_call_expr(INT,
!                           "__gg__compare_string_1a",
!                           location_left,
!                           length_left,
!                           str,
!                           length,
!                           gg_cast(UCHAR_P, integer_zero_node),
!                           NULL_TREE);
        compared = true;
        }
      }
*************** numeric_alpha_compare(tree        &left,
*** 1119,1125 ****
      tree type = tree_type_from_refer(left_side);
  
      // We have what we need to get the value:
!     get_binary_value(value, left_side, type);
  
      // We have corner case to deal with here.  When comparing a numeric to a
      // alphanumeric that is a figconst zero_value_e, we treat the right side
--- 1089,1095 ----
      tree type = tree_type_from_refer(left_side);
  
      // We have what we need to get the value:
!     value = get_binary_value(left_side, type);
  
      // We have corner case to deal with here.  When comparing a numeric to a
      // alphanumeric that is a figconst zero_value_e, we treat the right side
*************** numeric_alpha_compare(tree        &left,
*** 1127,1151 ****
  
      if( figconst_right == zero_value_e )
        {
!       left  = gg_define_variable(INT);
!       right = gg_define_variable(INT, 0L);
        gg_assign(left, integer_zero_node);
!       IF( value, lt_op, gg_cast(type, integer_zero_node) )
!         {
!         gg_assign(left, integer_minus_one_node);
!         }
!       ELSE
!         {
!         IF( value, gt_op, gg_cast(type, integer_zero_node) )
!           {
!           gg_assign(left, integer_one_node);
!           }
!         ELSE
!           {
!           }
!         ENDIF
!         }
!       ENDIF
        compared = true;
        }
      else
--- 1097,1114 ----
  
      if( figconst_right == zero_value_e )
        {
!       value = save_expr(value);
!       right = integer_zero_node;
        gg_assign(left, integer_zero_node);
!       tree below = gg_logical_lt(value, gg_cast(type, integer_zero_node));
!       tree above = gg_logical_gt(value, gg_cast(type, integer_zero_node));
!       left = if_condition(below,
!                           gg_cast(type, integer_minus_one_node),
!                           if_condition(above,
!                                        gg_cast(type, integer_one_node),
!                                        gg_cast(type, integer_zero_node),
!                                        type),
!                           type);
        compared = true;
        }
      else
*************** numeric_alpha_compare(tree        &left,
*** 1153,1171 ****
        if( left_side.field->data.rdigits < 0 )
          {
          // We need to multiply value by 10^-rdigits
!         gg_assign(value, scale_by_power_of_ten(value,
!                                                build_int_cst_type(INT,
!                                                -left_side.field->data.rdigits)));
          }
  
        if( left_side.field->attr&signable_e )
          {
          // For numeric-alphabetic comparisons, there are no negative values:
!         gg_assign(value, gg_abs(value));
          }
  
!       left  = gg_define_variable(INT);
!       right = gg_define_variable(INT, 0L);
  
        if( figconst_right || right_side.all )
          {
--- 1116,1133 ----
        if( left_side.field->data.rdigits < 0 )
          {
          // We need to multiply value by 10^-rdigits
!         value = scale_by_power_of_ten( value,
!                                        build_int_cst_type(INT,
!                                        -left_side.field->data.rdigits));
          }
  
        if( left_side.field->attr&signable_e )
          {
          // For numeric-alphabetic comparisons, there are no negative values:
!         value = gg_abs(value);
          }
  
!       right = integer_zero_node;
  
        if( figconst_right || right_side.all )
          {
*************** numeric_alpha_compare(tree        &left,
*** 1173,1179 ****
          char *converted;
          if( figconst_right )
            {
!           converted = __gg__iconverter(right_side.field->codeset.encoding,
                                         left_side.field->codeset.encoding,
                                         &char_right,
                                         1,
--- 1135,1141 ----
          char *converted;
          if( figconst_right )
            {
!           converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                         left_side.field->codeset.encoding,
                                         &char_right,
                                         1,
*************** numeric_alpha_compare(tree        &left,
*** 1183,1220 ****
            {
            converted = __gg__iconverter(right_side.field->codeset.encoding,
                                         left_side.field->codeset.encoding,
!                                        right_side.field->data.original(),
                                         right_side.field->data.capacity(),
                                         &nbytes);
            }
!         left  = gg_define_variable(INT);
!         right = gg_define_variable(INT, 0L);
!         gg_call(VOID,
!                 "__gg__compare_numeric_all",
!                 gg_get_address_of(left),
!                 gg_cast(UINT128, value),
!                 build_int_cst_type(SIZE_T, left_side.field->data.digits),
!                 build_string_literal(nbytes, converted),
!                 build_int_cst_type(SIZE_T, nbytes),
!                 build_int_cst_type(INT, left_side.field->codeset.encoding),
!                 NULL_TREE);
          }
        else
          {
          tree location_right;
          tree length_right;
!         get_location(location_right, right_side);
!         get_length(length_right, right_side);
! 
!         gg_call(VOID,
!                 "__gg__compare_binary_to_string",
!                 gg_get_address_of(left),
!                 gg_cast(UINT128, value),
!                 build_int_cst_type(SIZE_T, left_side.field->data.digits),
!                 location_right,
!                 length_right,
!                 build_int_cst_type(INT, right_side.field->codeset.encoding),
!                 NULL_TREE);
          }
        compared = true;
        }
--- 1145,1177 ----
            {
            converted = __gg__iconverter(right_side.field->codeset.encoding,
                                         left_side.field->codeset.encoding,
!                                        right_side.field->data.initial,
                                         right_side.field->data.capacity(),
                                         &nbytes);
            }
!         left = gg_call_expr(INT,
!                             "__gg__compare_numeric_all",
!                             gg_cast(INT128, value),
!                             build_int_cst_type(SIZE_T, left_side.field->data.digits),
!                             build_string_literal(nbytes, converted),
!                             build_int_cst_type(SIZE_T, nbytes),
!                             build_int_cst_type(INT, left_side.field->codeset.encoding),
!                             NULL_TREE);
          }
        else
          {
          tree location_right;
          tree length_right;
!         location_right = get_location(right_side);
!         length_right = get_length(right_side);
!         left = gg_call_expr(INT,
!                             "__gg__compare_binary_to_string",
!                             gg_cast(INT128, value),
!                             build_int_cst_type(SIZE_T, left_side.field->data.digits),
!                             location_right,
!                             length_right,
!                             build_int_cst_type(INT, right_side.field->codeset.encoding),
!                             NULL_TREE);
          }
        compared = true;
        }
*************** addr_of_compare(tree        &left,
*** 1235,1274 ****
    tree r;
    if( left_side.addr_of && !right_side.addr_of )
      {
!     get_location(l, left_side);
!     get_binary_value(r, right_side, type);
      }
    else if( !left_side.addr_of && right_side.addr_of )
      {
!     get_binary_value(l, left_side, type);
!     get_location(r, right_side);
      }
    else
      {
      // They are both addr_of.
!     get_location(l, left_side);
!     get_location(r, right_side);
      }
-   left  = gg_define_variable(INT);
-   right = gg_define_variable(INT, 0L);
  
!   gg_assign(left, integer_zero_node);
!   IF( gg_cast(type, l), lt_op, gg_cast(type, r) )
!     {
!     gg_assign(left, integer_minus_one_node);
!     }
!   ELSE
!     {
!     IF( gg_cast(type, l), gt_op, gg_cast(type, r) )
!       {
!       gg_assign(left, integer_one_node);
!       }
!     ELSE
!       {
!       }
!     ENDIF
!     }
!   ENDIF
  
    return true;
    }
--- 1192,1214 ----
    tree r;
    if( left_side.addr_of && !right_side.addr_of )
      {
!     l = get_location(left_side);
!     r = get_binary_value(right_side, type);
      }
    else if( !left_side.addr_of && right_side.addr_of )
      {
!     l = get_binary_value(left_side, type);
!     r = get_location(right_side);
      }
    else
      {
      // They are both addr_of.
!     l = get_location(left_side);
!     r = get_location(right_side);
      }
  
!   left  = gg_cast(SIZE_T, l);
!   right = gg_cast(SIZE_T, r);
  
    return true;
    }
*************** float_compare(tree        &left,
*** 1279,1338 ****
          const cbl_refer_t &left_side,
          const cbl_refer_t &right_side)
    {
!   // left is a float, and if right is also a float it is smaller than left
    tree type = tree_type_from_field(left_side.field);
!   get_binary_value(left, left_side);
!   tree rightv;
!   get_binary_value(rightv, right_side, type);
!   right = gg_define_variable(type);
!   gg_assign(right, gg_cast(type, rightv));
  
    if( right_side.field->attr & intermediate_e )
      {
!     tree rdigits = gg_define_variable(INT);
!     gg_assign(rdigits,
!               gg_cast(INT,
!                       member(right_side.field->var_decl_node, "rdigits")));
!     gg_assign(right,
!               gg_real_divide(right,
                               gg_cast(type,
                                       gg_call_expr(INT128,
                                                    "__gg__power_of_ten",
                                                    rdigits,
!                                                   NULL_TREE))));
      }
    else
      {
      int rdigits = right_side.field->data.rdigits;
!     if( right_side.field->attr & scaled_e )
        {
!       if( rdigits < 0 )
!         {
!         rdigits = -rdigits;
!         }
!       else
!         {
!         rdigits += right_side.field->data.digits ;
!         gg_assign(right,
!                   gg_multiply(right,
!                               gg_cast(type,
!                                       gg_call_expr(INT128,
!                                            "__gg__power_of_ten",
!                                            build_int_cst_type(INT, rdigits),
!                                            NULL_TREE))));
!         rdigits = 0;
!         }
        }
!     if( rdigits )
        {
!       gg_assign(right,
!                 gg_real_divide(right,
!                                gg_cast(type,
!                                        gg_call_expr(
!                                             INT128,
!                                             "__gg__power_of_ten",
!                                             build_int_cst_type(INT, rdigits),
!                                             NULL_TREE))));
        }
      }
  
--- 1219,1274 ----
          const cbl_refer_t &left_side,
          const cbl_refer_t &right_side)
    {
!   // left_side is a float, and if right_side is also a float it is smaller than
!   // left_side.
! 
!   // See the comment at type_based_on_digits
! 
    tree type = tree_type_from_field(left_side.field);
!   left  = get_binary_value(left_side, type);
!   right = get_binary_value(right_side, type);
  
    if( right_side.field->attr & intermediate_e )
      {
!     tree rdigits = gg_cast(INT,
!                            member(right_side.field->var_decl_node,
!                                   "rdigits"));
!     right =   gg_real_divide(right,
                               gg_cast(type,
                                       gg_call_expr(INT128,
                                                    "__gg__power_of_ten",
                                                    rdigits,
!                                                   NULL_TREE)));
      }
    else
      {
      int rdigits = right_side.field->data.rdigits;
! 
!     if(    (right_side.field->attr & scaled_e)
!         && rdigits > 0 )
        {
!       rdigits += right_side.field->data.digits;
        }
! 
!     if( rdigits < 0 )
        {
!       right = gg_multiply(
!                 right,
!                 gg_cast(type,
!                         gg_call_expr(INT128,
!                                      "__gg__power_of_ten",
!                                      build_int_cst_type(INT, -rdigits),
!                                      NULL_TREE)));
!       }
!     else if( rdigits > 0 )
!       {
!       right = gg_real_divide(
!                 right,
!                 gg_cast(type,
!                         gg_call_expr(INT128,
!                                      "__gg__power_of_ten",
!                                      build_int_cst_type(INT, rdigits),
!                                      NULL_TREE)));
        }
      }
  
*************** compare_class( tree        &left,
*** 1346,1365 ****
           const cbl_refer_t &right_side)
    {
    // Left side is FldClass
!   left  = gg_define_variable(INT);
!   right = gg_define_variable(INT, 0L);
!   tree right_loc;
!   tree right_length;
!   get_location(right_loc, right_side);
!   get_length(right_length, right_side);
!   gg_assign(left,
!             gg_call_expr(INT,
!                          "__gg__compare_field_class",
!                          gg_get_address_of(right_side.field->var_decl_node),
!                          right_loc,
!                          right_length,
!                          gg_get_address_of(left_side.field->var_decl_node),
!                          NULL_TREE));
    return true;
    }
  
--- 1282,1298 ----
           const cbl_refer_t &right_side)
    {
    // Left side is FldClass
!   right = integer_zero_node;
!   tree right_loc = get_location(right_side);
!   tree right_length = get_length(right_side);
! 
!   left = gg_call_expr( INT,
!                        "__gg__compare_field_class",
!                        gg_get_address_of(right_side.field->var_decl_node),
!                        right_loc,
!                        right_length,
!                        gg_get_address_of(left_side.field->var_decl_node),
!                        NULL_TREE);
    return true;
    }
  
diff -Nrcpad gcc-17-20260823/gcc/cobol/exceptg.h gcc-17-20260830/gcc/cobol/exceptg.h
*** gcc-17-20260823/gcc/cobol/exceptg.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/exceptg.h	Sun Aug 30 22:32:06 2026
*************** class exception_turn_t {
*** 77,86 ****
    const ec_filemap_t& exception_files() const { return exceptions; }
  
    bool add_exception( ec_type_t type, const filelist_t& files = filelist_t() ) {
-     ec_disposition_t disposition = ec_type_disposition(type);
-     if( disposition != ec_implemented(disposition) ) {
-       cbl_unimplementedw(EcUnknownW, "exception %qs", ec_type_str(type));
-     }
      auto elem = exceptions.find(type);
      if( elem != exceptions.end() ) return false; // cannot add twice
  
--- 77,82 ----
*************** class exception_turn_t {
*** 96,103 ****
      enabled = location = false;
    }
  
  };
- 
  #endif
  
  
--- 92,108 ----
      enabled = location = false;
    }
  
+ #if 0
+   void dump() const {
+     fprintf(stderr, "exception_turn_t::dump: %s\n", enabled? "enabled" : "disabled");
+     int i = 0;
+     for( auto ex : exceptions ) {
+       fprintf( stderr, "%4d: %s, %zu files\n",
+                i++, ec_type_str(ex.first), ex.second.size() );
+     } 
+   }
+ #endif
  };
  #endif
  
  
diff -Nrcpad gcc-17-20260823/gcc/cobol/gcobol.1 gcc-17-20260830/gcc/cobol/gcobol.1
*** gcc-17-20260823/gcc/cobol/gcobol.1	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/gcobol.1	Sun Aug 30 22:32:06 2026
***************
*** 39,44 ****
--- 39,45 ----
  .Op Fl fyacc-debug
  .\" warnings
  .Op Fl Wno-apply-commit
+ .Op Fl Wno-content-expr
  .Op Fl Wno-file-code-set
  .Op Fl Wno-high-order-bit
  .Op Fl Wno-bad-line-directive
***************
*** 58,63 ****
--- 59,66 ----
  .Op Fl Wno-comp-6
  .Op Fl Wno-comp-x
  .Op Fl Wno-copybook-found
+ .Op Fl Wno-display-screen
+ .Op Fl Wno-dynamic-call
  .Op Fl Wno-ec-unknown
  .Op Fl Wno-entry-convention
  .Op Fl Wno-ibm-cdf
***************
*** 81,86 ****
--- 84,90 ----
  .Op Fl Wno-procedure-pointer
  .Op Fl Wno-replace-error
  .Op Fl Wno-redefines-first
+ .Op Fl Wno-redefines-table
  .Op Fl Wno-returning-number
  .Op Fl Wno-segment-error
  .Op Fl Wno-segment-negative
***************
*** 89,94 ****
--- 93,99 ----
  .Op Fl Wno-stray-indicator
  .Op Fl Wno-usage-typename
  .Op Fl Wno-recording-mode
+ .Op Fl Wno-redefines-grow
  .Op Fl Wno-set-locale-to
  .Op Fl Wno-set-to-locale
  .Ar filename Op ...
*************** to indicate MicroFocus syntax:
*** 493,505 ****
  .Bl -bullet -compact
  .It
  CDF
! .Sy $IF , $ELSE , $END , Sy $END-IF , Li and Sy $SET
  .It
! .Sy BINARY-LONG-LONG
  .It
! .Sy CALL ... GIVING
  .It
! .Sy CDF \[Do]IF
  .It
  .Sy COMPUTATIONAL-6
  .It
--- 498,511 ----
  .Bl -bullet -compact
  .It
  CDF
! .Sy \[Do]IF , \[Do]ELSE , \[Do]END , Sy \[Do]END-IF , Li and Sy \[Do]SET
  .It
! CDF
! .Sy \[Do]DISPLAY
  .It
! .Sy BINARY-LONG-LONG
  .It
! .Sy CALL Li ... Sy GIVING
  .It
  .Sy COMPUTATIONAL-6
  .It
*************** CDF
*** 507,513 ****
  used with
  .Sy PICTURE X
  .It
! .Sy INSPECT ... TRAILING
  .It
  .Sy LEVEL 78
  constants
--- 513,523 ----
  used with
  .Sy PICTURE X
  .It
! .Sy DISPLAY WITH
! .Aq "screen features"
! .Li *> e.g. BACKGROUND-COLOR
! .It
! .Sy INSPECT Li ... Sy TRAILING
  .It
  .Sy LEVEL 78
  constants
*************** features may be enabled as a warning, or
*** 607,612 ****
--- 617,624 ----
  .Bl -tag -width Wno-cdf-name-not-found\0\0 -compact
  .It Fl Wno-apply-commit
  Warn if APPLY COMMIT is used.
+ .It Fl Wno-content-expr
+ Warn if an expression is a BY CONTENT parameter.
  .It Fl Wno-bad-line-directive
  Warn if malformed
  .Ql #line
*************** Warn if EXTERNAL is used with ASSIGN.
*** 617,623 ****
  Warn if filename is used with ASSIGN.
  .It Fl Wno-binary-long-long
  Warn if BINARY-LONG-LONG is used.
! .It Fl Wno-call_fd
  Warn if CALL with FD parameter is used.
  This feature is currently unimplemented. 
  .It Fl Wno-call_giving
--- 629,635 ----
  Warn if filename is used with ASSIGN.
  .It Fl Wno-binary-long-long
  Warn if BINARY-LONG-LONG is used.
! .It Fl Wno-call-fd
  Warn if CALL with FD parameter is used.
  This feature is currently unimplemented. 
  .It Fl Wno-call_giving
*************** Warn if CDF \[Do]IF is used.
*** 630,635 ****
--- 642,651 ----
  Warn if COMPUTATIONAL-6 is used.
  .It Fl Wno-comp-x
  Warn if COMPUTATIONAL is used with PICTURE X.
+ .It Fl Wno-display-screen
+ Warn if DISPLAY WITH screen options is used.
+ .It Fl Wno-dynamic-call
+ Note if CALL with dynamic target is used.
  .It Fl Wno-file-code-set
  Warn if FILE CODE SET is used.
  .It Fl Wno-inspect-trailing
*************** Warn if CDF defines Level 78 constant.
*** 641,652 ****
  .It Fl Wno-move-index
  Warn if MOVE INDEX is used.
  .It Fl Wno-move-pointer
! Warn if
! MOVE POINTER is used.
  .It Fl Wno-set-numeric
  Warn if SET is used with NUMERIC target.
  .It Fl Wno-redefines-first
  Warn if REDEFINES does not appear immediately after NAME.
  .It Fl Wno-returning-number
  Warn if RETURNING <number> is used.
  .It Fl Wno-usage-typename
--- 657,669 ----
  .It Fl Wno-move-index
  Warn if MOVE INDEX is used.
  .It Fl Wno-move-pointer
! Warn if MOVE POINTER is used.
  .It Fl Wno-set-numeric
  Warn if SET is used with NUMERIC target.
  .It Fl Wno-redefines-first
  Warn if REDEFINES does not appear immediately after NAME.
+ .It Fl Wno-redefines-table
+ Warn if REDEFINES target is a table.
  .It Fl Wno-returning-number
  Warn if RETURNING <number> is used.
  .It Fl Wno-usage-typename
*************** Warn if a preprocessor fails  (instead o
*** 716,721 ****
--- 733,740 ----
  Warn if PROCEDURE POINTER is used.
  .It Fl Wno-procedure-not-found
  Warn if a referenced procedure is not found (instead of error).
+ .It Fl Wno-redefines-grow
+ Warn if REDEFINES data item is larger.
  .It Fl Wno-replace-error
  Warn if REPLACE cannot be processed (instead of error).
  .It Fl Wno-segment-error
*************** resolution of
*** 1170,1175 ****
--- 1189,1202 ----
  .Ar filename
  is deferred until runtime, when the name must appear in the program's
  environment.
+ .Ss TRACE
+ .Nm
+ accepts the CDF directives
+ .Sy "READY TRACE"
+ and
+ .Sy "RESET TRACE" .
+ Per documentation of modern IBM compilers, these directives have no effect.
+ They allow old code to compile without comment.
  .Ss XML PARSE
  .Nm
  emulates the IBM
*************** with
*** 2087,2092 ****
--- 2114,2198 ----
  .Sy "LINE SEQUENTIAL"
  files.
  .
+ .Sh COMPUTATION POLICY
+ Inputs to
+ .Sy ADD ,
+ .Sy SUBTRACT ,
+ .Sy MULTIPLY ,
+ .Sy DIVIDE ,
+ and
+ .Sy COMPUTE
+ must be
+ numeric, and outputs must be numeric or numeric-edited. Type-checking
+ is done by the compiler.  However, the program may cause non-numeric
+ data to be moved into those operands.  That situation is dealt with at
+ runtime in the form of Exception Conditions.
+ .Pp
+ Per \*[isostd] 14.6.13.2 Incompatible data,
+ .Sy EC-DATA-INCOMPATIBLE
+ is raised when the receiving data item is numeric and the sending item
+ is not. In addition to the above statements, that can occur with
+ .Sy MOVE
+ if the sending item cannot be interpreted as an integer.
+ .Pp
+ To the question,
+ .Dq "How could that happen?"
+ there are three answers: I/O,
+ .Sy REDEFINES ,
+ and
+ .Sy MOVE .
+ Unlike some languages, \*[lang] generally uses
+ .Dq "late binding" ;
+ errors are not raised until the last possible moment.  A
+ .Sy READ
+ populates a record, and nothing says the input record must match the
+ \*[lang] record definition.  Similarly a
+ .Em group
+ .Sy MOVE
+ is defined at copying one block of characters to another. \*[lang]
+ does not require the fields to match up.  Even the most specific
+ .Sy MOVE
+ may still copy arbitrary data:
+ .Bd -literal
+ 77 A PIC X VALUE 'a'.
+ 77 N PIC 9 VALUE  1.
+  ...
+ MOVE A TO N.
+ DISPLAY N.
+ MOVE N TO A. 
+ DISPLAY A.
+ .Ed
+ .Lp
+ displays
+ .Bd -literal
+ a
+ a
+ .Ed
+ .Pp
+ The system will not raise
+ .Sy EC-DATA-INCOMPATIBLE
+ unless enabled.  When it is not enabled,
+ .Nm
+ interprets the data as best it can.  For numeric display and packed
+ decimal, the values are masked against the ASCII digits 0-9, and
+ computation proceeds apace.
+ .Pp
+ For something in between all-or-nothing checking, 
+ .Nm
+ supports an implementation-defined EC:
+ .Sy EC-DATA-IMP-OC7 ,
+ whose name in no way derives from the famous IBM error code.  This EC
+ is enabled by default with
+ .Sy "-dialect ibm"
+ to emulate observed behavior of some IBM compilers.  If enabled,
+ the runtime system verifies that numeric 
+ .Sy "DISPLAY"
+ and
+ .Sy "PACKED-DECIMAL"
+ data indeed contain valid values at point of computation. If the
+ values are not in range, the EC is raised.  It is a fatal EC and, as
+ with other fatal ECs causes process termination if not handled.
+ .
  .\" .Sh SEE ALSO
  .
  .Sh STANDARDS
*************** Inter-Program Communication
*** 2128,2139 ****
  .It ST 100%
  Sort-Merge
  .It SM 100%
! Source Text Manipulation RW \en Report Writer
! .It CM
  Communication
! .It DB to do?
  Debug
! .It SG
  Segmentation
  .It IF 100%
  Intrinsic Function
--- 2234,2247 ----
  .It ST 100%
  Sort-Merge
  .It SM 100%
! Source Text Manipulation
! .It RW \0\00%
! Report Writer
! .It CM \0\00%
  Communication
! .It DB \0\00%
  Debug
! .It SG \0\00%
  Segmentation
  .It IF 100%
  Intrinsic Function
diff -Nrcpad gcc-17-20260823/gcc/cobol/genapi.cc gcc-17-20260830/gcc/cobol/genapi.cc
*** gcc-17-20260823/gcc/cobol/genapi.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/genapi.cc	Sun Aug 30 22:32:06 2026
*************** static bool auto_advance_is_AFTER_advanc
*** 139,145 ****
      casts.  For example, main() returns an INT, as do functions that
      return the default RETURN-CODE will have */
  
! #define COBOL_FUNCTION_RETURN_TYPE SSIZE_T
  
  #define MAX_AFTERS 8
  
--- 139,146 ----
      casts.  For example, main() returns an INT, as do functions that
      return the default RETURN-CODE will have */
  
! #define COBOL_FUNCTION_RETURN_64  LONG
! #define COBOL_FUNCTION_RETURN_128 INT128
  
  #define MAX_AFTERS 8
  
*************** build_main_that_calls_something(const ch
*** 301,307 ****
  
    char *psz = cobol_name_mangler(something);
    gg_assign(var_decl_main_called, integer_one_node);
!   gg_return(gg_cast(INT, gg_call_expr( COBOL_FUNCTION_RETURN_TYPE,
                                         psz,
                                         argc,
                                         argv,
--- 302,308 ----
  
    char *psz = cobol_name_mangler(something);
    gg_assign(var_decl_main_called, integer_one_node);
!   gg_return(gg_cast(INT, gg_call_expr( COBOL_FUNCTION_RETURN_64,
                                         psz,
                                         argc,
                                         argv,
*************** get_field_p(size_t index)
*** 326,332 ****
        dbgmsg("%s (type: %s) improperly has a NULL var_decl_node",
                    field->name,
                    cbl_field_type_str(field->type));
!       cbl_internal_error(
                  "Probable cause: it was referenced without being defined.");
        }
  
--- 327,333 ----
        dbgmsg("%s (type: %s) improperly has a NULL var_decl_node",
                    field->name,
                    cbl_field_type_str(field->type));
!       cbl_internal_error("%s",
                  "Probable cause: it was referenced without being defined.");
        }
  
*************** get_level_88_domain(size_t parent_capaci
*** 497,503 ****
      stream = level_88_helper( parent_capacity,
                                domain->first,
                                stream_len);
!     if( output_index + stream_len > retval_capacity )
        {
        retval_capacity *= 2;
        retval = static_cast<char *>(xrealloc(retval, retval_capacity));
--- 498,504 ----
      stream = level_88_helper( parent_capacity,
                                domain->first,
                                stream_len);
!     while( output_index + stream_len > retval_capacity )
        {
        retval_capacity *= 2;
        retval = static_cast<char *>(xrealloc(retval, retval_capacity));
*************** get_level_88_domain(size_t parent_capaci
*** 512,518 ****
      stream = level_88_helper( parent_capacity,
                                domain->last,
                                stream_len);
!     if( output_index + stream_len > retval_capacity )
        {
        retval_capacity *= 2;
        retval = static_cast<char *>(xrealloc(retval, retval_capacity));
--- 513,519 ----
      stream = level_88_helper( parent_capacity,
                                domain->last,
                                stream_len);
!     while( output_index + stream_len > retval_capacity )
        {
        retval_capacity *= 2;
        retval = static_cast<char *>(xrealloc(retval, retval_capacity));
*************** get_class_condition_string(cbl_field_t *
*** 590,596 ****
        {
        if( strlen(ach) > sizeof(ach) - 1000  )
          {
!         cbl_internal_error("That string should not be that long.");
          }
  
        // We are working with unquoted strings that contain the values
--- 591,597 ----
        {
        if( strlen(ach) > sizeof(ach) - 1000  )
          {
!         cbl_internal_error("%s", "That string should not be that long.");
          }
  
        // We are working with unquoted strings that contain the values
*************** get_class_condition_string(cbl_field_t *
*** 613,618 ****
--- 614,623 ----
        {
        // Since the first.name is a single character, we can do this as
        // a single-character pair.
+       if( strlen(ach) > sizeof(ach) - 1000  )
+         {
+         cbl_internal_error("%s", "That string should not be that long.");
+         }
        converted = __gg__iconverter(from,
                                     to,
                                     domain->first.name(),
*************** get_class_condition_string(cbl_field_t *
*** 641,646 ****
--- 646,656 ----
        }
      else
        {
+       if( strlen(ach) > sizeof(ach) - 1000  )
+         {
+         cbl_internal_error("%s", "That string should not be that long.");
+         }
+ 
        gcc_assert( first_name_length > 1 );
  
        // We are working with a string larger than 1 character.  The COBOL
*************** parser_call_target_update( size_t caller
*** 769,775 ****
  
    for( auto call_expr : p->second )
      {
!     tree fndecl_type = build_varargs_function_type_array( COBOL_FUNCTION_RETURN_TYPE,
                         0,     // No parameters yet
                         NULL); // And, hence, no types
  
--- 779,785 ----
  
    for( auto call_expr : p->second )
      {
!     tree fndecl_type = build_varargs_function_type_array( COBOL_FUNCTION_RETURN_64,
                         0,     // No parameters yet
                         NULL); // And, hence, no types
  
*************** function_pointer_from_name(const cbl_ref
*** 788,866 ****
    {
    Analyze();
  
    tree function_type = build_varargs_function_type_array(
!                         function_return_type,
!                         0,
!                         NULL);
    tree function_pointer_type = build_pointer_type(function_type);
!   tree function_pointer       = gg_define_variable(function_pointer_type,
!                                                   "..function_pointer.1",
!                                                   vs_stack);
    if( name.field->type == FldPointer )
      {
!     // If the parameter is a pointer, just pick up the value and head for the
!     // exit
      if( refer_is_clean(name) )
        {
!       gg_memcpy(gg_get_address_of(function_pointer),
!                 member(name.field->var_decl_node, "data"),
!                 sizeof_pointer);
        }
      else
        {
!       gg_memcpy(gg_get_address_of(function_pointer),
!                 qualified_data_location(name),
!                 sizeof_pointer);
        }
!     return function_pointer;
      }
    else if( use_static_call() && is_literal(name.field) )
      {
!     tree fndecl_type = build_varargs_function_type_array( function_return_type,
!                        0,     // No parameters yet
!                        NULL); // And, hence, no types
  
-     // Fetch the FUNCTION_DECL for that FUNCTION_TYPE
-     char *tname = static_cast<char *>(xmalloc(name.field->data.capacity()+1));
-     memcpy(tname, name.field->data.original(), name.field->data.capacity());
      tname[name.field->data.capacity()] = '\0';
      tree function_decl = gg_build_fn_decl(tname,
!                                           fndecl_type);
      free(tname);
!     // Take the address of the function decl:
!     tree address_of_function = gg_get_address_of(function_decl);
!     gg_assign(function_pointer, address_of_function);
      }
    else
      {
!     // We are not using static calls.
!     if( name.field->type == FldLiteralA )
!       {
!       gg_assign(function_pointer,
!                 gg_cast(build_pointer_type(function_type),
!                         gg_call_expr( VOID_P,
!                               "__gg__function_handle_from_literal",
!                               build_int_cst_type(INT,
!                                 current_function->our_symbol_table_index),
!                               gg_string_literal(name.field->data.original()),
!                               NULL_TREE)));
!       }
!     else
!       {
!       gg_assign(function_pointer,
!                 gg_cast(build_pointer_type(function_type),
!                         gg_call_expr( VOID_P,
!                                 "__gg__function_handle_from_name",
!                                 build_int_cst_type(INT,
!                                 current_function->our_symbol_table_index),
!                                 gg_get_address_of(name.field->var_decl_node),
!                                 refer_offset(name),
!                                 refer_size_source(  name),
!                                 NULL_TREE)));
!       }
      }
  
!   return function_pointer;
    }
  
  void
--- 798,881 ----
    {
    Analyze();
  
+   tree retval;
+ 
    tree function_type = build_varargs_function_type_array(
!                          function_return_type,
!                          0,
!                          NULL);
    tree function_pointer_type = build_pointer_type(function_type);
! 
    if( name.field->type == FldPointer )
      {
!     tree location;
! 
      if( refer_is_clean(name) )
        {
!       location = member(name.field->var_decl_node, "data");
        }
      else
        {
!       location = qualified_data_location(name);
        }
! 
!     tree unaligned_function_pointer_type
!       = build_aligned_type(function_pointer_type,
!                            BITS_PER_UNIT);
! 
!     retval = fold_build2(
!                MEM_REF,
!                unaligned_function_pointer_type,
!                location,
!                build_int_cst_type(ptr_type_node, 0));
      }
    else if( use_static_call() && is_literal(name.field) )
      {
!     char *tname
!       = static_cast<char *>(xmalloc(name.field->data.capacity()+1));
! 
!     memcpy(tname,
!            name.field->data.original(),
!            name.field->data.capacity());
  
      tname[name.field->data.capacity()] = '\0';
+ 
      tree function_decl = gg_build_fn_decl(tname,
!                                           function_type);
      free(tname);
! 
!     retval = gg_get_address_of(function_decl);
!     }
!   else if( name.field->type == FldLiteralA )
!     {
!     retval = gg_cast(
!                function_pointer_type,
!                gg_call_expr(
!                  VOID_P,
!                  "__gg__function_handle_from_literal",
!                  build_int_cst(
!                    INT,
!                    current_function->our_symbol_table_index),
!                  gg_string_literal(name.field->data.original()),
!                  NULL_TREE));
      }
    else
      {
!     retval = gg_cast(
!                function_pointer_type,
!                gg_call_expr(
!                  VOID_P,
!                  "__gg__function_handle_from_name",
!                  build_int_cst(
!                    INT,
!                    current_function->our_symbol_table_index),
!                  gg_get_address_of(name.field->var_decl_node),
!                  refer_offset(name),
!                  refer_size_source(name),
!                  NULL_TREE));
      }
  
!   return retval;
    }
  
  void
*************** parser_initialize_programs( size_t nprog
*** 896,902 ****
    for( size_t i=0; i<nprogs; i++ )
      {
      tree function_pointer = function_pointer_from_name( progs[i],
!                                                         COBOL_FUNCTION_RETURN_TYPE);
      gg_call(VOID,
              "__gg__to_be_canceled",
              function_pointer,
--- 911,917 ----
    for( size_t i=0; i<nprogs; i++ )
      {
      tree function_pointer = function_pointer_from_name( progs[i],
!                                                         COBOL_FUNCTION_RETURN_64);
      gg_call(VOID,
              "__gg__to_be_canceled",
              function_pointer,
*************** store_location_stuff(const cbl_name_t st
*** 1118,1124 ****
      else
        {
        gg_assign(var_decl_exception_section,
!                 gg_cast(build_pointer_type(CHAR_P),null_pointer_node));
        }
  
      if( strstr(current_function->current_paragraph->label->name, "_implicit")
--- 1133,1139 ----
      else
        {
        gg_assign(var_decl_exception_section,
!                 gg_cast(CONST_CHAR_P, null_pointer_node));
        }
  
      if( strstr(current_function->current_paragraph->label->name, "_implicit")
*************** store_location_stuff(const cbl_name_t st
*** 1130,1136 ****
      else
        {
        gg_assign(var_decl_exception_paragraph,
!                 gg_cast(build_pointer_type(CHAR_P), null_pointer_node));
        }
  
      gg_assign(var_decl_exception_source_file,
--- 1145,1151 ----
      else
        {
        gg_assign(var_decl_exception_paragraph,
!                 gg_cast(CONST_CHAR_P, null_pointer_node));
        }
  
      gg_assign(var_decl_exception_source_file,
*************** parser_initialize(const cbl_refer_t& ref
*** 1663,1691 ****
    }
  
  static
! void
! depending_on_value(tree depending_on, cbl_field_t *current_sizer)
    {
    // We have to deal with the possibility of a DEPENDING_ON variable,
    // and we have to apply array bounds whether or not there is a DEPENDING_ON
!   // variable:
  
! //  tree occurs_lower = gg_define_variable(LONG, "_lower");
! //  tree occurs_upper = gg_define_variable(LONG, "_upper");
! //
! //  gg_assign(occurs_lower, build_int_cst_type(LONG, current_sizer->occurs.bounds.lower));
! //  gg_assign(occurs_upper, build_int_cst_type(LONG, current_sizer->occurs.bounds.upper));
  
    gcc_assert(current_sizer);
    if( current_sizer->occurs.depending_on )
      {
!     get_depending_on_value_from_odo(depending_on, current_sizer);
      }
    else
      {
!     gg_assign(depending_on,
!               build_int_cst_type(LONG, current_sizer->occurs.bounds.upper));
      }
    }
  
  static tree
--- 1678,1703 ----
    }
  
  static
! tree
! depending_on_value(cbl_field_t *current_sizer)
    {
    // We have to deal with the possibility of a DEPENDING_ON variable,
    // and we have to apply array bounds whether or not there is a DEPENDING_ON
!   // variable.
  
!   tree depending_on;  // This is a LONG value
  
    gcc_assert(current_sizer);
    if( current_sizer->occurs.depending_on )
      {
!     depending_on = get_depending_on_value_from_odo(current_sizer);
      }
    else
      {
!     depending_on = build_int_cst_type(LONG,
!                                       current_sizer->occurs.bounds.upper);
      }
+   return depending_on;
    }
  
  static tree
*************** tree_type_from_field_type(cbl_field_t *f
*** 1695,1701 ****
        CALL ... USING <var> and the matching PROCEDURE DIVISION USING <var> of
        a PROGRAM-ID or FUNCTION-ID
        */
!   tree retval = COBOL_FUNCTION_RETURN_TYPE;
    nbytes = 8;
    if( field )
      {
--- 1707,1713 ----
        CALL ... USING <var> and the matching PROCEDURE DIVISION USING <var> of
        a PROGRAM-ID or FUNCTION-ID
        */
!   tree retval = COBOL_FUNCTION_RETURN_64;
    nbytes = 8;
    if( field )
      {
*************** tree_type_from_field_type(cbl_field_t *f
*** 1783,1788 ****
--- 1795,1819 ----
    return retval;
    }
  
+ static
+ tree get_interfunction_type(tree type)
+   {
+   tree retval;
+   if( SCALAR_FLOAT_TYPE_P(type) )
+     {
+     retval = type;
+     }
+   else if( gg_sizeof(type) > 8 )
+     {
+     retval = COBOL_FUNCTION_RETURN_128;
+     }
+   else
+     {
+     retval = COBOL_FUNCTION_RETURN_64;
+     }
+   return retval;
+   }
+ 
  static char *
  combined_name(const cbl_label_t *label)
    {
*************** parser_goto(const cbl_refer_t &value_ref
*** 2459,2466 ****
      {
      // We will implement the two or more fanout with a switch statement.
  
!     tree value;
!     get_binary_value(value, value_ref, INT);
  
      // value is properly 1 through nargs
  
--- 2490,2496 ----
      {
      // We will implement the two or more fanout with a switch statement.
  
!     tree value = get_binary_value(value_ref, INT);
  
      // value is properly 1 through nargs
  
*************** parser_perform_times( cbl_label_t *proc_
*** 2531,2538 ****
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
    // Get the count:
!   tree counter;
!   get_binary_value(counter, count, LONG);
  
    // Make sure the initial count is valid:
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
--- 2561,2569 ----
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
    // Get the count:
!   tree counter = gg_define_variable(LONG);
!   tree counter_i = get_binary_value(count, LONG);
!   gg_assign(counter, counter_i);
  
    // Make sure the initial count is valid:
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
*************** internal_perform_through_times(   cbl_la
*** 2689,2699 ****
  
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
!   tree counter;
!   get_binary_value(counter, count, LONG);
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
      {
!     internal_perform_through(proc_1, proc_2, true); // true means suppress_nexting
      gg_decrement(counter);
      }
      WEND
--- 2720,2732 ----
  
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
!   tree counter = gg_define_variable(LONG);
!   tree counter_i = get_binary_value(count, LONG);
!   gg_assign(counter, counter_i);
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
      {
!     static const bool suppress_nexting = true;
!     internal_perform_through(proc_1, proc_2, suppress_nexting);
      gg_decrement(counter);
      }
      WEND
*************** parser_enter_file(const char *filename)
*** 2820,2851 ****
  #define SET_VAR_DECL(A, B, C) \
    A = gg_declare_variable(B, C, NULL_TREE, vs_extern)
  
!     SET_VAR_DECL(var_decl_exception_code         , INT    , "__gg__exception_code");
!     SET_VAR_DECL(var_decl_exception_file_status  , INT    , "__gg__exception_file_status");
!     SET_VAR_DECL(var_decl_exception_file_name    , CHAR_P , "__gg__exception_file_name");
!     SET_VAR_DECL(var_decl_exception_statement    , CHAR_P , "__gg__exception_statement");
!     SET_VAR_DECL(var_decl_exception_source_file  , CHAR_P , "__gg__exception_source_file");
!     SET_VAR_DECL(var_decl_exception_line_number  , INT    , "__gg__exception_line_number");
!     SET_VAR_DECL(var_decl_exception_program_id   , CHAR_P , "__gg__exception_program_id");
!     SET_VAR_DECL(var_decl_exception_section      , CHAR_P , "__gg__exception_section");
!     SET_VAR_DECL(var_decl_exception_paragraph    , CHAR_P , "__gg__exception_paragraph");
  
!     SET_VAR_DECL(var_decl_default_compute_error  , INT    , "__gg__default_compute_error");
!     SET_VAR_DECL(var_decl_rdigits                , INT    , "__gg__rdigits");
!     SET_VAR_DECL(var_decl_unique_prog_id         , SIZE_T , "__gg__unique_prog_id");
  
!     SET_VAR_DECL(var_decl_exit_address           , VOID_P , "__gg__exit_address");
  
!     SET_VAR_DECL(var_decl_call_parameter_signature , CHAR_P   , "__gg__call_parameter_signature");
!     SET_VAR_DECL(var_decl_call_parameter_count     , INT      , "__gg__call_parameter_count");
      SET_VAR_DECL(var_decl_call_parameter_lengths   , build_array_type(SIZE_T, NULL),
                                                              "__gg__call_parameter_lengths");
  
!     SET_VAR_DECL(var_decl_nop                     , INT                     , "__gg__nop"             );
!     SET_VAR_DECL(var_decl_main_called             , INT                     , "__gg__main_called"     );
!     SET_VAR_DECL(var_decl_entry_index             , SIZE_T                  , "__gg__entry_index"     );
!     SET_VAR_DECL(var_decl_dialects                , INT                     , "__gg__dialects"        );
!     SET_VAR_DECL(var_decl_dp2bin                  , build_array_type(UCHAR, NULL), "__gg__dp2bin");
      }
    }
  
--- 2853,2884 ----
  #define SET_VAR_DECL(A, B, C) \
    A = gg_declare_variable(B, C, NULL_TREE, vs_extern)
  
!     SET_VAR_DECL(var_decl_exception_code         , INT          , "__gg__exception_code");
!     SET_VAR_DECL(var_decl_exception_file_status  , INT          , "__gg__exception_file_status");
!     SET_VAR_DECL(var_decl_exception_file_name    , CONST_CHAR_P , "__gg__exception_file_name");
!     SET_VAR_DECL(var_decl_exception_statement    , CONST_CHAR_P , "__gg__exception_statement");
!     SET_VAR_DECL(var_decl_exception_source_file  , CONST_CHAR_P , "__gg__exception_source_file");
!     SET_VAR_DECL(var_decl_exception_line_number  , INT          , "__gg__exception_line_number");
!     SET_VAR_DECL(var_decl_exception_program_id   , CONST_CHAR_P , "__gg__exception_program_id");
!     SET_VAR_DECL(var_decl_exception_section      , CONST_CHAR_P , "__gg__exception_section");
!     SET_VAR_DECL(var_decl_exception_paragraph    , CONST_CHAR_P , "__gg__exception_paragraph");
  
!     SET_VAR_DECL(var_decl_default_compute_error  , INT          , "__gg__default_compute_error");
!     SET_VAR_DECL(var_decl_fracdigits             , INT          , "__gg__fracdigits");
!     SET_VAR_DECL(var_decl_unique_prog_id         , SIZE_T       , "__gg__unique_prog_id");
  
!     SET_VAR_DECL(var_decl_exit_address           , VOID_P       , "__gg__exit_address");
  
!     SET_VAR_DECL(var_decl_call_parameter_signature , CHAR_P     , "__gg__call_parameter_signature");
!     SET_VAR_DECL(var_decl_call_parameter_count     , INT        , "__gg__call_parameter_count");
      SET_VAR_DECL(var_decl_call_parameter_lengths   , build_array_type(SIZE_T, NULL),
                                                              "__gg__call_parameter_lengths");
  
!     SET_VAR_DECL(var_decl_nop                     , INT                          , "__gg__nop"        );
!     SET_VAR_DECL(var_decl_main_called             , INT                          , "__gg__main_called");
!     SET_VAR_DECL(var_decl_entry_index             , SIZE_T                       , "__gg__entry_index");
!     SET_VAR_DECL(var_decl_dialects                , INT                          , "__gg__dialects"   );
!     SET_VAR_DECL(var_decl_dp2bin                  , build_array_type(UCHAR, NULL), "__gg__dp2bin"     );
      }
    }
  
*************** enter_program_common(const char *funcnam
*** 2941,2947 ****
    // have no parameters.  We'll chain the parameters on in parser_division(),
    // when we process PROCEDURE DIVISION USING...
  
!   gg_define_function(COBOL_FUNCTION_RETURN_TYPE,
                       funcname,
                       funcname_,
                       NULL_TREE);
--- 2974,2980 ----
    // have no parameters.  We'll chain the parameters on in parser_division(),
    // when we process PROCEDURE DIVISION USING...
  
!   gg_define_function(COBOL_FUNCTION_RETURN_64,
                       funcname,
                       funcname_,
                       NULL_TREE);
*************** parser_accept(const struct cbl_refer_t &
*** 3861,3867 ****
      case SYSPUNCH_e:
      case SYSPCH_e:
      case SYSERR_e:
!       cbl_internal_error("Not valid for ACCEPT statement.");
        break;
  
      case ARG_NUM_e:
--- 3894,3900 ----
      case SYSPUNCH_e:
      case SYSPCH_e:
      case SYSERR_e:
!       cbl_internal_error("%s", "Not valid for ACCEPT statement.");
        break;
  
      case ARG_NUM_e:
*************** parser_accept(const struct cbl_refer_t &
*** 3901,3950 ****
      }
    if( function_to_call )
      {
!     tree erf = gg_define_variable(INT);
!     gg_assign(erf,
!               gg_call_expr(  INT,
!                             function_to_call,
!                             gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset(tgt),
!                             refer_size_dest(tgt),
!                             NULL_TREE));
!     if( error )
        {
!       // There is an ON EXCEPTION phrase:
!       IF( erf, ne_op, integer_zero_node )
          {
!         SHOW_PARSE
            {
!           SHOW_PARSE_INDENT
!           SHOW_PARSE_TEXT("Laying down GOTO     error->INTO for_argv")
!           SHOW_PARSE_LABEL_OK(" ", error)
            }
!         gg_append_statement( error->structs.arith_error->into.go_to );
!         }
!       ELSE
!         {
!         }
!         ENDIF
!       }
!     if( not_error )
!       {
!       // There is an NOT ON EXCEPTION phrase:
!       IF( erf, eq_op, integer_zero_node )
!         {
!         SHOW_PARSE
            {
-           SHOW_PARSE_INDENT
-           SHOW_PARSE_TEXT("Laying down GOTO not_error->INTO for_argv")
-           SHOW_PARSE_LABEL_OK(" ", not_error)
            }
!         gg_append_statement( not_error->structs.arith_error->into.go_to );
          }
!       ELSE
          {
          }
-         ENDIF
        }
      if( error )
        {
        SHOW_PARSE
--- 3934,4000 ----
      }
    if( function_to_call )
      {
!     if( error || not_error )
        {
!       // We need to define a variable to avoid calling the function twice when
!       // there are both error and not_error calls.
!       tree erf = gg_define_variable(INT);
!       gg_assign(erf,
!                 gg_call_expr(  INT,
!                               function_to_call,
!                               gg_get_address_of(tgt.field->var_decl_node),
!                               refer_offset(tgt),
!                               refer_size_dest(tgt),
!                               NULL_TREE));
!       if( error )
          {
!         // There is an ON EXCEPTION phrase:
!         IF( erf, ne_op, integer_zero_node )
            {
!           SHOW_PARSE
!             {
!             SHOW_PARSE_INDENT
!             SHOW_PARSE_TEXT("Laying down GOTO     error->INTO for_argv")
!             SHOW_PARSE_LABEL_OK(" ", error)
!             }
!           gg_append_statement( error->structs.arith_error->into.go_to );
            }
!         ELSE
            {
            }
!           ENDIF
          }
!       if( not_error )
          {
+         // There is an NOT ON EXCEPTION phrase:
+         IF( erf, eq_op, integer_zero_node )
+           {
+           SHOW_PARSE
+             {
+             SHOW_PARSE_INDENT
+             SHOW_PARSE_TEXT("Laying down GOTO not_error->INTO for_argv")
+             SHOW_PARSE_LABEL_OK(" ", not_error)
+             }
+           gg_append_statement( not_error->structs.arith_error->into.go_to );
+           }
+         ELSE
+           {
+           }
+           ENDIF
          }
        }
+     else
+       {
+       // Since neither error or not_error are operative, we don't need to
+       // save the return value anywhere.
+       gg_call(INT,
+               function_to_call,
+               gg_get_address_of(tgt.field->var_decl_node),
+               refer_offset(tgt),
+               refer_size_dest(tgt),
+               NULL_TREE);
+       }
+ 
      if( error )
        {
        SHOW_PARSE
*************** parser_accept_command_line( const cbl_re
*** 4050,4152 ****
      SHOW_PARSE_END
      }
  
-   tree erf = gg_define_variable(INT);
- 
    if( !source.field )
      {
      // The whole command-line is wanted
!     gg_assign(erf,
!               gg_call_expr( INT,
!                             "__gg__get_command_line",
!                             gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset(tgt),
!                             refer_size_dest(tgt),
!                             NULL_TREE));
!     if( error )
        {
!       // There is an ON EXCEPTION phrase:
!       IF( erf, ne_op, integer_zero_node )
          {
!         SHOW_PARSE
            {
!           SHOW_PARSE_INDENT
!           SHOW_PARSE_TEXT("Laying down GOTO     error->INTO for_command_line")
!           SHOW_PARSE_LABEL_OK(" ", error)
            }
!         gg_append_statement( error->structs.arith_error->into.go_to );
!         }
!       ELSE
!         {
!         }
!         ENDIF
!       }
!     if( not_error )
!       {
!       // There is an NOT ON EXCEPTION phrase:
!       IF( erf, eq_op, integer_zero_node )
!         {
!         SHOW_PARSE
            {
-           SHOW_PARSE_INDENT
-           SHOW_PARSE_TEXT("Laying down GOTO not_error->INTO for command_line")
-           SHOW_PARSE_LABEL_OK(" ", not_error)
            }
!         gg_append_statement( not_error->structs.arith_error->into.go_to );
          }
!       ELSE
          {
          }
!         ENDIF
        }
      }
    else
      {
      // A particular parameter has been requested:
!     gg_assign(erf,
!               gg_call_expr(  INT,
!                             "__gg__get_argv",
!                             gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset(tgt),
!                             refer_size_dest(tgt),
!                             gg_get_address_of(source.field->var_decl_node),
!                             refer_offset(source),
!                             refer_size_dest(source),
!                             NULL_TREE));
!     if( error )
        {
!       // There is an ON EXCEPTION phrase:
!       IF( erf, ne_op, integer_zero_node )
          {
!         SHOW_PARSE
            {
!           SHOW_PARSE_INDENT
!           SHOW_PARSE_TEXT("Laying down GOTO     error->INTO for_argv")
!           SHOW_PARSE_LABEL_OK(" ", error)
            }
!         gg_append_statement( error->structs.arith_error->into.go_to );
!         }
!       ELSE
!         {
!         }
!         ENDIF
!       }
!     if( not_error )
!       {
!       // There is an NOT ON EXCEPTION phrase:
!       IF( erf, eq_op, integer_zero_node )
!         {
!         SHOW_PARSE
            {
-           SHOW_PARSE_INDENT
-           SHOW_PARSE_TEXT("Laying down GOTO not_error->INTO for_argv")
-           SHOW_PARSE_LABEL_OK(" ", not_error)
            }
!         gg_append_statement( not_error->structs.arith_error->into.go_to );
          }
!       ELSE
          {
          }
!         ENDIF
        }
      }
    if( error )
--- 4100,4232 ----
      SHOW_PARSE_END
      }
  
    if( !source.field )
      {
      // The whole command-line is wanted
!     if( error || not_error )
        {
!       tree erf = gg_define_variable(INT);
!       // We need to put the error return someplace to avoid evaluating the
!       // function twice when both error and not_error areactive
!       gg_assign(erf,
!                 gg_call_expr( INT,
!                               "__gg__get_command_line",
!                               gg_get_address_of(tgt.field->var_decl_node),
!                               refer_offset(tgt),
!                               refer_size_dest(tgt),
!                               NULL_TREE));
!       if( error )
          {
!         // There is an ON EXCEPTION phrase:
!         IF( erf, ne_op, integer_zero_node )
            {
!           SHOW_PARSE
!             {
!             SHOW_PARSE_INDENT
!             SHOW_PARSE_TEXT("Laying down GOTO     error->INTO for_command_line")
!             SHOW_PARSE_LABEL_OK(" ", error)
!             }
!           gg_append_statement( error->structs.arith_error->into.go_to );
            }
!         ELSE
            {
            }
!           ENDIF
          }
!       if( not_error )
          {
+         // There is an NOT ON EXCEPTION phrase:
+         IF( erf, eq_op, integer_zero_node )
+           {
+           SHOW_PARSE
+             {
+             SHOW_PARSE_INDENT
+             SHOW_PARSE_TEXT("Laying down GOTO not_error->INTO for command_line")
+             SHOW_PARSE_LABEL_OK(" ", not_error)
+             }
+           gg_append_statement( not_error->structs.arith_error->into.go_to );
+           }
+         ELSE
+           {
+           }
+           ENDIF
          }
!       }
!     else
!       {
!       // We don't need to store the error return
!       gg_call( INT,
!               "__gg__get_command_line",
!               gg_get_address_of(tgt.field->var_decl_node),
!               refer_offset(tgt),
!               refer_size_dest(tgt),
!               NULL_TREE);
        }
      }
    else
      {
      // A particular parameter has been requested:
!     if( error || not_error )
        {
!       tree erf = gg_define_variable(INT);
!       gg_assign(erf,
!                 gg_call_expr(  INT,
!                               "__gg__get_argv",
!                               gg_get_address_of(tgt.field->var_decl_node),
!                               refer_offset(tgt),
!                               refer_size_dest(tgt),
!                               gg_get_address_of(source.field->var_decl_node),
!                               refer_offset(source),
!                               refer_size_dest(source),
!                               NULL_TREE));
!       if( error )
          {
!         // There is an ON EXCEPTION phrase:
!         IF( erf, ne_op, integer_zero_node )
            {
!           SHOW_PARSE
!             {
!             SHOW_PARSE_INDENT
!             SHOW_PARSE_TEXT("Laying down GOTO     error->INTO for_argv")
!             SHOW_PARSE_LABEL_OK(" ", error)
!             }
!           gg_append_statement( error->structs.arith_error->into.go_to );
            }
!         ELSE
            {
            }
!           ENDIF
          }
!       if( not_error )
          {
+         // There is an NOT ON EXCEPTION phrase:
+         IF( erf, eq_op, integer_zero_node )
+           {
+           SHOW_PARSE
+             {
+             SHOW_PARSE_INDENT
+             SHOW_PARSE_TEXT("Laying down GOTO not_error->INTO for_argv")
+             SHOW_PARSE_LABEL_OK(" ", not_error)
+             }
+           gg_append_statement( not_error->structs.arith_error->into.go_to );
+           }
+         ELSE
+           {
+           }
+           ENDIF
          }
!       }
!     else
!       {
!       gg_call(  INT,
!                "__gg__get_argv",
!                gg_get_address_of(tgt.field->var_decl_node),
!                refer_offset(tgt),
!                refer_size_dest(tgt),
!                gg_get_address_of(source.field->var_decl_node),
!                refer_offset(source),
!                refer_size_dest(source),
!                NULL_TREE);
        }
      }
    if( error )
*************** parser_accept_envar(const struct cbl_ref
*** 4221,4262 ****
      TRACE1_END
      }
  
!   tree erf = gg_define_variable(INT);
! 
!   gg_assign(erf,
!             gg_call_expr( INT,
!                           "__gg__accept_envar",
!                           gg_get_address_of(tgt.field->var_decl_node),
!                           refer_offset(tgt),
!                           refer_size_dest(tgt),
!                           gg_get_address_of(envar.field->var_decl_node),
!                           refer_offset(envar),
!                           refer_size_source(envar),
!                           NULL_TREE));
!   if( error )
      {
!     // There is an ON EXCEPTION phrase:
!     IF( erf, ne_op, integer_zero_node )
        {
!       gg_append_statement( error->structs.arith_error->into.go_to );
        }
!     ELSE
        {
        }
-       ENDIF
      }
!   if( not_error )
      {
!     // There is an NOT ON EXCEPTION phrase:
!     IF( erf, eq_op, integer_zero_node )
!       {
!       gg_append_statement( not_error->structs.arith_error->into.go_to );
!       }
!     ELSE
!       {
!       }
!       ENDIF
      }
    if( error )
      {
      SHOW_PARSE
--- 4301,4357 ----
      TRACE1_END
      }
  
!   if( error || not_error )
      {
!     tree erf = gg_define_variable(INT);
!     gg_assign(erf,
!               gg_call_expr( INT,
!                             "__gg__accept_envar",
!                             gg_get_address_of(tgt.field->var_decl_node),
!                             refer_offset(tgt),
!                             refer_size_dest(tgt),
!                             gg_get_address_of(envar.field->var_decl_node),
!                             refer_offset(envar),
!                             refer_size_source(envar),
!                             NULL_TREE));
!     if( error )
        {
!       // There is an ON EXCEPTION phrase:
!       IF( erf, ne_op, integer_zero_node )
!         {
!         gg_append_statement( error->structs.arith_error->into.go_to );
!         }
!       ELSE
!         {
!         }
!         ENDIF
        }
!     if( not_error )
        {
+       // There is an NOT ON EXCEPTION phrase:
+       IF( erf, eq_op, integer_zero_node )
+         {
+         gg_append_statement( not_error->structs.arith_error->into.go_to );
+         }
+       ELSE
+         {
+         }
+         ENDIF
        }
      }
!   else
      {
!     gg_call( INT,
!              "__gg__accept_envar",
!              gg_get_address_of(tgt.field->var_decl_node),
!              refer_offset(tgt),
!              refer_size_dest(tgt),
!              gg_get_address_of(envar.field->var_decl_node),
!              refer_offset(envar),
!              refer_size_source(envar),
!              NULL_TREE);
      }
+ 
    if( error )
      {
      SHOW_PARSE
*************** parser_display_internal(tree file_descri
*** 4696,4704 ****
      TRACE1
        {
        gg_create_true_false_statement_lists(refer.field->var_decl_node);
!         gg_fprintf(file_descriptor, 0, "TRUE");
        ELSE
!         gg_fprintf(file_descriptor, 0, "FALSE");
        ENDIF
        }
      }
--- 4791,4799 ----
      TRACE1
        {
        gg_create_true_false_statement_lists(refer.field->var_decl_node);
!         gg_fprintf(trace_handle, 0, "TRUE");
        ELSE
!         gg_fprintf(trace_handle, 0, "FALSE");
        ENDIF
        }
      }
*************** parser_display( const struct cbl_special
*** 4925,4931 ****
        }
      TRACE1_END
      }
!   tree file_descriptor = gg_define_variable(INT);
    bool needs_closing = false;
    if( upon )
      {
--- 5020,5026 ----
        }
      TRACE1_END
      }
!   tree file_descriptor = NULL_TREE;
    bool needs_closing = false;
    if( upon )
      {
*************** parser_display( const struct cbl_special
*** 4936,4942 ****
        case STDIN_e:
        case SYSIN_e:
        case SYSIPT_e:
!         cbl_internal_error("Attempting to send to an input device.");
          break;
  
        case C01_e:
--- 5031,5037 ----
        case STDIN_e:
        case SYSIN_e:
        case SYSIPT_e:
!         cbl_internal_error("%s", "Attempting to send to an input device.");
          break;
  
        case C01_e:
*************** parser_display( const struct cbl_special
*** 4959,4977 ****
        case S05_e:
        case AFP_5A_e:
        case ARG_VALUE_e:
!         cbl_internal_error("Not valid for DISPLAY statement.");
          break;
  
        case STDOUT_e:
        case CONSOLE_e:
          // These are inarguably stdout
!         gg_assign(file_descriptor, integer_one_node);
          break;
  
        case STDERR_e:
        case SYSERR_e:
          // These are inarguably stderr
!         gg_assign(file_descriptor, integer_two_node);
          break;
  
        case SYSOUT_e:
--- 5054,5072 ----
        case S05_e:
        case AFP_5A_e:
        case ARG_VALUE_e:
!         cbl_internal_error("%s", "Not valid for DISPLAY statement.");
          break;
  
        case STDOUT_e:
        case CONSOLE_e:
          // These are inarguably stdout
!         file_descriptor = integer_one_node;
          break;
  
        case STDERR_e:
        case SYSERR_e:
          // These are inarguably stderr
!         file_descriptor = integer_two_node;
          break;
  
        case SYSOUT_e:
*************** parser_display( const struct cbl_special
*** 4983,4988 ****
--- 5078,5084 ----
          // formerly-ubiquitous card punches no longer exist, there is a need
          // for the possibility of assigning these "devices" to externally-
          // determined Unix gadgetry in /dev:
+         file_descriptor = gg_define_variable(INT);
          gg_assign(file_descriptor,
                    gg_call_expr( INT,
                                  "__gg__get_file_descriptor",
*************** parser_display( const struct cbl_special
*** 4997,5002 ****
--- 5093,5099 ----
          // descriptor.
          if( !getenv("ASSEMBLER") )
            {
+           file_descriptor = gg_define_variable(INT);
            gg_assign(file_descriptor,
                      gg_call_expr( INT,
                                    "__gg__get_file_descriptor",
*************** parser_display( const struct cbl_special
*** 5045,5051 ****
    else
      {
      // stdout is file descriptor 1.
!     gg_assign(file_descriptor, integer_one_node);
      }
  
    for(size_t i=0; i<n-1; i++)
--- 5142,5148 ----
    else
      {
      // stdout is file descriptor 1.
!     file_descriptor = integer_one_node;
      }
  
    for(size_t i=0; i<n-1; i++)
*************** void
*** 5152,5159 ****
  parser_exhibit( bool /*changed*/, bool /*named*/,
                  const std::vector<cbl_refer_t> &args )
    {
!   tree file_descriptor = gg_define_variable(INT);
!   gg_assign(file_descriptor, integer_one_node);   // stdout is file descriptor 1.
  
    for(size_t i=0; i<args.size(); i++)
      {
--- 5249,5255 ----
  parser_exhibit( bool /*changed*/, bool /*named*/,
                  const std::vector<cbl_refer_t> &args )
    {
!   tree file_descriptor = integer_one_node;   // stdout is file descriptor 1.
  
    for(size_t i=0; i<args.size(); i++)
      {
*************** parser_initialize_table(size_t nelem,
*** 5545,5560 ****
      }
    typedef size_t span_t[2];
    static_assert(sizeof(spans[0]) == sizeof(span_t), "pair size wrong");
!   tree tspans = gg_define_variable(SIZE_T_P);
!   tree ttbls  = gg_define_variable(SIZE_T_P);
! 
!   gg_assign(tspans,
!             build_array_of_size_t(2*nspan,
!                                   reinterpret_cast<const size_t *>(spans)));
!   gg_assign(ttbls,
!             build_array_of_size_t(2*ntbl,
!                                   reinterpret_cast<const size_t *>(tbls)));
! 
    gg_call(VOID,
            "__gg__mirror_range",
            build_int_cst_type(SIZE_T, nelem),
--- 5641,5650 ----
      }
    typedef size_t span_t[2];
    static_assert(sizeof(spans[0]) == sizeof(span_t), "pair size wrong");
!   tree tspans = build_array_of_size_t(2*nspan,
!                                      reinterpret_cast<const size_t *>(spans));
!   tree ttbls = build_array_of_size_t(2*ntbl,
!                                      reinterpret_cast<const size_t *>(tbls));
    gg_call(VOID,
            "__gg__mirror_range",
            build_int_cst_type(SIZE_T, nelem),
*************** parser_initialize_table(size_t nelem,
*** 5566,5574 ****
            build_int_cst_type(SIZE_T, ntbl),
            ttbls,
            NULL_TREE);
- 
-   gg_free(tspans);
-   gg_free(ttbls);
    }
  
  static void
--- 5656,5661 ----
*************** is_valuable( cbl_field_type_t type ) {
*** 5617,5622 ****
--- 5704,5710 ----
  
  void parser_sleep(const cbl_refer_t &seconds)
    {
+   RETURN_IF_PARSE_ONLY;
    if( seconds.field )
      {
      gg_get_address_of(seconds.field->var_decl_node);
*************** program_end_stuff(const cbl_refer_t &ref
*** 5710,5717 ****
          {
          // The field_type has a PICTURE string, so we need to convert from the
          // COBOL form to native binary:
!         tree value;
!         get_binary_value( value, returner, return_type);
          gg_memcpy(gg_get_address_of(retval),
                    gg_get_address_of(value),
                    build_int_cst_type(SIZE_T, gg_sizeof(return_type)));
--- 5798,5804 ----
          {
          // The field_type has a PICTURE string, so we need to convert from the
          // COBOL form to native binary:
!         tree value = get_binary_value(returner, return_type);
          gg_memcpy(gg_get_address_of(retval),
                    gg_get_address_of(value),
                    build_int_cst_type(SIZE_T, gg_sizeof(return_type)));
*************** program_end_stuff(const cbl_refer_t &ref
*** 5734,5740 ****
                  member(returner->var_decl_node, "data"),
                  member(returner->var_decl_node, "capacity"));
  
!       tree actual = gg_cast(COBOL_FUNCTION_RETURN_TYPE,
                              gg_pointer_to_array(array));
  
        restore_local_variables();
--- 5821,5827 ----
                  member(returner->var_decl_node, "data"),
                  member(returner->var_decl_node, "capacity"));
  
!       tree actual = gg_cast(COBOL_FUNCTION_RETURN_64,
                              gg_pointer_to_array(array));
  
        restore_local_variables();
*************** program_end_stuff(const cbl_refer_t &ref
*** 5745,5763 ****
      {
      // There is no explicit value.  This means, by default (according to IBM),
      // we return the value found in RETURN-CODE:
!     tree value = gg_define_variable(COBOL_FUNCTION_RETURN_TYPE);
      if( !hijacked )
        {
!       gg_assign(value,
!                 gg_cast(COBOL_FUNCTION_RETURN_TYPE,
!                         current_function->var_decl_return));
        }
      else
        {
!       gg_assign(value, gg_cast(COBOL_FUNCTION_RETURN_TYPE, integer_zero_node));
        }
      restore_local_variables();
!     gg_return(gg_cast(COBOL_FUNCTION_RETURN_TYPE, value));
      }
    }
  
--- 5832,5849 ----
      {
      // There is no explicit value.  This means, by default (according to IBM),
      // we return the value found in RETURN-CODE:
!     tree value;
      if( !hijacked )
        {
!       value = gg_cast(COBOL_FUNCTION_RETURN_64,
!                         current_function->var_decl_return);
        }
      else
        {
!       value = gg_cast(COBOL_FUNCTION_RETURN_64, integer_zero_node);
        }
      restore_local_variables();
!     gg_return(value);
      }
    }
  
*************** parser_xml_parse( cbl_label_t *instance,
*** 6120,6144 ****
    // With the callback in place, we are ready to call the library:
    tree pcallback = gg_get_function_address(VOID, ach);
  
!   tree erc = gg_define_variable(INT);
!   gg_assign(erc, gg_call_expr(INT,
!                               "__gg__xml_parse",
!                               gg_get_address_of(input.field->var_decl_node),
!                               refer_offset(input),
!                               refer_size_source(input),
!                               encoding ?
!                                   gg_get_address_of(encoding->var_decl_node)
!                                 : null_pointer_node,
!                               validating ?
!                                   gg_get_address_of(validating->var_decl_node)
!                                 : null_pointer_node,
!                               build_int_cst_type(INT, returns_national),
!                               pcallback,
!                               gg_get_address_of(xml_event->var_decl_node),
!                               gg_get_address_of(xml_code ->var_decl_node),
!                               gg_get_address_of(xml_text ->var_decl_node),
!                               NULL_TREE));
!   IF( erc, ne_op, integer_zero_node )
      {
      //gg_printf("__gg__xml_parse() failed with erc %d\n", erc, NULL_TREE);
      gg_append_statement(instance->structs.xml_parse->exception.go_to);
--- 6206,6230 ----
    // With the callback in place, we are ready to call the library:
    tree pcallback = gg_get_function_address(VOID, ach);
  
!   IF( gg_call_expr(INT,
!                    "__gg__xml_parse",
!                    gg_get_address_of(input.field->var_decl_node),
!                    refer_offset(input),
!                    refer_size_source(input),
!                    encoding ?
!                        gg_get_address_of(encoding->var_decl_node)
!                      : null_pointer_node,
!                    validating ?
!                        gg_get_address_of(validating->var_decl_node)
!                      : null_pointer_node,
!                    build_int_cst_type(INT, returns_national),
!                    pcallback,
!                    gg_get_address_of(xml_event->var_decl_node),
!                    gg_get_address_of(xml_code ->var_decl_node),
!                    gg_get_address_of(xml_text ->var_decl_node),
!                    NULL_TREE),
!       ne_op,
!       integer_zero_node )
      {
      //gg_printf("__gg__xml_parse() failed with erc %d\n", erc, NULL_TREE);
      gg_append_statement(instance->structs.xml_parse->exception.go_to);
*************** establish_using(size_t nusing,
*** 6465,6471 ****
      // There are 'nusing' elements in the PROCEDURE DIVISION USING list.
  
      tree parameter = NULL_TREE;
-     tree rt_i = gg_define_variable(INT);
      for(size_t i=0; i<nusing; i++)
        {
        // And this generates run-time execution code. The
--- 6551,6556 ----
*************** establish_using(size_t nusing,
*** 6520,6526 ****
          // The passed parameter, if it exists, is a pointer to a COBOL
          // variable's data area
          tree reference = gg_define_variable(UCHAR_P);
!         gg_assign(rt_i, build_int_cst_type(INT, i));
          IF( rt_i, lt_op , var_decl_call_parameter_count )
            {
            if( i == 0 )
--- 6605,6611 ----
          // The passed parameter, if it exists, is a pointer to a COBOL
          // variable's data area
          tree reference = gg_define_variable(UCHAR_P);
!         tree rt_i = build_int_cst_type(INT, i);
          IF( rt_i, lt_op , var_decl_call_parameter_count )
            {
            if( i == 0 )
*************** establish_using(size_t nusing,
*** 6562,6580 ****
            // the value as-is, because the extra zeroes are to the right of the
            // one we need.  But a big endian sixteen-byte value has a bunch of
            // leading zeroes, and we need to skip past them.
!           tree offset = gg_define_variable(SIZE_T);
            // Pick up the length metadata.
-           gg_assign(offset,
-                     gg_array_value(var_decl_call_parameter_lengths, rt_i));
  
            // That value is probably sixteen.  Subtract the length of our target
            // value from that.
!           gg_assign(offset,
!                     gg_subtract(offset,
!                                 member(args[i].refer.field->var_decl_node,
!                                        "capacity")));
            // And add that value to 'reference'
!           gg_assign(reference, gg_add(reference, offset));
            // This code was added when I encountered a function call using
            // func( N - 1 ), where the function expected a single-byte value.
            // In little-endian, no problem, because the calculated value of 3
--- 6647,6663 ----
            // the value as-is, because the extra zeroes are to the right of the
            // one we need.  But a big endian sixteen-byte value has a bunch of
            // leading zeroes, and we need to skip past them.
! 
            // Pick up the length metadata.
  
            // That value is probably sixteen.  Subtract the length of our target
            // value from that.
!           tree offset =
!             gg_subtract(gg_array_value(var_decl_call_parameter_lengths, rt_i),
!                        member(args[i].refer.field->var_decl_node, "capacity"));
            // And add that value to 'reference'
!           gg_assign(reference,
!                     gg_add(reference, offset));
            // This code was added when I encountered a function call using
            // func( N - 1 ), where the function expected a single-byte value.
            // In little-endian, no problem, because the calculated value of 3
*************** establish_using(size_t nusing,
*** 6601,6607 ****
          // 'parameter' is the 64-bit or 128-bit value that was placed on the stack
          tree value = gg_define_variable(value_type);
  
!         gg_assign(rt_i, build_int_cst_type(INT, i));
          IF( rt_i, lt_op , var_decl_call_parameter_count )
            {
            if( i == 0 )
--- 6684,6690 ----
          // 'parameter' is the 64-bit or 128-bit value that was placed on the stack
          tree value = gg_define_variable(value_type);
  
!         tree rt_i = build_int_cst_type(INT, i);
          IF( rt_i, lt_op , var_decl_call_parameter_count )
            {
            if( i == 0 )
*************** parser_division(cbl_division_t division,
*** 6807,6826 ****
        tree prog_list = gg_define_variable(build_pointer_type(CHAR_P),
                                            ach, vs_file_static);
  
!       // Likewise, we need a pointer to the array of pointers to functions:
        tree function_type =
!         build_varargs_function_type_array( SIZE_T,
!                                            0,     // No parameters yet
!                                            NULL); // And, hence, no types
!       tree pointer_type = build_pointer_type(function_type);
!       tree constructed_array_type = build_array_type_nelts(pointer_type, 1);
        sprintf(ach,
                "..accessible_program_pointers_" HOST_SIZE_T_PRINT_DEC,
                (fmt_size_t)current_function->our_symbol_table_index);
!       tree prog_pointers = gg_define_variable(
!                                       build_pointer_type(constructed_array_type),
!                                       ach,
!                                       vs_file_static);
        gg_call(VOID,
                "__gg__set_program_list",
                build_int_cst_type(INT, current_function->our_symbol_table_index),
--- 6890,6911 ----
        tree prog_list = gg_define_variable(build_pointer_type(CHAR_P),
                                            ach, vs_file_static);
  
!       // Likewise, we need a pointer to the first element of an array
!       // of pointers to functions:
        tree function_type =
!         build_varargs_function_type_array(SIZE_T,
!                                           0,
!                                           NULL);
!       tree function_pointer_type = build_pointer_type(function_type);
! 
        sprintf(ach,
                "..accessible_program_pointers_" HOST_SIZE_T_PRINT_DEC,
                (fmt_size_t)current_function->our_symbol_table_index);
! 
!       tree prog_pointers =
!         gg_define_variable(build_pointer_type(function_pointer_type),
!                            ach,
!                            vs_file_static);
        gg_call(VOID,
                "__gg__set_program_list",
                build_int_cst_type(INT, current_function->our_symbol_table_index),
*************** parser_division(cbl_division_t division,
*** 6867,6879 ****
  
      gg_append_statement(current_function->skip_init_label);
      // This is where we check to see if somebody tried to cancel us
!     tree cancelled = gg_define_variable(INT);
!     gg_assign(cancelled,
!               gg_call_expr( INT,
!                             "__gg__is_canceled",
!                             current_function->function_address,
!                             NULL_TREE));
!     IF( cancelled, ne_op, integer_zero_node )
        {
        // Somebody flagged us for CANCEL, which means reinitialization, so we
        // need to find the _INITIALIZE_PROGRAM section label.
--- 6952,6963 ----
  
      gg_append_statement(current_function->skip_init_label);
      // This is where we check to see if somebody tried to cancel us
!     IF( gg_call_expr( INT,
!                       "__gg__is_canceled",
!                       current_function->function_address,
!                       NULL_TREE),
!         ne_op,
!         integer_zero_node )
        {
        // Somebody flagged us for CANCEL, which means reinitialization, so we
        // need to find the _INITIALIZE_PROGRAM section label.
*************** parser_division(cbl_division_t division,
*** 6904,6910 ****
  
        size_t nbytes = 0;
        tree returning_type = tree_type_from_field_type(returning, nbytes);
!       gg_modify_function_type(current_function->function_decl, returning_type);
        }
  
      // Stash the returning variables for use during parser_return()
--- 6988,6996 ----
  
        size_t nbytes = 0;
        tree returning_type = tree_type_from_field_type(returning, nbytes);
!       tree interfunction_type = get_interfunction_type(returning_type);
! 
!       gg_modify_function_type(current_function->function_decl, interfunction_type);
        }
  
      // Stash the returning variables for use during parser_return()
*************** parser_relop_long(cbl_field_t *tgt,
*** 7269,7288 ****
            tgt->name);
      }
  
!   tree tree_a  = build_int_cst_type(LONG, avalue);
!   tree tree_b;
!   get_binary_value( tree_b, bref.field, LONG);
!   tree comp_res = gg_define_variable(LONG);
!   gg_assign(comp_res, gg_subtract(tree_a, tree_b));
! 
!   // comp_res is negative, zero, position for less-than, equal-to, greater-than
! 
!   // So, we simply compare the result of the comparison to zero using the relop
!   // we were given to turn it into a TRUE/FALSE
!   gg_assign(  tgt->var_decl_node,
!               gg_build_relational_expression( comp_res,
!                                             relop,
!                                             gg_cast(LONG, integer_zero_node)));
    TRACE1
      {
      TRACE1_INDENT
--- 7355,7366 ----
            tgt->name);
      }
  
!   tree tree_a = build_int_cst_type(LONG, avalue);
!   tree tree_b = get_binary_value(bref.field, LONG);
!   gg_assign(tgt->var_decl_node,
!             gg_build_relational_expression(tree_a,
!                                            relop,
!                                            tree_b));
    TRACE1
      {
      TRACE1_INDENT
*************** parser_see_stop_run(struct cbl_refer_t e
*** 7388,7394 ****
    if( exit_status.field )
      {
      // There is an exit_status, so it wins:
!     get_binary_value( returned_value, exit_status.field, INT);
      TRACE1
        {
        TRACE1_REFER(" exit_status ", exit_status, "")
--- 7466,7472 ----
    if( exit_status.field )
      {
      // There is an exit_status, so it wins:
!     returned_value = get_binary_value(exit_status.field, INT);
      TRACE1
        {
        TRACE1_REFER(" exit_status ", exit_status, "")
*************** parser_perform_inline_times(struct cbl_p
*** 8815,8822 ****
      SHOW_PARSE_END
      }
  
!   tree initial_value;
!   get_binary_value(initial_value, how_many, LONG);
    gg_assign(counter, initial_value);
  
    SHOW_PARSE
--- 8893,8899 ----
      SHOW_PARSE_END
      }
  
!   tree initial_value = get_binary_value(how_many, LONG);
    gg_assign(counter, initial_value);
  
    SHOW_PARSE
*************** parser_file_open( struct cbl_file_t *fil
*** 9238,9255 ****
     * --jkl
     */
  
!   tree pszFilename = gg_define_variable(CHAR_P);
    cbl_field_t *field_of_name = symbol_field_forward(file->filename);
    if( field_of_name->type == FldForward )
      {
      // The target of ASSIGN TO was unquoted, but didn't resolve to a
      // cbl_field_t.  This means that the name of the field is an
      // environment variable that will hold the file name
!     gg_assign(pszFilename, gg_strdup(gg_string_literal(field_of_name->name)));
      }
    else
      {
!     gg_assign(pszFilename, gg_cast(CHAR_P, null_pointer_node));
      }
  
    sv_is_i_o = true;
--- 9315,9332 ----
     * --jkl
     */
  
!   tree pszFilename;
    cbl_field_t *field_of_name = symbol_field_forward(file->filename);
    if( field_of_name->type == FldForward )
      {
      // The target of ASSIGN TO was unquoted, but didn't resolve to a
      // cbl_field_t.  This means that the name of the field is an
      // environment variable that will hold the file name
!     pszFilename = gg_strdup(gg_string_literal(field_of_name->name));
      }
    else
      {
!     pszFilename = gg_cast(CHAR_P, null_pointer_node);
      }
  
    sv_is_i_o = true;
*************** parser_file_write( cbl_file_t *file,
*** 9425,9431 ****
                     bool sequentially
                   )
    {
!   Analyze();
  
    bool is_random = !(   file->access == file_access_seq_e
                       || file->access == file_inaccessible_e);
--- 9502,9529 ----
                     bool sequentially
                   )
    {
!   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);
!     }
  
    bool is_random = !(   file->access == file_access_seq_e
                       || file->access == file_inaccessible_e);
*************** parser_file_write( cbl_file_t *file,
*** 9474,9508 ****
      SHOW_PARSE_END
      }
  
!   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);
!     }
! 
!   tree t_advance = gg_define_variable(INT);
    if(advance.field)
      {
!     tree value;
!     get_binary_value( value, advance, INT);
!     gg_assign(t_advance, gg_cast(INT, value));
      }
    else
      {
--- 9572,9581 ----
      SHOW_PARSE_END
      }
  
!   tree t_advance;
    if(advance.field)
      {
!     t_advance = get_binary_value(advance, INT);
      }
    else
      {
*************** parser_file_write( cbl_file_t *file,
*** 9512,9526 ****
        // MicroFocus and GnuCOBOL say the default is BEFORE advancing.
        // See the comment where the variable is defined:
        after = auto_advance_is_AFTER_advancing;
!       gg_assign(t_advance, integer_one_node);
        }
      else
        {
        // The default for SEQUENTIAL is no vertical motion
!       gg_assign(t_advance, integer_minusone_node);
        }
      }
  
    gcc_assert(record_area);
    if( !record_area )
      {
--- 9585,9602 ----
        // MicroFocus and GnuCOBOL say the default is BEFORE advancing.
        // See the comment where the variable is defined:
        after = auto_advance_is_AFTER_advancing;
!       t_advance = integer_one_node;
        }
      else
        {
        // The default for SEQUENTIAL is no vertical motion
!       t_advance = integer_minusone_node;
        }
      }
  
+   // Dubner sez:  I don't understand the following sequence.  I need to learn
+   // if the record_area can legitimately be null and need a default, or if the
+   // follow-up if( !record_area ) is unnecessary.
    gcc_assert(record_area);
    if( !record_area )
      {
*************** parser_file_delete( struct cbl_file_t *f
*** 9574,9580 ****
  
    if( !file )
      {
!     cbl_internal_error("The file pointer should not be null");
      abort();  // Because cppcheck doesn't recognize [[noerror]]
      }
  
--- 9650,9656 ----
  
    if( !file )
      {
!     cbl_internal_error("%s", "The file pointer should not be null");
      abort();  // Because cppcheck doesn't recognize [[noerror]]
      }
  
*************** parser_file_delete_file( cbl_label_t *na
*** 9666,9684 ****
    tree there_was_an_error = gg_define_variable(INT, 0L);
    for(size_t i=0; i<filenames.size(); i++)
      {
!     tree pszFilename = gg_define_variable(CHAR_P);
      cbl_field_t *field_of_name = symbol_field_forward(filenames[i]->filename);
      if( field_of_name->type == FldForward )
        {
        // The target of ASSIGN TO was unquoted, but didn't resolve to a
        // cbl_field_t.  This means that the name of the field is an
        // environment variable that will hold the file name
!       gg_assign(pszFilename,
!                 gg_strdup(gg_string_literal(field_of_name->name)));
        }
      else
        {
!       gg_assign(pszFilename, gg_cast(CHAR_P, null_pointer_node));
        }
      gg_assign(there_was_an_error,
                gg_bitwise_or(there_was_an_error,
--- 9742,9759 ----
    tree there_was_an_error = gg_define_variable(INT, 0L);
    for(size_t i=0; i<filenames.size(); i++)
      {
!     tree pszFilename;
      cbl_field_t *field_of_name = symbol_field_forward(filenames[i]->filename);
      if( field_of_name->type == FldForward )
        {
        // The target of ASSIGN TO was unquoted, but didn't resolve to a
        // cbl_field_t.  This means that the name of the field is an
        // environment variable that will hold the file name
!       pszFilename = gg_strdup(gg_string_literal(field_of_name->name));
        }
      else
        {
!       pszFilename = gg_cast(CHAR_P, null_pointer_node);
        }
      gg_assign(there_was_an_error,
                gg_bitwise_or(there_was_an_error,
*************** parser_file_delete_file( cbl_label_t *na
*** 9703,9708 ****
--- 9778,9784 ----
      // There was an error detected.
      gg_append_statement(name->structs.delete_file->exception.go_to);
      }
+   ENDIF
    }
  
  void
*************** parser_file_rewrite(cbl_file_t *file,
*** 9751,9757 ****
                      cbl_field_t *record_area,
                      bool sequentially )
    {
!   Analyze();
    if(    file->org    == file_indexed_e
        && file->access == file_access_seq_e
        && !sequentially )
--- 9827,9834 ----
                      cbl_field_t *record_area,
                      bool sequentially )
    {
! 
! 
    if(    file->org    == file_indexed_e
        && file->access == file_access_seq_e
        && !sequentially )
*************** parser_file_rewrite(cbl_file_t *file,
*** 9779,9784 ****
--- 9856,9862 ----
      SHOW_PARSE_END
      }
  
+   // See comment about gcc_assert(record_area); in parser_file_write().
    gcc_assert(record_area);
    if( !record_area )
      {
*************** parser_file_start(struct cbl_file_t *fil
*** 9888,9894 ****
      }
    else if( flk > 0 )
      {
!     get_binary_value( length, length_ref, SIZE_T);
      }
  
    sv_is_i_o = true;
--- 9966,9972 ----
      }
    else if( flk > 0 )
      {
!     length = get_binary_value(length_ref, SIZE_T);
      }
  
    sv_is_i_o = true;
*************** inspect_tally(bool backward,
*** 10007,10030 ****
    // all the integers and cbl_inspect_bound_t values, in a strict sequence so
    // that the library routine can peel them off.
  
-   tree int_size = gg_define_variable(INT, 0L);
-   tree integers = gg_define_variable(SIZE_T_P, null_pointer_node);
- 
    size_t n_integers = int_index;
  
!   IF( build_int_cst_type(INT, n_integers), gt_op, int_size )
!     {
!     gg_assign(int_size, build_int_cst_type(INT, n_integers));
!     gg_assign(integers,
!               gg_cast(SIZE_T_P,
!                       gg_realloc(integers,
!                                  n_integers
!                                  * int_size_in_bytes(VOID_P))));
!     }
!   ELSE
!     {
!     }
!   ENDIF
  
    const size_t n_resolveds = pcbl_index;
    std::vector<cbl_refer_t> pcbl_refers(n_resolveds);
--- 10085,10095 ----
    // 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 = int_index;
  
!   tree array_type = build_array_type_nelts(SIZE_T, n_integers);
!   tree integer_array = gg_define_variable(array_type);
!   tree integers = gg_pointer_to_array(integer_array);
  
    const size_t n_resolveds = pcbl_index;
    std::vector<cbl_refer_t> pcbl_refers(n_resolveds);
*************** inspect_replacing(int backward,
*** 10182,10203 ****
                          + 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
  
!   tree int_size = gg_define_variable(INT, 0L);
!   tree integers = gg_define_variable(SIZE_T_P, null_pointer_node);
! 
!   IF( build_int_cst_type(INT, n_integers), gt_op, int_size )
!     {
!     gg_assign(int_size, build_int_cst_type(INT, n_integers));
!     gg_assign(integers,
!               gg_cast(SIZE_T_P,
!                       gg_realloc(integers,
!                                  n_integers
!                                  * int_size_in_bytes(VOID_P))));
!     }
!   ELSE
!     {
!     }
!   ENDIF
  
    const size_t n_resolveds =  1                 // Room for identifier-1
                              + n_id_3            // Room for the identifier-3 variables
--- 10247,10255 ----
                          + 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
  
!   tree array_type = build_array_type_nelts(SIZE_T, n_integers);
!   tree integer_array = gg_define_variable(array_type);
!   tree integers = gg_pointer_to_array(integer_array);
  
    const size_t n_resolveds =  1                 // Room for identifier-1
                              + n_id_3            // Room for the identifier-3 variables
*************** parser_intrinsic_call_1( cbl_field_t *tg
*** 10773,10780 ****
  
      if( is_table(ref1.field) && !ref1.nsubscript() )
        {
!       static tree depending_on = gg_define_variable(LONG, "..pic1_dep");
!       depending_on_value(depending_on, ref1.field);
        gg_call(VOID,
                "__gg__int128_to_field",
                gg_get_address_of(tgt->var_decl_node),
--- 10825,10831 ----
  
      if( is_table(ref1.field) && !ref1.nsubscript() )
        {
!       tree depending_on = depending_on_value(ref1.field);
        gg_call(VOID,
                "__gg__int128_to_field",
                gg_get_address_of(tgt->var_decl_node),
*************** handle_gg_trim(cbl_field_t *tgt,
*** 10889,10896 ****
            }
          else
            {
!           tree location;
!           get_location(location, arg);
            gg_assign(gg_indirect(char_p), gg_indirect(location));
            }
          gg_increment(char_p);
--- 10940,10946 ----
            }
          else
            {
!           tree location = get_location(arg);
            gg_assign(gg_indirect(char_p), gg_indirect(location));
            }
          gg_increment(char_p);
*************** parser_trim( cbl_field_t *tgt,
*** 10960,10967 ****
        else
          {
          // It's not a figurative constant, so we get our value from 'arg'
!         tree location;
!         get_location(location, arg);
          gg_memcpy(char_p,
                    location,
                    tstride);
--- 11010,11016 ----
        else
          {
          // It's not a figurative constant, so we get our value from 'arg'
!         tree location = get_location(arg);
          gg_memcpy(char_p,
                    location,
                    tstride);
*************** static void
*** 11143,11151 ****
  field_increment(cbl_field_t *fld )
    {
    // rdigits has to be zero.
!   tree value;
!   get_binary_value(value, fld, INT128);
!   gg_increment(value);
    gg_call(VOID,
            "__gg__int128_to_field",
            gg_get_address_of(fld->var_decl_node),
--- 11192,11199 ----
  field_increment(cbl_field_t *fld )
    {
    // rdigits has to be zero.
!   tree value = get_binary_value(fld, INT128);
!   gg_increment2(value);
    gg_call(VOID,
            "__gg__int128_to_field",
            gg_get_address_of(fld->var_decl_node),
*************** parser_lsearch_start(   cbl_label_t *nam
*** 11225,11232 ****
      if( is_table(current) )
        {
        // Extract the number of elements in that rightmost dimension.
!       lsearch->limit = gg_define_variable(LONG);
!       depending_on_value(lsearch->limit, current);
        break;
        }
      current = parent_of(current);
--- 11273,11279 ----
      if( is_table(current) )
        {
        // Extract the number of elements in that rightmost dimension.
!       lsearch->limit = depending_on_value(current);
        break;
        }
      current = parent_of(current);
*************** parser_lsearch_start(   cbl_label_t *nam
*** 11238,11248 ****
    tree value;
    if(varying)
      {
!     get_binary_value(value, varying, SIZE_T);
      }
    else if( index )
      {
!     get_binary_value(value, index, SIZE_T);
      }
    else
      {
--- 11285,11295 ----
    tree value;
    if(varying)
      {
!     value = get_binary_value(varying, SIZE_T);
      }
    else if( index )
      {
!     value = get_binary_value(index, SIZE_T);
      }
    else
      {
*************** parser_bsearch_start(   cbl_label_t* nam
*** 11471,11477 ****
  
    // Assign the left and right values:
    gg_assign(bsearch->left, build_int_cst_type(LONG, 1));
!   depending_on_value(bsearch->right, current);
  
    // We now jump to the top of the binary testing loop, which comes right
    // after the labels where we handle non-equal cases:
--- 11518,11524 ----
  
    // Assign the left and right values:
    gg_assign(bsearch->left, build_int_cst_type(LONG, 1));
!   gg_assign(bsearch->right, depending_on_value(current));
  
    // We now jump to the top of the binary testing loop, which comes right
    // after the labels where we handle non-equal cases:
*************** parser_sort(cbl_refer_t tableref,
*** 11809,11816 ****
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t(flattened_ascending_2 );
  
!   tree depending_on = gg_define_variable(LONG, "_sort_size");
!   depending_on_value(depending_on, table);
  
    if( alphabet )
      {
--- 11856,11862 ----
    // Create the array of integers that are the flags for ASCENDING:
    tree ascending = gg_array_of_size_t(flattened_ascending_2 );
  
!   tree depending_on = depending_on_value(table);
  
    if( alphabet )
      {
*************** parser_file_sort(   cbl_file_t *workfile
*** 11882,11888 ****
      for(size_t i=0; i<ninput; i++)
        {
        parser_file_open(inputs[i], 'r');
!       IF( member(workfile, "io_status"), ge_op, build_int_cst_type(INT, FsEofSeq) )
          {
          gg_printf("Couldn't open the SORT USING file for input\n", NULL_TREE);
          gg_exit(integer_one_node);
--- 11928,11936 ----
      for(size_t i=0; i<ninput; i++)
        {
        parser_file_open(inputs[i], 'r');
!       IF( member(inputs[i], "io_status"),
!           ge_op,
!           build_int_cst_type(INT, FsEofSeq) )
          {
          gg_printf("Couldn't open the SORT USING file for input\n", NULL_TREE);
          gg_exit(integer_one_node);
*************** parser_file_sort(   cbl_file_t *workfile
*** 11991,11997 ****
        gg_call(VOID,
                "__gg__file_sort_ff_output",
                gg_get_address_of(outputs[i]->var_decl_node),
!               gg_get_address_of(workfile->var_decl_node),
                NULL_TREE);
        parser_file_close(outputs[i]);
        parser_file_close(workfile);
--- 12039,12045 ----
        gg_call(VOID,
                "__gg__file_sort_ff_output",
                gg_get_address_of(outputs[i]->var_decl_node),
!               gg_get_address_of(workfile->  var_decl_node),
                NULL_TREE);
        parser_file_close(outputs[i]);
        parser_file_close(workfile);
*************** parser_file_merge(  cbl_file_t *workfile
*** 12321,12327 ****
        ENDIF
      }
  
-   cbl_field_t *sd_record = symbol_file_record(workfile);
    if( alphabet )
      {
      push_program_state();
--- 12369,12374 ----
*************** parser_file_merge(  cbl_file_t *workfile
*** 12330,12336 ****
    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),
--- 12377,12383 ----
    gg_call(VOID,
            "__gg__merge_files",
            gg_get_address_of(workfile->var_decl_node),
!           build_int_cst_type(SIZE_T, flattened_fields_2.size()),
            all_keys,
            ascending,
            build_int_cst_type(SIZE_T, ninputs),
*************** parser_file_merge(  cbl_file_t *workfile
*** 12395,12401 ****
                "__gg__file_sort_ff_output",
                gg_get_address_of(outputs[i]->var_decl_node),
                gg_get_address_of(workfile->  var_decl_node),
-               gg_get_address_of(sd_record-> var_decl_node),
                NULL_TREE);
        parser_file_close(outputs[i]);
        parser_file_close(workfile);
--- 12442,12447 ----
*************** parser_string(const cbl_refer_t& tgt,
*** 12637,12644 ****
                                        pintegers,
                                        referlets,
                                        NULL_TREE));
-   gg_free(pintegers);
- 
    free(integers);
  
    if( overflow )
--- 12683,12688 ----
*************** parser_call_exception_end( cbl_label_t *
*** 12733,12738 ****
--- 12777,12784 ----
    gg_append_statement( name->structs.call_exception->bottom.go_to );
    }
  
+ 
+ 
  static
  void
  create_and_call(size_t narg,
*************** create_and_call(size_t narg,
*** 12747,12752 ****
--- 12793,12800 ----
    tree *arguments = NULL;
    int  *allocated = NULL;
  
+   tree interfunction_type = get_interfunction_type(returned_value_type);
+ 
    if(narg)
      {
      arguments = static_cast<tree *>(xmalloc(2*narg * sizeof(tree)));
*************** create_and_call(size_t narg,
*** 12841,12855 ****
  
        case by_content_e:
          {
-         if(    (args[i].refer.field->attr & intermediate_e)
-             && is_valuable(args[i].refer.field->type) )
-           {
-           cbl_unimplemented("CALL USING BY CONTENT <temporary> would require "
-                             "REPOSITORY PROTOTYPES.");
-           }
- 
          // BY CONTENT means that the called program gets a copy of the data.
- 
          // We'll free this copy after the called program returns.
  
          switch(args[i].attr)
--- 12889,12895 ----
*************** create_and_call(size_t narg,
*** 12932,12945 ****
      gg_assign(var_decl_call_parameter_signature,
                gg_cast(CHAR_P, function_pointer));
  
!     call_expr = gg_call_expr_list(returned_value_type,
                                    function_pointer,
                                    narg,
                                    arguments );
      }
    else
      {
!     tree fndecl_type = build_varargs_function_type_array( returned_value_type,
                         0,     // No parameters yet
                         NULL); // And, hence, no types
  
--- 12972,12985 ----
      gg_assign(var_decl_call_parameter_signature,
                gg_cast(CHAR_P, function_pointer));
  
!     call_expr = gg_call_expr_list(interfunction_type,
                                    function_pointer,
                                    narg,
                                    arguments );
      }
    else
      {
!     tree fndecl_type = build_varargs_function_type_array( interfunction_type,
                         0,     // No parameters yet
                         NULL); // And, hence, no types
  
*************** create_and_call(size_t narg,
*** 12958,12964 ****
  
      // Create the call_expr from that address
      call_expr = build_call_array_loc( gg_token_location(),
!                                       returned_value_type,
                                        address_of_function,
                                        narg,
                                        arguments);
--- 12998,13004 ----
  
      // Create the call_expr from that address
      call_expr = build_call_array_loc( gg_token_location(),
!                                       interfunction_type,
                                        address_of_function,
                                        narg,
                                        arguments);
*************** create_and_call(size_t narg,
*** 12977,12988 ****
      // we treat that returned value depends on the target.
  
      // Create a variable of the type expected from the called function
!     returned_value = gg_define_variable(returned_value_type);
  
      // Actually call the function, assigning the returned value to that
      // variable:
      push_program_state();
!     gg_assign(returned_value, gg_cast(returned_value_type, call_expr));
      pop_program_state();
  
      // Now we decided what to do with the returned value, based on its type.
--- 13017,13028 ----
      // we treat that returned value depends on the target.
  
      // Create a variable of the type expected from the called function
!     returned_value = gg_define_variable(interfunction_type);
  
      // Actually call the function, assigning the returned value to that
      // variable:
      push_program_state();
!     gg_assign(returned_value, gg_cast(interfunction_type, call_expr));
      pop_program_state();
  
      // Now we decided what to do with the returned value, based on its type.
*************** create_and_call(size_t narg,
*** 13004,13019 ****
          TRACE1_END
          }
        }
!     else if(    returned_value_type == SSIZE_T
!             ||  returned_value_type == SIZE_T
!             ||  returned_value_type == INT128
!             ||  returned_value_type == UINT128)
        {
        // We got back a 64-bit or 128-bit integer.  The called and calling
        // programs have to agree on size, but other than that, integer numeric
        // types are converted one to the other.
  
!       gg_call(VOID,
                "__gg__int128_to_qualified_field",
                gg_get_address_of(returned.field->var_decl_node),
                refer_offset(returned),
--- 13044,13056 ----
          TRACE1_END
          }
        }
!     else if( INTEGRAL_TYPE_P(returned_value_type) )
        {
        // We got back a 64-bit or 128-bit integer.  The called and calling
        // programs have to agree on size, but other than that, integer numeric
        // types are converted one to the other.
  
!       gg_call(INT,
                "__gg__int128_to_qualified_field",
                gg_get_address_of(returned.field->var_decl_node),
                refer_offset(returned),
*************** create_and_call(size_t narg,
*** 13021,13027 ****
                gg_cast(INT128, returned_value),
                gg_cast(INT, member(returned.field->var_decl_node, "rdigits")),
                build_int_cst_type(INT, truncation_e),
-               null_pointer_node,
                NULL_TREE );
        TRACE1
          {
--- 13058,13063 ----
*************** create_and_call(size_t narg,
*** 13034,13046 ****
              ||  returned_value_type == DOUBLE
              ||  returned_value_type == FLOAT128)
        {
-       tree returned_location = gg_define_variable(UCHAR_P);
-       tree returned_length   = gg_define_variable(SIZE_T);
        // we were given a returned::field, so find its location and length:
!       gg_assign(returned_location,
!                 qualified_data_location(returned));
!       gg_assign(returned_length,
!                 refer_size_source(returned));
  
        // We are doing float-to-float, and we require that those be identical
        // one the caller and callee sides.
--- 13070,13078 ----
              ||  returned_value_type == DOUBLE
              ||  returned_value_type == FLOAT128)
        {
        // we were given a returned::field, so find its location and length:
!       tree returned_location = qualified_data_location(returned);
!       tree returned_length = refer_size_source(returned);
  
        // We are doing float-to-float, and we require that those be identical
        // one the caller and callee sides.
*************** parser_call(   cbl_refer_t name,
*** 13109,13114 ****
--- 13141,13149 ----
                 cbl_label_t *not_except,
                 bool /*is_function*/)
    {
+   // A note on the processing of function return types:
+ 
+ 
    Analyze();
    SHOW_PARSE
      {
*************** parser_set_pointers( size_t ntgt, cbl_re
*** 13558,13564 ****
        {
        // This is something like SET varp TO ENTRY "ref".
        tree function_pointer = function_pointer_from_name(source,
!                                                    COBOL_FUNCTION_RETURN_TYPE);
        gg_memcpy(qualified_data_location(tgts[i]),
                  gg_get_address_of(function_pointer),
                  sizeof_pointer);
--- 13593,13599 ----
        {
        // This is something like SET varp TO ENTRY "ref".
        tree function_pointer = function_pointer_from_name(source,
!                                                    COBOL_FUNCTION_RETURN_64);
        gg_memcpy(qualified_data_location(tgts[i]),
                  gg_get_address_of(function_pointer),
                  sizeof_pointer);
*************** parser_program_hierarchy( const cbl_prog
*** 13782,13787 ****
--- 13817,13823 ----
          {
          // We have a COMMON uncle or sibling we haven't seen before.
          map_of_lists[caller].push_back(uncle);
+         map_of_sets[caller].insert(uncle->name);
          }
        }
      }
*************** parser_match_exception(cbl_field_t *inde
*** 13970,13977 ****
  
    TRACE1
      {
!     tree index_val;
!     get_binary_value(index_val, index, INT);
      TRACE1_INDENT
      gg_printf("returned value is 0x%x (%d)", index_val, index_val, NULL_TREE);
      TRACE1_END
--- 14006,14012 ----
  
    TRACE1
      {
!     tree index_val = get_binary_value(index, INT);
      TRACE1_INDENT
      gg_printf("returned value is 0x%x (%d)", index_val, index_val, NULL_TREE);
      TRACE1_END
*************** hijack_for_development(const char *funcn
*** 14182,14188 ****
    hijacked = true;
    funcname = "main";
    // Assume that funcname is lowercase with no hyphens
!   gg_define_function(COBOL_FUNCTION_RETURN_TYPE,
                       funcname,
                       funcname,
                       NULL_TREE);
--- 14217,14223 ----
    hijacked = true;
    funcname = "main";
    // Assume that funcname is lowercase with no hyphens
!   gg_define_function(COBOL_FUNCTION_RETURN_64,
                       funcname,
                       funcname,
                       NULL_TREE);
diff -Nrcpad gcc-17-20260823/gcc/cobol/gengen.cc gcc-17-20260830/gcc/cobol/gengen.cc
*** gcc-17-20260823/gcc/cobol/gengen.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/gengen.cc	Sun Aug 30 22:32:06 2026
***************
*** 97,102 ****
--- 97,104 ----
  #include "toplev.h"
  #include "function.h"
  #include "fold-const.h"
+ #include "gimple-expr.h"
+ #include "print-tree.h"
  #include "../../libgcobol/ec.h"
  #include "../../libgcobol/common-defs.h"
  #include "util.h"
*************** tree int128_zero_node;
*** 121,126 ****
--- 123,129 ----
  tree int128_five_node;
  tree int128_ten_node;
  tree char_ptr_type_node;
+ tree const_char_ptr_type_node;
  tree uchar_ptr_type_node;
  tree wchar_ptr_type_node;
  tree long_double_ten_node;
*************** gg_build_translation_unit(const char *fi
*** 152,157 ****
--- 155,162 ----
    // block referred to by its "initial" member is the anchor for any
    // variables whose scope is file.
  
+   gg_trans_unit.block_var_tails.clear();
+ 
    gg_trans_unit.trans_unit_decl
      = build_translation_unit_decl(get_identifier(filename));
  
*************** gg_build_translation_unit(const char *fi
*** 182,208 ****
  // And that's how subcontexts are made.
  
  static void
! gg_chain_onto_block_vars(tree block, tree var)
    {
    // In order to use a variable in a context, the var_decl has to go
    // onto the chain that starts with the "vars" entry of a block
  
    // Upon discovering that chainon has O(N-squared) complexity because it walks
    // the entire chain looking for the final member, Dubner put in this map.
!   static std::unordered_map<tree, tree>blocks;
!   if( !BLOCK_VARS(block) )
!     {
!     // This is the first variable:
!     BLOCK_VARS(block) = var;
!     blocks[block] = var;
!     }
!   else
      {
!     //chainon(BLOCK_VARS(block), var);
!     // What follows is the quicker equivalent of calling chainon()
!     TREE_CHAIN(blocks[block]) = var;
!     blocks[block] = var;
      }
    }
  
  void
--- 187,224 ----
  // And that's how subcontexts are made.
  
  static void
! gg_chain_onto_block_vars(tree block, tree decl)
    {
    // In order to use a variable in a context, the var_decl has to go
    // onto the chain that starts with the "vars" entry of a block
  
    // Upon discovering that chainon has O(N-squared) complexity because it walks
    // the entire chain looking for the final member, Dubner put in this map.
!   gcc_assert(block);
!   gcc_assert(TREE_CODE(block) == BLOCK);
!   gcc_assert(decl);
!   gcc_assert(DECL_P(decl));
!   gcc_assert(!DECL_CHAIN(decl));
! 
!   auto insertion =
!     gg_trans_unit.block_var_tails.emplace(block, decl);
! 
!   if( insertion.second )
      {
!     // This is the first declaration in the block.
!     gcc_assert(!BLOCK_VARS(block));
!     BLOCK_VARS(block) = decl;
!     return;
      }
+ 
+   tree &tail = insertion.first->second;
+ 
+   gcc_assert(BLOCK_VARS(block));
+   gcc_assert(tail);
+   gcc_assert(!DECL_CHAIN(tail));
+ 
+   DECL_CHAIN(tail) = decl;
+   tail = decl;
    }
  
  void
*************** gg_append_var_decl(tree var_decl)
*** 243,249 ****
      // Stash this var_decl in a map so it can be found elsewhere:
      //fprintf(stderr, "Stashing %s\n", IDENTIFIER_POINTER(DECL_NAME(var_decl)));
      gg_trans_unit.trans_unit_var_decls
!     [IDENTIFIER_POINTER(DECL_NAME(var_decl))] = var_decl;
      }
    else
      {
--- 259,265 ----
      // Stash this var_decl in a map so it can be found elsewhere:
      //fprintf(stderr, "Stashing %s\n", IDENTIFIER_POINTER(DECL_NAME(var_decl)));
      gg_trans_unit.trans_unit_var_decls
!                          [IDENTIFIER_POINTER(DECL_NAME(var_decl))] = var_decl;
      }
    else
      {
*************** gg_append_statement(tree stmt)
*** 366,377 ****
      }
  #endif
  
!   gcc_assert(  gg_trans_unit.function_stack.size() );
  
!   TREE_SIDE_EFFECTS(stmt) = 1;    // If an expression has no side effects,
!   //                              // it won't generate code.
!   TREE_SIDE_EFFECTS(current_function->statement_list_stack.back()) = 1;
!   append_to_statement_list( stmt, &(current_function->statement_list_stack.back()) );
    }
  
  tree
--- 382,394 ----
      }
  #endif
  
!   gcc_assert(gg_trans_unit.function_stack.size());
!   gcc_assert(stmt);
!   gcc_assert(TREE_SIDE_EFFECTS(stmt));
  
!   append_to_statement_list(
!     stmt,
!     &current_function->statement_list_stack.back());
    }
  
  tree
*************** gg_show_type(tree type)
*** 447,461 ****
      cbl_internal_error("The given type is NULL, and that is just not fair");
      }
  
!   int code = TREE_CODE(type);
    if( DECL_P(type) )
      {
      type = TREE_TYPE(type);
      code = TREE_CODE(type);
      }
!   if( !TYPE_P(type) && code != ARRAY_REF)
      {
!     cbl_internal_error("%s", "The given type is not a declaration or a TYPE or an ARRAY_REF");
      }
  
    static char ach[1100];
--- 464,483 ----
      cbl_internal_error("The given type is NULL, and that is just not fair");
      }
  
!   tree_code code = TREE_CODE(type);
    if( DECL_P(type) )
      {
      type = TREE_TYPE(type);
      code = TREE_CODE(type);
      }
!   if(    !TYPE_P(type)
!       && code != ARRAY_REF
!       && code != INDIRECT_REF
!       && code != NOP_EXPR
!       && code != MULT_EXPR
!       && code != COMPONENT_REF )
      {
!     cbl_internal_error("%s", "The type given to gg_show_type is not known");
      }
  
    static char ach[1100];
*************** gg_show_type(tree type)
*** 497,502 ****
--- 519,540 ----
        sprintf(ach, "RECORD");
        break;
  
+     case COMPONENT_REF:
+       sprintf(ach, "COMPONENT_REF");
+       break;
+ 
+     case INDIRECT_REF:
+       sprintf(ach, "INDIRECT_REF");
+       break;
+ 
+     case NOP_EXPR:
+       sprintf(ach, "NOP_EXPR");
+       break;
+ 
+     case MULT_EXPR:
+       sprintf(ach, "MULT_EXPR");
+       break;
+ 
      case REAL_TYPE:
        sprintf(ach,
                "%3" PRId64 "-bit REAL",
*************** gg_show_type(tree type)
*** 529,535 ****
      strcat(ach, " readonly");
      }
  
!   if( DECL_P(original_type) && TYPE_VOLATILE(original_type) )
      {
      strcat(ach, " volatile");
      }
--- 567,573 ----
      strcat(ach, " readonly");
      }
  
!   if( DECL_P(original_type) && TREE_THIS_VOLATILE(original_type) )
      {
      strcat(ach, " volatile");
      }
*************** gg_show_type(tree type)
*** 540,609 ****
  tree
  gg_assign(tree dest, const tree source)
    {
!   // This does the equivalent of a C/C++ "dest = source".  It does some
!   // checking for conditions that can result in inefficient code.
  
!   // This routine also provides for the possibility that the assignment is
!   // for a source that is a function invocation, as in
!   //    "dest = function_call()"
!   tree stmt = NULL_TREE;
  
!   saw_pointer = false;
!   tree dest_type = adjust_for_type(TREE_TYPE(dest));
!   saw_pointer = false;
!   tree source_type = adjust_for_type(TREE_TYPE(source));
!   bool p2 = saw_pointer;
  
!   bool okay = dest_type == source_type;
  
!   if( !okay )
      {
!     if(    TREE_CODE(dest_type)   == INTEGER_TYPE
!            && TREE_CODE(source_type) == INTEGER_TYPE
!            && TREE_INT_CST_LOW(TYPE_SIZE(dest_type)) == TREE_INT_CST_LOW(TYPE_SIZE(source_type))
!            && TYPE_UNSIGNED(dest_type) == TYPE_UNSIGNED(source_type) )
!       {
!       okay = true;
!       }
      }
  
!   if( okay )
      {
!     stmt = build2_loc(gg_token_location(),
!                       MODIFY_EXPR,
!                       TREE_TYPE(dest),
!                       dest,
!                       source);
!     gg_append_statement(stmt);
      }
!   else
      {
!     // We are doing an assignment where the left- and right-hand types are not
!     // the same.  This is a compilation-time error, since we want the caller to
!     // have sorted the types out explicitly.  If we don't throw an error here,
!     // the gimple reduction will do so.  Better to do it here, when we know
!     // where we are.
!     static const int debugging = 1;
!     if( debugging )
!       {
!       fprintf(stderr, "Inefficient assignment\n");
!       if(DECL_P(dest) && DECL_NAME(dest))
!         {
!         fprintf(stderr, "   Destination is %s\n", IDENTIFIER_POINTER(DECL_NAME(dest)));
!         }
!       fprintf(stderr, "   dest type   is %s%s\n", gg_show_type(dest_type), p2 ? "_P" : "");
!       if(DECL_P(source) && DECL_NAME(source))
!         {
!         fprintf(stderr, "   Source      is %s\n", IDENTIFIER_POINTER(DECL_NAME(source)));
!         }
!       fprintf(stderr, "   source type is %s%s\n", gg_show_type(source_type), p2 ? "_P" : "");
!       }
!     cbl_internal_error("Attempting an assignment of differing types.");
      }
    return stmt;
    }
  
- 
  void
  gg_structure_type_constructor(tree record_decl, ...)
    {
--- 578,666 ----
  tree
  gg_assign(tree dest, const tree source)
    {
!   /* This routine does the equivalent of the C expression "lvalue = rvalue;"
!      It is intentionally completely strict.  Should a failure be expressed
!      here, it is an indication that the caller has to clean up their act. */
!   if( !dest )
!     {
!     cbl_internal_error("%s", "gg_assign() was given a NULL destination.");
!     }
  
!   if( !source )
!     {
!     cbl_internal_error("%s", "gg_assign() was given a NULL source.");
!     }
  
!   if( dest == error_mark_node || source == error_mark_node )
!     {
!     cbl_internal_error("%s", "gg_assign() was given an error_mark_node.");
!     }
  
!   if( !TREE_TYPE(dest) )
!     {
!     fprintf(stderr, "gg_assign: destination has no TREE_TYPE\n");
!     debug_tree(dest);
!     cbl_internal_error("%s", "gg_assign() destination has no type.");
!     }
  
!   if( !TREE_TYPE(source) )
      {
!     fprintf(stderr, "gg_assign: source has no TREE_TYPE\n");
!     debug_tree(source);
!     cbl_internal_error("%s", "gg_assign() source has no type.");
      }
  
!   if(    !is_gimple_lvalue(dest)
!       && TREE_CODE(dest) != INDIRECT_REF )
      {
!     fprintf(stderr,
!             "gg_assign: destination is not an lvalue; TREE_CODE is %s\n",
!             get_tree_code_name(TREE_CODE(dest)));
!     debug_tree(dest);
!     cbl_internal_error("%s", "gg_assign() destination is not an lvalue.");
      }
! 
!   tree dest_type = TREE_TYPE(dest);
!   tree source_type = TREE_TYPE(source);
! 
!   if( dest_type != source_type )
      {
!     fprintf(stderr,
!             "gg_assign: destination type is %s at %p\n",
!             get_tree_code_name(TREE_CODE(dest_type)),
!             reinterpret_cast<void *>(dest_type));
! 
!     fprintf(stderr,
!             "gg_assign: source type is %s at %p\n",
!             get_tree_code_name(TREE_CODE(source_type)),
!             reinterpret_cast<void *>(source_type));
! 
!     fprintf(stderr, "gg_assign: destination type tree:\n");
!     debug_tree(dest_type);
! 
!     fprintf(stderr, "gg_assign: source type tree:\n");
!     debug_tree(source_type);
! 
!     fprintf(stderr, "gg_assign: destination expression:\n");
!     debug_tree(dest);
! 
!     fprintf(stderr, "gg_assign: source expression:\n");
!     debug_tree(source);
! 
!     cbl_internal_error("%s", "gg_assign() was given differing TREE_TYPEs.");
      }
+ 
+   tree stmt = build2_loc(gg_token_location(),
+                          MODIFY_EXPR,
+                          dest_type,
+                          dest,
+                          source);
+ 
+   gg_append_statement(stmt);
+ 
    return stmt;
    }
  
  void
  gg_structure_type_constructor(tree record_decl, ...)
    {
*************** gg_structure_type_constructor(tree recor
*** 644,649 ****
--- 701,731 ----
        break;
        }
  
+     gcc_assert(next_field);
+     gcc_assert(TREE_CODE(next_field) == FIELD_DECL);
+     gcc_assert(TREE_TYPE(value));
+ 
+     tree field_type = TREE_TYPE(next_field);
+     tree value_type = TREE_TYPE(value);
+ 
+     if( !useless_type_conversion_p(field_type, value_type) )
+       {
+       fprintf(stderr,
+               "%s: incompatible initializer for field %s\n",
+               __func__,
+               IDENTIFIER_POINTER(DECL_NAME(next_field)));
+ 
+       fprintf(stderr, "Expected type:\n");
+       debug_tree(field_type);
+ 
+       fprintf(stderr, "Actual type:\n");
+       debug_tree(value_type);
+ 
+       cbl_internal_error(
+         "%s: structure initializer has an incompatible field type",
+         __func__);
+       }
+ 
      CONSTRUCTOR_APPEND_ELT( elts,
                              next_field,
                              value );
*************** gg_structure_type_constructor(tree recor
*** 653,658 ****
--- 735,741 ----
    va_end (ap);
  
    tree constr = build_constructor (record_type, elts);
+   verify_constructor_flags(constr);
    DECL_INITIAL(record_decl) = constr;
    }
  
*************** gg_find_field_in_struct(const tree base,
*** 695,703 ****
  
    if( !field_decl )
      {
!     cbl_internal_error("Somebody asked for the field %s.%s, which does not exist",
!           IDENTIFIER_POINTER(DECL_NAME(base)),
!           field_name);
      }
  
    return field_decl;
--- 778,795 ----
  
    if( !field_decl )
      {
!     const char *record_name = "<anonymous>";
!     tree record_identifier = TYPE_IDENTIFIER(rectype);
! 
!     if( record_identifier )
!       {
!       record_name = IDENTIFIER_POINTER(record_identifier);
!       }
! 
!     cbl_internal_error(
!       "Somebody asked for the field %s.%s, which does not exist",
!       record_name,
!       field_name);
      }
  
    return field_decl;
*************** gg_declare_variable(tree type_decl,
*** 798,832 ****
    // why -- where I didn't give the variables explicit names.  We remedy that
    // here:
  
!   static std::map<std::string, tree>seen;
  
    tree var_name = NULL_TREE;
    tree var_decl;
    // Assume that for an external reference we know what we want:
    char *unique_name = NULL;
    if( name )
      {
-     // We were provided a name
      unique_name = gg_unique_in_function(name, vs_scope);
      var_name = get_identifier(unique_name);
!     std::map<std::string, tree>::const_iterator it = seen.find(unique_name);
!     if( it != seen.end() )
        {
!       // We've seen this one before
!       var_decl = it->second;
!       if( already_defined )
          {
!         *already_defined = true;
!         return var_decl;
          }
        }
!     else
!       {
!       var_decl = build_decl(UNKNOWN_LOCATION,
!                             VAR_DECL,
!                             var_name,
!                             type_decl);
!       }
      }
    else
      {
--- 890,927 ----
    // why -- where I didn't give the variables explicit names.  We remedy that
    // here:
  
!   static std::unordered_map<std::string, tree>seen;
  
    tree var_name = NULL_TREE;
    tree var_decl;
    // Assume that for an external reference we know what we want:
    char *unique_name = NULL;
+ 
+   bool cache_decl = vs_scope == vs_weak || vs_scope == vs_common;
    if( name )
      {
      unique_name = gg_unique_in_function(name, vs_scope);
      var_name = get_identifier(unique_name);
! 
!     if( cache_decl )
        {
!       std::unordered_map<std::string, tree>::const_iterator it =
!         seen.find(unique_name);
! 
!       if( it != seen.end() )
          {
!         if( already_defined )
!           {
!           *already_defined = true;
!           }
!         return it->second;
          }
        }
! 
!     var_decl = build_decl(UNKNOWN_LOCATION,
!                           VAR_DECL,
!                           var_name,
!                           type_decl);
      }
    else
      {
*************** gg_declare_variable(tree type_decl,
*** 918,962 ****
    return var_decl;
    }
  
  class DECL_COUNTER
    {
    public:
      unsigned long total;
!     unsigned long artificial;
!     unsigned long addressable;
!     unsigned long art_addr;
  
      DECL_COUNTER()
        : total( 0 ),
!         artificial( 0 ),
!         addressable( 0 ),
!         art_addr( 0 )
        {
        }
  
      void
!     count( tree var_decl )
        {
        if( TREE_CODE( var_decl ) == VAR_DECL )
          {
          total += 1;
! 
!         bool is_artificial = DECL_ARTIFICIAL( var_decl );
!         bool is_addressable = TREE_ADDRESSABLE( var_decl );
! 
!         if( is_artificial )
!           {
!           artificial += 1;
!           }
! 
!         if( is_addressable )
!           {
!           addressable += 1;
!           }
! 
!         if( is_artificial && is_addressable )
            {
!           art_addr += 1;
            }
          }
        }
--- 1013,1078 ----
    return var_decl;
    }
  
+ bool var_decl_count = false;
+ 
  class DECL_COUNTER
    {
    public:
      unsigned long total;
!     unsigned long nlocal;
!     unsigned long nstatic;
!     unsigned long nfile_static;
!     unsigned long nweak;
!     unsigned long ncommon;
!     unsigned long nglobal;
!     unsigned long nextern;
  
      DECL_COUNTER()
        : total( 0 ),
!         nlocal( 0 ),
!         nstatic( 0 ),
!         nfile_static( 0 ),
!         nweak( 0 ),
!         ncommon( 0 ),
!         nglobal( 0 ),
!         nextern( 0 )
        {
        }
  
      void
!     count( tree var_decl, gg_variable_scope_t vs_scope )
        {
+       if( var_decl_count && getenv("VAR_DECL_COUNT") )
+         {
+         fprintf(stderr, "VAR_DECL_COUNT %lu", total+1);
+         fprintf(stderr, "\n");
+         }
        if( TREE_CODE( var_decl ) == VAR_DECL )
          {
          total += 1;
!         switch(vs_scope)
            {
!           case vs_stack:
!               nlocal += 1;
!             break;
!           case vs_static:
!               nstatic += 1;
!             break;
!           case vs_file_static:
!               nfile_static += 1;
!             break;
!           case vs_weak:
!               nweak += 1;
!             break;
!           case vs_common:
!               ncommon += 1;
!             break;
!           case vs_global:
!               nglobal += 1;
!             break;
!           case vs_extern:
!               nextern += 1;
!             break;
            }
          }
        }
*************** class DECL_COUNTER
*** 965,985 ****
        {
        if( getenv("VAR_DECL_COUNT") )
          {
!         fprintf( stderr, "decl_counter VAR_DECL    = %lu\n", total );
!         fprintf( stderr, "decl_counter ARTIFICIAL  = %lu\n", artificial );
!         fprintf( stderr, "decl_counter ADDRESSABLE = %lu\n", addressable );
!         fprintf( stderr, "decl_counter BOTH        = %lu\n", art_addr );
          }
        }
    };
!   
  static DECL_COUNTER decl_counter;
  
  tree
  gg_define_from_declaration(tree var_decl)
    {
-   decl_counter.count(var_decl);
- 
    // Append the var_decl to either the chain for the current function or for
    // the translation_unit, depending on the var_decl's context:
    gg_append_var_decl(var_decl);
--- 1081,1103 ----
        {
        if( getenv("VAR_DECL_COUNT") )
          {
!         fprintf( stderr, "decl_counter VAR_DECL    = %7lu\n", total );
!         fprintf( stderr, "             local       = %7lu\n", nlocal );
!         fprintf( stderr, "             static      = %7lu\n", nstatic );
!         fprintf( stderr, "             file_static = %7lu\n", nfile_static );
!         fprintf( stderr, "             weak        = %7lu\n", nweak );
!         fprintf( stderr, "             common      = %7lu\n", ncommon );
!         fprintf( stderr, "             global      = %7lu\n", nglobal );
!         fprintf( stderr, "             extern      = %7lu\n", nextern );
          }
        }
    };
! 
  static DECL_COUNTER decl_counter;
  
  tree
  gg_define_from_declaration(tree var_decl)
    {
    // Append the var_decl to either the chain for the current function or for
    // the translation_unit, depending on the var_decl's context:
    gg_append_var_decl(var_decl);
*************** gg_define_variable(tree type_decl)
*** 1004,1009 ****
--- 1122,1128 ----
    {
    tree var_decl = gg_declare_variable(type_decl);
    gg_define_from_declaration(var_decl);
+   decl_counter.count(var_decl, vs_stack);
    return var_decl;
    }
  
*************** gg_define_variable(tree type_decl, tree
*** 1015,1020 ****
--- 1134,1140 ----
                                        gg_cast(type_decl, initial_value),
                                        vs_stack);
    gg_define_from_declaration(var_decl);
+   decl_counter.count(var_decl, vs_stack);
    return var_decl;
    }
  
*************** gg_define_variable(tree type_decl, ssize
*** 1027,1032 ****
--- 1147,1153 ----
                                                           initial_value),
                                        vs_stack);
    gg_define_from_declaration(var_decl);
+   decl_counter.count(var_decl, vs_stack);
    return var_decl;
    }
  
*************** gg_define_variable(tree type_decl, gg_va
*** 1035,1040 ****
--- 1156,1162 ----
    {
    tree var_decl = gg_declare_variable(type_decl, NULL, NULL_TREE, vs_scope);
    gg_define_from_declaration(var_decl);
+   decl_counter.count(var_decl, vs_scope);
    return var_decl;
    }
  
*************** gg_define_variable( tree type_decl,
*** 1046,1051 ****
--- 1168,1174 ----
    {
    tree var_decl = gg_declare_variable(type_decl, var_name, initial_value, vs_scope);
    gg_define_from_declaration(var_decl);
+   decl_counter.count(var_decl, vs_scope);
    return var_decl;
    }
  
*************** gg_define_variable(tree type_decl, const
*** 1057,1062 ****
--- 1180,1186 ----
    if( !already_defined )
      {
      gg_define_from_declaration(var_decl);
+     decl_counter.count(var_decl, vs_scope);
      }
    return var_decl;
    }
*************** gg_get_address_of(const tree var_decl)
*** 1112,1118 ****
                          "ARRAY_TYPE");
      }
  
!   TREE_ADDRESSABLE(var_decl) = 1;
    TREE_USED(var_decl) = 1;
    return build_fold_addr_expr(var_decl);
    }
--- 1236,1250 ----
                          "ARRAY_TYPE");
      }
  
!   if( TREE_CODE(var_decl) == LABEL_DECL )
!     {
!     FORCED_LABEL(var_decl) = 1;
!     }
!   else
!     {
!     TREE_ADDRESSABLE(var_decl) = 1;
!     }
! 
    TREE_USED(var_decl) = 1;
    return build_fold_addr_expr(var_decl);
    }
*************** void
*** 1276,1292 ****
  gg_increment(tree var)
    {
    tree var_type = TREE_TYPE(var);
!   gg_assign(var, gg_add(var, build_int_cst_type(var_type, 1)));
    }
  
  void
  gg_decrement(tree var)
    {
    tree var_type = TREE_TYPE(var);
!   gg_assign(var,
!             gg_cast(var_type,
!                     gg_subtract(var,
!                                 build_int_cst_type(var_type, 1))));
    }
  
  tree
--- 1408,1499 ----
  gg_increment(tree var)
    {
    tree var_type = TREE_TYPE(var);
!   tree one;
! 
!   if( POINTER_TYPE_P(var_type) )
!     {
!     one = build_int_cst_type(SIZE_T, 1);
!     }
!   else if( SCALAR_FLOAT_TYPE_P(var_type)
!            || INTEGRAL_TYPE_P(var_type) )
!     {
!     one = build_one_cst(var_type);
!     }
!   else
!     {
!     cbl_internal_error("%s", "gg_increment() requires a numeric or pointer operand");
!     }
! 
!   gg_assign(var, gg_add(var, one));
!   }
! 
! void
! gg_increment2(tree &var)
!   {
!   tree var_type = TREE_TYPE(var);
!   tree one;
! 
!   if( POINTER_TYPE_P(var_type) )
!     {
!     one = build_int_cst_type(SIZE_T, 1);
!     }
!   else if( SCALAR_FLOAT_TYPE_P(var_type)
!            || INTEGRAL_TYPE_P(var_type) )
!     {
!     one = build_one_cst(var_type);
!     }
!   else
!     {
!     cbl_internal_error("%s", "gg_increment() requires a numeric or pointer operand");
!     }
! 
!   var = gg_add(var, one);
    }
  
  void
  gg_decrement(tree var)
    {
    tree var_type = TREE_TYPE(var);
!   tree one;
! 
!   if( POINTER_TYPE_P(var_type) )
!     {
!     one = build_int_cst_type(SIZE_T, 1);
!     }
!   else if( SCALAR_FLOAT_TYPE_P(var_type)
!            || INTEGRAL_TYPE_P(var_type) )
!     {
!     one = build_one_cst(var_type);
!     }
!   else
!     {
!     cbl_internal_error("%s", "gg_increment() requires a numeric or pointer operand");
!     }
! 
!   gg_assign(var, gg_subtract(var, one));
!   }
! 
! void
! gg_decrement2(tree &var)
!   {
!   tree var_type = TREE_TYPE(var);
!   tree one;
! 
!   if( POINTER_TYPE_P(var_type) )
!     {
!     one = build_int_cst_type(SIZE_T, 1);
!     }
!   else if( SCALAR_FLOAT_TYPE_P(var_type)
!            || INTEGRAL_TYPE_P(var_type) )
!     {
!     one = build_one_cst(var_type);
!     }
!   else
!     {
!     cbl_internal_error("%s", "gg_decrement2() requires a numeric or pointer operand");
!     }
! 
!   var = gg_subtract(var, one);
    }
  
  tree
*************** gg_abs(tree var)
*** 1308,1322 ****
    }
  
  static tree
! gg_get_larger_type(tree A, tree B)
    {
!   tree larger = TREE_TYPE(B);
!   if(    TREE_INT_CST_LOW(TYPE_SIZE(TREE_TYPE(A)))
!        > TREE_INT_CST_LOW(TYPE_SIZE(TREE_TYPE(B))) )
      {
!     larger = TREE_TYPE(A);
      }
!   return larger;
    }
  
  tree
--- 1515,1588 ----
    }
  
  static tree
! get_larger_type(tree A, tree B)
    {
!   tree type_A = TREE_TYPE(A);
!   tree type_B = TREE_TYPE(B);
! 
!   bool A_is_float = SCALAR_FLOAT_TYPE_P(type_A);
!   bool B_is_float = SCALAR_FLOAT_TYPE_P(type_B);
!   bool A_is_integer = INTEGRAL_TYPE_P(type_A);
!   bool B_is_integer = INTEGRAL_TYPE_P(type_B);
! 
!   if( !(A_is_float || A_is_integer)
!       || !(B_is_float || B_is_integer) )
      {
!     cbl_internal_error("%s", "get_larger_type() requires numeric operands");
      }
! 
!   if( !TYPE_SIZE(type_A)
!       || TREE_CODE(TYPE_SIZE(type_A)) != INTEGER_CST
!       || !TYPE_SIZE(type_B)
!       || TREE_CODE(TYPE_SIZE(type_B)) != INTEGER_CST )
!     {
!     cbl_internal_error("%s", "get_larger_type() requires fixed-size types");
!     }
! 
!   int size_comparison =
!     tree_int_cst_compare(TYPE_SIZE(type_A), TYPE_SIZE(type_B));
! 
!   tree larger_type = size_comparison < 0 ? type_B : type_A;
! 
!   if( A_is_float && B_is_float )
!     {
!     return larger_type;
!     }
! 
!   if( A_is_float )
!     {
!     return type_A;
!     }
! 
!   if( B_is_float )
!     {
!     return type_B;
!     }
! 
!   // Both operands are integers.
! 
!   if( TYPE_UNSIGNED(type_A) == TYPE_UNSIGNED(type_B) )
!     {
!     return larger_type;
!     }
! 
!   // For equal-size integers with mismatched signedness, use the signed
!   // operand's existing type.  This also makes the result independent of
!   // operand order.
!   if( size_comparison == 0 )
!     {
!     return TYPE_UNSIGNED(type_A) ? type_B : type_A;
!     }
! 
!   tree signed_larger_type = signed_type_for(larger_type);
! 
!   if( !signed_larger_type )
!     {
!     cbl_internal_error("%s",
!                        "get_larger_type() could not construct a signed type");
!     }
! 
!   return signed_larger_type;
    }
  
  tree
*************** gg_add(tree addend1, tree addend2)
*** 1342,1348 ****
      {
      // Ordinary addition.  Scale both operands to match the larger
      // type of the two operands.
!     tree larger_type = gg_get_larger_type(addend1, addend2);
      retval = build2( PLUS_EXPR,
                       larger_type,
                       gg_cast(larger_type, addend1),
--- 1608,1614 ----
      {
      // Ordinary addition.  Scale both operands to match the larger
      // type of the two operands.
!     tree larger_type = get_larger_type(addend1, addend2);
      retval = build2( PLUS_EXPR,
                       larger_type,
                       gg_cast(larger_type, addend1),
*************** gg_subtract(tree A, tree B)
*** 1364,1378 ****
      return gg_add(A, gg_negate(B));
      }
  
!   if( POINTER_TYPE_P(TREE_TYPE(A)) && POINTER_TYPE_P(TREE_TYPE(A)) )
      {
!     // We are subtracting two pointers, yielding a signed size_t
      return build2(POINTER_DIFF_EXPR, SSIZE_T, A, B);
      }
  
    // This is an ordinary subtraction. Scale everything to the larger_type
    // of the two operands.
!   tree larger_type = gg_get_larger_type(A, B);
    tree stmt = build2( MINUS_EXPR,
                        larger_type,
                        gg_cast(larger_type, A),
--- 1630,1646 ----
      return gg_add(A, gg_negate(B));
      }
  
!   if( POINTER_TYPE_P(TREE_TYPE(A)) && POINTER_TYPE_P(TREE_TYPE(B)) )
      {
!     // We are subtracting two pointers, yielding a signed size_t.  This is
!     // a byte difference.  This does not match C semantics; we are not dividing
!     // by the size of the pointed-to type.
      return build2(POINTER_DIFF_EXPR, SSIZE_T, A, B);
      }
  
    // This is an ordinary subtraction. Scale everything to the larger_type
    // of the two operands.
!   tree larger_type = get_larger_type(A, B);
    tree stmt = build2( MINUS_EXPR,
                        larger_type,
                        gg_cast(larger_type, A),
*************** gg_multiply(tree A, tree B)
*** 1385,1391 ****
    {
    // We will return the product of A and B, adjusting to
    // whichever is larger:
!   tree larger_type = gg_get_larger_type(A, B);
    return build2( MULT_EXPR, larger_type, gg_cast(larger_type, A), gg_cast(larger_type, B) );
    }
  
--- 1653,1659 ----
    {
    // We will return the product of A and B, adjusting to
    // whichever is larger:
!   tree larger_type = get_larger_type(A, B);
    return build2( MULT_EXPR, larger_type, gg_cast(larger_type, A), gg_cast(larger_type, B) );
    }
  
*************** tree
*** 1393,1399 ****
  gg_real_divide(tree A, tree B)
    {
    // This floating point division:
!   tree larger_type = gg_get_larger_type(A, B);
    return build2( RDIV_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
--- 1661,1668 ----
  gg_real_divide(tree A, tree B)
    {
    // This floating point division:
!   tree larger_type = get_larger_type(A, B);
!   gcc_assert( SCALAR_FLOAT_TYPE_P(larger_type) );
    return build2( RDIV_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
*************** tree
*** 1401,1407 ****
  gg_divide(tree A, tree B)
    {
    // This is the equivalent of C integer divide
!   tree larger_type = gg_get_larger_type(A, B);
    return build2( TRUNC_DIV_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
--- 1670,1677 ----
  gg_divide(tree A, tree B)
    {
    // This is the equivalent of C integer divide
!   tree larger_type = get_larger_type(A, B);
!   gcc_assert( INTEGRAL_TYPE_P(larger_type) );
    return build2( TRUNC_DIV_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
*************** tree
*** 1409,1415 ****
  gg_mod(tree A, tree B)
    {
    // This is the equivalent of C  A % B
!   tree larger_type = gg_get_larger_type(A, B);
    return build2( TRUNC_MOD_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
--- 1679,1686 ----
  gg_mod(tree A, tree B)
    {
    // This is the equivalent of C  A % B
!   tree larger_type = get_larger_type(A, B);
!   gcc_assert( INTEGRAL_TYPE_P(larger_type) );
    return build2( TRUNC_MOD_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
*************** tree
*** 1431,1437 ****
  gg_bitwise_or(tree A, tree B)
    {
    // This is C equivalent to A | B
!   tree larger_type = gg_get_larger_type(A, B);
    return build2( BIT_IOR_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
--- 1702,1709 ----
  gg_bitwise_or(tree A, tree B)
    {
    // This is C equivalent to A | B
!   tree larger_type = get_larger_type(A, B);
!   gcc_assert( INTEGRAL_TYPE_P(larger_type) );
    return build2( BIT_IOR_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
*************** tree
*** 1439,1445 ****
  gg_bitwise_xor(tree A, tree B)
    {
    // This is C equivalent to A ^ B
!   tree larger_type = gg_get_larger_type(A, B);
    return build2( BIT_XOR_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
--- 1711,1718 ----
  gg_bitwise_xor(tree A, tree B)
    {
    // This is C equivalent to A ^ B
!   tree larger_type = get_larger_type(A, B);
!   gcc_assert( INTEGRAL_TYPE_P(larger_type) );
    return build2( BIT_XOR_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
*************** tree
*** 1447,1461 ****
  gg_bitwise_and(tree A, tree B)
    {
    // This is C equivalent to A & B
!   tree larger_type = gg_get_larger_type(A, B);
    return build2( BIT_AND_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
  tree
! gg_bswap (tree var)
    {
!   location_t loc = UNKNOWN_LOCATION;
!   tree type = TREE_TYPE (var);
    tree size = TYPE_SIZE_UNIT (type);
  
    gcc_assert (tree_fits_uhwi_p (size));
--- 1720,1736 ----
  gg_bitwise_and(tree A, tree B)
    {
    // This is C equivalent to A & B
!   tree larger_type = get_larger_type(A, B);
!   gcc_assert( INTEGRAL_TYPE_P(larger_type) );
    return build2( BIT_AND_EXPR, larger_type, gg_cast(larger_type,A), gg_cast(larger_type,B));
    }
  
  tree
! gg_bswap (tree value)
    {
!   tree type = TREE_TYPE(value);
!   gcc_assert(type);
!   gcc_assert(INTEGRAL_TYPE_P(type));
    tree size = TYPE_SIZE_UNIT (type);
  
    gcc_assert (tree_fits_uhwi_p (size));
*************** gg_bswap (tree var)
*** 1468,1474 ****
    switch (size_in_bytes)
      {
      case 1:
!       return var;
  
      case 2:
        fncode = BUILT_IN_BSWAP16;
--- 1743,1749 ----
    switch (size_in_bytes)
      {
      case 1:
!       return value;
  
      case 2:
        fncode = BUILT_IN_BSWAP16;
*************** gg_bswap (tree var)
*** 1496,1502 ****
        gcc_unreachable ();
      }
  
!   tree arg = fold_convert_loc (loc, unsigned_type, var);
  
    tree swapped =
      build_call_expr_loc (loc,
--- 1771,1778 ----
        gcc_unreachable ();
      }
  
!   location_t loc = UNKNOWN_LOCATION;
!   tree arg = fold_convert_loc (loc, unsigned_type, value);
  
    tree swapped =
      build_call_expr_loc (loc,
*************** gg_build_relational_expression(tree oper
*** 1543,1548 ****
--- 1819,1891 ----
    }
  
  tree
+ gg_logical_eq(tree a, tree b)
+   {
+   return gg_build_relational_expression(a, eq_op, b);
+   }
+ tree
+ gg_logical_ne(tree a, tree b)
+   {
+   return gg_build_relational_expression(a, ne_op, b);
+   }
+ tree
+ gg_logical_lt(tree a, tree b)
+   {
+   return gg_build_relational_expression(a, lt_op, b);
+   }
+ tree
+ gg_logical_gt(tree a, tree b)
+   {
+   return gg_build_relational_expression(a, gt_op, b);
+   }
+ tree
+ gg_logical_le(tree a, tree b)
+   {
+   return gg_build_relational_expression(a, le_op, b);
+   }
+ tree
+ gg_logical_ge(tree a, tree b)
+   {
+   return gg_build_relational_expression(a, ge_op, b);
+   }
+ tree
+ gg_logical_and(tree a, tree b)
+   {
+   return gg_build_logical_expression(a, and_op, b);
+   }
+ tree
+ gg_logical_or(tree a, tree b)
+   {
+   return gg_build_logical_expression(a, or_op, b);
+   }
+ tree
+ gg_logical_xor(tree a, tree b)
+   {
+   return gg_build_logical_expression(a, xor_op, b);
+   }
+ tree
+ gg_logical_not(tree b)
+   {
+   return gg_build_logical_expression(NULL_TREE, not_op, b);
+   }
+ tree
+ if_condition(tree cond, tree expr_if_true, tree expr_if_false, tree type)
+   {
+   return build3(COND_EXPR,
+                 type,
+                 cond,
+                 expr_if_true,
+                 expr_if_false);
+   }
+ 
+ #define LOGICAL_OKAY(a)                                      \
+         ( (a) != NULL_TREE                                  \
+           && ( truth_value_p(TREE_CODE(a))                  \
+                || ( TREE_TYPE(a) != NULL_TREE               \
+                     && TREE_CODE(TREE_TYPE(a))               \
+                          == BOOLEAN_TYPE ) ) )
+ 
+ tree
  gg_build_logical_expression(tree operand_a,
                              enum logop_t op,
                              tree operand_b)
*************** gg_build_logical_expression(tree operand
*** 1552,1557 ****
--- 1895,1901 ----
    switch(op)
      {
      case and_op:
+       gcc_assert( LOGICAL_OKAY(operand_a) && LOGICAL_OKAY(operand_b) );
        logical_op = TRUTH_ANDIF_EXPR;
        logical_expression = build2(logical_op,
                                    boolean_type_node,
*************** gg_build_logical_expression(tree operand
*** 1560,1565 ****
--- 1904,1910 ----
        break;
  
      case or_op:
+       gcc_assert( LOGICAL_OKAY(operand_a) && LOGICAL_OKAY(operand_b) );
        logical_op = TRUTH_ORIF_EXPR;
        logical_expression = build2(logical_op,
                                    boolean_type_node,
*************** gg_build_logical_expression(tree operand
*** 1568,1573 ****
--- 1913,1919 ----
        break;
  
      case not_op:
+       gcc_assert( LOGICAL_OKAY(operand_b) );
        logical_op = TRUTH_NOT_EXPR;
        logical_expression = build1(logical_op,
                                    boolean_type_node,
*************** gg_build_logical_expression(tree operand
*** 1575,1580 ****
--- 1921,1927 ----
        break;
  
      case xor_op:
+       gcc_assert( LOGICAL_OKAY(operand_a) && LOGICAL_OKAY(operand_b) );
        logical_op = TRUTH_XOR_EXPR;
        logical_expression = build2(logical_op,
                                    boolean_type_node,
*************** gg_build_logical_expression(tree operand
*** 1585,1590 ****
--- 1932,1938 ----
      case xnor_op:
      case true_op:
      case false_op:
+       gcc_unreachable();
        // This is handled elsewhere
        break;
      }
*************** gg_create_goto_pair(tree *goto_expr,
*** 1618,1628 ****
                                    gg_create_assembler_name(psz),
                                    void_type_node);
    DECL_CONTEXT(label_decl) = current_function->function_decl;
    TREE_USED(label_decl) = 1;
!   DECL_EXTERNAL(label_decl) = 1;
!   TREE_PUBLIC(label_decl) = 1;
!   TREE_ADDRESSABLE(label_decl) = 1;
!   TREE_STATIC(label_decl) = 1;
  
    *goto_expr  = build1(GOTO_EXPR, void_type_node, label_decl);
    *label_expr = build1(LABEL_EXPR, void_type_node, label_decl);
--- 1966,1979 ----
                                    gg_create_assembler_name(psz),
                                    void_type_node);
    DECL_CONTEXT(label_decl) = current_function->function_decl;
+   FORCED_LABEL(label_decl) = 1;
    TREE_USED(label_decl) = 1;
! 
!   // These have been commented out as part of a code review.  I might be
!   // counting on them so that GDB-COBOL works.  We'll have to see.
!   //// DECL_EXTERNAL(label_decl) = 1;
!   //// TREE_PUBLIC(label_decl) = 1;
!   //// TREE_STATIC(label_decl) = 1;
  
    *goto_expr  = build1(GOTO_EXPR, void_type_node, label_decl);
    *label_expr = build1(LABEL_EXPR, void_type_node, label_decl);
*************** gg_goto(tree var_decl_pointer)
*** 1744,1828 ****
    }
  
  void
! gg_while(   tree operand_a,
!             enum relop_t op,
!             tree operand_b)
    {
!   /*
!   See demonstration_while_if for the canonical demonstration
! 
!   You use it like this:
! 
!       WHILE
!           ....
!           WEND
! 
!   We do the C construct:
! 
!       while( a OP b )
!           {
!           <block>
!           }
! 
!   like this:
! 
!       goto test
!       top:
!           <block>
!       test:
!           if( a OP b)
!               goto top
!           else
!               goto leave:
!       leave:
  
!   */
  
!   tree goto_top;
!   tree label_top;
  
!   tree goto_test;
!   tree label_test;
  
!   tree goto_leave;
!   tree label_leave;
  
!   gg_create_goto_pair(&goto_top,   &label_top);
!   gg_create_goto_pair(&goto_test,  &label_test);
!   gg_create_goto_pair(&goto_leave, &label_leave);
  
!   tree statement_block = make_node(STATEMENT_LIST);
!   TREE_TYPE(statement_block) = void_type_node;
  
!   // During development, I tried appending a statement_list to a statement_list,
!   // intending it to be collected together that way.  But it was too smart for me;
!   // it just unwound the second list and tacked it onto the end of the first.
  
!   // So I used a BIND_EXPR to collect them together.  This isn't a new context, so I don't
!   // point operand[0] at a string of vars, nor operand[2] at a block.
!   tree bind_expr = build3(   BIND_EXPR,
!                              void_type_node,
!                              NULL_TREE,
!                              statement_block,
!                              NULL_TREE);
  
!   // With the pairs created and the bind_expr sorted out, we can now put
!   // together our while construction:
  
!   gg_append_statement(goto_test);
!   gg_append_statement(label_top);
!   gg_append_statement(bind_expr);
!   gg_append_statement(label_test);
!   IF( operand_a, op, operand_b )
!   gg_append_statement(goto_top);
!   ELSE
!   gg_append_statement(goto_leave);
!   ENDIF
!   gg_append_statement(label_leave);
  
!   // And here's the statement_list for the programmer to fill
!   // and end with a WEND
!   current_function->statement_list_stack.push_back(statement_block);
    }
  
  void
--- 2095,2155 ----
    }
  
  void
! gg_while(tree operand_a,
!          enum relop_t op,
!          tree operand_b)
    {
!   /* This is designed to be used something like this:
!       WHILE( this, lt_op, that)
!         {
!         ...
!         gg_increment(this);
!         }
!       WEND    */
  
!   gcc_assert(operand_a);
!   gcc_assert(operand_b);
  
!   if( TREE_TYPE(operand_a) != TREE_TYPE(operand_b) )
!     {
!     cbl_internal_error("%s",
!       "gg_while() operands have different TREE_TYPEs");
!     }
  
!   location_t loc = gg_token_location();
  
!   tree condition =
!     gg_build_relational_expression(operand_a,
!                                    op,
!                                    operand_b);
  
!   // EXIT_EXPR exits when its operand is true, so invert the while condition.
!   tree exit_condition =
!     invert_truthvalue_loc(loc, condition);
  
!   tree exit_expr =
!     build1_loc(loc,
!                EXIT_EXPR,
!                void_type_node,
!                exit_condition);
  
!   tree loop_body = alloc_stmt_list();
  
!   tree loop_expr =
!     build1_loc(loc,
!                LOOP_EXPR,
!                void_type_node,
!                loop_body);
  
!   // Append the loop to the enclosing statement list before making its body
!   // the active statement list.
!   gg_append_statement(loop_expr);
  
!   current_function->statement_list_stack.push_back(loop_body);
  
!   // This must be the first statement, producing while rather than do-while
!   // behavior.
!   gg_append_statement(exit_expr);
    }
  
  void
*************** gg_create_true_false_statement_lists(tre
*** 1832,1847 ****
    // the other for false.  Put them on the stack, ready for the first
    // pop on ELSE and the second pop on ENDIF:
  
!   tree if_true_statement_list = make_node(STATEMENT_LIST);
!   TREE_TYPE(if_true_statement_list) = void_type_node;
!   tree if_false_statement_list = make_node(STATEMENT_LIST);
!   TREE_TYPE(if_false_statement_list) = void_type_node;
  
!   tree conditional = build3(  COND_EXPR,
!                               boolean_type_node,
!                               relational_expression,
!                               if_true_statement_list,
!                               if_false_statement_list);
  
    // We need to put our conditional onto the current_stack:
    gg_append_statement(conditional);
--- 2159,2175 ----
    // the other for false.  Put them on the stack, ready for the first
    // pop on ELSE and the second pop on ENDIF:
  
!   tree if_true_statement_list  = alloc_stmt_list();
!   tree if_false_statement_list = alloc_stmt_list();
  
!   tree conditional = build3(COND_EXPR,
!                             void_type_node,
!                             relational_expression,
!                             if_true_statement_list,
!                             if_false_statement_list);
! 
!   // Both branches are populated after conditional is constructed.
!   TREE_SIDE_EFFECTS(conditional) = 1;
  
    // We need to put our conditional onto the current_stack:
    gg_append_statement(conditional);
*************** gg_printf(const char *format_string, ...
*** 1960,1966 ****
      {
      if(nargs >= ARG_LIMIT)
        {
!       cbl_internal_error("You *must* be joking");
        }
  
      if( TREE_CODE(arg) >= NUM_TREE_CODES)
--- 2288,2294 ----
      {
      if(nargs >= ARG_LIMIT)
        {
!       cbl_internal_error("%s", "You *must* be joking");
        }
  
      if( TREE_CODE(arg) >= NUM_TREE_CODES)
*************** gg_printf(const char *format_string, ...
*** 1993,2043 ****
  tree
  gg_fprintf(tree fd, int nargs, const char *format_string, ...)
    {
!   tree retval = gg_define_variable(INT);
!   gg_push_context();
!   tree buffer = gg_define_variable(CHAR_P);
!   gg_assign(buffer, gg_cast(CHAR_P, gg_malloc(1024)));
  
!   tree args[ARG_LIMIT];
  
!   // Set up a call to sprintf:
    int argc = 0;
!   args[argc++] = buffer;
!   args[argc++] = build_string_literal(strlen(format_string)+1, format_string);
  
    va_list ap;
    va_start(ap, format_string);
!   tree arg = va_arg(ap, tree);
    int narg = 0;
!   while(narg++ < nargs)
      {
!     if(argc >= ARG_LIMIT)
        {
!       cbl_internal_error("You *must* be joking");
        }
  
      args[argc++] = arg;
-     arg = va_arg(ap, tree);
      }
-   va_end (ap);
  
    static tree function = NULL_TREE;
  
    if( !function )
      {
!     function = gg_get_function_address(INT, "sprintf");
      }
  
!   tree stmt = build_call_array_loc (gg_token_location(),
!                                     INT,
!                                     function,
!                                     argc,
!                                     args);
!   gg_assign(retval, stmt);
!   gg_write(fd, buffer, gg_strlen(buffer));
  
-   gg_free(buffer);
-   gg_pop_context();
    return retval;
    }
  
--- 2321,2410 ----
  tree
  gg_fprintf(tree fd, int nargs, const char *format_string, ...)
    {
!   if( !fd )
!     {
!     cbl_internal_error("%s", "gg_fprintf() was given a null file descriptor");
!     }
  
!   if( TREE_TYPE(fd) != INT )
!     {
!     cbl_internal_error("%s", "gg_fprintf() was given a non-INT file descriptor");
!     }
  
!   if( !format_string )
!     {
!     cbl_internal_error("%s", "gg_fprintf() was given a null format string");
!     }
! 
!   if( nargs < 0 || nargs > ARG_LIMIT - 2 )
!     {
!     cbl_internal_error("%<gg_fprintf()%> was given %d arguments; maximum is %d",
!                        nargs,
!                        ARG_LIMIT - 2);
!     }
! 
!   tree args[ARG_LIMIT];
    int argc = 0;
! 
!   args[argc++] = fd;
!   args[argc++] =
!     build_string_literal(strlen(format_string) + 1, format_string);
  
    va_list ap;
    va_start(ap, format_string);
! 
    int narg = 0;
!   for( ; narg < nargs; narg += 1 )
      {
!     tree arg = va_arg(ap, tree);
! 
!     if( !arg )
        {
!       break;
        }
  
      args[argc++] = arg;
      }
  
+   va_end(ap);
+ 
+   if( narg != nargs )
+     {
+     cbl_internal_error("%<gg_fprintf()%> argument %d is %<NULL_TREE%>",
+                        narg + 1);
+     }
    static tree function = NULL_TREE;
  
    if( !function )
      {
!     tree arg_types[2] =
!       {
!       INT,
!       TREE_TYPE(args[1])
!       };
! 
!     tree function_type =
!       build_varargs_function_type_array(INT, 2, arg_types);
! 
!     tree function_decl = build_fn_decl("dprintf", function_type);
!     DECL_EXTERNAL(function_decl) = 1;
! 
!     function = build1(ADDR_EXPR,
!                       build_pointer_type(function_type),
!                       function_decl);
      }
  
!   tree call = build_call_array_loc(gg_token_location(),
!                                    INT,
!                                    function,
!                                    argc,
!                                    args);
! 
!   // Eliminating this VAR_DECL means changing the GCOBOL_TRACE macro.  It is
!   // used only for debugging, so I have chosen to just live with it as is.
!   tree retval = gg_define_variable(INT);
!   gg_assign(retval, call);
  
    return retval;
    }
  
*************** gg_memmove(tree dest, const tree src, tr
*** 2128,2153 ****
    gg_append_statement(the_call);
    }
  
- tree
- gg_memdup(tree data, tree length)
-   {
-   // Duplicates data; gg_free should eventually be called
-   tree retval = gg_define_variable(CHAR_P);
-   gg_assign(retval, gg_malloc(length));
-   gg_memcpy(retval, data, length);
-   return retval;
-   }
- 
- tree
- gg_memdup(tree data, size_t length)
-   {
-   // Duplicates data; gg_free should eventually be called
-   tree retval = gg_define_variable(CHAR_P);
-   gg_assign(retval, gg_malloc(length));
-   gg_memcpy(retval, data, build_int_cst_type(SIZE_T, length));
-   return retval;
-   }
- 
  void
  gg_strcpy(tree dest, tree src)
    {
--- 2495,2500 ----
*************** gg_strncmp(tree char_star_A, tree char_s
*** 2209,2267 ****
  void
  gg_return(tree operand)
    {
!   tree stmt;
! 
!   if( !gg_trans_unit.function_stack.size() )
      {
!     // I put this in to cope with the problem of two END PROGRAM statements, which
!     // should be a syntax error but, as of 2021-02-24, is ignored by GnuCOBOL and
!     // by our parser.
!     return ;
      }
  
!   // We have to pop ourselves off of the module_name_stack:
    gg_call(VOID,
            "__gg__module_name_pop",
            NULL_TREE);
  
!   if( !operand || !DECL_RESULT(current_function->function_decl) )
!     {
!     // When there is no operand, or if the function result is void, then
!     // we just generate a return_expr.
!     stmt = build1_loc(gg_token_location(), RETURN_EXPR, void_type_node, NULL_TREE);
!     }
!   else
      {
!     // Life is a wee bit more complicated, because we want to return the operand
!     tree function_type = TREE_TYPE(DECL_RESULT(current_function->function_decl));
!     tree modify = build2(   MODIFY_EXPR,
!                             function_type,
!                             DECL_RESULT(current_function->function_decl),
!                             gg_cast(function_type, operand));
!     stmt = build1_loc(gg_token_location(), RETURN_EXPR, void_type_node, modify);
      }
!   gg_append_statement(stmt);
    }
  
  void
! chain_parameter_to_function(tree function_decl, const tree param_type,  const char *name)
    {
!   tree parm = build_decl (gg_token_location(),
!                           PARM_DECL,
!                           get_identifier (name),
!                           param_type);
!   DECL_CONTEXT(parm) = function_decl;
!   TREE_USED(parm) = 1;
!   DECL_INITIAL(parm) = param_type;
  
!   if( DECL_ARGUMENTS(function_decl) )
      {
!     chainon(DECL_ARGUMENTS(function_decl),parm);
      }
!   else
      {
!     DECL_ARGUMENTS(function_decl) = parm;
      }
    }
  
  /*  There are five ways that we use function_decls:
--- 2556,2657 ----
  void
  gg_return(tree operand)
    {
!   if( gg_trans_unit.function_stack.empty() )
      {
!     return;
      }
  
!   location_t location = gg_token_location();
!   tree function_decl = current_function->function_decl;
!   tree result_decl = DECL_RESULT(function_decl);
!   tree return_operand = NULL_TREE;
! 
!   gcc_assert(result_decl);
! 
    gg_call(VOID,
            "__gg__module_name_pop",
            NULL_TREE);
  
!   if( operand )
      {
!     tree result_type = TREE_TYPE(result_decl);
! 
!     gcc_assert(!VOID_TYPE_P(result_type));
! 
!     return_operand =
!       build2_loc(location,
!                  MODIFY_EXPR,
!                  result_type,
!                  result_decl,
!                  gg_cast(result_type, operand));
      }
! 
!   gg_append_statement(
!     build1_loc(location,
!                RETURN_EXPR,
!                void_type_node,
!                return_operand));
    }
  
  void
! chain_parameter_to_function(tree function_decl,
!                             const tree param_type,
!                             const char *name)
    {
!   if(    !function_decl
!       || function_decl == error_mark_node
!       || TREE_CODE(function_decl) != FUNCTION_DECL )
!     {
!     if( function_decl )
!       {
!       debug_tree(function_decl);
!       }
  
!     cbl_internal_error("%s",
!       "chain_parameter_to_function() was not given a FUNCTION_DECL.");
!     }
! 
!   if(    !param_type
!       || param_type == error_mark_node
!       || !TYPE_P(param_type) )
      {
!     if( param_type )
!       {
!       debug_tree(param_type);
!       }
! 
!     cbl_internal_error("%s",
!       "chain_parameter_to_function() was not given a valid parameter type.");
      }
! 
!   if( VOID_TYPE_P(param_type) )
      {
!     cbl_internal_error("%s",
!       "chain_parameter_to_function() was given a parameter of type void.");
!     }
! 
!   if( !name || !*name )
!     {
!     cbl_internal_error("%s",
!       "chain_parameter_to_function() was not given a parameter name.");
      }
+ 
+   tree parm = build_decl(gg_token_location(),
+                          PARM_DECL,
+                          get_identifier(name),
+                          param_type);
+ 
+   DECL_CONTEXT(parm) = function_decl;
+ 
+   // TREE_TYPE is the parameter's declared type.  DECL_ARG_TYPE is the
+   // type in which the parameter is passed to the function.  gcobol does
+   // not apply C's default argument promotions here, so they are identical.
+   DECL_ARG_TYPE(parm) = param_type;
+ 
+   TREE_USED(parm) = 1;
+ 
+   DECL_ARGUMENTS(function_decl) =
+     chainon(DECL_ARGUMENTS(function_decl), parm);
    }
  
  /*  There are five ways that we use function_decls:
*************** external defined elsewhere  |  X
*** 2284,2325 ****
  
  */
  
- 
- static std::unordered_map<std::string, tree> map_of_function_decls;
- 
- static
- std::string function_decl_key(const char *funcname, tree fndecl_type)
-   {
-   std::string retval;
-   retval += funcname;
-   retval += gg_show_type(TREE_TYPE(fndecl_type));
-   return retval;
-   }
- 
- tree
- gg_peek_fn_decl(const char *funcname, tree fndecl_type)
-   {
-   // When funcname is found in map_of_function_decls, this routine returns
-   // the type of the return value of that function decl.
- 
-   tree retval = NULL_TREE;
-   std::string key = function_decl_key(funcname, fndecl_type);
-   std::unordered_map<std::string, tree>::const_iterator it =
-           map_of_function_decls.find(key);
-   if( it != map_of_function_decls.end() )
-     {
-     // This function_decl has already been defined.
-     retval = TREE_TYPE(TREE_TYPE(it->second));
-     }
-   return retval;
-   }
- 
  tree
  gg_build_fn_decl(const char *funcname, tree fndecl_type)
    {
    tree function_decl;
  
!   std::string key = function_decl_key(funcname, fndecl_type);
    std::unordered_map<std::string, tree>::const_iterator it =
            map_of_function_decls.find(key);
    if( it != map_of_function_decls.end() )
--- 2674,2686 ----
  
  */
  
  tree
  gg_build_fn_decl(const char *funcname, tree fndecl_type)
    {
    tree function_decl;
+   static std::unordered_map<std::string, tree> map_of_function_decls;
  
!   std::string key = funcname;
    std::unordered_map<std::string, tree>::const_iterator it =
            map_of_function_decls.find(key);
    if( it != map_of_function_decls.end() )
*************** gg_define_function( tree return_type,
*** 2392,2398 ****
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
        cbl_internal_error("You forgot to put a %<NULL_TREE%> at the end of a "
!                   "%<gg_define_function()%> again");
        }
  
      const char *name = va_arg(params, const char *);
--- 2753,2759 ----
        // Warning:  This test is not completely reliable, because a garbage
        // byte could have a valid TREE_CODE.  But it does help.
        cbl_internal_error("You forgot to put a %<NULL_TREE%> at the end of a "
!                          "%<gg_define_function()%> again");
        }
  
      const char *name = va_arg(params, const char *);
*************** gg_define_function( tree return_type,
*** 2400,2408 ****
      types[nparams] = var_type;
      names[nparams] = name;
      nparams += 1;
!     if(nparams > ARG_LIMIT)
        {
!       cbl_internal_error("%d parameters? Really? Are you insane?", ARG_LIMIT+1);
        }
      }
    va_end(params);
--- 2761,2770 ----
      types[nparams] = var_type;
      names[nparams] = name;
      nparams += 1;
!     if(nparams >= ARG_LIMIT)
        {
!       cbl_internal_error("%d parameters? Really? Are you insane?",
!                          ARG_LIMIT+1);
        }
      }
    va_end(params);
*************** gg_define_function( tree return_type,
*** 2428,2433 ****
--- 2790,2797 ----
  
    // Create the FUNCTION_DECL for that FUNCTION_TYPE
    tree function_decl = gg_build_fn_decl (funcname, fndecl_type);
+   DECL_NAME(function_decl) = get_identifier(unmangled_name);
+   SET_DECL_ASSEMBLER_NAME(function_decl, get_identifier(funcname));
  
    // This code makes COBOL nested programs actual visible on the
    // source code "trans_unit_decl" level, but with non-public "static"
*************** gg_define_function( tree return_type,
*** 2492,2498 ****
    struct gg_function_t new_function = {};
    new_function.context_count = 0;
    new_function.function_decl = function_decl;
!   new_function.our_name = IDENTIFIER_POINTER(DECL_NAME(function_decl));
    new_function.our_unmangled_name = xstrdup(unmangled_name);
    new_function.function_address = gg_get_address_of(function_decl);
  
--- 2856,2862 ----
    struct gg_function_t new_function = {};
    new_function.context_count = 0;
    new_function.function_decl = function_decl;
!   new_function.our_name = IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(function_decl));
    new_function.our_unmangled_name = xstrdup(unmangled_name);
    new_function.function_address = gg_get_address_of(function_decl);
  
*************** gg_modify_function_type(tree function_de
*** 2521,2628 ****
    DECL_RESULT (function_decl) = resdecl;
    }
  
- tree
- gg_get_function_decl(tree return_type, const char *funcname, ...)
-   {
-   // This very similar routine creates and returns the function_decl
- 
-   // It was designed for implementing nested functions, in particular
-   // in cases of forward references. Thus, you need to have the function_decl
-   // in order to create the call_expr, even though you don't yet have a body,
-   // and you aren't ready to create it at this time.
- 
-   int nparams = 0;
- 
-   tree types[ARG_LIMIT];
-   const char *names[ARG_LIMIT];
- 
-   va_list params;
-   va_start(params,funcname);
-   for(;;)
-     {
-     tree var_type = va_arg(params, tree);
-     if( !var_type )
-       {
-       break;
-       }
- 
-     if( TREE_CODE(var_type) >= NUM_TREE_CODES)
-       {
-       // Warning:  This test is not completely reliable, because a garbage
-       // byte could have a valid TREE_CODE.  But it does help.
-       cbl_internal_error("You forgot to put a %<NULL_TREE%> at the end of a "
-             "%<gg_define_function()%> again");
-       }
- 
-     const char *name = va_arg(params, const char *);
- 
-     types[nparams] = var_type;
-     names[nparams] = name;
-     nparams += 1;
-     if(nparams > ARG_LIMIT)
-       {
-       cbl_internal_error("%d parameters? Really? Are you insane?",
-                   ARG_LIMIT+1);
-       }
-     }
-   va_end(params);
- 
-   // Create the FUNCTION_TYPE for that array:
-   tree fndecl_type = build_varargs_function_type_array( return_type,
-                      nparams,
-                      types);
- 
-   // Create the FUNCTION_DECL for that FUNCTION_TYPE
-   tree function_decl = build_fn_decl (funcname, fndecl_type);
- 
-   // Some of this stuff is magical, and is based on compiling C programs
-   // and just mimicking the results.
-   TREE_ADDRESSABLE(function_decl) = 1;
-   TREE_STATIC(function_decl) = 1;
-   DECL_EXTERNAL (function_decl) = 0;
-   DECL_PRESERVE_P (function_decl) = 0;
-   DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(function_decl) = 1;
-   DECL_ARTIFICIAL(function_decl) = 0;
-   TREE_NOTHROW(function_decl) = 0;
-   TREE_USED(function_decl) = 1;
- 
-   if( gg_trans_unit.function_stack.size() == 0 )
-     {
-     // gg_trans_unit.function_stack is empty, so our context is
-     // the compilation module, and we need to be public:
-     DECL_CONTEXT (function_decl) = gg_trans_unit.trans_unit_decl;
-     TREE_PUBLIC(function_decl) = 1;
-     }
-   else
-     {
-     // The stack has something in it, so we are building a nested function.
-     // Make the current function our context
-     DECL_CONTEXT (function_decl) = current_function->function_decl;
-     TREE_PUBLIC(function_decl) = 0;
-     DECL_STATIC_CHAIN(function_decl) = 1;
-     }
- 
-   // Chain the names onto the variables list:
-   for(int i=0; i<nparams; i++)
-     {
-     chain_parameter_to_function(function_decl, types[i], names[i]);
-     }
- 
-   // Establish the RESULT_DECL for the function:
-   tree resdecl = build_decl (gg_token_location(), RESULT_DECL, NULL_TREE, return_type);
-   DECL_CONTEXT (resdecl) = function_decl;
-   DECL_RESULT (function_decl) = resdecl;
- 
-   // The function_decl has a .function member, a pointer to struct_function.
-   // This is quietly, almost invisibly, extremely important.  You need to
-   // call this routine after DECL_RESULT has been established:
-   allocate_struct_function(function_decl, false);
- 
-   // It will be the caller's responsibility to push this function_decl onto
-   // the stack at the appropriate time, and create the appropriate context.
-   return function_decl;
-   }
- 
  void
  gg_finalize_function()
    {
--- 2885,2890 ----
*************** gg_finalize_function()
*** 2667,2673 ****
        END PROGRAM B.
  
      When we encounter the first call to getcwd, we have no clue as to the
!     type of the return value, so we assume it is COBOL_FUNCTION_RETURN_TYPE
  
      When we encounter the second call, we learn that it returns CHAR_P. But
      an attempt to change the return type of the function_decl will result
--- 2929,2935 ----
        END PROGRAM B.
  
      When we encounter the first call to getcwd, we have no clue as to the
!     type of the return value, so we assume it is COBOL_FUNCTION_RETURN_64
  
      When we encounter the second call, we learn that it returns CHAR_P. But
      an attempt to change the return type of the function_decl will result
*************** gg_finalize_function()
*** 2683,2689 ****
  
    if( gg_trans_unit.function_stack.back().context_count )
      {
!     cbl_internal_error("Residual context count");
      }
  
    gg_trans_unit.function_stack.pop_back();
--- 2945,2951 ----
  
    if( gg_trans_unit.function_stack.back().context_count )
      {
!     cbl_internal_error("%s", "Residual context count");
      }
  
    gg_trans_unit.function_stack.pop_back();
*************** gg_leaving_the_source_code_file()
*** 2707,2790 ****
  void
  gg_push_context()
    {
!   // Sit back, relax, prepare to be amazed.
! 
!   // functions need a context in which they build variables and whatnot.
!   // they also need to be able to create subcontexts.
! 
!   // Functions have an DECL_INITIAL member that points to the first block.  The
!   // first block has a BLOCK_VARS member that points to the first of a chain
!   // of var_decl entries.  The first block has a BLOCK_SUBBLOCKS member that
!   // points to the block of the first subcontext.
! 
!   // Functions have a DECL_SAVED_TREE member that points to the first bind_expr
!   // That first bind_expr has a BIND_EXPR_BLOCK that points back to the first block
!   //                      has a BIND_EXPR_VARS that points back to the first block's first var_decl
!   //                      has a BIND_EXPR_BODY that points to the first statement_list
! 
!   // Each subsequent context gets a new block that is chained to the prior block through BLOCK_SUBBLOCKS
!   // Each subsequent context gets a new bind_expr which gets added to the parent context's statement list
! 
!   // Yes, it's confusing.  Have a nice lie-down.
  
!   // Here's what we need for this recipe:
  
-   // We need a block:
    tree block = make_node(BLOCK);
    TREE_USED(block) = 1;
!   BLOCK_SUPERCONTEXT(block) = current_function->function_decl;
  
-   // We need a statement list:
    tree statement_list = alloc_stmt_list();
  
-   // We need a bind_expr:
    tree bind_expr = build3(BIND_EXPR,
                            void_type_node,
!                           NULL_TREE,         // There are no vars yet.
                            statement_list,
                            block);
-   TREE_SIDE_EFFECTS(bind_expr) = 1;
  
!   // At this point, we might be creating the initial context for a function,
!   // or we might be creating a sub-context.
  
!   if( !DECL_INITIAL(current_function->function_decl) )
      {
!     // We are creating the initial context of the function:
      DECL_INITIAL(current_function->function_decl) = block;
      DECL_SAVED_TREE(current_function->function_decl) = bind_expr;
- 
-     // To avoid an N-squared time complexity when chaining blocks, we save the
-     // current end of the chain of blocks:
-     current_function->current_block = block;
      }
    else
      {
!     // We are in the subtext business:
  
!     // We need to tack on our new block to the end of the
!     // chain of existing blocks:
!     tree cblock = current_function->current_block;
!     BLOCK_SUBBLOCKS(cblock) = block;
!     current_function->current_block = block;
  
!     // And we need to put our new bind_expr onto the end of the
!     // current active statement list:
      gg_append_statement(bind_expr);
      }
  
-   // And now we make our statement_list and bind_expr the active ones:
    current_function->statement_list_stack.push_back(statement_list);
    current_function->bind_expr_stack.push_back(bind_expr);
  
-   // And the new context is ready to rock and roll
    gg_trans_unit.function_stack.back().context_count += 1;
    }
  
  void
  gg_pop_context()
    {
!   // Backing out is much easier:
    current_function->bind_expr_stack.pop_back();
    current_function->statement_list_stack.pop_back();
  
--- 2969,3142 ----
  void
  gg_push_context()
    {
!   // The active bind expression, if there is one, identifies the lexical
!   // parent of the context being created.
!   tree parent_block = NULL_TREE;
  
!   if( !current_function->bind_expr_stack.empty() )
!     {
!     tree parent_bind = current_function->bind_expr_stack.back();
!     parent_block = BIND_EXPR_BLOCK(parent_bind);
!     gcc_assert(parent_block);
!     }
  
    tree block = make_node(BLOCK);
    TREE_USED(block) = 1;
!   BLOCK_CHAIN(block) = NULL_TREE;
! 
!   if( parent_block )
!     {
!     BLOCK_SUPERCONTEXT(block) = parent_block;
!     }
!   else
!     {
!     BLOCK_SUPERCONTEXT(block) = current_function->function_decl;
!     }
  
    tree statement_list = alloc_stmt_list();
  
    tree bind_expr = build3(BIND_EXPR,
                            void_type_node,
!                           NULL_TREE,
                            statement_list,
                            block);
  
!   TREE_SIDE_EFFECTS(bind_expr) = 1;
  
!   if( !parent_block )
      {
!     // This is the outermost context of the function.
!     gcc_assert(!DECL_INITIAL(current_function->function_decl));
! 
      DECL_INITIAL(current_function->function_decl) = block;
      DECL_SAVED_TREE(current_function->function_decl) = bind_expr;
      }
    else
      {
!     // Append this block to the lexical parent's list of children.
!     if( !BLOCK_SUBBLOCKS(parent_block) )
!       {
!       BLOCK_SUBBLOCKS(parent_block) = block;
!       }
!     else
!       {
!       tree last_subblock = BLOCK_SUBBLOCKS(parent_block);
  
!       while( BLOCK_CHAIN(last_subblock) )
!         {
!         last_subblock = BLOCK_CHAIN(last_subblock);
!         }
  
!       BLOCK_CHAIN(last_subblock) = block;
!       }
! 
!     // This is still the parent's active statement list.
      gg_append_statement(bind_expr);
      }
  
    current_function->statement_list_stack.push_back(statement_list);
    current_function->bind_expr_stack.push_back(bind_expr);
  
    gg_trans_unit.function_stack.back().context_count += 1;
    }
  
  void
  gg_pop_context()
    {
!   if( current_function->bind_expr_stack.empty() )
!     {
!     cbl_internal_error("%s",
!       "gg_pop_context() encountered an empty bind-expression stack.");
!     }
! 
!   if( current_function->statement_list_stack.empty() )
!     {
!     cbl_internal_error("%s",
!       "gg_pop_context() encountered an empty statement-list stack.");
!     }
! 
!   if( gg_trans_unit.function_stack.back().context_count <= 0 )
!     {
!     cbl_internal_error("%s",
!       "gg_pop_context() encountered an invalid context count.");
!     }
! 
!   tree bind_expr =
!     current_function->bind_expr_stack.back();
! 
!   tree statement_list =
!     current_function->statement_list_stack.back();
! 
!   if( TREE_CODE(bind_expr) != BIND_EXPR )
!     {
!     debug_tree(bind_expr);
!     cbl_internal_error("%s",
!       "gg_pop_context() did not find a BIND_EXPR.");
!     }
! 
!   if( TREE_CODE(statement_list) != STATEMENT_LIST )
!     {
!     debug_tree(statement_list);
!     cbl_internal_error("%s",
!       "gg_pop_context() did not find a STATEMENT_LIST.");
!     }
! 
!   if( BIND_EXPR_BODY(bind_expr) != statement_list )
!     {
!     size_t bind_depth =
!       current_function->bind_expr_stack.size();
! 
!     size_t statement_depth =
!       current_function->statement_list_stack.size();
! 
!     fprintf(stderr,
!             "gg_pop_context: function %s\n",
!             current_function->our_name);
! 
!     fprintf(stderr,
!             "gg_pop_context: bind depth %lu; statement-list depth %lu\n",
!             (unsigned long)bind_depth,
!             (unsigned long)statement_depth);
! 
!     fprintf(stderr,
!             "gg_pop_context: context body %p; active statement list %p\n",
!             reinterpret_cast<void *>(BIND_EXPR_BODY(bind_expr)),
!             reinterpret_cast<void *>(statement_list));
! 
!     fprintf(stderr,
!             "gg_pop_context: statement-list stack:\n");
! 
!     for( size_t i=0; i<statement_depth; i++ )
!       {
!       tree list = current_function->statement_list_stack[i];
! 
!       fprintf(stderr,
!               "  [%lu] %p%s\n",
!               (unsigned long)i,
!               reinterpret_cast<void *>(list),
!               list == BIND_EXPR_BODY(bind_expr)
!                 ? "  function context"
!                 : "");
!       }
! 
!     tree_stmt_iterator iterator = tsi_start(statement_list);
! 
!     if( tsi_end_p(iterator) )
!       {
!       fprintf(stderr,
!               "gg_pop_context: active statement list is empty\n");
!       }
!     else
!       {
!       fprintf(stderr,
!               "gg_pop_context: first statement in active list:\n");
!       debug_tree(tsi_stmt(iterator));
!       }
! 
!     cbl_internal_error("%s",
!       "gg_pop_context() found an unbalanced nested statement list.");
!     }
! 
    current_function->bind_expr_stack.pop_back();
    current_function->statement_list_stack.pop_back();
  
*************** gg_call_expr(tree return_type, const cha
*** 2841,2849 ****
    va_start(ap, function_name);
    for(;;)
      {
!     if(nargs >= ARG_LIMIT)
        {
!       cbl_internal_error("You *must* be joking");
        }
  
      tree arg = va_arg(ap, tree);
--- 3193,3201 ----
    va_start(ap, function_name);
    for(;;)
      {
!     if(nargs > ARG_LIMIT)
        {
!       cbl_internal_error("%s", "You *must* be joking");
        }
  
      tree arg = va_arg(ap, tree);
*************** gg_call(tree return_type, const char *fu
*** 2896,2904 ****
    va_start(ap, function_name);
    for(;;)
      {
!     if(nargs >= ARG_LIMIT)
        {
!       cbl_internal_error("You *must* be joking");
        }
  
      tree arg = va_arg(ap, tree);
--- 3248,3256 ----
    va_start(ap, function_name);
    for(;;)
      {
!     if(nargs > ARG_LIMIT)
        {
!       cbl_internal_error("%s", "You *must* be joking");
        }
  
      tree arg = va_arg(ap, tree);
*************** gg_create_bind_expr()
*** 2969,2982 ****
    // It's not defining a context, so it has no variable list, nor does
    // it point to a block.
  
!   tree statement_block = make_node(STATEMENT_LIST);
!   TREE_TYPE(statement_block) = void_type_node;
!   tree bind_expr = build3(   BIND_EXPR,
!                              void_type_node,
!                              NULL_TREE,
!                              statement_block,
!                              NULL_TREE);
  
    return bind_expr;
    }
  
--- 3321,3336 ----
    // It's not defining a context, so it has no variable list, nor does
    // it point to a block.
  
!   tree statement_block = alloc_stmt_list();
!   tree bind_expr = build3(BIND_EXPR,
!                           void_type_node,
!                           NULL_TREE,
!                           statement_block,
!                           NULL_TREE);
! 
!   // The body is populated after this routine returns.
  
+   TREE_SIDE_EFFECTS(bind_expr) = 1;
    return bind_expr;
    }
  
*************** gg_record_statement_list_finish()
*** 3107,3174 ****
  size_t
  gg_sizeof(tree node)
    {
!   size_t size_in_bytes;
!   if( DECL_P(node) )
      {
!     size_in_bytes = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(TREE_TYPE(node)));
      }
    else
      {
!     gcc_assert(TYPE_P(node));
!     size_in_bytes = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(node));
      }
-   return size_in_bytes;
-   }
  
! tree
! gg_array_of_bytes( size_t N, unsigned char *values)
!   {
!   tree retval = gg_define_variable(UCHAR_P);
!   gg_assign(retval, gg_cast(UCHAR_P, gg_malloc(  build_int_cst_type(SIZE_T, N))));
!   for(size_t i=0; i<N; i++)
!     {
!     gg_assign(gg_array_value(retval, i), build_int_cst_type(UCHAR, values[i]));
!     }
    return retval;
    }
  
  tree
! gg_string_literal(const char *string)
    {
!   /*  This is a message in a bottle.
! 
!       A genapi.cc program calling
  
!             gg_call(VOID,
!               "puts",
!               build_string_literal(strlen(ach)+1, ach),
!               NULL_TREE);
  
!       ten thousand times compiles about ten percent slower than a C program
!       calling
  
!             puts(ach);
  
!       ten thousand times.
  
!       Trapping through the C front end reveals that they do not call
!       build_string_literal().  They instead use build_string() in a way that
!       I gave up trying to figure out that produces, apparently, more efficient
!       GENERIC.
  
!       Their GENERIC: call_expr -> nop_expr -> addr_expr -> string_cst
  
!       My GENERIC:    call_expr -> addr_expr -> array_ref -> string_cst
  
!       I tried for an hour to duplicate the C stuff, but made no headway.
  
!       This comment is a reminder to myself to investigate this, someday, because
!       I eventually want that ten percent.
!       */
  
!   return build_string_literal(strlen(string)+1, string);
    }
  
  tree
  gg_trans_unit_var_decl(const char *var_name)
    {
--- 3461,3546 ----
  size_t
  gg_sizeof(tree node)
    {
!   gcc_assert(node);
! 
!   tree type;
! 
!   if( TYPE_P(node) )
      {
!     type = node;
      }
    else
      {
!     gcc_assert(DECL_P(node));
!     type = TREE_TYPE(node);
      }
  
!   gcc_assert(type);
!   gcc_assert(TYPE_P(type));
!   gcc_assert(COMPLETE_TYPE_P(type));
! 
!   tree size_tree = TYPE_SIZE_UNIT(type);
! 
!   gcc_assert(size_tree);
!   gcc_assert(tree_fits_uhwi_p(size_tree));
! 
!   unsigned HOST_WIDE_INT size_in_bytes = tree_to_uhwi(size_tree);
!   size_t retval = (size_t)size_in_bytes;
! 
!   gcc_assert((unsigned HOST_WIDE_INT)retval == size_in_bytes);
! 
    return retval;
    }
  
  tree
! gg_array_of_bytes(size_t N, const unsigned char *values)
    {
!   gcc_assert(N == 0 || values);
!   gcc_assert(N <= (size_t) UINT_MAX);
  
!   tree size = build_int_cst_type(SIZE_T, N);
  
!   tree retval =
!     save_expr(gg_cast(UCHAR_P, gg_malloc(size)));
  
!   if( N != 0 )
!     {
!     tree initial_values =
!       build_string_literal(static_cast<unsigned>(N),
!                            reinterpret_cast<const char *>(values),
!                            UCHAR);
  
!     gg_memcpy(retval, initial_values, size);
!     }
  
!   return retval;
!   }
  
! tree
! gg_string_literal(const char *string)
!   {
!   // return build_string_literal(strlen(string)+1, string);
  
!   // The following code creates GENERIC that runs fractionally faster than
!   // using build_string_literal().
!   unsigned length = strlen(string) + 1;
!   tree element_type = build_type_variant(char_type_node, 1, 0);
!   tree array_type = build_array_type_nelts(element_type, length);
!   tree literal = build_string(length, string);
  
!   TREE_TYPE(literal) = array_type;
!   TREE_CONSTANT(literal) = 1;
!   TREE_READONLY(literal) = 1;
!   TREE_STATIC(literal) = 1;
  
!   tree address = build1(ADDR_EXPR,
!                         build_pointer_type(array_type),
!                         literal);
  
!   return fold_convert(build_pointer_type(element_type), address);
    }
  
+ 
  tree
  gg_trans_unit_var_decl(const char *var_name)
    {
*************** gg_insert_into_assembler(const char ach[
*** 3198,3203 ****
--- 3570,3577 ----
                              NULL_TREE,
                              NULL_TREE,
                              NULL_TREE);
+     ASM_BASIC_P(asm_expr) = 1;
+     ASM_VOLATILE_P(asm_expr) = 1;
  
      // And insert it as a statement
      gg_append_statement(asm_expr);
diff -Nrcpad gcc-17-20260823/gcc/cobol/gengen.h gcc-17-20260830/gcc/cobol/gengen.h
*** gcc-17-20260823/gcc/cobol/gengen.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/gengen.h	Sun Aug 30 22:32:06 2026
***************
*** 36,41 ****
--- 36,42 ----
  // looks *are* important, and the multiple definitions make things easier
  // to understand.
  
+ #define IF_CONDITION(a) gg_create_true_false_statement_lists(a);
  #define IF(a,b,c) gg_if((a),(b),(c));
  #define ELSE current_function->statement_list_stack.pop_back();
  #define ENDIF current_function->statement_list_stack.pop_back();
***************
*** 44,81 ****
  
  // mnemonics for variable types:
  
! #define VOID       void_type_node
! #define BOOL       boolean_type_node
! #define CHAR       char_type_node
! #define SCHAR      signed_char_type_node
! #define SCHAR_P    build_pointer_type(SCHAR)
! #define UCHAR      unsigned_char_type_node
! #define SHORT      short_integer_type_node
! #define SHORT_P    build_pointer_type(short_integer_type_node)
! #define USHORT     short_unsigned_type_node
! #define WCHAR      short_unsigned_type_node
! #define INT        integer_type_node
! #define INT_P      build_pointer_type(integer_type_node)
! #define UINT       unsigned_type_node
! #define LONG       long_integer_type_node
! #define ULONG      long_unsigned_type_node
! #define LONGLONG   long_long_integer_type_node
! #define UINT64  uint64_type_node
! #define SIZE_T     size_type_node
! #define SIZE_T_P   (build_pointer_type(SIZE_T))
! #define SSIZE_T    ptrdiff_type_node
! #define INT128     intTI_type_node
! #define UINT128    unsigned_intTI_type_node
! #define FLOAT      float32_type_node
! #define DOUBLE     float64_type_node
! #define LONGDOUBLE long_double_type_node
! #define FLOAT128   float128_type_node
! #define VOID_P     ptr_type_node
! #define VOID_P_P   (build_pointer_type(VOID_P))
! #define CHAR_P     char_ptr_type_node
! #define UCHAR_P    uchar_ptr_type_node
! #define WCHAR_P    wchar_ptr_type_node
! #define FILE_P     fileptr_type_node
  
  #define SIZE128 (16) // In bytes
  
--- 45,83 ----
  
  // mnemonics for variable types:
  
! #define VOID         void_type_node
! #define BOOL         boolean_type_node
! #define CHAR         char_type_node
! #define SCHAR        signed_char_type_node
! #define SCHAR_P      build_pointer_type(SCHAR)
! #define UCHAR        unsigned_char_type_node
! #define SHORT        short_integer_type_node
! #define SHORT_P      build_pointer_type(short_integer_type_node)
! #define USHORT       short_unsigned_type_node
! #define WCHAR        short_unsigned_type_node
! #define INT          integer_type_node
! #define INT_P        build_pointer_type(integer_type_node)
! #define UINT         unsigned_type_node
! #define LONG         long_integer_type_node
! #define ULONG        long_unsigned_type_node
! #define LONGLONG     long_long_integer_type_node
! #define UINT64       uint64_type_node
! #define SIZE_T       size_type_node
! #define SIZE_T_P     (build_pointer_type(SIZE_T))
! #define SSIZE_T      ptrdiff_type_node
! #define INT128       intTI_type_node
! #define UINT128      unsigned_intTI_type_node
! #define FLOAT        float32_type_node
! #define DOUBLE       float64_type_node
! #define LONGDOUBLE   long_double_type_node
! #define FLOAT128     float128_type_node
! #define VOID_P       ptr_type_node
! #define VOID_P_P     (build_pointer_type(VOID_P))
! #define CHAR_P       char_ptr_type_node
! #define CONST_CHAR_P const_char_ptr_type_node
! #define UCHAR_P      uchar_ptr_type_node
! #define WCHAR_P      wchar_ptr_type_node
! #define FILE_P       fileptr_type_node
  
  #define SIZE128 (16) // In bytes
  
*************** struct gg_function_t
*** 145,153 ****
      // The function_decl is fundamental to many, many things
      tree function_decl;
  
-     // We keep track of the end of the chain of blocks:
-     tree current_block;
- 
      // Every function has a context, wherein temporary variables get created
      // and whose names won't collide with the names in other function.
  
--- 147,152 ----
*************** struct cbl_translation_unit_t
*** 298,326 ****
      // to tell the compiler to create data definitions for translation_unit_decl
      // variables:
      std::unordered_map<std::string, tree> trans_unit_var_decls;
      };
  
  extern struct cbl_translation_unit_t gg_trans_unit;
  
  #define current_function (&gg_trans_unit.function_stack.back())
  
! extern GTY(()) tree char_nodes[256]      ;
! extern GTY(()) tree pvoid_type_node      ;
! extern GTY(()) tree integer_minusone_node;
! extern GTY(()) tree integer_two_node     ;
! extern GTY(()) tree integer_eight_node   ;
! extern GTY(()) tree size_t_zero_node     ;
! extern GTY(()) tree int128_zero_node     ;
! extern GTY(()) tree int128_five_node     ;
! extern GTY(()) tree int128_ten_node      ;
! extern GTY(()) tree bool_true_node       ;
! extern GTY(()) tree bool_false_node      ;
! extern GTY(()) tree char_ptr_type_node   ;
! extern GTY(()) tree uchar_ptr_type_node  ;
! extern GTY(()) tree wchar_ptr_type_node  ;
! extern GTY(()) tree long_double_ten_node ;
! extern GTY(()) tree sizeof_size_t        ;
! extern GTY(()) tree sizeof_pointer       ;
  
  // These routines happen when beginning to process a new file, which is also
  // known, in GCC, as a "translation unit"
--- 297,329 ----
      // to tell the compiler to create data definitions for translation_unit_decl
      // variables:
      std::unordered_map<std::string, tree> trans_unit_var_decls;
+ 
+     // This map is to make chaining BLOCKs an O(1) operation.
+     std::unordered_map<tree, tree> block_var_tails;
      };
  
  extern struct cbl_translation_unit_t gg_trans_unit;
  
  #define current_function (&gg_trans_unit.function_stack.back())
  
! extern GTY(()) tree char_nodes[256]         ;
! extern GTY(()) tree pvoid_type_node         ;
! extern GTY(()) tree integer_minusone_node   ;
! extern GTY(()) tree integer_two_node        ;
! extern GTY(()) tree integer_eight_node      ;
! extern GTY(()) tree size_t_zero_node        ;
! extern GTY(()) tree int128_zero_node        ;
! extern GTY(()) tree int128_five_node        ;
! extern GTY(()) tree int128_ten_node         ;
! extern GTY(()) tree bool_true_node          ;
! extern GTY(()) tree bool_false_node         ;
! extern GTY(()) tree char_ptr_type_node      ;
! extern GTY(()) tree const_char_ptr_type_node;
! extern GTY(()) tree uchar_ptr_type_node     ;
! extern GTY(()) tree wchar_ptr_type_node     ;
! extern GTY(()) tree long_double_ten_node    ;
! extern GTY(()) tree sizeof_size_t           ;
! extern GTY(()) tree sizeof_pointer          ;
  
  // These routines happen when beginning to process a new file, which is also
  // known, in GCC, as a "translation unit"
*************** extern tree gg_array_value(tree pointer,
*** 387,393 ****
--- 390,398 ----
  
  // Here are some unary operations
  extern void gg_increment(tree var);
+ extern void gg_increment2(tree &var);
  extern void gg_decrement(tree var);
+ extern void gg_decrement2(tree &var);
  extern tree gg_negate(tree var);        // Two's complement negation
  extern tree gg_bitwise_not(tree var);   // Bitwise inversion
  extern tree gg_abs(tree var);           // Absolute value
*************** extern tree gg_build_logical_expression(
*** 419,424 ****
--- 424,443 ----
          enum logop_t op,
          tree operand_b);
  
+ extern tree gg_logical_eq(tree a, tree b);
+ extern tree gg_logical_ne(tree a, tree b);
+ extern tree gg_logical_lt(tree a, tree b);
+ extern tree gg_logical_gt(tree a, tree b);
+ extern tree gg_logical_le(tree a, tree b);
+ extern tree gg_logical_ge(tree a, tree b);
+ extern tree gg_logical_and(tree a, tree b);
+ extern tree gg_logical_or(tree a, tree b);
+ extern tree gg_logical_xor(tree a, tree b);
+ extern tree gg_logical_not(tree a);
+ extern tree if_condition(tree cond,
+                          tree expr_if_true,
+                          tree expr_if_false,
+                          tree type);
  extern void gg_create_true_false_statement_lists(tree relational_expression);
  extern void gg_while(tree operand_a, enum relop_t op, tree operand_b);
  extern void gg_if(   tree operand_a, enum relop_t op, tree operand_b);
*************** extern tree gg_memchr(tree s, tree c, tr
*** 438,445 ****
  extern tree gg_memcmp(const tree dest, const tree src, tree size);
  extern void gg_memcpy(tree dest, const tree src, tree size);
  extern void gg_memmove(tree dest, const tree src, tree size);
- extern tree gg_memdup(tree data, tree length);
- extern tree gg_memdup(tree data, size_t length);
  extern void gg_strcpy(tree char_star_A, tree char_star_B);
  extern tree gg_strdup(tree char_star_A);
  extern tree gg_strcmp(tree char_star_A, tree char_star_B);
--- 457,462 ----
*************** extern void gg_return(tree operand = NUL
*** 450,456 ****
  
  // These routines are the preamble and postamble that bracket everything else
  extern tree gg_build_fn_decl(const char *funcname, tree fndecl_type);
- extern tree gg_peek_fn_decl(const char *funcname);
  extern tree gg_define_function( tree return_type,
                                  const char *funcname,
                                  const char *unmangled_name,
--- 467,472 ----
*************** extern tree gg_strlen(tree psz);
*** 515,521 ****
  extern size_t gg_sizeof(tree decl_node);
  
  extern tree gg_array_of_field_pointers( const std::vector<const cbl_field_t *> &fields );
! extern tree gg_array_of_bytes( size_t N, unsigned char *values);
  extern tree gg_indirect(tree pointer, tree byte_offset = NULL_TREE);
  extern tree gg_indirect_i(tree pointer, size_t offset=0);
  extern tree gg_string_literal(const char *string);
--- 531,537 ----
  extern size_t gg_sizeof(tree decl_node);
  
  extern tree gg_array_of_field_pointers( const std::vector<const cbl_field_t *> &fields );
! extern tree gg_array_of_bytes( size_t N, const unsigned char *values);
  extern tree gg_indirect(tree pointer, tree byte_offset = NULL_TREE);
  extern tree gg_indirect_i(tree pointer, size_t offset=0);
  extern tree gg_string_literal(const char *string);
diff -Nrcpad gcc-17-20260823/gcc/cobol/genmath.cc gcc-17-20260830/gcc/cobol/genmath.cc
*** gcc-17-20260823/gcc/cobol/genmath.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/genmath.cc	Sun Aug 30 22:32:06 2026
*************** arithmetic_operation( size_t nC, cbl_num
*** 178,183 ****
--- 178,190 ----
      }
    tree array_of_int_type = build_array_type_nelts(INT, nC+1);
    tree arithmetic_rounds = gg_define_variable(array_of_int_type);
+ 
+   if( remainder )
+     {
+     gg_assign(gg_array_value(arithmetic_rounds, 0),
+               build_int_cst_type(INT, truncation_e));
+     }
+ 
    for(size_t i=0; i<nC; i++)
      {
      results[ncount] = C[i].refer;
*************** all_results_integer(size_t nC, const cbl
*** 333,340 ****
  
    for(size_t i=0; i<nC; i++)
      {
!     if( !is_pure_integer(C[i].refer.field) )
        {
        retval = false;
        break;
        }
--- 340,351 ----
  
    for(size_t i=0; i<nC; i++)
      {
!     if(    !is_pure_integer(C[i].refer.field) 
!         || C[i].rounded != truncation_e  )
! 
        {
+       // If it is not an integer, or if it is not the default truncate_e then
+       // we punt and let the library take care of it.
        retval = false;
        break;
        }
*************** all_refers_integer(size_t nC, const cbl_
*** 358,395 ****
    return retval;
    }
  
! static tree
! largest_binary_term(size_t nA, const cbl_refer_t *A)
    {
-   tree retval = NULL_TREE;
    for(size_t i=0; i<nA; i++)
      {
!     if( !is_pure_integer(A[i].field) || A[i].field->type == FldFloat )
        {
!       // We are prepared to work only with binary integers
!       retval = NULL_TREE;
!       break;
        }
!     if(    A[i].field->type == FldLiteralN
!         || A[i].field->type == FldNumericBinary
!         || A[i].field->type == FldNumericBin5
!         || A[i].field->type == FldIndex
!         || A[i].field->type == FldPointer
!         || (   A[i].field->type == FldAlphanumeric
!             && strcmp(A[i].field->name, "ZEROS") == 0 )
!         )
        {
!       // This is an integer type that can be worked with quickly
!       retval = tree_type_from_refer(A[i]);
        }
      else
        {
!       // This is a type we don't care to deal with for fast arithmetic
!       retval = NULL_TREE;
!       break;
        }
      }
!   return retval;
    }
  
  static bool
--- 369,466 ----
    return retval;
    }
  
! struct binary_term_properties
!   {
!   tree widest_type;
!   unsigned int widest_precision;
!   bool saw_signed;
!   bool saw_unsigned;
!   };
! 
! static bool
! inspect_binary_terms(binary_term_properties &properties,
!                      size_t nA, const cbl_refer_t *A)
    {
    for(size_t i=0; i<nA; i++)
      {
!     if( !is_pure_integer(A[i].field)
!         || A[i].field->type == FldFloat )
        {
!       return false;
        }
! 
!     if( !(   A[i].field->type == FldLiteralN
!           || A[i].field->type == FldNumericBinary
!           || A[i].field->type == FldNumericBin5
!           || A[i].field->type == FldIndex
!           || A[i].field->type == FldPointer
!           || (   A[i].field->type == FldAlphanumeric
!               && strcmp(A[i].field->name, "ZEROS") == 0 ) ) )
        {
!       return false;
!       }
! 
!     tree term_type = tree_type_from_refer(A[i]);
!     unsigned int precision = TYPE_PRECISION(term_type);
! 
!     if( precision > properties.widest_precision )
!       {
!       properties.widest_type = term_type;
!       properties.widest_precision = precision;
!       }
! 
!     if( TYPE_UNSIGNED(term_type) )
!       {
!       properties.saw_unsigned = true;
        }
      else
        {
!       properties.saw_signed = true;
        }
      }
! 
!   return true;
!   }
! 
! static tree
! largest_binary_term(size_t nA, const cbl_refer_t *A,
!                     size_t nB = 0, const cbl_refer_t *B = NULL)
!   {
!   binary_term_properties properties =
!     {
!     NULL_TREE,
!     0,
!     false,
!     false
!     };
! 
!   if(    !inspect_binary_terms(properties, nA, A)
!       || !inspect_binary_terms(properties, nB, B) )
!     {
!     return NULL_TREE;
!     }
! 
!   if( !properties.widest_type )
!     {
!     return NULL_TREE;
!     }
! 
!   if( properties.widest_precision > 64 )
!     {
!     return INT128;
!     }
! 
!   if( properties.saw_signed && properties.saw_unsigned )
!     {
!     if( properties.widest_precision == 64 )
!       {
!       return INT128;
!       }
! 
!     return LONG;
!     }
! 
!   return properties.widest_type;
    }
  
  static bool
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 427,434 ****
          // ADD A TO A B C.  That would change A before A gets added to B and
          // C, which is not how COBOL works.
  
!         tree A_value;
!         get_binary_value(A_value, A[0], dest_type);
  
          if( refer_is_clean(C[0].refer) )
            {
--- 498,504 ----
          // ADD A TO A B C.  That would change A before A gets added to B and
          // C, which is not how COBOL works.
  
!         tree A_value = get_binary_value(A[0], dest_type);
  
          if( refer_is_clean(C[0].refer) )
            {
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 443,466 ****
              }
            else
              {
!             tree dest_addr = member(C[0].refer.field->var_decl_node,
!                                     "data");
!             tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
!             gg_assign(  gg_indirect(ptr),
!                         gg_add( gg_indirect(ptr),
!                                 A_value));
              }
            }
          else
            {
            tree dest_addr = gg_add(member(C[0].refer.field->var_decl_node,
!                                         "data"),
                                    refer_offset(C[0].refer));
!           tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
!           // We are accumulating into memory
!           gg_assign(  gg_indirect(ptr),
!                       gg_add( gg_indirect(ptr),
!                               A_value));
            }
          }
        else if(   nC == 1
--- 513,531 ----
              }
            else
              {
!             tree dest_addr = member(C[0].refer.field->var_decl_node, "data");
!             tree dest_value = safe_load(dest_addr, dest_type);
!             safe_store(dest_addr, dest_type, gg_add(dest_value, A_value));
              }
            }
          else
            {
+           // We are accumulating into memory
            tree dest_addr = gg_add(member(C[0].refer.field->var_decl_node,
!                                          "data"),
                                    refer_offset(C[0].refer));
!           tree dest_value = safe_load(dest_addr, dest_type);
!           safe_store(dest_addr, dest_type, gg_add(dest_value, A_value));
            }
          }
        else if(   nC == 1
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 480,496 ****
              dest_addr = gg_add(member(C[0].refer.field->var_decl_node, "data"),
                                 refer_offset(C[0].refer));
              }
!           dest_addr = gg_cast(build_pointer_type(dest_type), dest_addr);
! 
!           tree A_value;
!           get_binary_value(A_value, A[0], dest_type);
! 
!           tree B_value;
!           get_binary_value(B_value, A[1], dest_type);
! 
!           gg_assign(  gg_indirect(dest_addr),
!                       gg_add( A_value,
!                               B_value));
            }
          }
        else
--- 545,553 ----
              dest_addr = gg_add(member(C[0].refer.field->var_decl_node, "data"),
                                 refer_offset(C[0].refer));
              }
!           tree A_value = get_binary_value(A[0], dest_type);
!           tree B_value = get_binary_value(A[1], dest_type);
!           safe_store(dest_addr, dest_type, gg_add(A_value, B_value));
            }
          }
        else
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 498,533 ****
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum    ;
!         tree addend ;
!         get_binary_value(sum, A[0].field, term_type);
! 
!         // Add in the rest of them:
          for(size_t i=1; i<nA; i++)
            {
!           get_binary_value( addend, A[i].field, term_type);
!           gg_assign(sum, gg_add(sum, addend));
            }
  
          // We now either accumulate into C[n] or assign to C[n]:
          for(size_t i=0; i<nC; i++ )
            {
            tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node,
                                          "data"),
                                    refer_offset(C[i].refer));
-           tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
            if( format == giving_e )
              {
              // We are assigning
!             gg_assign(  gg_indirect(ptr),
!                         gg_cast(dest_type, sum));
              }
            else
              {
              // We are accumulating
!             gg_assign(  gg_indirect(ptr),
!                         gg_add( gg_indirect(ptr),
!                                 gg_cast(dest_type, sum)));
              }
            }
          }
--- 555,590 ----
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum = get_binary_value(A[0], term_type);
          for(size_t i=1; i<nA; i++)
            {
!           tree addend = get_binary_value(A[i], term_type);
!           sum = gg_add(sum, addend);
!           }
!         if( nC > 1 )
!           {
!           sum = save_expr(sum);
            }
  
          // We now either accumulate into C[n] or assign to C[n]:
          for(size_t i=0; i<nC; i++ )
            {
+           dest_type = tree_type_from_refer(C[i].refer);
            tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node,
                                          "data"),
                                    refer_offset(C[i].refer));
            if( format == giving_e )
              {
              // We are assigning
!             safe_store(dest_addr, dest_type, sum);
              }
            else
              {
              // We are accumulating
!             tree dest_value = safe_load(dest_addr, dest_type);
!             safe_store( dest_addr,
!                         dest_type,
!                         gg_add(dest_value, gg_cast(dest_type, sum)));
              }
            }
          }
*************** fast_subtract(size_t nC, cbl_num_result_
*** 561,567 ****
      Analyze();
      // All targets are non-PICTURE binaries:
      //gg_insert_into_assembler("# DUBNER addition START");
!     tree term_type = largest_binary_term(nA, A);
  
      if( term_type && format == giving_e )
        {
--- 618,632 ----
      Analyze();
      // All targets are non-PICTURE binaries:
      //gg_insert_into_assembler("# DUBNER addition START");
!     tree term_type;
!     if( format == giving_e )
!       {
!       term_type = largest_binary_term(nA, A, nB, B);
!       }
!     else
!       {
!       term_type = largest_binary_term(nA, A);
!       }
  
      if( term_type && format == giving_e )
        {
*************** fast_subtract(size_t nC, cbl_num_result_
*** 591,598 ****
          {
          // This is the simplest case of all.  Just subtract A from C.
          tree dest_type = tree_type_from_refer(C[0].refer);
!         tree A_value;
!         get_binary_value(A_value, A[0], dest_type);
          if( format == giving_e )
            {
            // Make C = B - A
--- 656,662 ----
          {
          // This is the simplest case of all.  Just subtract A from C.
          tree dest_type = tree_type_from_refer(C[0].refer);
!         tree A_value = get_binary_value(A[0], dest_type);
          if( format == giving_e )
            {
            // Make C = B - A
*************** fast_subtract(size_t nC, cbl_num_result_
*** 608,643 ****
              }
            dest_addr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
!           tree B_value;
!           get_binary_value(B_value, B[0], dest_type);
!           gg_assign(  gg_indirect(dest_addr),
!                       gg_cast(dest_type, gg_subtract( B_value,
!                                                       A_value)));
            }
          else
            {
            // Make C = C - A
            if( refer_is_clean(C[0].refer) )
              {
-             tree dest_addr = member(C[0].refer.field->var_decl_node,
-                                     "data");
-             tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
              // We are subtracting from memory
!             gg_assign(  gg_indirect(ptr),
!                         gg_subtract( gg_indirect(ptr),
!                                 A_value));
              }
            else
              {
-             tree dest_addr = gg_add(member(C[0].refer.field->var_decl_node,
-                                           "data"),
-                                     refer_offset(C[0].refer));
-             tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
              // We are subtracting from memory
!             gg_assign(  gg_indirect(ptr),
!                         gg_subtract( gg_indirect(ptr),
!                                 A_value));
              }
            }
          }
        else
--- 672,698 ----
              }
            dest_addr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
!           tree B_value = get_binary_value(B[0], dest_type);
!           safe_store(dest_addr, dest_type, gg_subtract( B_value,
!                                                         A_value));
            }
          else
            {
            // Make C = C - A
+           tree dest_addr;
            if( refer_is_clean(C[0].refer) )
              {
              // We are subtracting from memory
!             dest_addr = member(C[0].refer.field->var_decl_node, "data");
              }
            else
              {
              // We are subtracting from memory
!             dest_addr = gg_add(member(C[0].refer.field->var_decl_node, "data"),
!                                refer_offset(C[0].refer));
              }
+           tree dest_value = safe_load(dest_addr, dest_type);
+           safe_store(dest_addr, dest_type, gg_subtract(dest_value, A_value));
            }
          }
        else
*************** fast_subtract(size_t nC, cbl_num_result_
*** 645,688 ****
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum    ;
!         tree addend ;
!         get_binary_value(sum, A[0].field, term_type);
! 
!         // Add in the rest of them:
          for(size_t i=1; i<nA; i++)
            {
!           get_binary_value(addend, A[i].field, term_type);
!           gg_assign(sum, gg_add(sum, addend));
            }
-         //gg_printf("The intermediate sum is %ld\n", gg_cast(LONG, sum), NULL_TREE);
  
          if( format == giving_e )
            {
            // We now subtract the sum from B[0]
!           get_binary_value(addend, B[0].field, term_type);
!           gg_assign(sum, gg_subtract(addend, sum));
            }
  
          // We now either accumulate into C[n] or assign to C[n]:
          for(size_t i=0; i<nC; i++ )
            {
            tree dest_type = tree_type_from_refer(C[i].refer);
!           tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                    refer_offset(C[i].refer));
-           tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
            if( format == giving_e )
              {
              // We are assigning
!             gg_assign(  gg_indirect(ptr),
!                         gg_cast(dest_type, sum));
              }
            else
              {
              // We are subtracting the sum from C[i]
!             gg_assign(  gg_indirect(ptr),
!                         gg_subtract(gg_indirect(ptr),
!                                     gg_cast(dest_type, sum)));
              }
            }
          }
--- 700,743 ----
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum = get_binary_value(A[0], term_type);
          for(size_t i=1; i<nA; i++)
            {
!           tree addend = get_binary_value(A[i], term_type);
!           sum = gg_add(sum, addend);
            }
  
          if( format == giving_e )
            {
            // We now subtract the sum from B[0]
!           tree minuend = get_binary_value(B[0], term_type);
!           sum = gg_subtract(minuend, sum);
!           }
! 
!         if( nC > 1 )
!           {
!           sum = save_expr(sum);
            }
  
          // We now either accumulate into C[n] or assign to C[n]:
          for(size_t i=0; i<nC; i++ )
            {
            tree dest_type = tree_type_from_refer(C[i].refer);
!           tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node,
!                                         "data"),
                                    refer_offset(C[i].refer));
            if( format == giving_e )
              {
              // We are assigning
!             safe_store(dest_addr, dest_type, sum);
              }
            else
              {
              // We are subtracting the sum from C[i]
!             tree dest_value = safe_load(dest_addr, dest_type);
!             safe_store(dest_addr, dest_type, gg_subtract(dest_value,
!                                                          gg_cast(dest_type,
!                                                                  sum)));
              }
            }
          }
*************** fast_multiply(size_t nC, cbl_num_result_
*** 703,709 ****
      Analyze();
      // All targets are non-PICTURE binaries:
      //gg_insert_into_assembler("# DUBNER addition START");
!     tree term_type = largest_binary_term(nA, A);
  
      if( term_type && nB )
        {
--- 758,764 ----
      Analyze();
      // All targets are non-PICTURE binaries:
      //gg_insert_into_assembler("# DUBNER addition START");
!     tree term_type = largest_binary_term(nA, A, nB, B);
  
      if( term_type && nB )
        {
*************** fast_multiply(size_t nC, cbl_num_result_
*** 726,740 ****
        {
        // All the terms are things we can work with.
  
!       tree valA ;
!       tree valB ;
!       get_binary_value(valA, A[0].field, term_type);
  
        if( nB )
          {
          // This is a MULTIPLY Format 2
!         get_binary_value(valB, B[0].field, term_type);
!         gg_assign(valA, gg_multiply(valA, valB));
          }
  
        // We now either multiply into C[n] or assign A * B to C[n]:
--- 781,798 ----
        {
        // All the terms are things we can work with.
  
!       tree valA = get_binary_value(A[0], term_type);
  
        if( nB )
          {
          // This is a MULTIPLY Format 2
!         tree valB = get_binary_value(B[0], term_type);
!         valA = gg_multiply(valA, valB);
!         }
! 
!       if( nC > 1 )
!         {
!         valA = save_expr(valA);
          }
  
        // We now either multiply into C[n] or assign A * B to C[n]:
*************** fast_multiply(size_t nC, cbl_num_result_
*** 743,765 ****
          tree dest_type = tree_type_from_refer(C[i].refer);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                  refer_offset(C[i].refer));
-         tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
            {
            // We put A * B into C
!           gg_assign(gg_indirect(ptr), gg_cast(dest_type, valA));
            }
          else
            {
            // We multiply C = valA * C
!           gg_assign(gg_indirect(ptr),
!                     gg_multiply(gg_indirect(ptr), valA));
            }
          }
        retval = true;
        }
- 
-     //gg_insert_into_assembler("# DUBNER addition END ");
      }
    return retval;
    }
--- 801,820 ----
          tree dest_type = tree_type_from_refer(C[i].refer);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                  refer_offset(C[i].refer));
          if( nB )
            {
            // We put A * B into C
!           safe_store(dest_addr, dest_type, valA);
            }
          else
            {
            // We multiply C = valA * C
!           tree dest_value = safe_load(dest_addr, dest_type);
!           safe_store(dest_addr, dest_type, gg_multiply(dest_value, valA));
            }
          }
        retval = true;
        }
      }
    return retval;
    }
*************** static bool
*** 768,782 ****
  fast_divide(size_t nC, cbl_num_result_t *C,
              size_t nA, const cbl_refer_t *A,
              size_t nB, const cbl_refer_t *B,
!       const cbl_refer_t             &remainder)
    {
    bool retval = false;
!   if( all_results_integer(nC, C) )
      {
      Analyze();
      // All targets are non-PICTURE binaries:
!     //gg_insert_into_assembler("# DUBNER addition START");
!     tree term_type = largest_binary_term(nA, A);
  
      if( term_type && nB )
        {
--- 823,841 ----
  fast_divide(size_t nC, cbl_num_result_t *C,
              size_t nA, const cbl_refer_t *A,
              size_t nB, const cbl_refer_t *B,
!       const cbl_refer_t                   &remainder)
    {
    bool retval = false;
! 
!   /* I have lately realized that there is no easy way to deal here with a
!      divide-by-zero error.  So, until that gets sorted out, we just are not
!      going to try.  */
! 
!   if( retval && all_results_integer(nC, C) )
      {
      Analyze();
      // All targets are non-PICTURE binaries:
!     tree term_type = largest_binary_term(nA, A, nB, B);
  
      if( term_type && nB )
        {
*************** fast_divide(size_t nC, cbl_num_result_t
*** 802,819 ****
        tree divisor  ;
        tree dividend ;
        tree quotient = NULL_TREE;
!       get_binary_value(divisor, A[0].field, term_type);
  
        if( nB )
          {
!         // This is a MULTIPLY Format 2, where we are dividing A into B and
          // assigning that to C
!         get_binary_value(dividend, B[0].field, term_type);
  
!         quotient = gg_define_variable(term_type);
!         // Yes, in this case the divisor and dividend are switched.  Things are
!         // tough all over.
!         gg_assign(quotient, gg_divide(divisor, dividend));
          }
  
        // We now either divide into C[n] or assign dividend/divisor to C[n]:
--- 861,877 ----
        tree divisor  ;
        tree dividend ;
        tree quotient = NULL_TREE;
!       divisor = save_expr(get_binary_value(A[0], term_type));
  
        if( nB )
          {
!         // This is a DIVIDE Format 2, where we are dividing A into B and
          // assigning that to C
!         dividend = get_binary_value(B[0], term_type);
  
!         // In the nB case, divisor and dividend are switched when creating the
!         // quotient.
!         quotient = save_expr(gg_divide(divisor, dividend));
          }
  
        // We now either divide into C[n] or assign dividend/divisor to C[n]:
*************** fast_divide(size_t nC, cbl_num_result_t
*** 823,839 ****
          tree dest_addr = gg_add(member( C[i].refer.field->var_decl_node,
                                          "data"),
                                  refer_offset(C[i].refer));
-         tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
          if( nB )
            {
!           // We put A * B into C
!           gg_assign(gg_indirect(ptr), gg_cast(dest_type, quotient));
            }
          else
            {
            // We divide the divisor into C
!           gg_assign(gg_indirect(ptr),
!                     gg_divide(gg_indirect(ptr), divisor));
            }
  
          // This is where we handle any remainder, keeping in mind that for
--- 881,896 ----
          tree dest_addr = gg_add(member( C[i].refer.field->var_decl_node,
                                          "data"),
                                  refer_offset(C[i].refer));
          if( nB )
            {
!           // We put A / B into C
!           safe_store(dest_addr, dest_type, gg_cast(dest_type, quotient));
            }
          else
            {
            // We divide the divisor into C
!           tree dest_value = safe_load(dest_addr, dest_type);
!           safe_store(dest_addr, dest_type, gg_divide(dest_value, divisor));
            }
  
          // This is where we handle any remainder, keeping in mind that for
*************** fast_divide(size_t nC, cbl_num_result_t
*** 847,863 ****
            dest_addr = gg_add( member(remainder.field->var_decl_node, "data"),
                                refer_offset(remainder));
            dest_type = tree_type_from_refer(remainder);
!           ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
! 
!           gg_assign(gg_indirect(ptr),
!                     gg_cast(dest_type, gg_subtract(divisor,
!                                        gg_multiply(quotient, dividend))));
            }
          }
        retval = true;
        }
- 
-     //gg_insert_into_assembler("# DUBNER addition END ");
      }
    return retval;
    }
--- 904,919 ----
            dest_addr = gg_add( member(remainder.field->var_decl_node, "data"),
                                refer_offset(remainder));
            dest_type = tree_type_from_refer(remainder);
!           safe_store(dest_addr,
!                      dest_type,
!                       gg_cast(dest_type,
!                               gg_subtract(divisor,
!                                           gg_multiply(quotient,
!                                                       dividend))));
            }
          }
        retval = true;
        }
      }
    return retval;
    }
*************** add_litN_to_numdisp(size_t nC, cbl_num_r
*** 1440,1461 ****
  
      // Get the integer value of the literal:
      REAL_VALUE_TYPE val = TREE_REAL_CST(A[0].field->data.value_of());
-     int delta = (int)real_to_integer (&val);
-     val = real_value_truncate (TYPE_MODE (float_type_node), val);
-     REAL_VALUE_TYPE rival;
-     real_from_integer (&rival, VOIDmode, delta, SIGNED);
  
!     if( real_identical (&val, &rival) && delta == 0 )
        {
!       // val has no fractional part, which means delta is the exact integer
!       // part of val.
! 
!       // And delta is zero.  This is a weird degenerate case.  But adding zero
!       // to anything means we are already done.
        handled = true;
        return handled;
        }
  
      int  digits = C[0].refer.field->data.digits;
      int rdigits = C[0].refer.field->data.rdigits;
  
--- 1496,1512 ----
  
      // Get the integer value of the literal:
      REAL_VALUE_TYPE val = TREE_REAL_CST(A[0].field->data.value_of());
  
!     if( real_iszero(&val) )
        {
!       // Adding either positive or negative zero changes nothing.
        handled = true;
        return handled;
        }
  
+     HOST_WIDE_INT literal_value;
+     bool literal_is_integer = real_isinteger(&val, &literal_value);
+     
      int  digits = C[0].refer.field->data.digits;
      int rdigits = C[0].refer.field->data.rdigits;
  
*************** add_litN_to_numdisp(size_t nC, cbl_num_r
*** 1487,1498 ****
        return handled;
        }
  
!     if( real_identical (&val, &rival)
!         && delta >= -9
!         && delta <=  9 )
        {
        delta = subtracting ? -delta : delta;
! 
        // delta is a non-zero integer in the range of -9 to 9.
        tree tdelta = build_int_cst_type(UCHAR, delta);
  
--- 1538,1550 ----
        return handled;
        }
  
!     if( literal_is_integer
!         && literal_value >= -9
!         && literal_value <=  9 )
        {
+       int delta = static_cast<int>(literal_value);
        delta = subtracting ? -delta : delta;
!       
        // delta is a non-zero integer in the range of -9 to 9.
        tree tdelta = build_int_cst_type(UCHAR, delta);
  
*************** add_litN_to_numdisp(size_t nC, cbl_num_r
*** 1526,1534 ****
                         + C[0].refer.field->data.digits
                         - C[0].refer.field->data.rdigits
                         - 1;
!       tree base;
        // Now and forever, base points to the data area of C[0]
-       get_location(base, C[0].refer);
  
        tree units = gg_define_variable(UCHAR_P);
        // Now and forever, units points to the units digit of C[0]
--- 1578,1585 ----
                         + C[0].refer.field->data.digits
                         - C[0].refer.field->data.rdigits
                         - 1;
!       tree base = get_location(C[0].refer);
        // Now and forever, base points to the data area of C[0]
  
        tree units = gg_define_variable(UCHAR_P);
        // Now and forever, units points to the units digit of C[0]
*************** parser_compute( cbl_refer_t *tgt,
*** 2394,2399 ****
--- 2445,2451 ----
                  const std::deque<rpn_t>& operations,
                  cbl_label_t * compute_error_label )
    {
+   RETURN_IF_PARSE_ONLY;
    CHECK_FIELD(tgt->field);
    gcc_assert(operations.size());
  
*************** subtract_floats( size_t nC, cbl_num_resu
*** 2668,2674 ****
    bool handled = false;
  
    bool computation_is_float =    is_somebody_float(nA, A)
!                               || is_somebody_float(nC, C);
  
    // We now start deciding which arithmetic routine we are going to use:
  
--- 2720,2727 ----
    bool handled = false;
  
    bool computation_is_float =    is_somebody_float(nA, A)
!                               || is_somebody_float(nC, C)
!                               || is_somebody_float(nB, B);
  
    // We now start deciding which arithmetic routine we are going to use:
  
diff -Nrcpad gcc-17-20260823/gcc/cobol/genutil.cc gcc-17-20260830/gcc/cobol/genutil.cc
*** gcc-17-20260823/gcc/cobol/genutil.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/genutil.cc	Sun Aug 30 22:32:06 2026
*************** tree var_decl_exception_section;      //
*** 79,85 ****
  tree var_decl_exception_paragraph;    // const char *__gg__exception_paragraph;
  
  tree var_decl_default_compute_error;  // int         __gg__default_compute_error;
! tree var_decl_rdigits;                // int         __gg__rdigits;
  tree var_decl_unique_prog_id;         // size_t      __gg__unique_prog_id;
  
  tree var_decl_exit_address;           // This is for implementing pseudo_return_pop
--- 79,85 ----
  tree var_decl_exception_paragraph;    // const char *__gg__exception_paragraph;
  
  tree var_decl_default_compute_error;  // int         __gg__default_compute_error;
! tree var_decl_fracdigits;             // int         __gg__fracdigits;
  tree var_decl_unique_prog_id;         // size_t      __gg__unique_prog_id;
  
  tree var_decl_exit_address;           // This is for implementing pseudo_return_pop
*************** get_scaled_digits(const cbl_field_t *fie
*** 181,196 ****
    }
  
  #define   CHECK_FOR_FRACTIONAL_DIGITS true
! static void
! giv_helper(tree retval, // We know this is a variable for the returned value.
!      const cbl_field_t *field,
!            tree value, // Comes in as INT128
!            bool check_for_fractional_digits)
    {
    if( field->type == FldLiteralN && field->data.rdigits==0 )
      {
!     gg_assign(retval, gg_cast(TREE_TYPE(retval), field->data_decl_node));
!     return;
      }
  
    Analyze();
--- 181,196 ----
    }
  
  #define   CHECK_FOR_FRACTIONAL_DIGITS true
! static tree
! giv_helper(const cbl_field_t *field,
!                  tree value, // Comes in as INT128
!                  bool check_for_fractional_digits)
    {
+   tree retval;
    if( field->type == FldLiteralN && field->data.rdigits==0 )
      {
!     retval = gg_cast(INT128, field->data_decl_node);
!     return retval;
      }
  
    Analyze();
*************** giv_helper(tree retval, // We know this
*** 199,219 ****
    // intermediate value for an array subscript:  table((3 + 1) / 2))
    //
    // If the field_i has rdigits, and if any of those rdigits are non-zero, we
!   // return a 1 so that our caller can decide what to do.
! 
!   tree rdigits = gg_define_variable(INT);
  
    if( field->attr & intermediate_e )
      {
      // Pick up the run-time number of rdigits:
!     gg_assign(rdigits, gg_cast(INT, member(field, "rdigits")));
  
      // Scale by the number of rdigits, which turns 12.34 into 12.
!     // When check_for_fractional_digits is true, __gg__rdigits will be set
      // to 1 for 12.34, and will be set to zero 12.00
!     scale_by_power_of_ten(value,
!                           gg_negate(rdigits),
!                           check_for_fractional_digits);
      }
    else
      {
--- 199,218 ----
    // intermediate value for an array subscript:  table((3 + 1) / 2))
    //
    // If the field_i has rdigits, and if any of those rdigits are non-zero, we
!   // set __gg__fracdigits to 1.
  
    if( field->attr & intermediate_e )
      {
+     tree rdigits;
      // Pick up the run-time number of rdigits:
!     rdigits = gg_cast(INT, member(field, "rdigits"));
  
      // Scale by the number of rdigits, which turns 12.34 into 12.
!     // When check_for_fractional_digits is true, __gg__fracdigits will be set
      // to 1 for 12.34, and will be set to zero 12.00
!     value = scale_by_power_of_ten(value,
!                                   gg_negate(rdigits),
!                                   check_for_fractional_digits);
      }
    else
      {
*************** giv_helper(tree retval, // We know this
*** 221,247 ****
                              -get_scaled_rdigits(field),
                              check_for_fractional_digits);
      }
!   gg_assign(retval, gg_cast(TREE_TYPE(retval), value));
    }
  
! static void
! get_integer_value(tree retval,
!             const cbl_field_t *field,
!             bool check_for_fractional_digits = false)
    {
!   tree value;
!   get_binary_value(value, field, INT128);
!   giv_helper(retval, field, value, check_for_fractional_digits);
    }
  
! static void
! get_integer_value(tree retval,
!             const cbl_refer_t &refer,
!             bool check_for_fractional_digits = false)
    {
!   tree value;
!   get_binary_value(value, refer, INT128);
!   giv_helper(retval, refer.field, value, check_for_fractional_digits);
    }
  
  static
--- 220,245 ----
                              -get_scaled_rdigits(field),
                              check_for_fractional_digits);
      }
!   retval = gg_cast(INT128, value);
!   return retval;
    }
  
! static tree
! get_integer_value(const cbl_field_t *field,
!                   bool check_for_fractional_digits = false)
    {
!   tree value = get_binary_value(field, INT128);
!   value = giv_helper(field, value, check_for_fractional_digits);
!   return value;
    }
  
! static tree
! get_integer_value(const cbl_refer_t &refer,
!                   bool check_for_fractional_digits = false)
    {
!   tree value = get_binary_value(refer, INT128);
!   value = giv_helper(refer.field, value, check_for_fractional_digits);
!   return value;
    }
  
  static
*************** get_any_capacity(cbl_field_t *field)
*** 268,275 ****
      */
  static
  void
! get_and_check_refstart_and_reflen(  tree         refstart,// LONG returned value
!                                     tree         reflen,  // LONG returned value
                                const cbl_refer_t &refer)
    {
    const cbl_enabled_exceptions_t&
--- 266,273 ----
      */
  static
  void
! get_and_check_refstart_and_reflen(  tree         &refstart,// LONG returned value
!                                     tree         &reflen,  // LONG returned value
                                const cbl_refer_t &refer)
    {
    const cbl_enabled_exceptions_t&
*************** get_and_check_refstart_and_reflen(  tree
*** 287,436 ****
      // is accepting the responsibility for bad code:  "If you specify
      // disaster, disaster is what you get."
  
!     get_integer_value(refstart,
!                       *refer.refmod.from);
!     gg_decrement(refstart);
!     gg_assign(refstart, gg_multiply(refstart, stride));
  
      if( refer.refmod.len )
        {
        // The length was specified, so that's what we return:
!       get_integer_value(reflen,
!                         *refer.refmod.len);
        // Modify refer.length by stride:
!       gg_assign(reflen, gg_multiply(reflen, stride));
        }
      else
        {
        // The length was not specified, so we need to return the distance
        // between refmod.from and the end of the field:
!       gg_assign(reflen,
!                 gg_subtract( get_any_capacity(refer.field),
!                                      refstart) );
        }
      return;
      }
  
    // ec_bound_ref_mode_e checking is enabled:
  
!   get_integer_value(refstart,
!                     *refer.refmod.from,
!                     CHECK_FOR_FRACTIONAL_DIGITS);
! 
!   IF( var_decl_rdigits,
!       ne_op,
!       integer_zero_node )
      {
      // The value for refstart had non-zero decimal places.  This is an
      // error condition:
      set_exception_code(ec_bound_ref_mod_e);
!     gg_assign(refstart, gg_cast(LONG, integer_one_node));
!     gg_assign(var_decl_rdigits, integer_zero_node);
      }
    ELSE
      ENDIF
  
    // Make refstart zero-based:
!   gg_decrement(refstart);
!   gg_assign(refstart, gg_multiply(refstart, stride));
  
!   IF( refstart, lt_op, build_int_cst_type(LONG, 0 ) )
!     {
!     // A negative value for refstart is an error condition:
!     set_exception_code(ec_bound_ref_mod_e);
!     gg_assign(refstart, gg_cast(LONG, integer_zero_node));
!     // Set reflen to one here, because otherwise it won't be established.
!     gg_assign(reflen, gg_cast(TREE_TYPE(reflen), integer_one_node));
!     gg_assign(reflen, gg_multiply(reflen, stride));
!     }
!   ELSE
      {
!     IF( refstart, gt_op, gg_cast(TREE_TYPE(refstart), get_any_capacity(refer.field)) )
        {
!       // refstart greater than capacity is an error condition:
        set_exception_code(ec_bound_ref_mod_e);
!       gg_assign(refstart, gg_cast(LONG, integer_zero_node));
!       // Set reflen to one here, because otherwise it won't be established.
!       gg_assign(reflen, gg_cast(TREE_TYPE(reflen), integer_one_node));
!       gg_assign(reflen, gg_multiply(reflen, stride));
        }
      ELSE
-       {
-       if( refer.refmod.len )
-         {
-         get_integer_value(reflen,
-                           *refer.refmod.len,
-                           CHECK_FOR_FRACTIONAL_DIGITS);
-         gg_assign(reflen, gg_multiply(reflen, stride));
-         IF( var_decl_rdigits,
-             ne_op,
-             integer_zero_node )
-           {
-           // length is not an integer, which is an error condition
-           set_exception_code(ec_bound_ref_mod_e);
-           gg_assign(reflen, gg_cast(LONG, integer_one_node));
-           gg_assign(reflen, gg_multiply(reflen, stride));
-           gg_assign(var_decl_rdigits, integer_zero_node);
-           }
-         ELSE
-           {
-           // The length is an integer, so we can keep going.
-           IF( reflen, lt_op, gg_cast(LONG, integer_one_node) )
-             {
-             // length is too small, which is an error condition.
-             set_exception_code(ec_bound_ref_mod_e);
-             gg_assign(reflen, gg_cast(LONG, integer_one_node));
-             gg_assign(reflen, gg_multiply(reflen, stride));
-             }
-           ELSE
-             {
-             IF( gg_add(refstart, reflen),
-                 gt_op,
-                 gg_cast(TREE_TYPE(refstart), get_any_capacity(refer.field)) )
-               {
-               // Start + Length is too large, which yet again is an error
-               // condition
-               set_exception_code(ec_bound_ref_mod_e);
- 
-               // Our intentions are honorable.  But at this point, where
-               // we notice that start + length is too long, the
-               // get_data_offset routine has already been run and
-               // it's too late to actually change the refstart.  There are
-               // theoretical solutions to this -- mainly,
-               // get_data_offset needs to check the start + len for
-               // validity.  But I am not going to do it now.  Think of this
-               // as the TODO item.
-               gg_assign(refstart, gg_cast(LONG, integer_zero_node));
-               gg_assign(reflen, gg_cast(LONG, integer_one_node));
-               gg_assign(reflen, gg_multiply(reflen, stride));
-               }
-             ELSE
-               {
-               // There are no problems, so there is no error condition, and
-               // refstart and reflen are correct.
-               }
-               ENDIF
-             }
-             ENDIF
-           }
-           ENDIF
-         // Modify the length calculation for stride:
-         //gg_assign(reflen, gg_multiply(reflen, stride));
-         }
-       else
-         {
-         // There is no refmod length, so we default to the remaining characters
-         gg_assign(reflen, gg_subtract(get_any_capacity(refer.field),
-                                       refstart));
-         }
-       }
        ENDIF
      }
!     ENDIF
    }
  
! void
! get_depending_on_value_from_odo(tree retval, cbl_field_t *odo)
    {
    /*  This routine, called only when we know there is an OCCURS DEPENDING ON
        clause, returns the current value of the DEPENDING ON variable.  When
--- 285,390 ----
      // is accepting the responsibility for bad code:  "If you specify
      // disaster, disaster is what you get."
  
!     refstart = gg_cast(LONG, get_integer_value(*refer.refmod.from));
!     gg_decrement2(refstart);
!     refstart = gg_multiply(refstart, stride);
  
      if( refer.refmod.len )
        {
        // The length was specified, so that's what we return:
!       reflen = gg_cast(LONG, get_integer_value(*refer.refmod.len));
        // Modify refer.length by stride:
!       reflen = gg_multiply(reflen, stride);
        }
      else
        {
        // The length was not specified, so we need to return the distance
        // between refmod.from and the end of the field:
!       reflen = gg_subtract(get_any_capacity(refer.field), refstart) ;
        }
      return;
      }
  
    // ec_bound_ref_mode_e checking is enabled:
  
!   // Fetch the start, looking for an error caused by fractional digits
!   refstart = gg_cast(LONG,
!                      get_integer_value(*refer.refmod.from,
!                                        CHECK_FOR_FRACTIONAL_DIGITS));
!   IF( var_decl_fracdigits, ne_op, integer_zero_node )
      {
      // The value for refstart had non-zero decimal places.  This is an
      // error condition:
      set_exception_code(ec_bound_ref_mod_e);
!     gg_assign(var_decl_fracdigits, integer_zero_node);
      }
    ELSE
      ENDIF
  
    // Make refstart zero-based:
!   gg_decrement2(refstart);
!   // Compensate for stride:
!   refstart = gg_multiply(refstart, stride);
  
!   // Fetch the length, looking for an error caused by fractional digits
!   if( refer.refmod.len )
      {
!     reflen = gg_cast(LONG,
!                      get_integer_value(*refer.refmod.len,
!                                        CHECK_FOR_FRACTIONAL_DIGITS));
!     IF( var_decl_fracdigits, ne_op, integer_zero_node )
        {
!       // The value for reflen had non-zero decimal places.  This is an
!       // error condition:
        set_exception_code(ec_bound_ref_mod_e);
!       gg_assign(var_decl_fracdigits, integer_zero_node);
        }
      ELSE
        ENDIF
+     reflen = gg_multiply(reflen, stride);
      }
!   else
!     {
!     // There is no refmod length given, so we set the length to the remaining
!     // characters after refstart.
!     reflen = gg_subtract(gg_cast(LONG, get_any_capacity(refer.field)),
!                          refstart);
!     }
! 
!   /* There are three possible error conditions:
! 
!      1) start is less than zero
!      2) length is less than stride
!      3) start + length is greater than capacity.  */
! 
!   tree start_lt_zero = gg_logical_lt(refstart, build_int_cst_type(LONG, 0));
!   tree length_le_zero = gg_logical_lt(reflen, stride);
!   tree length_too_big = gg_logical_gt(gg_add(refstart, reflen),
!                                 gg_cast(LONG, get_any_capacity(refer.field)));
!   tree something_is_wrong = gg_logical_or(start_lt_zero, length_le_zero);
!   something_is_wrong = gg_logical_or(something_is_wrong, length_too_big);
! 
!   IF( something_is_wrong, ne_op, boolean_false_node )
!     {
!     set_exception_code(ec_bound_ref_mod_e);
!     }
!   ELSE
!     {
!     }
!   ENDIF
! 
!   refstart = if_condition(something_is_wrong,
!                           build_int_cst_type(LONG, 0 ),
!                           refstart,
!                           LONG);
!   reflen   = if_condition(something_is_wrong,
!                           stride,
!                           reflen,
!                           LONG);
    }
  
! tree
! get_depending_on_value_from_odo(cbl_field_t *odo)
    {
    /*  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_depending_on_value_from_odo(tree ret
*** 441,446 ****
--- 395,402 ----
        declarative with a RESUME NEXT STATEMENT, or before the default_condition
        processing can do a controlled exit.
        */
+   tree retval;
+   tree type = LONG;
    const cbl_enabled_exceptions_t&
                                  enabled_exceptions( cdf_enabled_exceptions() );
    const cbl_field_t *depending_on;
*************** get_depending_on_value_from_odo(tree ret
*** 450,509 ****
      {
      // With no exception testing, just pick up the value.  If there is an error
      // the programmer will simply have to live with the consequences.
!     get_integer_value(retval,
!                       depending_on);
!     return;
      }
  
    // Bounds checking is enabled, so we test the DEPENDING ON value to be
    // between the lower and upper OCCURS limits:
-   get_integer_value(retval,
-                     depending_on,
-                     CHECK_FOR_FRACTIONAL_DIGITS);
  
!   IF( var_decl_rdigits, ne_op, integer_zero_node )
      {
!     // This needs to evaluate to an integer
      set_exception_code(ec_bound_odo_e);
!     gg_assign(retval, build_int_cst_type( TREE_TYPE(retval),
!                                           odo->occurs.bounds.lower));
!     gg_assign(var_decl_rdigits, integer_zero_node);
      }
    ELSE
!     ENDIF
  
!   IF( retval, gt_op, build_int_cst_type(TREE_TYPE(retval),
!                                         odo->occurs.bounds.upper) )
      {
      set_exception_code(ec_bound_odo_e);
-     gg_assign(retval, build_int_cst_type( TREE_TYPE(retval),
-                                           odo->occurs.bounds.lower));
      }
    ELSE
      {
!     IF( retval, lt_op, build_int_cst_type(TREE_TYPE(retval),
!                                           odo->occurs.bounds.lower) )
        {
        set_exception_code(ec_bound_odo_e);
-       gg_assign(retval, build_int_cst_type( TREE_TYPE(retval),
-                                             odo->occurs.bounds.lower));
        }
      ELSE
-       ENDIF
-     IF( retval, lt_op, gg_cast(TREE_TYPE(retval), integer_zero_node) )
        {
-       set_exception_code(ec_bound_odo_e);
-       gg_assign(retval, gg_cast(TREE_TYPE(retval), integer_zero_node));
        }
-     ELSE
-       ENDIF
-     }
      ENDIF
    }
  
  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
--- 406,471 ----
      {
      // With no exception testing, just pick up the value.  If there is an error
      // the programmer will simply have to live with the consequences.
!     retval = gg_cast(type, get_integer_value(depending_on));
!     return retval;
      }
  
    // Bounds checking is enabled, so we test the DEPENDING ON value to be
    // between the lower and upper OCCURS limits:
  
!   retval = gg_cast(type, get_integer_value( depending_on,
!                                             CHECK_FOR_FRACTIONAL_DIGITS));
! 
!   tree fracdigits = gg_logical_ne(var_decl_fracdigits, integer_zero_node);
!   tree too_big    = gg_logical_gt(retval, build_int_cst_type( type,
!                                           odo->occurs.bounds.upper));
!   tree too_small  = gg_logical_lt(retval, build_int_cst_type( type,
!                                           odo->occurs.bounds.lower));
! 
!   IF( fracdigits, eq_op, boolean_true_node )
      {
!     // The value had fractional digits, which is an exception.
      set_exception_code(ec_bound_odo_e);
!     // var_decl_fracdigits was one; set it back to zero.
!     gg_assign(var_decl_fracdigits, integer_zero_node);
      }
    ELSE
!     {
!     }
!   ENDIF
  
!   IF( too_big, eq_op, boolean_true_node  )
      {
+     // The limit is too big.
      set_exception_code(ec_bound_odo_e);
      }
    ELSE
      {
!     IF( too_small, eq_op, boolean_true_node  )
        {
+       // The limit is too small.
        set_exception_code(ec_bound_odo_e);
        }
      ELSE
        {
        }
      ENDIF
+     }
+   ENDIF
+   retval = if_condition(too_small,
+                         build_int_cst_type(type, odo->occurs.bounds.lower),
+                         retval,
+                         type);
+   retval = if_condition(too_big,
+                         build_int_cst_type(type, odo->occurs.bounds.upper),
+                         retval,
+                         type);
+   return retval;
    }
  
  static
! tree
! get_depending_on_value(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_depending_on_value(tree retval, cons
*** 515,521 ****
        processing can do a controlled exit.
        */
    cbl_field_t *odo = symbol_find_odo(refer.field);
!   get_depending_on_value_from_odo(retval, odo);
    }
  
  static
--- 477,483 ----
        processing can do a controlled exit.
        */
    cbl_field_t *odo = symbol_find_odo(refer.field);
!   return get_depending_on_value_from_odo(odo);
    }
  
  static
*************** tree
*** 523,529 ****
  get_data_offset(const cbl_refer_t &refer, int *pflags = NULL)
    {
    // This routine returns a tree which is the size_t offset to the data in the
!   // refer/field
  
    /* Let's first attempt to handle commonly-occurring situations that can
       be handled efficiently.  */
--- 485,493 ----
  get_data_offset(const cbl_refer_t &refer, int *pflags = NULL)
    {
    // This routine returns a tree which is the size_t offset to the data in the
!   // refer/field.
! 
!   tree retval = size_t_zero_node;
  
    /* Let's first attempt to handle commonly-occurring situations that can
       be handled efficiently.  */
*************** get_data_offset(const cbl_refer_t &refer
*** 610,626 ****
          // We know the refmod is a literal
          offset +=   (atol(refer.refmod.from->field->data.original()) - 1)
                    * refer.field->codeset.stride();
-         return build_int_cst_type(SIZE_T, offset);
          }
        }
      }
  
    // Because this is for source / sending variables, checks are made for
    // OCCURS DEPENDING ON violations (when those exceptions are enabled)
  
-   tree retval = gg_define_variable(SIZE_T);
-   gg_assign(retval, size_t_zero_node);
- 
    // We have a refer.
    // At the very least, we have an constant offset
    int all_flags = 0;
--- 574,587 ----
          // We know the refmod is a literal
          offset +=   (atol(refer.refmod.from->field->data.original()) - 1)
                    * refer.field->codeset.stride();
          }
+       return build_int_cst_type(SIZE_T, offset);
        }
      }
  
    // Because this is for source / sending variables, checks are made for
    // OCCURS DEPENDING ON violations (when those exceptions are enabled)
  
    // We have a refer.
    // At the very least, we have an constant offset
    int all_flags = 0;
*************** get_data_offset(const cbl_refer_t &refer
*** 661,668 ****
          {
          cbl_internal_error("Too many subscripts");
          }
!       // Pick up the integer value of the subscript:
!       tree subscript  = gg_define_variable(LONG);
  
        if( (refer.subscripts[i].field->attr & FIGCONST_MASK) == zero_value_e )
          {
--- 622,630 ----
          {
          cbl_internal_error("Too many subscripts");
          }
!       // Pick up the integer value of the subscript.  We treat it as LONG so
!       // we can figure out if it is less than zero.
!       tree subscript;
  
        if( (refer.subscripts[i].field->attr & FIGCONST_MASK) == zero_value_e )
          {
*************** get_data_offset(const cbl_refer_t &refer
*** 670,677 ****
          // This is our internal representation for ALL, as in TABLE(ALL)
  
          // Set the subscript to 1
!         gg_assign(subscript,
!                   build_int_cst_type( TREE_TYPE(subscript), 1));
          // Flag this position as ALL
          all_flags |= all_flag_bit;
          }
--- 632,638 ----
          // This is our internal representation for ALL, as in TABLE(ALL)
  
          // Set the subscript to 1
!         subscript = build_int_cst_type(LONG, 1);
          // Flag this position as ALL
          all_flags |= all_flag_bit;
          }
*************** get_data_offset(const cbl_refer_t &refer
*** 680,732 ****
          if( !enabled_exceptions.match(ec_bound_subscript_e) )
            {
            // With no exception testing, just pick up the value
!           get_integer_value(subscript,
!                             refer.subscripts[i]);
            }
          else
            {
!           get_integer_value(subscript,
!                             refer.subscripts[i],
!                             CHECK_FOR_FRACTIONAL_DIGITS);
!           IF( var_decl_rdigits,
!               ne_op,
!               integer_zero_node )
              {
              // The subscript isn't an integer
              set_exception_code(ec_bound_subscript_e);
!             gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript), 1));
!             gg_assign(var_decl_rdigits, integer_zero_node);
              }
            ELSE
              {
!             IF( subscript, lt_op, gg_cast(TREE_TYPE(subscript),
!                                           integer_one_node) )
                {
                // The subscript is too small
                set_exception_code(ec_bound_subscript_e);
-               gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript),
-                                                       1));
                }
              ELSE
                {
                IF( subscript,
                    gt_op,
!                   build_int_cst_type( TREE_TYPE(subscript),
!                                       parent->occurs.ntimes()) )
                  {
                  // The subscript is too large
                  set_exception_code(ec_bound_subscript_e);
-                 gg_assign(subscript, build_int_cst_type(TREE_TYPE(subscript),
-                                                         1));
                  }
                ELSE
                  {
                  }
-                 ENDIF
-               }
                ENDIF
              }
            ENDIF
            }
          }
  
--- 641,698 ----
          if( !enabled_exceptions.match(ec_bound_subscript_e) )
            {
            // With no exception testing, just pick up the value
!           subscript = get_integer_value(refer.subscripts[i]);
            }
          else
            {
!           tree type = LONG;
!           subscript = gg_cast(type,
!                               get_integer_value(refer.subscripts[i],
!                                                 CHECK_FOR_FRACTIONAL_DIGITS));
!           tree too_small = gg_logical_lt(subscript,
!                                          gg_cast(type, integer_one_node));
!           tree too_big   = gg_logical_gt(subscript,
!                                          build_int_cst_type(type,
!                                                      parent->occurs.ntimes()));
! 
!           IF( var_decl_fracdigits, ne_op, integer_zero_node )
              {
              // The subscript isn't an integer
              set_exception_code(ec_bound_subscript_e);
!             gg_assign(var_decl_fracdigits, integer_zero_node);
              }
            ELSE
              {
!             IF( subscript, lt_op, gg_cast(type, integer_one_node) )
                {
                // The subscript is too small
                set_exception_code(ec_bound_subscript_e);
                }
              ELSE
                {
                IF( subscript,
                    gt_op,
!                   build_int_cst_type(type, parent->occurs.ntimes()) )
                  {
                  // The subscript is too large
                  set_exception_code(ec_bound_subscript_e);
                  }
                ELSE
                  {
                  }
                ENDIF
+               }
+             ENDIF
              }
            ENDIF
+           subscript = if_condition(too_small,
+                                    build_int_cst_type(type, 1),
+                                    subscript,
+                                    type);
+           subscript = if_condition(too_big,
+                                    build_int_cst_type(type, 1),
+                                    subscript,
+                                    type);
            }
          }
  
*************** get_data_offset(const cbl_refer_t &refer
*** 739,749 ****
          {
          if( parent->occurs.depending_on )
            {
-           tree value64 = gg_define_variable(LONG);
            cbl_field_t *odo = symbol_find_odo(parent);
!           get_depending_on_value_from_odo(value64, odo);
  
!           IF( subscript, gt_op, value64 )
              {
              set_exception_code(ec_bound_odo_e);
              }
--- 705,714 ----
          {
          if( parent->occurs.depending_on )
            {
            cbl_field_t *odo = symbol_find_odo(parent);
!           tree value64 = get_depending_on_value_from_odo(odo);
  
!           IF( gg_cast(LONG, subscript), gt_op, gg_cast(LONG, value64) )
              {
              set_exception_code(ec_bound_odo_e);
              }
*************** get_data_offset(const cbl_refer_t &refer
*** 757,767 ****
  
        // Subscript is now a one-based integer
        // Make it zero-based:
! 
!       gg_decrement(subscript);
! 
        tree augment = gg_multiply(subscript, get_any_capacity(parent));
!       gg_assign(retval, gg_add(retval, gg_cast(SIZE_T, augment)));
  
        parent = parent_of(parent);
        }
--- 722,730 ----
  
        // Subscript is now a one-based integer
        // Make it zero-based:
!       gg_decrement2(subscript);
        tree augment = gg_multiply(subscript, get_any_capacity(parent));
!       retval = gg_add(retval, gg_cast(SIZE_T, augment));
  
        parent = parent_of(parent);
        }
*************** get_data_offset(const cbl_refer_t &refer
*** 771,781 ****
      {
      REFER("refmod refstart");
      // We have a refmod to deal with
!     tree refstart = gg_define_variable(LONG);
!     tree reflen   = gg_define_variable(LONG);
      get_and_check_refstart_and_reflen(refstart, reflen, refer);
  
!     gg_assign(retval, gg_add(retval, gg_cast(SIZE_T, refstart)));
      }
  
    if( pflags )
--- 734,744 ----
      {
      REFER("refmod refstart");
      // We have a refmod to deal with
!     tree refstart;
!     tree reflen;
      get_and_check_refstart_and_reflen(refstart, reflen, refer);
  
!     retval = gg_add(retval, gg_cast(SIZE_T, refstart));
      }
  
    if( pflags )
*************** get_data_address( cbl_field_t *field,
*** 992,1002 ****
    {
    if( offset )
      {
!     return gg_cast( UCHAR_P,
!                     gg_add( gg_cast(SIZE_T,
!                                     member( field->var_decl_node,
!                                             "data")),
!                             offset));
      }
    else
      {
--- 955,961 ----
    {
    if( offset )
      {
!     return gg_add(member(field->var_decl_node, "data"), offset);
      }
    else
      {
*************** get_power_of_two(int nbytes)
*** 1066,1072 ****
    // move to pure binary variable.
    FIXED_WIDE_INT(128) retval = 1;
    static const int MAX_POWER = 8 ;
!   static const unsigned long long pos[MAX_POWER+1] =
      {
      1ULL,                       // 0 byte
      256ULL,                     // 1 bytes
--- 1025,1031 ----
    // move to pure binary variable.
    FIXED_WIDE_INT(128) retval = 1;
    static const int MAX_POWER = 8 ;
!   static const unsigned long long pos[MAX_POWER] =
      {
      1ULL,                       // 0 byte
      256ULL,                     // 1 bytes
*************** get_power_of_two(int nbytes)
*** 1083,1096 ****
      }
    else
      {
!     retval = pos[nbytes];
!     retval *= retval;
      }
    return retval;
    }
  
  void
! scale_by_power_of_ten_N(tree value,
                        int N,
                        bool check_for_fractional)
    {
--- 1042,1054 ----
      }
    else
      {
!     gcc_unreachable();
      }
    return retval;
    }
  
  void
! scale_by_power_of_ten_N(tree &value,
                        int N,
                        bool check_for_fractional)
    {
*************** scale_by_power_of_ten_N(tree value,
*** 1105,1131 ****
      {
      tree value_type = TREE_TYPE(value);
      FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(N);
!     gg_assign(value, gg_multiply(value, wide_int_to_tree( value_type,
!                                   power_of_ten)));
      }
    if( N < 0 )
      {
      tree value_type = TREE_TYPE(value);
      FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(-N);
      if( check_for_fractional )
        {
!       IF( gg_mod(value, wide_int_to_tree( value_type,
!                                           power_of_ten)),
            ne_op,
            gg_cast(value_type, integer_zero_node) )
          {
!         gg_assign(var_decl_rdigits, integer_one_node);
          }
        ELSE
          ENDIF
        }
!     gg_assign(value, gg_divide(value, wide_int_to_tree( value_type,
!                                   power_of_ten)));
      }
    }
  
--- 1063,1090 ----
      {
      tree value_type = TREE_TYPE(value);
      FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(N);
!     value = gg_multiply(value, wide_int_to_tree( value_type,
!                                   power_of_ten));
      }
    if( N < 0 )
      {
      tree value_type = TREE_TYPE(value);
      FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(-N);
+     tree pot = wide_int_to_tree(value_type, power_of_ten);
+ 
      if( check_for_fractional )
        {
!       value = save_expr(value);
!       IF( gg_mod(value, pot),
            ne_op,
            gg_cast(value_type, integer_zero_node) )
          {
!         gg_assign(var_decl_fracdigits, integer_one_node);
          }
        ELSE
          ENDIF
        }
!     value = gg_divide(value, pot);
      }
    }
  
*************** scale_by_power_of_ten(tree value,
*** 1135,1171 ****
                        bool check_for_fractional)
    {
    Analyze();
!   tree retval = gg_define_variable(INT);
  
    if( check_for_fractional )
      {
!     // Our caller expects us to return 1 if value was something like 99v99 and
!     // the fractional part was non-zero
!     gg_assign(value,
!               gg_cast(TREE_TYPE(value),
!                       gg_call_expr(INT128,
!                                    "__gg__scale_by_power_of_ten_1",
!                                    gg_cast(INT128, value),
!                                    N,
!                                    NULL_TREE)));
!     }
!   else
!     {
!     // Our caller does not expect us to test for fractional values
!     gg_assign(value,
!               gg_cast(TREE_TYPE(value),
!                       gg_call_expr(INT128,
!                                    "__gg__scale_by_power_of_ten_2",
!                                    gg_cast(INT128, value),
!                                    N,
!                                    NULL_TREE)));
! 
      }
  
-   gg_assign(retval, integer_zero_node);
    return retval;
    }
! 
  void
  hex_dump(tree data, size_t bytes)
    {
--- 1094,1121 ----
                        bool check_for_fractional)
    {
    Analyze();
! 
!   const char *function_name =
!     check_for_fractional ? "__gg__scale_by_power_of_ten_1"
!                          : "__gg__scale_by_power_of_ten_2";
! 
!   tree retval =
!     gg_cast(TREE_TYPE(value),
!             gg_call_expr(INT128,
!                          function_name,
!                          gg_cast(INT128, value),
!                          N,
!                          NULL_TREE));
  
    if( check_for_fractional )
      {
!     // Force the call before the caller examines var_decl_fracdigits.
!     retval = gg_define_variable(TREE_TYPE(value), retval);
      }
  
    return retval;
    }
!   
  void
  hex_dump(tree data, size_t bytes)
    {
*************** build_array_of_refers(size_t N,
*** 1388,1420 ****
    }
  
  tree
! build_array_of_size_t( size_t  N,
!                        const size_t *values)
    {
!   // We create and populate an array of size_t values
! 
!   // This only works because it is used in but one spot.  If this routine is
!   // called twice, be careful about how the first one is used.  It's a static
!   // variable, you see.
!   tree values_p = gg_define_variable(SIZE_T_P);
!   if( N )
      {
!     gg_assign(  values_p,
!                 gg_cast(build_pointer_type(SIZE_T),
!                         gg_malloc(N*sizeof(SIZE_T))));
! 
!     for(size_t i=0; i<N; i++)
!       {
!       gg_assign(  gg_array_value(values_p, i),
!                   build_int_cst_type(SIZE_T, values[i]));
!       }
      }
!   else
      {
!     gg_assign(  values_p,
!                 gg_cast(build_pointer_type(SIZE_T), null_pointer_node ));
      }
!   return values_p;
    }
  
  void
--- 1338,1365 ----
    }
  
  tree
! build_array_of_size_t(size_t N, const size_t *values)
    {
!   if( !N )
      {
!     return gg_cast(SIZE_T_P, null_pointer_node);
      }
! 
!   tree array_type = build_array_type_nelts(SIZE_T, N);
!   tree ctor = build_constructor(array_type, NULL);
! 
!   for(size_t i=0; i<N; i++)
      {
!     CONSTRUCTOR_APPEND_ELT(CONSTRUCTOR_ELTS(ctor),
!                            build_int_cst_type(SIZE_T, i),
!                            build_int_cst_type(SIZE_T, values[i]));
      }
! 
!   TREE_CONSTANT(ctor) = 1;
! 
!   tree array = gg_define_variable(array_type, ctor);
! 
!   return gg_pointer_to_array(array);
    }
  
  void
*************** parser_display_internal_field(tree file_
*** 1427,1449 ****
    parser_display_internal(file_descriptor, wrapper, advance);
    }
  
- char *
- 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));
- 
-   size_t charsout;
-   const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
-                                      field->codeset.encoding,
-                                      field->data.original(),
-                                      field->data.capacity(),
-                                      &charsout);
-   memcpy(buffer, converted, field->data.capacity()+1);
-   return buffer;
-   }
- 
  bool
  refer_is_clean(const cbl_refer_t &refer)
    {
--- 1372,1377 ----
*************** refer_is_super_clean(const cbl_refer_t &
*** 1490,1507 ****
    // GENERIC, thus getting rid the additional level of indirection through
    // the refer.field->var_decl_node::data pointer
  
!   // Note: By rights, FldLiteralA should be super-clean, but errors ensue when
!   // it is made so.  This should be tracked down.  The disconnect might be in
!   // get_location().
!   return     // refer.field->type == FldLiteralA ||
!              refer.field->type == FldLiteralN
!            || (refer_is_clean(refer)
!               && !(refer.field->attr & (  based_e
!                                         | linkage_e
!                                         | local_e
!                                         | intermediate_e
!                                         | any_length_e
!                                         | external_e))) ;
    }
  
  bool
--- 1418,1432 ----
    // GENERIC, thus getting rid the additional level of indirection through
    // the refer.field->var_decl_node::data pointer
  
!   return     refer.field->type == FldLiteralA
!          ||  refer.field->type == FldLiteralN
!          || (refer_is_clean(refer)
!             && !(refer.field->attr & (  based_e
!                                       | linkage_e
!                                       | local_e
!                                       | intermediate_e
!                                       | any_length_e
!                                       | external_e))) ;
    }
  
  bool
*************** refer_refmod_length(const cbl_refer_t &r
*** 1536,1543 ****
        */
    Analyze();
    REFER("refstart and reflen");
!   tree refstart = gg_define_variable(LONG);
!   tree reflen   = gg_define_variable(LONG);
  
    get_and_check_refstart_and_reflen( refstart, reflen, refer);
  
--- 1461,1468 ----
        */
    Analyze();
    REFER("refstart and reflen");
!   tree refstart;
!   tree reflen;
  
    get_and_check_refstart_and_reflen( refstart, reflen, refer);
  
*************** refer_fill_depends(const cbl_refer_t &re
*** 1556,1572 ****
    Analyze();
    cbl_field_t *odo = symbol_find_odo(refer.field);
  
!   tree value64 = gg_define_variable(LONG);
! 
!   get_depending_on_value(value64, refer);
  
    // value64 is >= zero and < bounds.upper
  
    // We multiply the ODO value by the size of the data capacity to get the
    // shortened length:
  
!   tree mult_expr = gg_multiply( build_int_cst_type(TREE_TYPE(value64),
!                                                    odo->data.capacity()),
                                  value64 );
  
    // And we add that to the distance from the requested variable to the odo
--- 1481,1494 ----
    Analyze();
    cbl_field_t *odo = symbol_find_odo(refer.field);
  
!   tree value64 = get_depending_on_value(refer);
  
    // value64 is >= zero and < bounds.upper
  
    // We multiply the ODO value by the size of the data capacity to get the
    // shortened length:
  
!   tree mult_expr = gg_multiply( build_int_cst_type(LONG, odo->data.capacity()),
                                  value64 );
  
    // And we add that to the distance from the requested variable to the odo
*************** refer_offset(const cbl_refer_t &refer, i
*** 1584,1589 ****
--- 1506,1516 ----
    // there is a refmod, the data location additionally gets augmented by
    // (refmod.from-1)
  
+   if( pflags )
+     {
+     *pflags = 0;
+     }
+ 
    if( !refer.field )
      {
      // It's common for the field to be missing.  It generally means that an
*************** refer_offset(const cbl_refer_t &refer, i
*** 1602,1657 ****
    }
  
  static
! tree   // size_t
  refer_size(const cbl_refer_t &refer, refer_type_t refer_type)
    {
    Analyze();
!   if( refer.refmod.len && refer.refmod.len->field->type == FldLiteralN )
      {
!     return build_int_cst_type(SIZE_T,
!                               atol(  refer.refmod.len->field->data.original())
!                                    * refer.field->codeset.stride());
      }
!   else
      {
!     tree retval = gg_define_variable(SIZE_T);
  
!     if( !refer.field )
!       {
!       return size_t_zero_node;
!       }
  
!     if( refer_is_clean(refer) )
!       {
!       return get_any_capacity(refer.field);
!       }
  
!     // Step the first:  Get the actual full length:
  
!     if( refer_has_depends(refer, refer_type) )
        {
!       // Because there is a depends, we might have to change the length:
!       gg_assign(retval, refer_fill_depends(refer));
        }
      else
        {
!       gg_assign(retval, get_any_capacity(refer.field));
!       }
  
!     if( refer.refmod.from || refer.refmod.len )
!       {
!       tree refmod = refer_refmod_length(refer);
!       // retval is the ODO based total length.
!       // refmod is the length resulting from refmod(from:len)
!       // We have to reduce retval by the effect of refmod:
!       tree diff = gg_subtract(get_any_capacity(refer.field),
!                               refmod);
!       gg_assign(retval, gg_subtract(retval, diff));
        }
-     return retval;
      }
-   }
  
  tree  // size_t
  refer_size_dest(const cbl_refer_t &refer)
    {
--- 1529,1591 ----
    }
  
  static
! tree // size_t
  refer_size(const cbl_refer_t &refer, refer_type_t refer_type)
    {
    Analyze();
! 
!   if( !refer.field )
      {
!     return size_t_zero_node;
      }
! 
!   if(    refer.refmod.len
!       && refer.refmod.len->field->type == FldLiteralN )
      {
!     return build_int_cst_type(
!              SIZE_T,
!              atol(refer.refmod.len->field->data.original())
!                * refer.field->codeset.stride());
!     }
  
!   if( refer_is_clean(refer) )
!     {
!     return get_any_capacity(refer.field);
!     }
  
!   tree retval;
  
!   if( refer_has_depends(refer, refer_type) )
!     {
!     retval = gg_cast(SIZE_T, refer_fill_depends(refer));
!     }
!   else
!     {
!     retval = get_any_capacity(refer.field);
!     }
  
!   if( refer.refmod.from || refer.refmod.len )
!     {
!     tree refmod_length = refer_refmod_length(refer);
! 
!     if( refer.refmod.len )
        {
!       // An explicit reference-modification length is the result length.
!       retval = refmod_length;
        }
      else
        {
!       // For (start:), refmod_length was calculated using the declared
!       // capacity.  Reduce it by the amount removed by an ODO.
!       tree odo_reduction =
!         gg_subtract(get_any_capacity(refer.field), retval);
  
!       retval = gg_subtract(refmod_length, odo_reduction);
        }
      }
  
+   return retval;
+   }
  tree  // size_t
  refer_size_dest(const cbl_refer_t &refer)
    {
*************** refer_size_dest(const cbl_refer_t &refer
*** 1661,1685 ****
  tree  // size_t
  refer_size_source(const cbl_refer_t &refer)
    {
-   /*  There are oddities involved with refer_size_source and refer_size_dest.
-       See the comments in refer_has_depends for some explanation.  There are
-       other considerations, as well.  For example, consider a move, where you
-       have both a source and a dest.  Given that refer_size returns a static,
-       there are ways that the source and dest can trip over each other.
- 
-       The logic here avoids all known cases where they might trip over each
-       other.  But there conceivably might be others,.
- 
-       You have been warned.
-       */
- 
    if( !refer.field )
      {
      return size_t_zero_node;
      }
  
-   // This test has to be here, otherwise there are failures in regression
-   // testing.
    if( refer_is_clean(refer) )
      {
      return get_any_capacity(refer.field);
--- 1595,1605 ----
*************** refer_size_source(const cbl_refer_t &ref
*** 1699,1709 ****
                                     * refer.field->codeset.stride());      }
      }
  
!   // This assignment has to be here. Simply returning refer_size() results
!   // in regression testing errors.
!   ////static tree retval = gg_define_variable(SIZE_T, "..rss_retval", vs_file_stactic);
!   tree retval = gg_define_variable(SIZE_T);
!   gg_assign(retval, refer_size(refer, refer_source));
    return retval;
    }
  
--- 1619,1626 ----
                                     * refer.field->codeset.stride());      }
      }
  
!   tree retval = gg_cast(SIZE_T, refer_size(refer, refer_source));
! 
    return retval;
    }
  
*************** get_time_nanoseconds()
*** 1725,1737 ****
  #ifdef HAVE_CLOCK_GETTIME
    struct timespec ts;
    clock_gettime (CLOCK_REALTIME, &ts);
!   retval = ts.tv_sec * 1000000000 + ts.tv_nsec;
    return retval;
  #endif
  #ifdef HAVE_GETTIMEOFDAY
    struct timeval tv;
    gettimeofday (&tv, NULL);
!   retval = tv.tv_sec * 1000000000 + tv.tv_usec * 1000;
    return retval;
  #endif
    return retval;
--- 1642,1656 ----
  #ifdef HAVE_CLOCK_GETTIME
    struct timespec ts;
    clock_gettime (CLOCK_REALTIME, &ts);
!   retval = static_cast<uint64_t>(ts.tv_sec) * 1000000000 
!                                           + static_cast<uint64_t>(ts.tv_nsec);
    return retval;
  #endif
  #ifdef HAVE_GETTIMEOFDAY
    struct timeval tv;
    gettimeofday (&tv, NULL);
!   retval = static_cast<uint64_t>(ts.tv_sec) * 1000000000 
!                                           + static_cast<uint64_t>(ts.tv_nsec);
    return retval;
  #endif
    return retval;
*************** is_pure_integer(const cbl_field_t *field
*** 1795,1820 ****
    return retval;
    }
  
  static void
! binary_from_FldNumericBin5(tree &value, const cbl_field_t *field, tree dest_type)
    {
!   value = gg_define_variable(dest_type);
!   safe_cast(value, field);
    }
  
  static void
  binary_from_FldNumericBin5(tree &value, const cbl_refer_t &refer, tree dest_type)
    {
!   value = gg_define_variable(dest_type);
!   safe_cast(value, refer);
    }
  
  static void
  binary_from_FldLiteralN(tree &value, const cbl_field_t *field, tree dest_type)
    {
    // The data_decl_node has the value we need.
!   value = gg_define_variable(dest_type);
!   gg_assign(value, gg_cast(dest_type, field->data_decl_node));
    }
  
  static void
--- 1714,1828 ----
    return retval;
    }
  
+ tree
+ safe_load(tree source_location,
+           tree source_type)
+   {
+   // source_location is only known to point at bytes.  Consequently,
+   // don't claim any alignment greater than one byte.
+   tree access_type =
+     build_aligned_type(source_type, BITS_PER_UNIT);
+ 
+   // This pointer type is used by MEM_REF for type-Based Alias Analysis.
+   // The TRUE argument sets TYPE_REF_CAN_ALIAS_ALL, giving the reference alias
+   // set zero.
+   tree alias_ptr_type =
+     build_pointer_type_for_mode(access_type, VOIDmode, true);
+ 
+   tree zero = build_int_cst(alias_ptr_type, 0);
+ 
+   return fold_build2(MEM_REF,
+                      access_type,
+                      source_location,
+                      zero);
+   }
+ 
+ void
+ safe_store(tree dest_location,
+            tree dest_type,
+            tree value)
+   {
+   tree destination = safe_load(dest_location, dest_type);
+ 
+   /*
+    * First perform any actual value conversion using the ordinary,
+    * naturally aligned type.
+    */
+   value = gg_cast(dest_type, value);
+ 
+   /*
+    * safe_load() returns a MEM_REF whose type is an alignment-1 variant
+    * of dest_type.  Retype the value to that exact variant before
+    * constructing the MODIFY_EXPR.
+    */
+   if( TREE_TYPE(value) != TREE_TYPE(destination) )
+     {
+     value = build1(NOP_EXPR,
+                    TREE_TYPE(destination),
+                    value);
+     }
+ 
+   gcc_assert(TREE_TYPE(value) == TREE_TYPE(destination));
+ 
+   gg_assign(destination, value);
+   }
+ 
+ static tree
+ safe_cast(tree source_location,
+           tree source_type,
+           tree dest_type)
+   {
+   tree source = safe_load(source_location, source_type);
+ 
+   return gg_cast(dest_type, source);
+   }
+ 
+ static tree
+ safe_cast(const cbl_field_t *field,
+           tree dest_type)
+   {
+   tree source_location = get_location(field);
+ 
+   tree source_type = tree_type_from_field(field);
+ 
+   return safe_cast(source_location,
+                    source_type,
+                    dest_type);
+   }
+ 
+ static tree
+ safe_cast(const cbl_refer_t &refer,
+           tree dest_type)
+   {
+   tree source_location = get_location(refer);
+ 
+   tree source_type = tree_type_from_refer(refer);
+ 
+   return safe_cast(source_location,
+                    source_type,
+                    dest_type);
+   }
+ 
  static void
! binary_from_FldNumericBin5(tree &value,
!                            const cbl_field_t *field,
!                            tree dest_type)
    {
!   value = safe_cast(field, dest_type);
    }
  
+ 
  static void
  binary_from_FldNumericBin5(tree &value, const cbl_refer_t &refer, tree dest_type)
    {
!   value = safe_cast(refer, dest_type);
    }
  
  static void
  binary_from_FldLiteralN(tree &value, const cbl_field_t *field, tree dest_type)
    {
    // The data_decl_node has the value we need.
!   value = gg_cast(dest_type, field->data_decl_node);
    }
  
  static void
*************** binary_from_FldNumericBinary(tree &value
*** 1831,1845 ****
                               field,
                               tree_type_from_field(field));
    // retval is in the machine's native encoding.
-   value = gg_define_variable(type);
    if(!BYTES_BIG_ENDIAN)
      {
      // The actual return value gets the flipped bytes:
!     gg_assign(value, gg_cast(type, gg_bswap(unflipped)));
      }
    else
      {
!     gg_assign(value, gg_cast(type, unflipped));
      }
    }
  
--- 1839,1852 ----
                               field,
                               tree_type_from_field(field));
    // retval is in the machine's native encoding.
    if(!BYTES_BIG_ENDIAN)
      {
      // The actual return value gets the flipped bytes:
!     value = gg_cast(type, gg_bswap(unflipped));
      }
    else
      {
!     value = gg_cast(type, unflipped);
      }
    }
  
*************** binary_from_FldNumericBinary(tree &value
*** 1851,1870 ****
                               refer,
                               tree_type_from_field(refer.field));
    // retval is in the machine's native encoding.
-   value = gg_define_variable(type);
    if(!BYTES_BIG_ENDIAN)
      {
      // The actual return value gets the flipped bytes:
!     gg_assign(value, gg_cast(type, gg_bswap(unflipped)));
      }
    else
      {
!     gg_assign(value, gg_cast(type, unflipped));
      }
    }
  
  static void
! d_and_q_num_disp( tree  &retval,   // We define this return value
                    tree   loc,     // This is a UCHAR_P
                    size_t digits,
                    size_t stride)
--- 1858,1876 ----
                               refer,
                               tree_type_from_field(refer.field));
    // retval is in the machine's native encoding.
    if(!BYTES_BIG_ENDIAN)
      {
      // The actual return value gets the flipped bytes:
!     value = gg_cast(type, gg_bswap(unflipped));
      }
    else
      {
!     value = gg_cast(type, unflipped);
      }
    }
  
  static void
! d_and_q_num_disp( tree  &retval,
                    tree   loc,     // This is a UCHAR_P
                    size_t digits,
                    size_t stride)
*************** d_and_q_num_disp( tree  &retval,   // We
*** 1873,1898 ****
      {
      case 1:
        {
!       retval = gg_define_variable(UCHAR);
!       gg_assign(retval,
!                 gg_bitwise_and(gg_indirect(loc),
!                                build_int_cst_type(UCHAR, 0x0F)));
        break;
        }
  
      case 2:
        {
-       retval = gg_define_variable(UCHAR);
        tree ldigit = gg_bitwise_and(gg_indirect(loc),
                                     build_int_cst_type(UCHAR, 0x0F));
        tree rdigit = gg_bitwise_and(gg_indirect(loc,
                                                 build_int_cst_type(SIZE_T,
                                                                    stride)),
                                     build_int_cst_type(UCHAR, 0x0F));
!       gg_assign(retval,
!                 gg_add(gg_multiply(ldigit,
                                     build_int_cst_type(UCHAR, 10)),
!                        rdigit));
        break;
        }
  
--- 1879,1900 ----
      {
      case 1:
        {
!       retval = gg_bitwise_and(gg_indirect(loc),
!                                build_int_cst_type(UCHAR, 0x0F));
        break;
        }
  
      case 2:
        {
        tree ldigit = gg_bitwise_and(gg_indirect(loc),
                                     build_int_cst_type(UCHAR, 0x0F));
        tree rdigit = gg_bitwise_and(gg_indirect(loc,
                                                 build_int_cst_type(SIZE_T,
                                                                    stride)),
                                     build_int_cst_type(UCHAR, 0x0F));
!       retval = gg_add(gg_multiply(ldigit,
                                     build_int_cst_type(UCHAR, 10)),
!                        rdigit);
        break;
        }
  
*************** d_and_q_num_disp( tree  &retval,   // We
*** 1901,1907 ****
        {
        tree type = USHORT;
        int rsize = 2;
-       retval = gg_define_variable(type);
        tree left_half;
        tree right_half;
        d_and_q_num_disp(left_half,
--- 1903,1908 ----
*************** d_and_q_num_disp( tree  &retval,   // We
*** 1914,1924 ****
                                                   stride*(digits - rsize))),
                         rsize,
                         stride);
!       gg_assign(retval,
!                 gg_add(gg_cast(type,
!                                gg_multiply(left_half,
!                                           build_int_cst_type(type, 100))),
!                        gg_cast(type, right_half)));
        break;
        }
      case 5:
--- 1915,1924 ----
                                                   stride*(digits - rsize))),
                         rsize,
                         stride);
!       retval =    gg_add(gg_cast(type,
!                          gg_multiply(left_half,
!                                      build_int_cst_type(type, 100))),
!                          gg_cast(type, right_half));
        break;
        }
      case 5:
*************** d_and_q_num_disp( tree  &retval,   // We
*** 1928,1934 ****
        {
        tree type = UINT;
        int rsize = 4;
-       retval = gg_define_variable(type);
        tree left_half;
        tree right_half;
        d_and_q_num_disp(left_half,
--- 1928,1933 ----
*************** d_and_q_num_disp( tree  &retval,   // We
*** 1941,1951 ****
                                                   stride*(digits - rsize))),
                         rsize,
                         stride);
!       gg_assign(retval,
!                 gg_add(gg_cast(type,
!                                gg_multiply(left_half,
!                                            build_int_cst_type(type, 10000))),
!                        gg_cast(type, right_half)));
        break;
        }
  
--- 1940,1949 ----
                                                   stride*(digits - rsize))),
                         rsize,
                         stride);
!       retval = gg_add(gg_cast(type,
!                               gg_multiply(left_half,
!                                           build_int_cst_type(type, 10000))),
!                        gg_cast(type, right_half));
        break;
        }
  
*************** d_and_q_num_disp( tree  &retval,   // We
*** 1960,1966 ****
        {
        tree type = ULONG;
        int rsize = 8;
-       retval = gg_define_variable(type);
        tree left_half;
        tree right_half;
        d_and_q_num_disp(left_half,
--- 1958,1963 ----
*************** d_and_q_num_disp( tree  &retval,   // We
*** 1973,2021 ****
                                                   stride*(digits - rsize))),
                         rsize,
                         stride);
!       gg_assign(retval,
!                 gg_add(gg_cast(type,
!                                gg_multiply(left_half,
                                       build_int_cst_type(type, 100000000UL))),
!                        gg_cast(type, right_half)));
        break;
        }
  
      default:
        {
        // 'digits' is greater than 16.  We will peel off sixteen digits at a
!       // time, and multiply-and-accumulate into our return value:
  
        tree type = UINT128;
-       retval = gg_define_variable(type);
  
!       size_t digits_this_time = std::min(digits, 16UL);
        digits -= digits_this_time;
        tree value;
        d_and_q_num_disp(value,
                         loc,
                         digits_this_time,
                         stride);
!       gg_assign(retval, gg_cast(type, value));
!       gg_assign(loc,
!                 gg_add(loc,
!                        build_int_cst_type(SIZE_T,
!                                           stride*digits_this_time)));
!       while(digits > 0)
          {
!         digits_this_time = std::min(digits, 16UL);
          size_t pot = pots[digits_this_time];
!         gg_assign(retval, gg_multiply(retval,
!                                       build_int_cst_type(type, pot)));
          d_and_q_num_disp(value,
                           loc,
                           digits_this_time,
                           stride);
!         gg_assign(retval, gg_add(retval, gg_cast(type, value)));
!         gg_assign(loc,
!                   gg_add(loc,
!                          build_int_cst_type(SIZE_T,
!                                             stride*digits_this_time)));
          digits -= digits_this_time;
          }
        break;
--- 1970,2023 ----
                                                   stride*(digits - rsize))),
                         rsize,
                         stride);
!       retval = gg_add(gg_cast(type,
!                               gg_multiply(left_half,
                                       build_int_cst_type(type, 100000000UL))),
!                        gg_cast(type, right_half));
        break;
        }
  
      default:
        {
        // 'digits' is greater than 16.  We will peel off sixteen digits at a
!       // time, and build a multiply-and-accumulate expression for our
!       // return value.
  
        tree type = UINT128;
  
!       size_t digits_this_time = std::min(digits, size_t(16));
        digits -= digits_this_time;
+ 
        tree value;
        d_and_q_num_disp(value,
                         loc,
                         digits_this_time,
                         stride);
! 
!       retval = gg_cast(type, value);
! 
!       loc = gg_add(loc,
!                    build_int_cst_type(SIZE_T,
!                                       stride*digits_this_time));
! 
!       while( digits > 0 )
          {
!         digits_this_time = std::min(digits, size_t(16));
          size_t pot = pots[digits_this_time];
! 
          d_and_q_num_disp(value,
                           loc,
                           digits_this_time,
                           stride);
! 
!         retval = gg_add(gg_multiply(retval,
!                                     build_int_cst_type(type, pot)),
!                         gg_cast(type, value));
! 
!         loc = gg_add(loc,
!                      build_int_cst_type(SIZE_T,
!                                         stride*digits_this_time));
! 
          digits -= digits_this_time;
          }
        break;
*************** binary_from_numdisp(tree &value,
*** 2032,2054 ****
    // This is where we build the actual numeric value of the digits of the
    // COBOL numeric display variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
-   value = gg_define_variable(return_type);
- 
-   // This is the operational counter
-   tree digit_count = gg_define_variable(SIZE_T);
  
    // The stride of the numerical value is the distance, in bytes, between
    // characters of the zoned decimal value.  It can be 1 (ascii or ebcdic),
    // or 2 or 4 for utf16 and utf32.
-   tree stride;
- 
-   gg_assign(digit_count, build_int_cst_type(SIZE_T, field->data.digits));
  
    charmap_t *charmap = __gg__get_charmap(field->codeset.encoding);
    size_t fstride = charmap->stride();
!   stride = build_int_cst_type(SIZE_T, fstride);
  
!   tree sign_location = gg_define_variable(UCHAR_P);
  
    // We need to be able to handle encodings that are big-endian.  We do that
    // here with a little bit of a stunt.  The 'location' we are handed points
--- 2034,2049 ----
    // This is where we build the actual numeric value of the digits of the
    // COBOL numeric display variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
  
    // The stride of the numerical value is the distance, in bytes, between
    // characters of the zoned decimal value.  It can be 1 (ascii or ebcdic),
    // or 2 or 4 for utf16 and utf32.
  
    charmap_t *charmap = __gg__get_charmap(field->codeset.encoding);
    size_t fstride = charmap->stride();
!   tree stride = build_int_cst_type(SIZE_T, fstride);
  
!   tree sign_location = NULL_TREE;
  
    // We need to be able to handle encodings that are big-endian.  We do that
    // here with a little bit of a stunt.  The 'location' we are handed points
*************** binary_from_numdisp(tree &value,
*** 2059,2067 ****
    // works off that base location.
    if( charmap->is_big_endian() )
      {
!     gg_assign(location,
!               gg_add(location,
!                      build_int_cst_type(SIZE_T, fstride-1)));
      }
  
    if( field->attr & signable_e )
--- 2054,2061 ----
    // works off that base location.
    if( charmap->is_big_endian() )
      {
!     location = gg_add(location,
!                       build_int_cst_type(SIZE_T, fstride-1));
      }
  
    if( field->attr & signable_e )
*************** binary_from_numdisp(tree &value,
*** 2073,2088 ****
        if( field->attr & leading_e )
          {
          // separate & leading.  sign_location is the first character.
!         gg_assign(sign_location, location);
!         gg_assign(location, gg_add(location, stride));
          }
        else
          {
          // separate & trailing.  The sign byte is after the last character:
!         gg_assign(sign_location,
                    gg_add(location,
                           build_int_cst_type(SIZE_T,
!                                         field->data.digits * fstride)));
          }
        }
      else
--- 2067,2082 ----
        if( field->attr & leading_e )
          {
          // separate & leading.  sign_location is the first character.
!         sign_location = location;
!         location = gg_add(location, stride);
          }
        else
          {
          // separate & trailing.  The sign byte is after the last character:
!         sign_location =
                    gg_add(location,
                           build_int_cst_type(SIZE_T,
!                                         field->data.digits * fstride));
          }
        }
      else
*************** binary_from_numdisp(tree &value,
*** 2091,2106 ****
        if( field->attr & leading_e )
          {
          // internal & leading
!         gg_assign(sign_location, location);
          }
        else
          {
          // internal & trailing
!         gg_assign(sign_location,
                    gg_add(location,
                           build_int_cst_type(SIZE_T,
                                              fstride *
!                                               (field->data.digits-1))));
          }
        }
      }
--- 2085,2100 ----
        if( field->attr & leading_e )
          {
          // internal & leading
!         sign_location = location;
          }
        else
          {
          // internal & trailing
!         sign_location =
                    gg_add(location,
                           build_int_cst_type(SIZE_T,
                                              fstride *
!                                               (field->data.digits-1)));
          }
        }
      }
*************** binary_from_numdisp(tree &value,
*** 2117,2139 ****
    tree d_and_q;
    d_and_q_num_disp(d_and_q, location, digits, fstride);
  
    // d_and_q contains our value.  We need to know if negativeness is involved.
    if( field->attr & signable_e )
      {
      if( field->attr & separate_e )
        {
        // If the sign location is a minus sign, we have to negate the value.
!       IF( gg_indirect(sign_location),
!           eq_op,
!           build_int_cst_type(UCHAR, charmap->mapped_character(ascii_minus)) )
!         {
!         gg_assign(value, gg_negate(gg_cast(return_type, d_and_q)));
!         }
!       ELSE
!         {
!         gg_assign(value, gg_cast(return_type, d_and_q));
!         }
!       ENDIF
        }
      else
        {
--- 2111,2128 ----
    tree d_and_q;
    d_and_q_num_disp(d_and_q, location, digits, fstride);
  
+   tree is_negative = boolean_false_node;
+ 
    // d_and_q contains our value.  We need to know if negativeness is involved.
    if( field->attr & signable_e )
      {
      if( field->attr & separate_e )
        {
        // If the sign location is a minus sign, we have to negate the value.
!       is_negative = gg_logical_eq(
!                   gg_indirect(sign_location),
!                   build_int_cst_type(UCHAR,
!                                      charmap->mapped_character(ascii_minus)));
        }
      else
        {
*************** binary_from_numdisp(tree &value,
*** 2142,2181 ****
          {
          // In EBCDIC, the value is negative when the sign_indicator is less
          // than ebcdic zero:
!         IF( gg_indirect(sign_location),
!             lt_op,
!             build_int_cst_type(UCHAR, charmap->mapped_character(ascii_zero)) )
!           {
!           gg_assign(value, gg_negate(gg_cast(return_type, d_and_q)));
!           }
!         ELSE
!           {
!           gg_assign(value, gg_cast(return_type, d_and_q));
!           }
!         ENDIF
          }
        else
          {
          // In ASCII, the value is negative when the sign_indicator is greater
          // than ascii nine:
!         IF( gg_indirect(sign_location),
!             gt_op,
!             build_int_cst_type(UCHAR, ascii_9) )
!           {
!           gg_assign(value, gg_negate(gg_cast(return_type, d_and_q)));
!           }
!         ELSE
!           {
!           gg_assign(value, gg_cast(return_type, d_and_q));
!           }
!         ENDIF
          }
        }
      }
!   else
!     {
!     gg_assign(value, gg_cast(return_type, d_and_q));
!     }
    }
  
  static void
--- 2131,2155 ----
          {
          // In EBCDIC, the value is negative when the sign_indicator is less
          // than ebcdic zero:
!         is_negative = gg_logical_lt(
!         gg_indirect(sign_location),
!                 build_int_cst_type(UCHAR,
!                                    charmap->mapped_character(ascii_zero)));
          }
        else
          {
          // In ASCII, the value is negative when the sign_indicator is greater
          // than ascii nine:
!         is_negative = gg_logical_gt(gg_indirect(sign_location),
!                                     build_int_cst_type(UCHAR, ascii_9));
          }
        }
      }
!   value = if_condition(is_negative,
!                        gg_negate(gg_cast(return_type, d_and_q)),
!                        gg_cast(return_type, d_and_q),
!                        return_type);
!   return;
    }
  
  static void
*************** binary_from_FldNumericDisplay(tree &valu
*** 2183,2190 ****
                                const cbl_field_t *field,
                                tree return_type)
    {
!   tree location;
!   get_location(location, field);
    binary_from_numdisp(value,
                        field,
                        location,
--- 2157,2163 ----
                                const cbl_field_t *field,
                                tree return_type)
    {
!   tree location = get_location(field);
    binary_from_numdisp(value,
                        field,
                        location,
*************** binary_from_FldNumericDisplay(tree &valu
*** 2196,2203 ****
                                const cbl_refer_t &refer,
                                tree return_type)
    {
!   tree location;
!   get_location(location, refer);
    binary_from_numdisp(value,
                        refer.field,
                        location,
--- 2169,2175 ----
                                const cbl_refer_t &refer,
                                tree return_type)
    {
!   tree location = get_location(refer);
    binary_from_numdisp(value,
                        refer.field,
                        location,
*************** d_and_q_packed(tree &value, tree base, s
*** 2262,2284 ****
        {
        // This is what happens for a single-digit comp-3
        tree type = UCHAR;
!       value = gg_define_variable(type);
!       gg_assign(value, gg_cast(type, integer_zero_node));
        break;
        }
      case 1:
        {
        // One place is two digits:
!       tree type = UCHAR;
!       value = gg_define_variable(type);
!       gg_assign(value, gg_array_value(dp2bin, gg_indirect(base)));
        break;
        }
      case 2:
        {
        // Four digits:
        tree type = USHORT;
-       value = gg_define_variable(type);
        tree lhalf;
        tree rhalf;
        size_t rplaces = 1;
--- 2234,2252 ----
        {
        // This is what happens for a single-digit comp-3
        tree type = UCHAR;
!       value = gg_cast(type, integer_zero_node);
        break;
        }
      case 1:
        {
        // One place is two digits:
!       value = gg_array_value(dp2bin, gg_indirect(base));
        break;
        }
      case 2:
        {
        // Four digits:
        tree type = USHORT;
        tree lhalf;
        tree rhalf;
        size_t rplaces = 1;
*************** d_and_q_packed(tree &value, tree base, s
*** 2288,2304 ****
        d_and_q_packed(rhalf,
                       gg_add(base, build_int_cst_type(SIZE_T, lplaces)),
                       rplaces);
!       gg_assign(value,
!                 gg_add(gg_cast(type, gg_multiply(gg_cast(type, lhalf),
                                                 build_int_cst_type(type, pot))),
!                        gg_cast(type, rhalf)));
        break;
        }
      case 3: // six digits
      case 4: // eight digits
        {
        tree type = UINT;
-       value = gg_define_variable(type);
        tree lhalf;
        tree rhalf;
        size_t rplaces = 2;
--- 2256,2270 ----
        d_and_q_packed(rhalf,
                       gg_add(base, build_int_cst_type(SIZE_T, lplaces)),
                       rplaces);
!       value =  gg_add(gg_cast(type, gg_multiply(gg_cast(type, lhalf),
                                                 build_int_cst_type(type, pot))),
!                       gg_cast(type, rhalf));
        break;
        }
      case 3: // six digits
      case 4: // eight digits
        {
        tree type = UINT;
        tree lhalf;
        tree rhalf;
        size_t rplaces = 2;
*************** d_and_q_packed(tree &value, tree base, s
*** 2308,2316 ****
        d_and_q_packed(rhalf,
                       gg_add(base, build_int_cst_type(SIZE_T, lplaces)),
                       rplaces);
!       gg_assign(value,
!                 gg_add(gg_cast(type, gg_multiply(gg_cast(type, lhalf), build_int_cst_type(type, pot))),
!                        gg_cast(type, rhalf)));
        break;
        }
      case 5: // ten digits
--- 2274,2283 ----
        d_and_q_packed(rhalf,
                       gg_add(base, build_int_cst_type(SIZE_T, lplaces)),
                       rplaces);
!       value = gg_add(gg_cast(type,
!                              gg_multiply(gg_cast(type, lhalf),
!                                          build_int_cst_type(type, pot))),
!                      gg_cast(type, rhalf));
        break;
        }
      case 5: // ten digits
*************** d_and_q_packed(tree &value, tree base, s
*** 2319,2325 ****
      case 8: // sixteen digits
        {
        tree type = ULONG;
-       value = gg_define_variable(type);
        tree lhalf;
        tree rhalf;
        size_t rplaces = 4;
--- 2286,2291 ----
*************** d_and_q_packed(tree &value, tree base, s
*** 2329,2337 ****
        d_and_q_packed(rhalf,
                       gg_add(base, build_int_cst_type(SIZE_T, lplaces)),
                       rplaces);
!       gg_assign(value,
!                 gg_add(gg_cast(type, gg_multiply(gg_cast(type, lhalf), build_int_cst_type(type, pot))),
!                        gg_cast(type, rhalf)));
        break;
        }
      default:
--- 2295,2304 ----
        d_and_q_packed(rhalf,
                       gg_add(base, build_int_cst_type(SIZE_T, lplaces)),
                       rplaces);
!       value = gg_add(gg_cast(type,
!                              gg_multiply(gg_cast(type, lhalf),
!                                          build_int_cst_type(type, pot))),
!                      gg_cast(type, rhalf));
        break;
        }
      default:
*************** d_and_q_packed(tree &value, tree base, s
*** 2339,2367 ****
        // This is nine places (eighteen digits) and up,  We are going to peel
        // off eight places (sixteen digits) at a time:
        tree type = UINT128;
-       value = gg_define_variable(type);
        tree lhalf;
        size_t lplaces = places % 8;
        if( lplaces != 0 )
          {
          d_and_q_packed(lhalf, base, lplaces);
!         gg_assign(value, gg_cast(type, lhalf));
          places -= lplaces;
!         gg_assign(base, gg_add(base, build_int_cst_type(SIZE_T, lplaces)));
          }
        else
          {
!         gg_assign(value, gg_cast(type, integer_zero_node));
          }
        // The remaining places is a multiple of eight:
        size_t pot = pots[8 * 2];
        while( places )
          {
!         gg_assign(value, gg_multiply(value, build_int_cst_type(type, pot)));
          tree rhalf;
          d_and_q_packed(rhalf, base, 8);
!         gg_assign(value, gg_add(value, gg_cast(type, rhalf)));
!         gg_assign(base,  gg_add(base, build_int_cst_type(SIZE_T, 8)));
          places -= 8;
          }
        }
--- 2306,2333 ----
        // This is nine places (eighteen digits) and up,  We are going to peel
        // off eight places (sixteen digits) at a time:
        tree type = UINT128;
        tree lhalf;
        size_t lplaces = places % 8;
        if( lplaces != 0 )
          {
          d_and_q_packed(lhalf, base, lplaces);
!         value = gg_cast(type, lhalf);
          places -= lplaces;
!         base = gg_add(base, build_int_cst_type(SIZE_T, lplaces));
          }
        else
          {
!         value = gg_cast(type, integer_zero_node);
          }
        // The remaining places is a multiple of eight:
        size_t pot = pots[8 * 2];
        while( places )
          {
!         value = gg_multiply(value, build_int_cst_type(type, pot));
          tree rhalf;
          d_and_q_packed(rhalf, base, 8);
!         value = gg_add(value, gg_cast(type, rhalf));
!         base =  gg_add(base, build_int_cst_type(SIZE_T, 8));
          places -= 8;
          }
        }
*************** b_from_c3(tree &value, const cbl_field_t
*** 2376,2391 ****
    // scaledness and rdigits and so forth.
  
    tree source_type = tree_type_from_field(field);
!   tree working = gg_define_variable(source_type);
  
    // This is the location of the byte holding the sign nybble
!   tree sign_location = gg_define_variable(UCHAR_P);
  
    // The sign nybble is in the last byte:
!   gg_assign(sign_location,
              gg_add(location,
                     build_int_cst_type(SIZE_T,
!                                       field->data.capacity()-1)));
    tree d_and_q;
    // Pick up the binary value of the first capacity-1 places
    d_and_q_packed(d_and_q,
--- 2342,2357 ----
    // scaledness and rdigits and so forth.
  
    tree source_type = tree_type_from_field(field);
!   tree working;
  
    // This is the location of the byte holding the sign nybble
!   tree sign_location;
  
    // The sign nybble is in the last byte:
!   sign_location =
              gg_add(location,
                     build_int_cst_type(SIZE_T,
!                                       field->data.capacity()-1));
    tree d_and_q;
    // Pick up the binary value of the first capacity-1 places
    d_and_q_packed(d_and_q,
*************** b_from_c3(tree &value, const cbl_field_t
*** 2400,2433 ****
    // Add the results together.
    tree x0f = build_int_cst_type(UCHAR, 0x0F);
    tree x0d = build_int_cst_type(UCHAR, 0x0D);
!   IF( gg_bitwise_and( gg_indirect(sign_location), x0f), eq_op, x0d )
!     {
!     gg_assign(working,
!               gg_cast(source_type, gg_negate(gg_add(d_and_q_10, final_digit))));
!     }
!   ELSE
!     {
!     gg_assign(working, gg_cast(source_type, gg_add(d_and_q_10, final_digit)));
!     }
!   ENDIF
! 
!   value = gg_define_variable(type);
!   gg_assign(value, gg_cast(type, working));
    }
  
  static void
  binary_from_comp_3(tree &value, const cbl_field_t *field, tree type)
    {
!   tree location;
!   get_location(location, field);
    b_from_c3(value, field, location, type);
    }
  
  static void
  binary_from_comp_3(tree &value, const cbl_refer_t &refer, tree type)
    {
!   tree location;
!   get_location(location, refer);
    b_from_c3(value, refer.field, location, type);
    }
  
--- 2366,2393 ----
    // Add the results together.
    tree x0f = build_int_cst_type(UCHAR, 0x0F);
    tree x0d = build_int_cst_type(UCHAR, 0x0D);
!   working = gg_cast(source_type, gg_add(d_and_q_10, final_digit));
!   
!   tree sign_nybble = gg_bitwise_and(gg_indirect(sign_location), x0f);
!   tree is_negative = gg_logical_eq(sign_nybble, x0d);
!   working = if_condition(is_negative,
!                          gg_negate(working),
!                          working,
!                          source_type);
!   value = gg_cast(type, working);
    }
  
  static void
  binary_from_comp_3(tree &value, const cbl_field_t *field, tree type)
    {
!   tree location = get_location(field);
    b_from_c3(value, field, location, type);
    }
  
  static void
  binary_from_comp_3(tree &value, const cbl_refer_t &refer, tree type)
    {
!   tree location = get_location(refer);
    b_from_c3(value, refer.field, location, type);
    }
  
*************** binary_from_comp_6(tree &value, const cb
*** 2437,2451 ****
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
!   value = gg_define_variable(type);
! 
!   tree base;
!   get_location(base, field);
    tree d_and_q;
    d_and_q_packed(d_and_q,
                   base,
                   field->data.capacity());
!   gg_assign(value, gg_cast(type, d_and_q));
    }
  
  static void
--- 2397,2408 ----
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
!   tree base = get_location(field);
    tree d_and_q;
    d_and_q_packed(d_and_q,
                   base,
                   field->data.capacity());
!   value = gg_cast(type, d_and_q);
    }
  
  static void
*************** binary_from_comp_6(tree &value, const cb
*** 2454,2468 ****
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
!   value = gg_define_variable(type);
! 
!   tree base;
!   get_location(base, refer);
    tree d_and_q;
    d_and_q_packed(d_and_q,
                   base,
                   refer.field->data.capacity());
!   gg_assign(value, gg_cast(type, d_and_q));
    }
  
  static void
--- 2411,2422 ----
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
!   tree base = get_location(refer);
    tree d_and_q;
    d_and_q_packed(d_and_q,
                   base,
                   refer.field->data.capacity());
!   value = gg_cast(type, d_and_q);
    }
  
  static void
*************** binary_from_FldPacked(tree &value, const
*** 2494,2533 ****
  static void
  binary_from_FldFloat(tree &value, const cbl_field_t *field, tree type)
    {
!   value = gg_define_variable(type);
!   safe_cast(value, field);
    }
  
  static void
  binary_from_FldFloat(tree &value, const cbl_refer_t &refer, tree type)
    {
!   value = gg_define_variable(type);
!   safe_cast(value, refer);
    }
  
! void
! get_binary_value(tree &value, const cbl_field_t *field, tree type)
    {
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
       about the process, and incorporating compiler SSA guidelines. */
  
    if( (field->attr & FIGCONST_MASK) == zero_value_e )
      {
!     // The ZERO figurative constant is not flagged as signed:
!     if( !type )
!       {
!       type = UINT;
!       }
!     value = gg_define_variable(type);
!     gg_assign(value, gg_cast(type, integer_zero_node));
      }
    else
      {
-     if( !type )
-       {
-       type = TREE_TYPE(value);
-       }
      switch(field->type)
        {
        case FldLiteralN:
--- 2448,2477 ----
  static void
  binary_from_FldFloat(tree &value, const cbl_field_t *field, tree type)
    {
!   value = safe_cast(field, type);
    }
  
  static void
  binary_from_FldFloat(tree &value, const cbl_refer_t &refer, tree type)
    {
!   value = safe_cast(refer, type);
    }
  
! tree
! get_binary_value(const cbl_field_t *field, tree type)
    {
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
       about the process, and incorporating compiler SSA guidelines. */
  
+   tree value;
+ 
    if( (field->attr & FIGCONST_MASK) == zero_value_e )
      {
!     value = gg_cast(type, integer_zero_node);
      }
    else
      {
      switch(field->type)
        {
        case FldLiteralN:
*************** get_binary_value(tree &value, const cbl_
*** 2561,2570 ****
          break;
        }
      }
    }
  
! void
! get_binary_value(tree &value, const cbl_refer_t &refer, tree type)
    {
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
--- 2505,2515 ----
          break;
        }
      }
+   return value;
    }
  
! tree
! get_binary_value(const cbl_refer_t &refer, tree type)
    {
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
*************** get_binary_value(tree &value, const cbl_
*** 2574,2611 ****
       if present, and otherwise will be the same as the type derived from the
       source.   */
  
    if( (refer.field->attr & FIGCONST_MASK) == zero_value_e )
      {
!     // The ZERO figurative constant is not flagged as signed:
!     if( !type )
!       {
!       type = UINT;
!       }
!     value = gg_define_variable(type);
!     gg_assign(value, gg_cast(type, integer_zero_node));
      }
    else if( refer.addr_of )
      {
-     if( !type )
-       {
-       type = tree_type_from_field(refer.field);
-       }
      // The case of ADDRESS OF
!     value = gg_define_variable(type);
!     tree base = gg_define_variable(UCHAR_P);
!     gg_assign(base, member(refer.field->var_decl_node, "data"));
!     if( !refer_is_clean(refer) )
!       {
!       gg_assign(base, gg_add(base, refer_offset(refer)));
!       }
!     gg_assign(value, gg_cast(type, base));
      }
    else
      {
-     if( !type )
-       {
-       type = tree_type_from_field(refer.field);
-       }
      switch(refer.field->type)
        {
        case FldLiteralN:
--- 2519,2537 ----
       if present, and otherwise will be the same as the type derived from the
       source.   */
  
+   tree value;
+ 
    if( (refer.field->attr & FIGCONST_MASK) == zero_value_e )
      {
!     value = gg_cast(type, integer_zero_node);
      }
    else if( refer.addr_of )
      {
      // The case of ADDRESS OF
!     value = get_location(refer);
      }
    else
      {
      switch(refer.field->type)
        {
        case FldLiteralN:
*************** get_binary_value(tree &value, const cbl_
*** 2639,2742 ****
          break;
        }
      }
    }
  
! void
! get_location(tree &retval, const cbl_field_t *field)
    {
!   retval = gg_define_variable(UCHAR_P);
    if( field_is_super_clean(field) )
      {
      if( field->offset )
        {
!       gg_assign(retval,
!                 gg_add(gg_cast(UCHAR_P,
                                 gg_get_address(field->data_decl_node)),
!                 build_int_cst_type(SIZE_T, field->offset)));
        }
      else
        {
!       gg_assign(retval, gg_cast(UCHAR_P,
!                             gg_get_address(field->data_decl_node)));
        }
      }
    else
      {
!     gg_assign(retval,
!               gg_add(member(field->var_decl_node,"data"),
!                      build_int_cst_type(SIZE_T, field->offset)));
      }
    }
  
! void
! get_location(tree &retval, const cbl_refer_t &refer)
    {
    /* This routine looks at a refer and returns a UCHAR_P pointer to the data
       of the object. */
  
    if( refer_is_super_clean(refer) )
      {
      // Working storage, not external, no refmods or subscripts.  That means
      // we can work with the actual data item, and save a level of indirection.
!     get_location(retval, refer.field);
      }
    else
      {
      // The variable is external, or intermediate_e, or there are subscripts, or
      // there are refmods. We use the run-time "data", and add the run-time
      // offset to it.
!     retval = gg_define_variable(UCHAR_P);
!     gg_assign(retval,
!               gg_add(member(refer.field->var_decl_node,"data"),
!                      refer_offset(refer)));
      }
!   }
! 
! void
! safe_cast(tree &target,         // A defined variable.
!           tree source_location, // A pointer, usually UCHAR_P.
!           tree source_type)     // The variable type pointed to by
!                                 // source_location.
!   {
!   /* The construction here does the safe equivalent of
! 
!       <type> target = *(<type> *)location.
! 
!    It does this by copying through memcpy rather than dereferencing
!    source_location as a source_type pointer.  This avoids creating a typed
!    lvalue access to storage whose effective/dynamic type may not be
!    source_type, and so avoids strict-aliasing violations. */
! 
!   tree source = gg_define_variable(source_type);
!   gg_memcpy(gg_get_address_of(source),
!             source_location,
!             build_int_cst_type(SIZE_T, gg_sizeof(source_type)));
!   gg_assign(target,
!             gg_cast(TREE_TYPE(target), source));
!   }
! 
! void
! safe_cast(tree &target,         // A defined variable.
!           const cbl_field_t *field)
!   {
!   // Use this routine when you know the data at the field->location is
!   // of the source_type.
!   tree source_type = tree_type_from_field(field);
!   tree source_location;
!   get_location(source_location, field);
!   safe_cast(target, source_location, source_type);
!   }
! 
! void
! safe_cast(tree &target,         // A defined variable.
!           const cbl_refer_t &refer)
!   {
!   // Use this routine when you know the data at the refer/field->location is
!   // of the source_type.
!   tree source_type = tree_type_from_field(refer.field);
!   tree source_location;
!   get_location(source_location, refer);
!   safe_cast(target, source_location, source_type);
    }
  
  void
--- 2565,2623 ----
          break;
        }
      }
+   return value;
    }
  
! tree
! get_location(const cbl_field_t *field)
    {
!   /* This routine looks at a field and returns a UCHAR_P pointer to the data
!      of the object. */
!   tree retval;
    if( field_is_super_clean(field) )
      {
      if( field->offset )
        {
!       retval =  gg_add(gg_cast(UCHAR_P,
                                 gg_get_address(field->data_decl_node)),
!                 build_int_cst_type(SIZE_T, field->offset));
        }
      else
        {
!       retval = gg_cast(UCHAR_P,
!                        gg_get_address(field->data_decl_node));
        }
      }
    else
      {
!     retval =  gg_add(member(field->var_decl_node,"data"),
!                      build_int_cst_type(SIZE_T, field->offset));
      }
+   return retval;
    }
  
! tree
! get_location(const cbl_refer_t &refer)
    {
    /* This routine looks at a refer and returns a UCHAR_P pointer to the data
       of the object. */
+   tree retval;
  
    if( refer_is_super_clean(refer) )
      {
      // Working storage, not external, no refmods or subscripts.  That means
      // we can work with the actual data item, and save a level of indirection.
!     retval = get_location(refer.field);
      }
    else
      {
      // The variable is external, or intermediate_e, or there are subscripts, or
      // there are refmods. We use the run-time "data", and add the run-time
      // offset to it.
!     retval = gg_add(member(refer.field->var_decl_node,"data"),
!                     refer_offset(refer));
      }
!   return retval;
    }
  
  void
*************** safe_assign(tree target, // A defined va
*** 2747,2754 ****
    // to the target.
    tree dest_type   = TREE_TYPE(target);
    tree source_type = tree_type_from_field(field);
!   tree source;
!   get_binary_value(source, field, source_type);
    gg_assign(target, gg_cast(dest_type, source));
    }
  
--- 2628,2634 ----
    // to the target.
    tree dest_type   = TREE_TYPE(target);
    tree source_type = tree_type_from_field(field);
!   tree source = get_binary_value(field, source_type);
    gg_assign(target, gg_cast(dest_type, source));
    }
  
*************** safe_assign(tree target, // A defined va
*** 2760,2773 ****
    // to the target.
    tree dest_type   = TREE_TYPE(target);
    tree source_type = tree_type_from_refer(refer);
!   tree source;
!   get_binary_value(source, refer, source_type);
    gg_assign(target, gg_cast(dest_type, source));
    }
  
! void
! get_length(tree &retval, const cbl_refer_t &refer)
    {
    if(refer_is_clean(refer))
      {
      if(   refer.field->attr & any_length_e
--- 2640,2653 ----
    // to the target.
    tree dest_type   = TREE_TYPE(target);
    tree source_type = tree_type_from_refer(refer);
!   tree source = get_binary_value(refer, source_type);
    gg_assign(target, gg_cast(dest_type, source));
    }
  
! tree
! get_length(const cbl_refer_t &refer)
    {
+   tree retval;
    if(refer_is_clean(refer))
      {
      if(   refer.field->attr & any_length_e
*************** get_length(tree &retval, const cbl_refer
*** 2786,2791 ****
--- 2666,2672 ----
      {
      retval = refer_size_source(refer);
      }
+   return retval;
    }
  
  void
*************** treeplet_fill_source(TREEPLET &treeplet,
*** 2800,2806 ****
    else
      {
      treeplet.pfield = gg_get_address_of(refer.field->var_decl_node);
!     treeplet.offset = refer_offset(refer);
      treeplet.length = refer_size_source(refer);
      }
    }
--- 2681,2688 ----
    else
      {
      treeplet.pfield = gg_get_address_of(refer.field->var_decl_node);
!     treeplet.offset = gg_define_variable(SIZE_T);
!     gg_assign(treeplet.offset, gg_cast(SIZE_T, refer_offset(refer)));
      treeplet.length = refer_size_source(refer);
      }
    }
*************** data_decl_type_for(cbl_field_t *field)
*** 2854,2860 ****
          switch(field->data.capacity())
            {
            case 1:
!             retval = CHAR;
              break;
            case 2:
              retval = SHORT;
--- 2736,2742 ----
          switch(field->data.capacity())
            {
            case 1:
!             retval = SCHAR;
              break;
            case 2:
              retval = SHORT;
*************** tree
*** 2963,2969 ****
  round_this_value( tree &value,
                    tree pot,
                    cbl_round_t rounded,
!                   tree size_error)
    {
    tree retval = gg_define_variable(INT);
    // We are rounding value by dividing it by 'pot', which is a power of ten.
--- 2845,2851 ----
  round_this_value( tree &value,
                    tree pot,
                    cbl_round_t rounded,
!                   tree /* size_error */)
    {
    tree retval = gg_define_variable(INT);
    // We are rounding value by dividing it by 'pot', which is a power of ten.
*************** round_this_value( tree &value,
*** 2976,3299 ****
    if( rounded == truncation_e )
      {
      // This is the simplest and most common case.
!     gg_assign(value, gg_divide(value, pot));
      IF( value, eq_op, build_int_cst_type(type, 0) )
        {
        gg_assign(retval, integer_zero_node);
        }
      ELSE
        {
        gg_assign(retval, integer_one_node);
        }
      ENDIF
-     return retval;
-     }
-   // With truncation out of the way, we actually have to do some work.
-   bool signable = !TYPE_UNSIGNED(type);
  
!   // Let's calculate rem = abs(value) % pot.  So, if the POT is, say, 1000,
!   // the remainder will be between 000 and 999 inclusive.
!   tree rem = gg_define_variable(type);
!   gg_assign(rem, gg_mod(gg_abs(value), pot));
!   gg_assign(value, gg_divide(value, pot));
! 
!   // We often need the halfway point, that is, 500 when POT is 1000
!   tree half = gg_define_variable(type);
!   gg_assign(half, gg_divide(pot, build_int_cst_type(type, 2)));
! 
!   tree zero = build_int_cst_type(type, 0);
! 
!   switch(rounded)
!     {
!     case away_from_zero_e:
!       {
!       /* "If the AWAY-FROM-ZERO phrase is specified and the arithmetic value
!          cannot be exactly represented in the resultant identifier, the
!          arithmetic value is rounded to the nearest value farther from zero
!          that can be represented in the resultant identifier." */
!       if( signable )
!         {
!         IF( value, ge_op, zero )
!           {
!           // The value is positive, so if there is a remainder, increment it
!           IF( rem, gt_op, zero )
!             {
!             gg_increment(value);
!             }
!           ELSE {} ENDIF
!           }
!         ELSE
!           {
!           // The value is negative, so if there is a remainder, decrement it
!           IF( rem, gt_op, zero )
!             {
!             gg_decrement(value);
!             }
!           ELSE {} ENDIF
!           }
!         ENDIF
!         }
!       else
!         {
!         // The value is positive, so if there is a remainder, increment it
!         IF( rem, gt_op, zero )
!           {
!           gg_increment(value);
!           }
!         ELSE {} ENDIF
!         }
!       break;
!       }
! 
!     case nearest_away_from_zero_e:
!       {
!       /* "If the NEAREST-AWAY-FROM-ZERO phrase is specified or implied and the
!          arithmetic value cannot be exactly represented in the resultant
!          identifier, the arithmetic value is rounded to the nearest value that
!          can be represented in the resultant identifier. If two such values are
!          equally near, the value farther from zero is chosen."
! 
!          This is rounding like you learned in grade school,
!          */
!       if( signable )
!         {
!         IF( value, ge_op, zero )
!           {
!           // The value is positive, so if remainder >= 5, increment it
!           IF( rem, ge_op, half )
!             {
!             gg_increment(value);
!             }
!           ELSE {} ENDIF
!           }
!         ELSE
!           {
!           // The value is negative, so if remainder < 5, decrement it
!           IF( rem, ge_op, half )
!             {
!             gg_decrement(value);
!             }
!           ELSE {} ENDIF
!           }
!         ENDIF
!         }
!       else
!         {
!         // The value is positive, so if remainder >= 5, increment it
!         IF( rem, ge_op, half )
!           {
!           gg_increment(value);
!           }
!         ELSE {} ENDIF
!         }
!       break;
!       }
! 
!     case nearest_even_e:
!       {
!       /* "If the NEAREST-EVEN phrase is specified and the arithmetic value
!          cannot be exactly represented in the resultant identifier, the
!          arithmetic value is rounded to the nearest value that can be
!          represented in the resultant identifier. If two such values are
!          equally near, the value whose rightmost digit is even is chosen.
!          NOTE: This method is sometimes known as 'banker's rounding'." */
!       if( signable )
!         {
!         IF( rem, eq_op, half )
!           {
!           // This is the money shot, exactly half-way.
!           IF( value, ge_op, zero )
!             {
!             gg_increment(value);
!             gg_assign(value,
!                       gg_bitwise_and(value,
!                                      gg_bitwise_not(build_int_cst_type(type,
!                                                                        1))));
!             }
!           ELSE
!             {
!             gg_assign(value, gg_negate(value));
!             gg_increment(value);
!             gg_assign(value,
!                       gg_bitwise_and(value,
!                                      gg_bitwise_not(build_int_cst_type(type,
!                                                                        1))));
!             gg_assign(value, gg_negate(value));
!             }
!           ENDIF
!           }
!         ELSE
!           {
!           // The signable value has a remainder that is not exactly 5
!           IF( value, ge_op, zero )
!             {
!             // The value is positive, so if remainder >= 5, increment it
!             IF( rem, ge_op, half )
!               {
!               gg_increment(value);
!               }
!             ELSE {} ENDIF
!             }
!           ELSE
!             {
!             // The value is negative, so if remainder < 5, decrement it
!             IF( rem, ge_op, half )
!               {
!               gg_decrement(value);
!               }
!             ELSE {} ENDIF
!             }
!           ENDIF
!           }
!         ENDIF
!         }
!       else
!         {
!         // The value is not signable, hence it is positive:
!         IF( rem, eq_op, half )
!           {
!           // This is the money shot, exactly half-way.
!           // Make value a multiple of 2
!           gg_increment(value);
!           gg_assign(value,
!                     gg_bitwise_and(value,
!                                    gg_bitwise_not(build_int_cst_type(type,
!                                                                      1))));
!           }
!         ELSE
!           {
!           // The value is positive, so if remainder > 5, increment it
!           IF( rem, gt_op, half )
!             {
!             gg_increment(value);
!             }
!           ELSE {} ENDIF
!           }
!         ENDIF
!         }
!       break;
!       }
! 
!     case nearest_toward_zero_e:
!       {
!       /* "If the NEAREST-TOWARD-ZERO phrase is specified and the arithmetic
!          value cannot be exactly represented in the resultant identifier, the
!          arithmetic value is rounded to the nearest value that can be
!          represented in the resultant identifier. If two such values are
!          equally near, the value nearest to zero is chosen." */
!       if( signable )
!         {
!         IF( value, ge_op, zero )
!           {
!           // The value is positive, so if remainder > 5, increment it
!           IF( rem, gt_op, half )
!             {
!             gg_increment(value);
!             }
!           ELSE {} ENDIF
!           }
!         ELSE
!           {
!           // The value is negative, so if remainder < 5, decrement it
!           IF( rem, gt_op, half )
!             {
!             gg_decrement(value);
!             }
!           ELSE {} ENDIF
!           }
!         ENDIF
!         }
!       else
!         {
!         // The value is positive, so if remainder > 5, increment it
!         IF( rem, gt_op, half )
!           {
!           gg_increment(value);
!           }
!         ELSE {} ENDIF
!         }
!       break;
!       }
!     case prohibited_e:
!       {
!       /* "If the PROHIBITED phrase is specified, and the arithmetic value
!          cannot be represented exactly in the resultant identifier, the
!          EC-SIZE-TRUNCATION exception condition is set to exist, the size error
!          condition exists, and the content of the resultant identifier is
!          unchanged." */
!       const cbl_enabled_exceptions_t&
!                                 enabled_exceptions( cdf_enabled_exceptions() );
!       IF( rem, ne_op, zero )
!         {
!         if( size_error )
!           {
!           gg_assign(size_error, integer_one_node);
!           }
!         else if( enabled_exceptions.match(ec_size_truncation_e) )
!           {
!           set_exception_code(ec_size_truncation_e);
!           }
!         }
!       ELSE
!         {
!         }
!       ENDIF
!       break;
!       }
! 
!     case toward_greater_e:
!       {
!       /* "If the TOWARD-GREATER phrase is specified, and the arithmetic value
!          cannot be represented exactly in the resultant identifier, the
!          arithmetic value is rounded to the nearest larger value that can be
!          represented in the resultant identifier." */
!       IF( value, ge_op, zero )
!         {
!         // The value is positive, so if remainder != 0, increment it
!         IF( rem, ne_op, zero )
!           {
!           gg_increment(value);
!           }
!         ELSE {} ENDIF
!         }
!       ELSE {} ENDIF
!       break;
!       }
! 
!     case toward_lesser_e:
        {
!       /* "If the TOWARD-LESS phrase is specified, and the arithmetic value
!           cannot be represented exactly in the resultant identifier, the
!           arithmetic value is rounded to the nearest smaller value that
!           can be represented in the resultant identifier." */
!       IF( value, lt_op, zero )
!         {
!         // The value is negative, so if remainder != 0 , decrement it
!         IF( rem, ne_op, zero )
!           {
!           gg_decrement(value);
!           }
!         ELSE {} ENDIF
!         }
!       ELSE {} ENDIF
!       break;
        }
! 
!     case truncation_e:
        {
-       /* We do nothing.*/
-       gg_assign(value, gg_divide(value, pot));
-       break;
        }
      }
!   IF( value, eq_op, build_int_cst_type(type, 0) )
!     {
!     gg_assign(retval, integer_zero_node);
!     }
!   ELSE
      {
!     gg_assign(retval, integer_one_node);
      }
!   ENDIF
    return retval;
    }
--- 2858,2891 ----
    if( rounded == truncation_e )
      {
      // This is the simplest and most common case.
!     value = gg_divide(value, pot);
!     tree tester = gg_define_variable(INT);
      IF( value, eq_op, build_int_cst_type(type, 0) )
        {
+       gg_assign(tester, integer_zero_node);
        gg_assign(retval, integer_zero_node);
        }
      ELSE
        {
+       gg_assign(tester, integer_one_node);
        gg_assign(retval, integer_one_node);
        }
      ENDIF
  
!     IF( tester, ne_op, retval )
        {
!       gg_printf("round_this_value HULL BREACH\n", NULL_TREE);
!       gg_abort();
        }
!     ELSE
        {
        }
+     ENDIF
      }
!   else
      {
!     gcc_unreachable();
      }
! 
    return retval;
    }
diff -Nrcpad gcc-17-20260823/gcc/cobol/genutil.h gcc-17-20260830/gcc/cobol/genutil.h
*** gcc-17-20260823/gcc/cobol/genutil.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/genutil.h	Sun Aug 30 22:32:06 2026
*************** extern tree var_decl_exception_section;
*** 48,54 ****
  extern tree var_decl_exception_paragraph;    // const char *__gg__exception_paragraph;
  
  extern tree var_decl_default_compute_error;  // int         __gg__default_compute_error;
! extern tree var_decl_rdigits;                // int         __gg__rdigits;
  extern tree var_decl_unique_prog_id;         // size_t      __gg__unique_prog_id;
  
  extern tree var_decl_exit_address;           // This is for implementing pseudo_return_pop
--- 48,54 ----
  extern tree var_decl_exception_paragraph;    // const char *__gg__exception_paragraph;
  
  extern tree var_decl_default_compute_error;  // int         __gg__default_compute_error;
! extern tree var_decl_fracdigits;             // int         __gg__fracdigits;
  extern tree var_decl_unique_prog_id;         // size_t      __gg__unique_prog_id;
  
  extern tree var_decl_exit_address;           // This is for implementing pseudo_return_pop
*************** tree      get_data_address( cbl_field_t
*** 70,76 ****
                              tree         offset);
  
  FIXED_WIDE_INT(128) get_power_of_ten(int n);
! void      scale_by_power_of_ten_N(tree value,
                                  int N,
                                  bool check_for_fractional = false);
  // cppcheck-suppress unknownMacro
--- 70,76 ----
                              tree         offset);
  
  FIXED_WIDE_INT(128) get_power_of_ten(int n);
! void      scale_by_power_of_ten_N(tree &value,
                                  int N,
                                  bool check_for_fractional = false);
  // cppcheck-suppress unknownMacro
*************** tree      gg_array_of_uchar_p( const std
*** 95,102 ****
  void      parser_display_internal_field(tree file_descriptor,
                                          cbl_field_t *field,
                                          bool advance=DISPLAY_NO_ADVANCE);
- char     *get_literal_string(cbl_field_t *field);
- 
  bool      refer_is_clean(const cbl_refer_t &refer);
  bool      field_is_super_clean(const cbl_field_t *field);
  bool      refer_is_super_clean(const cbl_refer_t &refer);
--- 95,100 ----
*************** tree      build_array_of_referlets( size
*** 114,120 ****
  
  tree      build_array_of_refers(size_t N,
                                  cbl_refer_t *refers);
! void      get_depending_on_value_from_odo(tree retval, cbl_field_t *odo);
  uint64_t  get_time_nanoseconds();
  
  bool      is_pure_integer(const cbl_field_t *field);
--- 112,118 ----
  
  tree      build_array_of_refers(size_t N,
                                  cbl_refer_t *refers);
! tree      get_depending_on_value_from_odo(cbl_field_t *odo);
  uint64_t  get_time_nanoseconds();
  
  bool      is_pure_integer(const cbl_field_t *field);
*************** bool      is_pure_integer(const cbl_fiel
*** 122,148 ****
  tree      tree_type_from_field(const cbl_field_t *field);
  tree      tree_type_from_refer(const cbl_refer_t &refer);
  
! void      get_binary_value(tree &value,
!                      const cbl_field_t *field,
!                            tree type = NULL_TREE);
! 
! void      get_binary_value(tree &value,
!                      const cbl_refer_t &refer,
!                            tree type = NULL_TREE);
! 
! void      get_location(tree &retval, const cbl_field_t *field);
! void      get_location(tree &retval, const cbl_refer_t &refer);
  
! void      safe_cast(tree &target,         // A defined variable.
!                     tree source_location, // A pointer, usually UCHAR_P.
!                     tree source_type);    // The variable type pointed to by
!                                           // source_location.
! void      safe_cast(tree &target,         // A defined variable.
!                     const cbl_field_t *field);
! void      safe_cast(tree &target,         // A defined variable.
!                     const cbl_refer_t &refer);
  
! void      get_length(tree &retval, const cbl_refer_t &refer);
  
  void treeplet_fill_source(TREEPLET &treeplet, const cbl_refer_t &refer);
  
--- 120,132 ----
  tree      tree_type_from_field(const cbl_field_t *field);
  tree      tree_type_from_refer(const cbl_refer_t &refer);
  
! tree      get_binary_value(const cbl_field_t *field, tree type);
! tree      get_binary_value(const cbl_refer_t &refer, tree type);
  
! tree      get_location(const cbl_field_t *field);
! tree      get_location(const cbl_refer_t &refer);
  
! tree      get_length(const cbl_refer_t &refer);
  
  void treeplet_fill_source(TREEPLET &treeplet, const cbl_refer_t &refer);
  
*************** void safe_assign(tree target, // A defin
*** 157,160 ****
--- 141,151 ----
  void safe_assign(tree target, // A defined variable.
             const cbl_refer_t &refer);
  
+ tree safe_load(tree source_location,
+                tree source_type);
+ 
+ void safe_store(tree dest_location,
+                 tree dest_type,
+                 tree value);
+ 
  #endif
diff -Nrcpad gcc-17-20260823/gcc/cobol/lang-specs.h gcc-17-20260830/gcc/cobol/lang-specs.h
*** gcc-17-20260823/gcc/cobol/lang-specs.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/lang-specs.h	Sun Aug 30 22:32:06 2026
***************
*** 68,76 ****
--- 68,79 ----
  	"%{Wcomp-6} %{Wno-comp-6} "
  	"%{Wcomp-x} %{Wno-comp-x} "
  	"%{Wcopybook-found} %{Wno-copybook-found} "
+ 	"%{Wdisplay-screen} %{Wno-display-screen} "
+ 	"%{Wdynamic-call} %{Wno-dynamic-call} "
  	"%{Wec-unknown} %{Wno-ec-unknown} "
  	"%{Wentry-convention} %{Wno-entry-convention} "
  	"%{Wibm-cdf} %{Wno-ibm-cdf} "
+ 	"%{Wcontent-expr} %{Wno-content-expr} "
  	"%{Wiconv-error} %{Wno-iconv-error} "
  	"%{Winclude-file-found} %{Wno-include-file-found} "
  	"%{Winclude-file-not-found} %{Wno-include-file-not-found} "
***************
*** 91,96 ****
--- 94,100 ----
  	"%{Wprocedure-pointer} %{Wno-procedure-pointer} "
  	"%{Wreplace-error} %{Wno-replace-error} "
  	"%{Wredefines-first} %{Wno-redefines-first} "
+ 	"%{Wredefines-table} %{Wno-redefines-table} "
  	"%{Wredefines-grow} %{Wno-redefines-grow} "
  	"%{Wreturning-number} %{Wno-returning-number} "
  	"%{Wsegment-error} %{Wno-segment-error} "
diff -Nrcpad gcc-17-20260823/gcc/cobol/lang.opt gcc-17-20260830/gcc/cobol/lang.opt
*** gcc-17-20260823/gcc/cobol/lang.opt	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/lang.opt	Sun Aug 30 22:32:06 2026
*************** Wcomp-x
*** 144,149 ****
--- 144,154 ----
  Cobol Warning Var(comp_x, 1) Init(1)
  Warn if COMPUTATIONAL is used with PICTURE X.
  
+ ; MfDisplayScreen
+ Wdisplay-screen
+ Cobol Warning Var(display_screen, 1) Init(1)
+ Warn if DISPLAY WITH screen options is used.
+ 
  ; MfTrailing
  Winspect-trailing
  Cobol Warning Var(inspect_trailing, 1) Init(1)
*************** Wredefines-first
*** 179,184 ****
--- 184,194 ----
  Cobol Warning Var(redefines_first, 1) Init(1)
  Warn if REDEFINES does not appear immediately after NAME.
  
+ ; MfRedefinesTable
+ Wredefines-table
+ Cobol Warning Var(redefines_table, 1) Init(1)
+ Warn if REDEFINES source is a table.
+ 
  ; MfReturningNum
  Wreturning-number
  Cobol Warning Var(returning_number, 1) Init(1)
*************** Warn if referenced CDF name is not defin
*** 211,217 ****
  
  ; LexInputN
  Wcopybook-found
! Cobol Warning Var(copybook_found, 1) Init(1)
  Print message when copybook is processed.
  
  ; EcUnknownW
--- 221,227 ----
  
  ; LexInputN
  Wcopybook-found
! Cobol Warning Var(copybook_found, 1) Init(0)
  Print message when copybook is processed.
  
  ; EcUnknownW
*************** Winclude-file-found
*** 229,234 ****
--- 239,249 ----
  Cobol Warning Var(include_file_found, 1) Init(1)
  Print message when include file is processed.
  
+ ; ParDynamicCall
+ Wdynamic-call
+ Cobol Warning Var(cobol_dynamic_call, 1) Init(0)
+ Note if CALL target is not a literal constant.
+ 
  ; ParLiteral2W
  Wliteral-concat
  Cobol Warning Var(literal_concat, 1) Init(1)
*************** Wibm-cdf
*** 259,264 ****
--- 274,284 ----
  Cobol Warning Var(cobol_ibmcdf, 1) Init(1)
  Warn if IBM-specific CDF directives are used.
  
+ ; IbmContentExpr
+ Wcontent-expr
+ Cobol Warning Var(content_expr, 1) Init(1)
+ Warn if BY CONTENT parameter is expression without prototype.
+ 
  ; IbmLengthOf
  Wlength-of
  Cobol Warning Var(cobol_length_of, 1) Init(1)
diff -Nrcpad gcc-17-20260823/gcc/cobol/lexio.cc gcc-17-20260830/gcc/cobol/lexio.cc
*** gcc-17-20260823/gcc/cobol/lexio.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/lexio.cc	Sun Aug 30 22:32:06 2026
*************** find_filter( const char filter[] ) {
*** 1419,1426 ****
    return NULL;
  }
  
- bool verbose_file_reader = false;
- 
  typedef std::pair <char *, std::list<std::string> > preprocessor_filter_t;
  static std::list<preprocessor_filter_t> preprocessor_filters;
  static std::list<const char *> included_files;
--- 1419,1424 ----
*************** cdftext::open_input( const char filename
*** 1610,1620 ****
      dbgmsg( "could not open '%s': %s", filename, xstrerror(erc) );
    }
  
!   verbose_file_reader = NULL != getenv("GCOBOL_TEMPDIR");
  
-   if( verbose_file_reader ) {
-     cbl_message(LexInputN, "opening %s for input", filename);
-   }
    return fd;
  }
  
--- 1608,1615 ----
      dbgmsg( "could not open '%s': %s", filename, xstrerror(erc) );
    }
  
!   cbl_message(LexInputN, "opening %s for input", filename);
  
    return fd;
  }
  
*************** cdftext::free_form_reference_format( int
*** 1843,1852 ****
          __attribute__ ((fallthrough));
        default: // flag other characters in indicator area
          if( ! ISSPACE(indcol[0]) ) {
!           yyerrorvl( mfile.lineno(), cobol_filename(),
!                      "error: stray indicator '%c' (0x%x): \"%.*s\"",
!                      indcol[0], indcol[0],
!                      int(mfile.line_length() - 1), mfile.cur );
            *indcol = SPACE;
          }
          break;
--- 1838,1850 ----
          __attribute__ ((fallthrough));
        default: // flag other characters in indicator area
          if( ! ISSPACE(indcol[0]) ) {
!           // TODO: initialize diagnostic system earlier and use it here.
!           if( ! cbl_diagnostic_ignored(LexIndicatorE) ) {
!             yyerrorvl( mfile.lineno(), cobol_filename(),
!                        "error: stray indicator '%c' (0x%x): \"%.*s\"",
!                        indcol[0], indcol[0],
!                        int(mfile.line_length() - 1), mfile.cur );
!           }
            *indcol = SPACE;
          }
          break;
diff -Nrcpad gcc-17-20260823/gcc/cobol/messages.cc gcc-17-20260830/gcc/cobol/messages.cc
*** gcc-17-20260823/gcc/cobol/messages.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/messages.cc	Sun Aug 30 22:32:06 2026
*************** std::set<cbl_diag_t> cbl_diagnostics {
*** 126,131 ****
--- 126,132 ----
  
    { IbmCallFd, "-Wcall-fd", diagnostics::kind::error, dialect_ibm_e },
    { IbmCdf, "-Wibm-cdf", diagnostics::kind::error, dialect_ibm_e },
+   { IbmContentExpr, "-Wcontent-expr", diagnostics::kind::error, dialect_ibm_e },
    { IbmEjectE, "-Wcobol-eject", diagnostics::kind::error, dialect_ibm_e },
    { IbmLengthOf, "-Wlength-of", diagnostics::kind::error, dialect_ibm_mf_gnu },
    { IbmEqualAssignE, "-Wequal-assign", diagnostics::kind::error, dialect_ibm_e },
*************** std::set<cbl_diag_t> cbl_diagnostics {
*** 152,162 ****
--- 153,165 ----
    { MfCdfDollar, "-Wcdf-dollar", diagnostics::kind::error, dialect_mf_gnu },
    { MfComp6, "-Wcomp-6", diagnostics::kind::error, dialect_mf_gnu },
    { MfCompX, "-Wcomp-x", diagnostics::kind::error, dialect_mf_gnu },
+   { MfDisplayScreen, "-Wdisplay-screen", diagnostics::kind::error, dialect_mf_gnu },
    { MfLevel78, "-Wlevel-78", diagnostics::kind::error, dialect_mf_gnu },
    { MfLevel_1_Occurs, "-Wlevel-1-occurs", diagnostics::kind::error, dialect_mf_gnu },
    { MfMoveIndex, "-Wmove-index", diagnostics::kind::error, dialect_gnu_e },
    { MfMovePointer, "-Wmove-pointer", diagnostics::kind::error, dialect_mf_gnu },
    { MfRedefinesFirst, "-Wredefines-first", diagnostics::kind::error, dialect_mf_gnu },
+   { MfRedefinesTable, "-Wredefines-table", diagnostics::kind::error, dialect_mf_gnu },
    { MfReturningNum, "-Wreturning-number", diagnostics::kind::error, dialect_mf_gnu },
    { MfSetNumeric, "-Wset-numeric", diagnostics::kind::error, dialect_mf_gnu },
    { MfTrailing, "-Winspect-trailing", diagnostics::kind::error, dialect_mf_gnu },
*************** std::set<cbl_diag_t> cbl_diagnostics {
*** 165,171 ****
    { LexIncludeE, "-Winclude-file-not-found", diagnostics::kind::error }, 
    { LexIncludeOkN, "-Winclude-file-found", diagnostics::kind::note }, 
    { LexIndicatorE, "-Wstray-indicator", diagnostics::kind::error }, 
!   { LexInputN, "-Wcopybook-found", diagnostics::kind::note }, 
    { LexLineE, "-Wbad-line-directive", diagnostics::kind::error }, 
    { LexPreprocessE, "-Wpreprocessor-error", diagnostics::kind::error }, 
    { LexReplaceE, "-Wreplace-error", diagnostics::kind::error },
--- 168,174 ----
    { LexIncludeE, "-Winclude-file-not-found", diagnostics::kind::error }, 
    { LexIncludeOkN, "-Winclude-file-found", diagnostics::kind::note }, 
    { LexIndicatorE, "-Wstray-indicator", diagnostics::kind::error }, 
!   { LexInputN, "-Wcopybook-found", diagnostics::kind::ignored }, 
    { LexLineE, "-Wbad-line-directive", diagnostics::kind::error }, 
    { LexPreprocessE, "-Wpreprocessor-error", diagnostics::kind::error }, 
    { LexReplaceE, "-Wreplace-error", diagnostics::kind::error },
*************** std::set<cbl_diag_t> cbl_diagnostics {
*** 173,178 ****
--- 176,182 ----
    { LexSeparatorE, "-Woperator-space", diagnostics::kind::error, dialect_mf_gnu }, 
  
    { Par78CdfDefinedW, "-Wlevel-78-defined", diagnostics::kind::warning },
+   { ParDynamicCall, "-Wdynamic-call", diagnostics::kind::ignored }, 
    { ParIconvE, "-Wiconv-error", diagnostics::kind::note }, 
    { ParInfoI, "-Wentry-convention", diagnostics::kind::note }, 
    { ParLangInfoW, "-Wnllanginfo-error", diagnostics::kind::warning },
*************** cbl_diagnostic_kind( cbl_diag_id_t id, d
*** 235,246 ****
--- 239,274 ----
    return false;
  }
  
+ /*
+  * Implementation note: lang.opt sets the initial value for each variable
+  * associated with an option.  We ignore that value in the cbl_diagnostics
+  * table, above.  Consequently there is no indication in that table whether or
+  * not an option is off by default.
+  *
+  * For the most part it doesn't matter.  Warnings are on by default and
+  * generally defeated by dialect settings.  Notes however cannot have a default
+  * setting to diagnostics::kind::note because then they would always appear.
+  * So, in this function for those options we ignore the table, too, and
+  * hard-code the diagnositic's kind.
+  */
  void
  cobol_warning( cbl_diag_id_t id, int yn, bool warning_as_error ) {
    gcc_assert( 0 <= yn && yn <= 1 );
  
    diagnostics::kind kind = yn?
      diagnostics::kind::warning : diagnostics::kind::ignored;
+ 
+   // Some warnings are just notes.
+   if( kind == diagnostics::kind::warning ) {
+     switch(id) {
+     case LexInputN:
+     case ParDynamicCall:
+       kind = diagnostics::kind::note;
+       break;
+     default:
+       break;
+     }
+   }
    
    if( warning_as_error ) {
      kind = diagnostics::kind::error;
*************** cobol_warning( cbl_diag_id_t id, int yn,
*** 249,254 ****
--- 277,287 ----
    cbl_diagnostic_kind(id, kind);
  }
  
+ bool
+ cbl_diagnostic_ignored( cbl_diag_id_t id ) {
+   return diagnostics::kind::ignored == kind_of(id);
+ }
+ 
  /*
   * Set diagnostics associated with a dialog to be ignored, because the
   * constructs are valid for that dialog.  We cannot use cbl_diagnostic_kind()
diff -Nrcpad gcc-17-20260823/gcc/cobol/move.cc gcc-17-20260830/gcc/cobol/move.cc
*** gcc-17-20260823/gcc/cobol/move.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/move.cc	Sun Aug 30 22:32:06 2026
*************** is_figconst(const cbl_refer_t &sourceref
*** 93,108 ****
    return is_figconst_t(sourceref.field);
    }
  
- static void
- conditional_abs(tree source, const cbl_field_t *field)
-   {
-   Analyze();
-   if( !(field->attr & signable_e) )
-     {
-     gg_assign(source, gg_abs(source));
-     }
-   }
- 
  static tree
  get_literalN_value(cbl_field_t *var)
    {
--- 93,98 ----
*************** get_binary_value_from_float(tree
*** 137,164 ****
        gcc_unreachable();
        break;
      }
!   tree fvalue = gg_define_variable(ftype);
!   gg_assign(fvalue,
!             gg_indirect(gg_cast(build_pointer_type(ftype),
!                                 gg_add( member(source->var_decl_node,"data"),
!                                         source_offset))));
  
!   // We need to convert the floating point value to an integer value with the
!   // rdigits lined up properly.
  
!   int rdigits = get_scaled_rdigits( dest.field );
!   gg_assign(fvalue,
!             gg_multiply(fvalue,
!                         gg_float(ftype,
!                                  wide_int_to_tree(INT,
!                                                   get_power_of_ten(rdigits)))));
  
!   // And we need to throw away any digits to the left of the leftmost digits:
!   // At least, we need to do so in principle.  I am deferring this problem until
!   // I understand it better.
  
!   // We now have a floating point value that has been multiplied by 10**rdigits
!   gg_assign(value, gg_trunc(TREE_TYPE(value), fvalue));
    }
  
  static bool
--- 127,150 ----
        gcc_unreachable();
        break;
      }
!   tree source_location =
!     gg_add(member(source->var_decl_node, "data"),
!            source_offset);
  
!   tree fvalue =
!     gg_cast(ftype,
!             safe_load(source_location, ftype));
  
!   int rdigits = get_scaled_rdigits(dest.field);
  
!   tree multiplier =
!     gg_float(ftype,
!              wide_int_to_tree(INT,
!                               get_power_of_ten(rdigits)));
  
!   gg_assign(value,
!             gg_trunc(TREE_TYPE(value),
!                      gg_multiply(fvalue, multiplier)));
    }
  
  static bool
*************** mh_identical(const cbl_refer_t &destref,
*** 196,206 ****
        }
  
      // They are identical, and they have no refmods or subscripts
!     tree source;
!     tree dest;
!     get_location(source, sourceref);
!     get_location(dest, destref);
! 
      gg_memcpy(dest,
                source,
                build_int_cst_type(SIZE_T,
--- 182,189 ----
        }
  
      // They are identical, and they have no refmods or subscripts
!     tree source = get_location(sourceref);
!     tree dest   = get_location(destref);
      gg_memcpy(dest,
                source,
                build_int_cst_type(SIZE_T,
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 275,292 ****
            SHOW_PARSE_TEXT("mh_source_is_literalN: pointer/index")
            }
  
!         tree source;
!         get_binary_value(source, sourceref);
  
!         tree dest_type = tree_type_from_refer(destref);
!         tree dest = gg_define_variable(dest_type);
!         gg_assign(dest, gg_cast(dest_type, source));
  
-         tree location;
-         get_location(location, destref);
-         gg_memcpy(location,
-                   gg_get_address_of(dest),
-                   build_int_cst_type(SIZE_T, gg_sizeof(dest_type)));
          moved = true;
  
          break;
--- 258,273 ----
            SHOW_PARSE_TEXT("mh_source_is_literalN: pointer/index")
            }
  
!         tree source =
!           get_binary_value(sourceref, SIZE_T);
  
!         tree dest_type =
!           tree_type_from_refer(destref);
! 
!         tree location = get_location(destref);
! 
!         safe_store(location, dest_type, source);
  
          moved = true;
  
          break;
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 294,351 ****
  
        case FldNumericBin5:
          {
!         // We are moving from a FldLiteralN (which we know has no subscripts or
!         // refmods), to a NumericBin5, which might.
  
          SHOW_PARSE1
            {
            SHOW_PARSE_INDENT
!           SHOW_PARSE_TEXT("mh_source_is_literalN: FldNumericBin5")
            }
  
          // For now, we are ignoring intermediates:
          assert( !(destref.field->attr & intermediate_e) );
!         tree calc_type = tree_type_from_refer(sourceref);
          tree dest_type = tree_type_from_refer(destref);
  
!         // Pick up the source data.
!         tree source = gg_define_variable(calc_type);
!         tree dest   = gg_define_variable(dest_type);
!         gg_assign(source, gg_cast(calc_type, sourceref.field->data_decl_node));
  
!         // Take the absolute value, if the destination is not signable
!         conditional_abs(source, destref.field);
  
!         // Cast our source to the target:
!         gg_assign(dest, gg_cast(dest_type, source));
  
!         // See if it needs to be scaled:
          scale_by_power_of_ten_N(
!                     dest,
!                     destref.field->data.rdigits-sourceref.field->data.rdigits);
  
          if( check_for_error && size_error )
            {
            Analyzer.Message("Check to see if result fits");
            if( destref.field->data.digits )
              {
              FIXED_WIDE_INT(128) power_of_ten =
!                                  get_power_of_ten(destref.field->data.digits);
!             IF( dest, ge_op, wide_int_to_tree(calc_type, power_of_ten) )
                {
                gg_assign(size_error,
!                         gg_bitwise_or(size_error, integer_one_node));
                }
              ELSE
                ENDIF
              }
            }
  
!         tree dest_location;
!         get_location(dest_location, destref);
!         gg_memcpy(dest_location,
!                   gg_get_address_of(dest),
!                   build_int_cst_type(SIZE_T, gg_sizeof(dest)));
          moved = true;
          break;
          }
--- 275,358 ----
  
        case FldNumericBin5:
          {
!         // We are moving from a FldLiteralN, which has no subscripts or
!         // reference modification, to a NumericBin5, which might.
  
          SHOW_PARSE1
            {
            SHOW_PARSE_INDENT
!           SHOW_PARSE_TEXT(
!             "mh_source_is_literalN: FldNumericBin5")
            }
  
          // For now, we are ignoring intermediates:
          assert( !(destref.field->attr & intermediate_e) );
! 
          tree dest_type = tree_type_from_refer(destref);
  
!         /*
!          * Keep the value wide until after scaling and size checking.
!          * Otherwise, conversion to dest_type can wrap before we examine
!          * the value.
!          */
!         tree value = gg_define_variable(INT128);
  
!         gg_assign(value,
!                   gg_cast(INT128,
!                           sourceref.field->data_decl_node));
  
!         /*
!          * An unsigned receiving item receives the absolute value of the
!          * sending item.
!          */
!         if( !(destref.field->attr & signable_e) )
!           {
!           gg_assign(value, gg_abs(value));
!           }
  
!         /*
!          * Scale in INT128 rather than dest_type.  This prevents ordinary
!          * destination-width overflow from occurring before the size
!          * check.
!          */
          scale_by_power_of_ten_N(
!           value,
!           destref.field->data.rdigits
!             - sourceref.field->data.rdigits);
  
          if( check_for_error && size_error )
            {
            Analyzer.Message("Check to see if result fits");
+ 
            if( destref.field->data.digits )
              {
              FIXED_WIDE_INT(128) power_of_ten =
!               get_power_of_ten(destref.field->data.digits);
! 
!             tree limit =
!               wide_int_to_tree(INT128, power_of_ten);
! 
!             /*
!              * Cast-before-abs is unnecessary here because value already
!              * has type INT128.
!              */
!             IF( gg_abs(value), ge_op, limit )
                {
                gg_assign(size_error,
!                         gg_bitwise_or(size_error,
!                                       integer_one_node));
                }
              ELSE
                ENDIF
              }
            }
  
!         /*
!          * Narrow only after the value has been checked.
!          */
!         tree dest_location = get_location(destref);
!         safe_store(dest_location, dest_type, value);
! 
          moved = true;
          break;
          }
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 355,362 ****
        case FldNumericEdited:
        case FldPacked:
          {
-         tree berror = gg_define_variable(INT);
-         gg_assign(berror, integer_zero_node);
          SHOW_PARSE1
            {
            SHOW_PARSE_INDENT
--- 362,367 ----
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 370,385 ****
            SHOW_PARSE_TEXT("calling __gg__int128_to_qualified_field ")
            }
  
!         gg_call(INT,
!                 "__gg__int128_to_qualified_field",
!                 gg_get_address_of(destref.field->var_decl_node),
!                 refer_offset(destref),
!                 refer_size_dest(destref),
!                 gg_cast(INT128, literalN_value),
!                 build_int_cst_type(INT, sourceref.field->data.rdigits),
!                 build_int_cst_type(INT, rounded),
!                 gg_get_address_of(berror),
!                 NULL_TREE);
  
          if( size_error )
            {
--- 375,390 ----
            SHOW_PARSE_TEXT("calling __gg__int128_to_qualified_field ")
            }
  
!         tree berror = gg_call_expr(
!                       INT,
!                       "__gg__int128_to_qualified_field",
!                       gg_get_address_of(destref.field->var_decl_node),
!                       refer_offset(destref),
!                       refer_size_dest(destref),
!                       gg_cast(INT128, literalN_value),
!                       build_int_cst_type(INT, sourceref.field->data.rdigits),
!                       build_int_cst_type(INT, rounded),
!                       NULL_TREE);
  
          if( size_error )
            {
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 390,395 ****
--- 395,404 ----
            ELSE
              ENDIF
            }
+         else
+           {
+           gg_append_statement(berror);
+           }
          moved = true;
          break;
          }
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 439,463 ****
            {
            case 4:
              {
!             // The following generated code is the exact equivalent
!             // of the C code:
!             //   *(float *)dest = (float)data.value
!             gg_assign(gg_indirect(gg_cast(build_pointer_type(FLOAT), tdest)),
!                       gg_cast (FLOAT, sourceref.field->data.value_of()));
              break;
              }
            case 8:
              {
!             gg_assign(gg_indirect(gg_cast(build_pointer_type(DOUBLE), tdest)),
!                       gg_cast (DOUBLE, sourceref.field->data.value_of()));
              break;
              }
            case 16:
              {
!             gg_assign(gg_indirect(gg_cast(build_pointer_type(FLOAT128), tdest)),
!                       sourceref.field->data.value_of());
              break;
              }
            }
          moved=true;
          break;
--- 448,471 ----
            {
            case 4:
              {
!             safe_store(tdest, FLOAT, sourceref.field->data.value_of());
              break;
              }
+ 
            case 8:
              {
!             safe_store(tdest, DOUBLE, sourceref.field->data.value_of());
              break;
              }
+ 
            case 16:
              {
!             safe_store(tdest, FLOAT128, sourceref.field->data.value_of());
              break;
              }
+ 
+           default:
+             gcc_unreachable();
            }
          moved=true;
          break;
*************** mh_dest_is_float( cbl_refer_t &destref,
*** 600,609 ****
                                 refer_offset(destref));
              tree source = gg_add(member(sourceref.field->var_decl_node, "data"),
                                  refer_offset(sourceref));
!             gg_assign(gg_indirect(gg_cast(build_pointer_type(dtype), tdest)),
!                       gg_cast(dtype,
!                               gg_indirect(gg_cast(build_pointer_type(stype),
!                                           source))));
              }
            else
              {
--- 608,615 ----
                                 refer_offset(destref));
              tree source = gg_add(member(sourceref.field->var_decl_node, "data"),
                                  refer_offset(sourceref));
!             tree source_value = gg_cast(stype, safe_load(source, stype));
!             safe_store(tdest, dtype, source_value);
              }
            else
              {
*************** clear_negative_zero(const cbl_refer_t &d
*** 787,793 ****
    gg_create_goto_pair(&goto_bugout,
                        &label_bugout);
    tree p     = gg_define_variable(UCHAR_P);
!   tree p_end =  gg_define_variable(UCHAR_P);
    gg_assign(p, dest_location);
    gg_assign(p_end,
              gg_add(p,
--- 793,799 ----
    gg_create_goto_pair(&goto_bugout,
                        &label_bugout);
    tree p     = gg_define_variable(UCHAR_P);
!   tree p_end = gg_define_variable(UCHAR_P);
    gg_assign(p, dest_location);
    gg_assign(p_end,
              gg_add(p,
*************** mh_numeric_display( const cbl_refer_t &d
*** 1230,1242 ****
          ENDIF
          break;
        }
      moved = true;
      }
  
-   clear_negative_zero(destref,
-                       sourceref,
-                       qualified_data_location(destref));
- 
    return moved;
    }
  
--- 1236,1247 ----
          ENDIF
          break;
        }
+     clear_negative_zero(destref,
+                         sourceref,
+                         qualified_data_location(destref));
      moved = true;
      }
  
    return moved;
    }
  
*************** mh_binary_to_numdisp(const cbl_refer_t &
*** 1282,1289 ****
      tree minus = build_int_cst_type(UCHAR,
                                     charmap_dest->is_like_ebcdic()
                                     ? ebcdic_minus : ascii_minus );
!     tree dest_location;
!     get_location(dest_location, destref);
  
      tree s_type   = tree_type_from_refer(sourceref);
      tree d_type   = tree_type_from_refer(destref);
--- 1287,1293 ----
      tree minus = build_int_cst_type(UCHAR,
                                     charmap_dest->is_like_ebcdic()
                                     ? ebcdic_minus : ascii_minus );
!     tree dest_location = get_location(destref);
  
      tree s_type   = tree_type_from_refer(sourceref);
      tree d_type   = tree_type_from_refer(destref);
*************** mh_binary_to_numdisp(const cbl_refer_t &
*** 1291,1309 ****
      // Our working type is the larger of the source and destination types.
      tree work_type = cobol_wider_type_with_x_signedness(d_type, s_type);
  
!     tree value ;
!     get_binary_value(value, sourceref, work_type);
  
!     tree prohibited = gg_define_variable(INT, integer_zero_node);
      if( rounded == prohibited_e )
        {
!       gg_assign(prohibited,
                  gg_call_expr(INT,
                               "__gg__prohibited",
                               gg_get_address_of(destref.field->var_decl_node),
                               value,
!                              NULL_TREE));
        }
      IF(prohibited, eq_op, integer_one_node)
        {
        set_exception_code(ec_size_truncation_e);
--- 1295,1313 ----
      // Our working type is the larger of the source and destination types.
      tree work_type = cobol_wider_type_with_x_signedness(d_type, s_type);
  
!     tree value = get_binary_value(sourceref, work_type);
  
!     tree prohibited = integer_zero_node;
      if( rounded == prohibited_e )
        {
!       prohibited =
                  gg_call_expr(INT,
                               "__gg__prohibited",
                               gg_get_address_of(destref.field->var_decl_node),
                               value,
!                              NULL_TREE);
        }
+ 
      IF(prohibited, eq_op, integer_one_node)
        {
        set_exception_code(ec_size_truncation_e);
*************** mh_binary_to_numdisp(const cbl_refer_t &
*** 1314,1320 ****
        }
      ELSE
        {
!       get_binary_value(value, sourceref, work_type);
        tree negative = gg_define_variable(INT);
        gg_assign(negative, integer_zero_node);
  
--- 1318,1324 ----
        }
      ELSE
        {
!       value = get_binary_value(sourceref, work_type);
        tree negative = gg_define_variable(INT);
        gg_assign(negative, integer_zero_node);
  
*************** mh_binary_to_numdisp(const cbl_refer_t &
*** 1322,1355 ****
  
        if( destref.field->attr & signable_e )
          {
-         sign_location = gg_define_variable(UCHAR_P);
          if(    (destref.field->attr & separate_e)
              && (destref.field->attr & leading_e ) )
            {
            // separate and leading
!           gg_assign(sign_location, dest_location);
!           gg_increment(dest_location);
            }
          else if(    (destref.field->attr & separate_e)
                  && !(destref.field->attr & leading_e ) )
            {
            // separate and trailing
!           gg_assign(sign_location, gg_add(dest_location,
!                                           build_int_cst_type(SIZE_T,
!                                            destref.field->data.capacity()-1)));
            }
          else if(   !(destref.field->attr & separate_e)
                  &&  (destref.field->attr & leading_e ) )
            {
            // internal and leading
!           gg_assign(sign_location, dest_location);
            }
          else
            {
            // internal and trailing
!           gg_assign(sign_location, gg_add(dest_location,
!                                           build_int_cst_type(SIZE_T,
!                                            destref.field->data.capacity()-1)));
            }
          }
  
--- 1326,1358 ----
  
        if( destref.field->attr & signable_e )
          {
          if(    (destref.field->attr & separate_e)
              && (destref.field->attr & leading_e ) )
            {
            // separate and leading
!           sign_location = dest_location;
!           dest_location = gg_add(dest_location, integer_one_node);
            }
          else if(    (destref.field->attr & separate_e)
                  && !(destref.field->attr & leading_e ) )
            {
            // separate and trailing
!           sign_location = gg_add(dest_location,
!                                  build_int_cst_type(SIZE_T,
!                                             destref.field->data.capacity()-1));
            }
          else if(   !(destref.field->attr & separate_e)
                  &&  (destref.field->attr & leading_e ) )
            {
            // internal and leading
!           sign_location = dest_location;
            }
          else
            {
            // internal and trailing
!           sign_location = gg_add(dest_location,
!                                  build_int_cst_type(SIZE_T,
!                                            destref.field->data.capacity()-1));
            }
          }
  
*************** mh_binary_to_numdisp(const cbl_refer_t &
*** 1374,1382 ****
          {
          // We need to multiply the source by 10^(-nshift) to line them up.
          FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten( -nshift );
!         gg_assign(value, gg_multiply(value,
!                                      wide_int_to_tree(work_type,
!                                                       power_of_ten)));
          }
        else if(nshift > 0)
          {
--- 1377,1384 ----
          {
          // We need to multiply the source by 10^(-nshift) to line them up.
          FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten( -nshift );
!         value = gg_multiply(value,   wide_int_to_tree(work_type,
!                                                       power_of_ten));
          }
        else if(nshift > 0)
          {
*************** mh_binary_to_numdisp(const cbl_refer_t &
*** 1398,1404 ****
  
        if( !TYPE_UNSIGNED(work_type) )
          {
!         gg_assign(value, gg_abs(value));
          }
  
        if( size_error )
--- 1400,1406 ----
  
        if( !TYPE_UNSIGNED(work_type) )
          {
!         value = gg_abs(value);
          }
  
        if( size_error )
*************** mh_binary_to_packed(const cbl_refer_t &d
*** 1510,1517 ****
              || sourceref.field->type == FldIndex
              || sourceref.field->type == FldPointer ) )
      {
!     tree dest_location;
!     get_location(dest_location, destref);
  
      tree s_type   = tree_type_from_refer(sourceref);
      tree d_type   = tree_type_from_refer(destref);
--- 1512,1518 ----
              || sourceref.field->type == FldIndex
              || sourceref.field->type == FldPointer ) )
      {
!     tree dest_location = get_location(destref);
  
      tree s_type   = tree_type_from_refer(sourceref);
      tree d_type   = tree_type_from_refer(destref);
*************** mh_binary_to_packed(const cbl_refer_t &d
*** 1519,1526 ****
      // Our working type is the larger of the source and destination types.
      tree work_type = cobol_wider_type_with_x_signedness(d_type, s_type);
  
!     tree value ;
!     get_binary_value(value, sourceref, work_type);
  
      tree negative = gg_define_variable(INT);
      gg_assign(negative, integer_zero_node);
--- 1520,1526 ----
      // Our working type is the larger of the source and destination types.
      tree work_type = cobol_wider_type_with_x_signedness(d_type, s_type);
  
!     tree value = get_binary_value(sourceref, work_type);
  
      tree negative = gg_define_variable(INT);
      gg_assign(negative, integer_zero_node);
*************** mh_binary_to_packed(const cbl_refer_t &d
*** 1573,1579 ****
  
      if( !TYPE_UNSIGNED(work_type) )
        {
!       gg_assign(value, gg_abs(value));
        }
  
      if( size_error )
--- 1573,1579 ----
  
      if( !TYPE_UNSIGNED(work_type) )
        {
!       value = gg_abs(value);
        }
  
      if( size_error )
*************** mh_binary_to_packed(const cbl_refer_t &d
*** 1602,1608 ****
        {
        // This is ordinary packed.  We need to multiply the value by ten to
        // make room for the sign nybble.
!       gg_assign(value, gg_multiply(value, build_int_cst_type(work_type, 10)));
        ndigits = destref.field->data.digits+1;
        }
      else
--- 1602,1608 ----
        {
        // This is ordinary packed.  We need to multiply the value by ten to
        // make room for the sign nybble.
!       value = gg_multiply(value, build_int_cst_type(work_type, 10));
        ndigits = destref.field->data.digits+1;
        }
      else
*************** copy_native_into_place(cbl_field_t *dest
*** 1675,1693 ****
                                bool check_for_error,
                          const tree &size_error)
    {
-   tree value_type = TREE_TYPE(value);
    tree dest_type = tree_type_from_field(dest);
  
!   if( gg_sizeof(dest_type) > gg_sizeof(value_type) )
!     {
!     // Because the dest_type is greater than the value_type, we don't need to
!     // do any size checking.
!     check_for_error = false;
!     }
  
    if( !(dest->attr & signable_e) )
      {
!     gg_assign(value, gg_abs(value));
      }
  
    if( check_for_error && dest->data.digits)
--- 1675,1691 ----
                                bool check_for_error,
                          const tree &size_error)
    {
    tree dest_type = tree_type_from_field(dest);
  
!   /*
!    * Perform sign handling, scaling, and range checking in INT128.
!    * Valid COBOL numeric values contain at most 37 digits.
!    */
!   value = gg_cast(INT128, value);
  
    if( !(dest->attr & signable_e) )
      {
!     value = gg_abs(value);
      }
  
    if( check_for_error && dest->data.digits)
*************** copy_native_into_place(cbl_field_t *dest
*** 1700,1707 ****
      // 10^(5 - 3 + 2) is 10^4, which is 10000.  Because 12345 is >= 10000, the
      // source can't fit into the destination.
  
!     tree abs_value = gg_define_variable(TREE_TYPE(value));
!     gg_assign(abs_value, gg_abs(value));
  
      FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(  dest->data.digits
                                                          - dest->data.rdigits
--- 1698,1704 ----
      // 10^(5 - 3 + 2) is 10^4, which is 10000.  Because 12345 is >= 10000, the
      // source can't fit into the destination.
  
!     tree abs_value = gg_abs(value);
  
      FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(  dest->data.digits
                                                          - dest->data.rdigits
*************** copy_native_into_place(cbl_field_t *dest
*** 1725,1750 ****
  
    if( check_for_error && !dest->data.digits )
      {
!     // The destination is pure binary.  Make sure we fit:
!     int nbytes = gg_sizeof(dest_type);
!     // We are making sure that value is less than the power of two
!     FIXED_WIDE_INT(128) power_of_two = get_power_of_two(nbytes);
!     tree p_of_two = wide_int_to_tree(value_type, power_of_two);
  
!     IF( value, ge_op, p_of_two )
!       {
!       // Flag the size error
!       gg_assign(size_error, gg_bitwise_or(size_error, integer_one_node));
!       }
!     ELSE
        {
        }
-     ENDIF
      }
  
!   tree dest_pointer = gg_define_variable(UCHAR_P);
!   gg_assign(dest_pointer, gg_add(member(dest->var_decl_node, "data"),
!                                  dest_offset));
  
    if( dest->type == FldNumericBinary )
      {
--- 1722,1802 ----
  
    if( check_for_error && !dest->data.digits )
      {
!     unsigned int precision = TYPE_PRECISION(dest_type);
  
!     /*
!      * Valid COBOL values have at most 37 digits.  Therefore, no valid
!      * value can overflow a signed or unsigned 128-bit destination.
!      */
!     if( precision < 128 )
        {
+       FIXED_WIDE_INT(128) limit = 1;
+ 
+       if( TYPE_UNSIGNED(dest_type) )
+         {
+         /*
+          * The valid range is:
+          *
+          *   0 through 2^precision - 1
+          *
+          * value has already been made positive for an unsigned
+          * destination.
+          */
+         limit <<= precision;
+ 
+         tree upper_limit =
+           wide_int_to_tree(INT128, limit);
+ 
+         IF( value, ge_op, upper_limit )
+           {
+           gg_assign(size_error,
+                     gg_bitwise_or(size_error,
+                                   integer_one_node));
+           }
+         ELSE
+           ENDIF
+         }
+       else
+         {
+         /*
+          * The valid signed range is:
+          *
+          *   -2^(precision - 1)
+          *        through
+          *    2^(precision - 1) - 1
+          */
+         limit <<= precision - 1;
+ 
+         tree lower_limit =
+           wide_int_to_tree(INT128, -limit);
+ 
+         tree upper_limit =
+           wide_int_to_tree(INT128, limit);
+ 
+         IF( value, lt_op, lower_limit )
+           {
+           gg_assign(size_error,
+                     gg_bitwise_or(size_error,
+                                   integer_one_node));
+           }
+         ELSE
+           {
+           IF( value, ge_op, upper_limit )
+             {
+             gg_assign(size_error,
+                       gg_bitwise_or(size_error,
+                                     integer_one_node));
+             }
+           ELSE
+             ENDIF
+           }
+         ENDIF
+         }
        }
      }
  
!   tree dest_pointer = gg_add(member(dest->var_decl_node, "data"),
!                              dest_offset);
  
    if( dest->type == FldNumericBinary )
      {
*************** copy_native_into_place(cbl_field_t *dest
*** 1764,1772 ****
      // We need the target to be native binary, so just leave it be
      }
    // Copy the target to the destination.
!   gg_memcpy(dest_pointer,
!             gg_get_address_of(target),
!             build_int_cst_type(SIZE_T, gg_sizeof(dest_type)));
    }
  
  static bool
--- 1816,1822 ----
      // We need the target to be native binary, so just leave it be
      }
    // Copy the target to the destination.
!   safe_store(dest_pointer, dest_type, target);
    }
  
  static bool
*************** mh_to_binary( const cbl_refer_t &destref
*** 1844,1851 ****
      else
        {
        tree source_type = tree_type_from_refer(sourceref);
!       tree source;
!       get_binary_value(source, sourceref, source_type);
        copy_native_into_place( destref.field,
                                refer_offset(destref),
                                source,
--- 1894,1900 ----
      else
        {
        tree source_type = tree_type_from_refer(sourceref);
!       tree source = get_binary_value(sourceref, source_type);
        copy_native_into_place( destref.field,
                                refer_offset(destref),
                                source,
*************** mh_source_is_group( const cbl_refer_t &d
*** 1900,2118 ****
  static bool
  mh_source_is_literalA(const cbl_refer_t &destref,
                        const cbl_refer_t &sourceref,
!                             cbl_round_t rounded,
!                             tree        size_error)
    {
!   bool moved = false;
!   if( sourceref.field->type == FldLiteralA )
      {
!     // We are moving a literal somewhere.  Because a program-id can take
!     // variables of ANY LENGTH, we don't know the length of the target
!     // variable.  We do, however, know its encoding.  So, we are going to
!     // construct a string with the same number of characters as the source, but
!     // in the target variable's encoding.
  
!     // We will then call a library routine that will be in charge of run-time
!     // trimming or space filling, as necessary.
  
!     cbl_encoding_t encoding_dest =   destref.field->codeset.encoding;
!     charmap_t *charmap_dest = __gg__get_charmap(encoding_dest);
  
!     static char *buffer = NULL;
!     static size_t buffer_size = 0;
!     size_t source_length;
!     size_t dest_length;
!     if( sourceref.field->attr & hex_encoded_e )
        {
!       // Hex-encoded data is moved as-is
!       source_length = sourceref.field->data.capacity();
!       dest_length   = std::min(source_length,
!                           static_cast<size_t>(destref.field->data.capacity()));
        }
!     else
        {
!       // Otherwise, data.initial prevails:
!       size_t source_based_on_strlen = strlen(sourceref.field->data.original());
!       size_t source_based_on_capacity = sourceref.field->data.capacity() /
!                                         sourceref.field->codeset.stride() ;
!       source_length = std::max( source_based_on_strlen ,
!                                 source_based_on_capacity );
!       dest_length   = source_length * charmap_dest->stride();
!       }
  
!     if( buffer_size < dest_length )
        {
!       buffer_size = dest_length;
!       buffer = static_cast<char *>(xrealloc(buffer, buffer_size));
        }
-     gcc_assert(buffer);
  
!     cbl_figconst_t figconst = cbl_figconst_of( sourceref.field->data.original());
!     size_t outlength;
!     if( figconst )
        {
!       // We are going to fill 'buffer' with a solid run of the figurative
!       // constant in the destination codeset.
!       char const_char = 0x7F;  // Head off a compiler warning about
!       //                       // uninitialized variables
!       switch(figconst)
!         {
!         case normal_value_e :
!           // This is not possible, it says here in the fine print.
!           gcc_unreachable();
!           break;
!         case low_value_e    :
!           const_char = charmap_dest->low_value_character();
!           break;
!         case zero_value_e   :
!           const_char = charmap_dest->mapped_character(ascii_zero);
!           break;
!         case space_value_e  :
!           const_char = charmap_dest->mapped_character(ascii_space);
!           break;
!         case quote_value_e  :
!           const_char = charmap_dest->quote_character();
!           break;
!         case high_value_e   :
!           const_char = charmap_dest->high_value_character();
!           break;
!         case null_value_e:
!           const_char = 0x00;
!           break;
!         }
!       memset(buffer, const_char, source_length);
        }
!      else
        {
!       if( sourceref.field->attr & hex_encoded_e )
!         {
!         // hex_encoded data goes as is:
!         memcpy(buffer, sourceref.field->data.original(), dest_length);
!         outlength = dest_length;
!         }
!       else
!         {
!         // We are going to convert the source string to the destination
!         // codeset, and then copy it to 'buffer', trimming if necessary, and
!         // space-filling to the right if necessary:
!         const char *source_string =
!         __gg__iconverter(
!                        sourceref.field->codeset.default_encodings.source->type,
!                        encoding_dest,
!                        sourceref.field->data.original(),
!                        source_length,
!                        &outlength );
!         if( outlength > dest_length )
!           {
!           outlength = dest_length;
!           }
!         // Copy over the converted string
!         memcpy( buffer,
!                 source_string,
!                 outlength );
!         }
        }
  
!     // Check to see if we can do a simple alphanumeric-to-alphanumeric move
!     if( (   destref.field->type == FldAlphanumeric
!          || destref.field->type == FldGroup )
!        && !(destref.field->attr & any_length_e)
!        && !sourceref.all
!        && !size_error)
!       {
!       // A simple alpha-to-alpha move is possible
!       size_t dest_bytes = destref.field->data.capacity();
!       // We have 'outlength' bytes in 'buffer' that need to go to
!       // destref.field->data.capacity() bytes at destref.field->data.
!       char *src = static_cast<char *>(xmalloc(dest_bytes));
!       size_t src_bytes = std::min(outlength, dest_bytes);
!       charmap_t *charmap = __gg__get_charmap(destref.field->codeset.encoding);
!       charmap->memset(src, charmap->mapped_character(ascii_space), dest_bytes);
  
!       if( destref.field->attr & rjust_e )
!         {
!         size_t fill = 0;
!         if( src_bytes < dest_bytes )
!           {
!           fill = dest_bytes - src_bytes;
!           }
!         memcpy(src+fill, buffer+outlength-src_bytes, src_bytes);
!         }
!       else
!         {
!         memcpy(src, buffer, src_bytes);
!         }
!       // src is now the desired string, space-filled if necessary on the right,
!       // (or on the left, for rjust_e destinations).
  
!       if( refer_is_clean(destref) )
!         {
!         gg_memcpy(member(destref.field->var_decl_node, "data"),
!                   build_string_literal(dest_bytes, src),
!                   build_int_cst_type(SIZE_T, dest_bytes));
!         }
!       else
!         {
!         // The refer has some information in it.
!         gg_memcpy(gg_add(member(destref.field->var_decl_node, "data"),
!                          refer_offset(destref)),
!                   build_string_literal(dest_bytes, src),
!                   refer_size_dest(destref));
!         }
!       free(src);
        }
      else
        {
!       // This is more complicated than a simple alpha-to-alpha move
!       if(    destref.refmod.from
!           || destref.refmod.len )
!         {
!         // Let the move routine know to treat the destination as alphanumeric
!         attribute_bit_set(destref.field, refmod_e);
!         }
!       // If the source is flagged ALL, or if we are setting the destination to
!       // a figurative constant, pass along the ALL bit:
!       int rounded_parameter = rounded
!                              | ((sourceref.all || figconst ) ? REFER_ALL_BIT : 0);
! 
!       if( size_error )
!         {
!         gg_assign(size_error,
!                   gg_call_expr( INT,
!                                 "__gg__move_literala",
!                                 gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
!                                 refer_size_dest(destref),
!                                 build_int_cst_type(INT, rounded_parameter),
!                                 build_string_literal(outlength,
!                                                      buffer),
!                                 build_int_cst_type( SIZE_T, outlength),
!                                 NULL_TREE));
!         }
!       else
!         {
!                   gg_call     ( INT,
!                                 "__gg__move_literala",
!                                 gg_get_address_of(destref.field->var_decl_node),
!                                 refer_offset(destref),
!                                 refer_size_dest(destref),
!                                 build_int_cst_type(INT, rounded_parameter),
!                                 build_string_literal(outlength,
!                                                      buffer),
!                                 build_int_cst_type( SIZE_T, outlength),
!                                 NULL_TREE);
!         }
!       if(    destref.refmod.from
!           || destref.refmod.len )
!         {
!         // Return that value to its original form
!         attribute_bit_clear(destref.field, refmod_e);
!         }
        }
  
!     moved = true;
      }
!   return moved;
    }
  
  static bool
--- 1949,2189 ----
  static bool
  mh_source_is_literalA(const cbl_refer_t &destref,
                        const cbl_refer_t &sourceref,
!                             cbl_round_t   rounded,
!                             tree          size_error)
    {
!   if( sourceref.field->type != FldLiteralA )
      {
!     return false;
!     }
  
!   cbl_encoding_t dest_encoding =
!     destref.field->codeset.encoding;
  
!   charmap_t *dest_charmap = __gg__get_charmap(dest_encoding);
  
!   cbl_figconst_t figconst =
!     cbl_figconst_of(sourceref.field->data.original());
! 
!   /*
!    * __gg__iconverter returns a pointer to static storage.  Copy its
!    * result before doing anything that might call __gg__iconverter
!    * again, including some charmap operations.
!    */
!   static char *buffer = NULL;
!   static size_t buffer_size = 0;
! 
!   const char *converted = NULL;
!   size_t outlength = 0;
!   cbl_char_t const_char = 0;
! 
!   if( figconst )
!     {
!     /*
!      * A figurative constant is a one-character pattern.  The ALL bit
!      * supplied below causes the library to repeat that pattern.
!      */
!     outlength = dest_charmap->stride();
! 
!     switch( figconst )
        {
!       case normal_value_e:
!         gcc_unreachable();
! 
!       case low_value_e:
!         const_char = dest_charmap->low_value_character();
!         break;
! 
!       case zero_value_e:
!         const_char =
!           dest_charmap->mapped_character(ascii_zero);
!         break;
! 
!       case space_value_e:
!         const_char =
!           dest_charmap->mapped_character(ascii_space);
!         break;
! 
!       case quote_value_e:
!         const_char = dest_charmap->quote_character();
!         break;
! 
!       case high_value_e:
!         const_char = dest_charmap->high_value_character();
!         break;
! 
!       case null_value_e:
!         const_char = 0;
!         break;
        }
!     }
!   else if( sourceref.field->attr & hex_encoded_e )
!     {
!     /*
!      * data.initial contains the exact literal bytes.  Do not limit the
!      * literal to the destination's declared capacity here.
!      */
!     converted = sourceref.field->data.initial;
!     outlength = sourceref.field->data.capacity();
!     }
!   else if( sourceref.field->codeset.encoding == dest_encoding )
!     {
!     /*
!      * The literal was encoded by cbl_field_t::set_initial().
!      */
!     converted = sourceref.field->data.initial;
!     outlength = sourceref.field->data.capacity();
!     }
!   else
!     {
!     /*
!      * Convert from the literal's actual internal encoding, using its
!      * exact byte length.
!      */
!     converted =
!       __gg__iconverter(sourceref.field->codeset.encoding,
!                        dest_encoding,
!                        sourceref.field->data.initial,
!                        sourceref.field->data.capacity(),
!                        &outlength);
!     }
! 
!   /*
!    * Keep one byte available even for an empty literal.  This also makes
!    * the pointer supplied to build_string_literal nonnull.
!    */
!   size_t required = std::max(outlength, size_t(1));
! 
!   if( buffer_size < required )
!     {
!     buffer = static_cast<char *>(xrealloc(buffer, required));
!     buffer_size = required;
!     }
! 
!   gcc_assert(buffer);
! 
!   if( figconst )
!     {
!     /*
!      * charmap_t::memset writes complete encoded characters and takes a
!      * byte count.  Plain memset would be incorrect for stride 2 or 4.
!      */
!     dest_charmap->memset(buffer, const_char, outlength);
!     }
!   else if( outlength )
!     {
!     gcc_assert(converted);
!     memcpy(buffer, converted, outlength);
!     }
! 
!   bool move_all = sourceref.all || figconst;
! 
!   /*
!    * A direct move is possible whenever the effective destination size
!    * is a compile-time constant.  This includes ordinary subscripting
!    * and constant reference modification.
!    */
!   tree dest_size = refer_size_dest(destref);
! 
!   bool direct_move =
!        (   destref.field->type == FldAlphanumeric
!         || destref.field->type == FldGroup)
!     && !(destref.field->attr & any_length_e)
!     && !move_all
!     && !size_error
!     && tree_fits_uhwi_p(dest_size);
! 
!   if( direct_move )
!     {
!     size_t dest_bytes =
!       static_cast<size_t>(tree_to_uhwi(dest_size));
! 
!     size_t allocation = std::max(dest_bytes, size_t(1));
!     char *source = static_cast<char *>(xmalloc(allocation));
! 
!     cbl_char_t space =
!       dest_charmap->mapped_character(ascii_space);
! 
!     dest_charmap->memset(source, space, dest_bytes);
! 
!     size_t source_bytes = std::min(outlength, dest_bytes);
! 
!     if( destref.field->attr & rjust_e )
        {
!       size_t fill = dest_bytes - source_bytes;
  
!       memcpy(source + fill,
!              buffer + outlength - source_bytes,
!              source_bytes);
!       }
!     else
        {
!       memcpy(source, buffer, source_bytes);
        }
  
!     tree source_literal =
!       build_string_literal(dest_bytes, source);
! 
!     free(source);
! 
!     tree dest_location =
!       member(destref.field->var_decl_node, "data");
! 
!     if( !refer_is_clean(destref) )
        {
!       dest_location =
!         gg_add(dest_location, refer_offset(destref));
        }
! 
!     gg_memcpy(dest_location, source_literal, dest_size);
!     }
!   else
!     {
!     bool dest_is_refmod =
!          destref.refmod.from
!       || destref.refmod.len;
! 
!     if( dest_is_refmod )
        {
!       /*
!        * A reference-modified receiving item is treated as
!        * alphanumeric by the library.
!        */
!       attribute_bit_set(destref.field, refmod_e);
        }
  
!     int rounded_parameter =
!       rounded | (move_all ? REFER_ALL_BIT : 0);
  
!     tree move_call =
!       gg_call_expr(INT,
!                    "__gg__move_literala",
!                    gg_get_address_of(
!                      destref.field->var_decl_node),
!                    refer_offset(destref),
!                    refer_size_dest(destref),
!                    build_int_cst_type(INT,
!                                       rounded_parameter),
!                    build_string_literal(outlength, buffer),
!                    build_int_cst_type(SIZE_T, outlength),
!                    NULL_TREE);
  
!     if( size_error )
!       {
!       gg_assign(size_error, move_call);
        }
      else
        {
!       gg_append_statement(move_call);
        }
  
!     if( dest_is_refmod )
!       {
!       attribute_bit_clear(destref.field, refmod_e);
!       }
      }
! 
!   return true;
    }
  
  static bool
*************** mh_numdisp_to_packed(const cbl_refer_t &
*** 2403,2416 ****
    tree umask = build_int_cst_type(UCHAR, 0x0F);
    tree ufour = build_int_cst_type(SIZE_T,   4);
  
!   tree source_location;
!   tree dest_location;
    tree dest_p          = gg_define_variable(UCHAR_P);
    tree source_p        = gg_define_variable(UCHAR_P);
  
-   get_location(dest_location, destref);
    gg_assign(dest_p, dest_location);
-   get_location(source_location, sourceref);
  
    int source_digits   = sourceref.field->data.digits;
    int source_rdigits  = sourceref.field->data.rdigits;
--- 2474,2485 ----
    tree umask = build_int_cst_type(UCHAR, 0x0F);
    tree ufour = build_int_cst_type(SIZE_T,   4);
  
!   tree source_location = get_location(sourceref);
!   tree dest_location   = get_location(destref);
    tree dest_p          = gg_define_variable(UCHAR_P);
    tree source_p        = gg_define_variable(UCHAR_P);
  
    gg_assign(dest_p, dest_location);
  
    int source_digits   = sourceref.field->data.digits;
    int source_rdigits  = sourceref.field->data.rdigits;
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 2710,2722 ****
    // in the dest.  We fiddle with the leading digits, the trailing digits, and
    // the sign nybble as necessary.
  
!   tree source_location;
!   tree dest_location;
!   tree source_sign     = gg_define_variable(UCHAR_P);
!   tree dest_sign       = gg_define_variable(UCHAR_P);
! 
!   get_location(dest_location, destref);
!   get_location(source_location, sourceref);
  
    if( check_for_error )
      {
--- 2779,2787 ----
    // in the dest.  We fiddle with the leading digits, the trailing digits, and
    // the sign nybble as necessary.
  
!   tree source_location = get_location(sourceref);
!   tree dest_base       = get_location(destref);
!   tree dest_location   = dest_base;
  
    if( check_for_error )
      {
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 2792,2806 ****
      tree shifted = gg_define_variable(shifted_type);
      TREE_ADDRESSABLE(shifted) = 1;
      tree source_p        = gg_define_variable(UCHAR_P);
-     tree shifted_p_left  = gg_define_variable(UCHAR_P);
      tree shifted_p_right = gg_define_variable(UCHAR_P);
      tree carry      = gg_define_variable(UCHAR);
!     tree carry_next = gg_define_variable(UCHAR);
      gg_assign(source_p,
                gg_add(source_location,
                       build_int_cst_type(SIZE_T,
                                          source_capacity-1)));
!     gg_assign(shifted_p_left, gg_pointer_to_array(shifted));
      gg_assign(shifted_p_right,
                gg_add(shifted_p_left,
                       build_int_cst_type(SIZE_T, shifted_size-1)));
--- 2857,2870 ----
      tree shifted = gg_define_variable(shifted_type);
      TREE_ADDRESSABLE(shifted) = 1;
      tree source_p        = gg_define_variable(UCHAR_P);
      tree shifted_p_right = gg_define_variable(UCHAR_P);
      tree carry      = gg_define_variable(UCHAR);
!     tree carry_next;
      gg_assign(source_p,
                gg_add(source_location,
                       build_int_cst_type(SIZE_T,
                                          source_capacity-1)));
!     tree shifted_p_left = gg_pointer_to_array(shifted);
      gg_assign(shifted_p_right,
                gg_add(shifted_p_left,
                       build_int_cst_type(SIZE_T, shifted_size-1)));
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 2818,2826 ****
      gg_decrement(shifted_p_right);
      WHILE(shifted_p_right, gt_op, shifted_p_left)
        {
!       gg_assign(carry_next,
                  gg_rshift(gg_indirect(source_p),
!                           build_int_cst_type(SIZE_T, 4)));
        gg_assign(gg_indirect(shifted_p_right),
                  gg_bitwise_or(gg_lshift(gg_indirect(source_p),
                                          build_int_cst_type(SIZE_T, 4)),
--- 2882,2890 ----
      gg_decrement(shifted_p_right);
      WHILE(shifted_p_right, gt_op, shifted_p_left)
        {
!       carry_next =
                  gg_rshift(gg_indirect(source_p),
!                           build_int_cst_type(SIZE_T, 4));
        gg_assign(gg_indirect(shifted_p_right),
                  gg_bitwise_or(gg_lshift(gg_indirect(source_p),
                                          build_int_cst_type(SIZE_T, 4)),
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 2851,2866 ****
      source_digits  += 1;
      source_rdigits += 1;
      source_capacity = source_digits/2 + 1;
!     gg_assign(source_location, shifted_p_left);
      }
!   gg_assign(source_sign,
              gg_add(source_location,
                     build_int_cst_type(SIZE_T,
!                                       source_capacity-1)));
!   gg_assign(dest_sign,
              gg_add(dest_location,
                     build_int_cst_type(SIZE_T,
!                                       destref.field->data.capacity()-1)));
  
    // This is the straightforward case, where the dest and source decimal
    // places are in phase, which means that the middles of the values can
--- 2915,2930 ----
      source_digits  += 1;
      source_rdigits += 1;
      source_capacity = source_digits/2 + 1;
!     source_location = shifted_p_left;
      }
!   tree source_sign =
              gg_add(source_location,
                     build_int_cst_type(SIZE_T,
!                                       source_capacity-1));
!   tree dest_sign =
              gg_add(dest_location,
                     build_int_cst_type(SIZE_T,
!                                       destref.field->data.capacity()-1));
  
    // This is the straightforward case, where the dest and source decimal
    // places are in phase, which means that the middles of the values can
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 2877,2886 ****
      {
      // There are too many source lbytes.   We just skip those extra bytes,
      // truncating off those high-order digits.
!     gg_assign(source_location,
                gg_add(source_location,
                       build_int_cst_type(SIZE_T,
!                                         source_lbytes-dest_lbytes)));
      }
    else if( source_lbytes < dest_lbytes )
      {
--- 2941,2950 ----
      {
      // There are too many source lbytes.   We just skip those extra bytes,
      // truncating off those high-order digits.
!     source_location =
                gg_add(source_location,
                       build_int_cst_type(SIZE_T,
!                                         source_lbytes-dest_lbytes));
      }
    else if( source_lbytes < dest_lbytes )
      {
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 2889,2897 ****
      gg_memset(dest_location,
                integer_zero_node,
                build_int_cst_type(SIZE_T, dest_lbytes-source_lbytes));
!     gg_assign(dest_location,
!               gg_add(dest_location,
!                      build_int_cst_type(SIZE_T, dest_lbytes-source_lbytes)));
      // And reduce the total number to move by the number we zeroed:
      dest_bytes -= dest_lbytes-source_lbytes;
      }
--- 2953,2961 ----
      gg_memset(dest_location,
                integer_zero_node,
                build_int_cst_type(SIZE_T, dest_lbytes-source_lbytes));
!     dest_location =  gg_add(dest_location,
!                             build_int_cst_type(SIZE_T,
!                                                dest_lbytes-source_lbytes));
      // And reduce the total number to move by the number we zeroed:
      dest_bytes -= dest_lbytes-source_lbytes;
      }
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 3018,3027 ****
          }
        }
      }
    clear_negative_zero(destref,
                        sourceref,
!                       dest_location);
!   return true;
    }
  
  static bool
--- 3082,3098 ----
          }
        }
      }
+   // A standard packed-decimal item with an even number of digits has an
+   // unused high-order nybble.  It must always be zero.
+   if( !(destref.field->data.digits & 1) )
+     {
+     gg_assign(gg_indirect(dest_base),
+               gg_bitwise_and(gg_indirect(dest_base),
+                              build_int_cst_type(UCHAR, 0x0F)));
+     }
    clear_negative_zero(destref,
                        sourceref,
!                       dest_base);  return true;
    }
  
  static bool
*************** mh_packed_to_numdisp(const cbl_refer_t &
*** 3031,3122 ****
                             bool         check_for_error)
    {
    charmap_t *charmap =
!                    __gg__get_charmap(destref.field->codeset.encoding);
  
!   if(    (sourceref.field->type != FldPacked         )
!       || (destref.field->type   != FldNumericDisplay )
!       || (charmap->stride()     != 1                 )
!       || (sourceref.field->attr  & scaled_e          )
!       || (destref.field->attr    & scaled_e          )
!       || (sourceref.field->attr  & packed_no_sign_e  )
!       || (destref.field->attr    & leading_e         )
!       || (destref.field->attr    & separate_e        ) )
      {
      return false;
      }
  
!   /* Source is packed, dest is numeric-display, neither are scaled, the
!      packed source has a sign nybble, and the numeric-display dest has an
!      ordinary sign bit encoded in the final digit.  */
    tree umask = build_int_cst_type(UCHAR, 0x0F);
!   tree ufour = build_int_cst_type(SIZE_T,   4);
!   tree uzero = build_int_cst_type(UCHAR,
!                                   charmap->mapped_character(ascii_zero));
!   tree source_location;
!   tree dest_location;
!   tree dest_p          = gg_define_variable(UCHAR_P);
!   tree source_p        = gg_define_variable(UCHAR_P);
  
-   get_location(dest_location, destref);
    gg_assign(dest_p, dest_location);
-   get_location(source_location, sourceref);
  
!   // source_digits will be the number of digits extracted from the source that
!   // find their way into the destination.
!   int source_digits   = sourceref.field->data.digits;
  
    if( !(source_digits & 0x01) )
      {
-     // Because this is an even number, the first byte of the packed value is
-     // 0x0N.  The following logic is a tad simpler when we just increment it,
-     // as if the zero in the left nybble is part of the packed-decimal value.
      source_digits += 1;
      }
  
!   int source_rdigits  = sourceref.field->data.rdigits;
!   int source_ldigits  = source_digits - source_rdigits;
!   int dest_digits     = destref.field->data.digits;
!   int dest_rdigits    = destref.field->data.rdigits;
!   int dest_ldigits    = dest_digits - dest_rdigits;
  
!   int truncate_ldigits = std::max(0, source_ldigits-dest_ldigits);
!   int truncate_rdigits = std::max(0, source_rdigits-dest_rdigits);
!   int leading_zeroes   = std::max(0, dest_ldigits-source_ldigits);
!   int trailing_zeroes  = std::max(0, dest_rdigits-source_rdigits);
  
    int digit_pairs;
    int source_remaining;
  
!   int truncate_pairs = truncate_ldigits/2 ;
    if( truncate_pairs )
      {
!     // We handle truncation of digits on the left by moving the starting line
!     // one byte to the right for each full pair of digits
  
      if( check_for_error )
        {
        gg_assign(source_p, source_location);
        tree truncate_end = gg_define_variable(UCHAR_P);
!       gg_assign(truncate_end,
!                 gg_add(source_location,
!                        build_int_cst_type(SIZE_T, truncate_pairs)));
        WHILE( source_p, lt_op, truncate_end )
          {
!         gg_assign(size_error,
!                   gg_bitwise_or(size_error,
!                                 gg_cast(INT, gg_indirect(source_p))));
          gg_increment(source_p);
          }
        WEND
        }
      else
        {
!       gg_assign(source_p,
!                 gg_add(source_location,
!                        build_int_cst_type(SIZE_T, truncate_pairs)));
        }
!     source_digits    -= 2*truncate_pairs;
!     //source_ldigits   -= 2*truncate_pairs;
      truncate_ldigits &= 0x01;
      }
    else
--- 3102,3242 ----
                             bool         check_for_error)
    {
    charmap_t *charmap =
!     __gg__get_charmap(destref.field->codeset.encoding);
  
!   if(    sourceref.field->type != FldPacked
!       || destref.field->type   != FldNumericDisplay
!       || charmap->stride()     != 1
!       || sourceref.field->attr & scaled_e
!       || destref.field->attr   & scaled_e
!       || sourceref.field->attr & packed_no_sign_e
!       || destref.field->attr   & leading_e
!       || destref.field->attr   & separate_e )
      {
      return false;
      }
  
!   gcc_assert(!check_for_error || size_error);
! 
!   /*
!    * The source is packed and the destination is numeric-display.
!    * Neither is scaled.  The packed source has a sign nybble, and
!    * the numeric-display destination has an embedded trailing sign.
!    */
! 
    tree umask = build_int_cst_type(UCHAR, 0x0F);
!   tree ufour = build_int_cst_type(SIZE_T, 4);
!   tree uzero =
!     build_int_cst_type(
!       UCHAR,
!       charmap->mapped_character(ascii_zero));
! 
!   tree source_location = get_location(sourceref);
!   tree dest_location   = get_location(destref);
! 
!   tree dest_p   = gg_define_variable(UCHAR_P);
!   tree source_p = gg_define_variable(UCHAR_P);
  
    gg_assign(dest_p, dest_location);
  
!   /*
!    * These counts describe actual COBOL digits.  They do not include
!    * the leading padding nybble present in an even-digit packed item.
!    */
! 
!   int source_data_digits =
!     sourceref.field->data.digits;
!   int source_rdigits =
!     sourceref.field->data.rdigits;
!   int source_data_ldigits =
!     source_data_digits - source_rdigits;
! 
!   int dest_digits =
!     destref.field->data.digits;
!   int dest_rdigits =
!     destref.field->data.rdigits;
!   int dest_ldigits =
!     dest_digits - dest_rdigits;
! 
!   int truncate_data_ldigits =
!     std::max(0, source_data_ldigits - dest_ldigits);
!   int truncate_rdigits =
!     std::max(0, source_rdigits - dest_rdigits);
! 
!   int digits_to_move =
!       source_data_digits
!     - truncate_data_ldigits
!     - truncate_rdigits;
! 
!   /*
!    * source_digits and source_ldigits describe the physical packed
!    * representation.  For an even-digit source, source_digits includes
!    * its leading padding nybble.
!    */
! 
!   int source_digits = source_data_digits;
  
    if( !(source_digits & 0x01) )
      {
      source_digits += 1;
      }
  
!   int source_ldigits =
!     source_digits - source_rdigits;
  
!   int truncate_ldigits =
!     std::max(0, source_ldigits - dest_ldigits);
!   int leading_zeroes =
!     std::max(0, dest_ldigits - source_ldigits);
!   int trailing_zeroes =
!     std::max(0, dest_rdigits - source_rdigits);
  
    int digit_pairs;
    int source_remaining;
  
!   int truncate_pairs = truncate_ldigits / 2;
! 
    if( truncate_pairs )
      {
!     /*
!      * Move the source starting position one byte to the right for
!      * each complete pair of truncated digits.
!      */
  
      if( check_for_error )
        {
        gg_assign(source_p, source_location);
+ 
        tree truncate_end = gg_define_variable(UCHAR_P);
! 
!       gg_assign(
!         truncate_end,
!         gg_add(
!           source_location,
!           build_int_cst_type(SIZE_T, truncate_pairs)));
! 
        WHILE( source_p, lt_op, truncate_end )
          {
!         gg_assign(
!           size_error,
!           gg_bitwise_or(
!             size_error,
!             gg_cast(INT, gg_indirect(source_p))));
! 
          gg_increment(source_p);
          }
        WEND
        }
      else
        {
!       gg_assign(
!         source_p,
!         gg_add(
!           source_location,
!           build_int_cst_type(SIZE_T, truncate_pairs)));
        }
! 
!     source_digits -= 2 * truncate_pairs;
      truncate_ldigits &= 0x01;
      }
    else
*************** mh_packed_to_numdisp(const cbl_refer_t &
*** 3124,3267 ****
      gg_assign(source_p, source_location);
      }
  
!   // At this point, truncate_ldigits might be one, meaning that when we
!   // get around to  moving digits, we will have to skip the first one.
  
    if( truncate_rdigits )
      {
!     // We handle truncation of digits on the right by moving the finish line
!     // to the left.
!     source_digits    -= truncate_rdigits;
!     //source_ldigits   -= truncate_rdigits;
      }
  
    source_remaining = source_digits;
  
!   // We are ready to start building our numeric-displace destination.
! 
!   if( leading_zeroes )
      {
!     tree tleading_zeroes = build_int_cst_type(SIZE_T, leading_zeroes);
!     gg_memset(dest_p,
!               uzero,
!               tleading_zeroes);
!     gg_assign(dest_p, gg_add(dest_p, tleading_zeroes));
      }
  
!   // At this point, we are ready to start moving over source_remaining digits.
  
!   if( truncate_ldigits )
!     {
!     // When truncate_ldigits is one, the first byte comes from the right nybble
!     // of *source_p.  We therefore skip the digit in the left nybble.
!     if( check_for_error )
        {
!       gg_assign(size_error,
!                 gg_cast(INT,
!                         gg_bitwise_and(gg_indirect(source_p),
!                                        build_int_cst_type(UCHAR, 0xF0))));
        }
-     gg_assign(gg_indirect(dest_p),
-                 gg_bitwise_or(gg_bitwise_and(gg_indirect(source_p),
-                                              umask),
-                               uzero));
-     gg_increment(source_p);
-     gg_increment(dest_p);
-     source_remaining -= 2;
-     }
  
!   // We now pull pairs of digits from the packed source, and put them into the
!   // destination numeric-display.
  
!   digit_pairs = source_remaining/2;
  
!   if( digit_pairs )
!     {
!     tree source_end = gg_define_variable(UCHAR_P);
!     gg_assign(source_end,
!               gg_add(source_p,
!                      build_int_cst_type(SIZE_T, digit_pairs)));
!     WHILE( source_p, lt_op, source_end )
        {
!       // Left digit
!       gg_assign(gg_indirect(dest_p),
!                 gg_bitwise_or(gg_rshift(gg_indirect(source_p),
!                                         ufour),
!                               uzero));
!       gg_increment(dest_p);
!       // Right digit
!       gg_assign(gg_indirect(dest_p),
!                 gg_bitwise_or(gg_bitwise_and(gg_indirect(source_p),
!                                              umask),
!                               uzero));
        gg_increment(dest_p);
-       gg_increment(source_p);
        }
-     WEND
-     source_remaining -= 2 * digit_pairs;
-     }
  
!   // At this point, source_remaining is zero or one
  
!   if( source_remaining )
!     {
!     // We have one remaining left digit;
!     gg_assign(gg_indirect(dest_p),
!               gg_bitwise_or(gg_rshift(gg_indirect(source_p),
!                                       ufour),
!                             uzero));
!     gg_increment(dest_p);
      }
  
!   if( trailing_zeroes )
      {
!     tree ttrailing_zeroes = build_int_cst_type(SIZE_T, trailing_zeroes);
!     gg_memset(dest_p,
!               uzero,
!               ttrailing_zeroes);
!     }
  
!   if(    (destref.field->attr   & signable_e)
!       && (sourceref.field->attr & signable_e) )
!     {
!     // The source and the destination are both signable.
!     gg_assign(source_p,
!               gg_add(source_location,
!                      build_int_cst_type(SIZE_T,
!                                        sourceref.field->data.capacity()-1)));
!     IF(gg_bitwise_and(gg_indirect(source_p),
!                       umask),
!        eq_op,
!        build_int_cst_type(UCHAR, 0x0D) )
        {
!       // The source is negative
!       gg_assign(dest_p,
!                 gg_add(dest_location,
!                        build_int_cst_type(SIZE_T,
!                                        destref.field->data.capacity()-1)));
!       if( charmap->is_like_ebcdic() )
          {
!         // Turn the 0xFZ EBCDIC digit into 0xDZ to flag it as negative.
!         gg_assign(gg_indirect(dest_p),
!                   gg_bitwise_and(gg_indirect(dest_p),
!                                  build_int_cst_type(UCHAR, 0xDF)));
          }
!       else
          {
-         // Turn the 0x3Z ASCII digit into 07Z to flag it as negative.
-         gg_assign(gg_indirect(dest_p),
-                   gg_bitwise_or(gg_indirect(dest_p),
-                                  build_int_cst_type(UCHAR, 0x70)));
          }
        }
      ELSE
        {
        }
      ENDIF
      }
!   clear_negative_zero(destref,
!                       sourceref,
!                       dest_location);
    return true;
    }
  
--- 3244,3499 ----
      gg_assign(source_p, source_location);
      }
  
!   /*
!    * truncate_ldigits can now only be zero or one.  When it is one,
!    * the high nybble at source_p is discarded and the low nybble is
!    * the first source digit transferred.
!    */
  
    if( truncate_rdigits )
      {
!     source_digits -= truncate_rdigits;
      }
  
    source_remaining = source_digits;
  
!   if( digits_to_move == 0 )
      {
!     /*
!      * The source and destination digit ranges do not overlap.  The
!      * result is zero.  In particular, do not interpret the packed
!      * source's sign nybble as a digit.
!      */
! 
!     gg_memset(
!       dest_p,
!       uzero,
!       build_int_cst_type(
!         SIZE_T,
!         destref.field->data.capacity()));
      }
+   else
+     {
+     if( leading_zeroes )
+       {
+       tree tleading_zeroes =
+         build_int_cst_type(SIZE_T, leading_zeroes);
  
!       gg_memset(dest_p,
!                 uzero,
!                 tleading_zeroes);
  
!       gg_assign(dest_p,
!                 gg_add(dest_p, tleading_zeroes));
!       }
! 
!     if( truncate_ldigits )
        {
!       /*
!        * The high nybble is being discarded.  Preserve any size error
!        * already detected while examining complete truncated bytes.
!        */
! 
!       if( check_for_error )
!         {
!         gg_assign(
!           size_error,
!           gg_bitwise_or(
!             size_error,
!             gg_cast(
!               INT,
!               gg_bitwise_and(
!                 gg_indirect(source_p),
!                 build_int_cst_type(UCHAR, 0xF0)))));
!         }
! 
!       gg_assign(
!         gg_indirect(dest_p),
!         gg_bitwise_or(
!           gg_bitwise_and(gg_indirect(source_p), umask),
!           uzero));
! 
!       gg_increment(source_p);
!       gg_increment(dest_p);
! 
!       /*
!        * One nybble was discarded and one was transferred, so the
!        * complete source byte has been consumed.
!        */
!       source_remaining -= 2;
        }
  
!     /*
!      * Transfer complete pairs of packed digits.
!      */
  
!     digit_pairs = source_remaining / 2;
  
!     if( digit_pairs )
        {
!       tree source_end = gg_define_variable(UCHAR_P);
! 
!       gg_assign(
!         source_end,
!         gg_add(
!           source_p,
!           build_int_cst_type(SIZE_T, digit_pairs)));
! 
!       WHILE( source_p, lt_op, source_end )
!         {
!         /*
!          * Transfer the left packed digit.
!          */
! 
!         gg_assign(
!           gg_indirect(dest_p),
!           gg_bitwise_or(
!             gg_rshift(gg_indirect(source_p), ufour),
!             uzero));
! 
!         gg_increment(dest_p);
! 
!         /*
!          * Transfer the right packed digit.
!          */
! 
!         gg_assign(
!           gg_indirect(dest_p),
!           gg_bitwise_or(
!             gg_bitwise_and(
!               gg_indirect(source_p),
!               umask),
!             uzero));
! 
!         gg_increment(dest_p);
!         gg_increment(source_p);
!         }
!       WEND
! 
!       source_remaining -= 2 * digit_pairs;
!       }
! 
!     /*
!      * source_remaining is now zero or one.
!      */
! 
!     if( source_remaining )
!       {
!       gg_assign(
!         gg_indirect(dest_p),
!         gg_bitwise_or(
!           gg_rshift(gg_indirect(source_p), ufour),
!           uzero));
! 
        gg_increment(dest_p);
        }
  
!     if( trailing_zeroes )
!       {
!       tree ttrailing_zeroes =
!         build_int_cst_type(SIZE_T, trailing_zeroes);
  
!       gg_memset(dest_p,
!                 uzero,
!                 ttrailing_zeroes);
!       }
      }
  
!   if(    destref.field->attr   & signable_e
!       && sourceref.field->attr & signable_e )
      {
!     /*
!      * Determine whether truncation occurred.  If it did, preserve a
!      * negative sign only when the resulting destination is nonzero.
!      * This prevents either left or right truncation from producing
!      * negative zero.
!      */
  
!     tree preserve_negative = integer_one_node;
! 
!     if( truncate_data_ldigits || truncate_rdigits )
        {
!       preserve_negative = integer_zero_node;
! 
!       for( size_t i = 0;
!            i < destref.field->data.capacity();
!            i++ )
          {
!         tree digit =
!           gg_bitwise_and(
!             gg_indirect(
!               dest_location,
!               build_int_cst_type(SIZE_T, i)),
!             umask);
! 
!         preserve_negative =
!           gg_bitwise_or(
!             preserve_negative,
!             gg_cast(INT, digit));
          }
!       }
! 
!     tree source_sign =
!       gg_add(
!         source_location,
!         build_int_cst_type(
!           SIZE_T,
!           sourceref.field->data.capacity() - 1));
! 
!     IF( gg_bitwise_and(gg_indirect(source_sign), umask),
!         eq_op,
!         build_int_cst_type(UCHAR, 0x0D) )
!       {
!       /*
!        * The source is negative.  Apply that sign only when doing so
!        * will not create a negative zero through truncation.
!        */
! 
!       IF( preserve_negative, ne_op, integer_zero_node )
!         {
!         tree dest_sign =
!           gg_add(
!             dest_location,
!             build_int_cst_type(
!               SIZE_T,
!               destref.field->data.capacity() - 1));
! 
!         if( charmap->is_like_ebcdic() )
!           {
!           /*
!            * Turn the EBCDIC 0xFZ digit into 0xDZ.
!            */
! 
!           gg_assign(
!             gg_indirect(dest_sign),
!             gg_bitwise_and(
!               gg_indirect(dest_sign),
!               build_int_cst_type(UCHAR, 0xDF)));
!           }
!         else
!           {
!           /*
!            * Turn the ASCII 0x3Z digit into 0x7Z.
!            */
! 
!           gg_assign(
!             gg_indirect(dest_sign),
!             gg_bitwise_or(
!               gg_indirect(dest_sign),
!               build_int_cst_type(UCHAR, 0x70)));
!           }
!         }
!       ELSE
          {
          }
+       ENDIF
        }
      ELSE
        {
        }
      ENDIF
      }
! 
    return true;
    }
  
*************** move_helper(tree size_error,        // T
*** 3276,3281 ****
--- 3508,3514 ----
              bool restore_on_error
              )
    {
+   //extern bool var_decl_count; var_decl_count=true;
    Analyze();
    SHOW_PARSE1
      {
*************** move_helper(tree size_error,        // T
*** 3288,3321 ****
      gg_assign(size_error, integer_zero_node);
      }
  
!   static tree stash =
!                 gg_define_variable(UCHAR_P, "..move_stasher", vs_file_static);
! 
    tree st_data = NULL_TREE;
    tree st_size = NULL_TREE;
    if( restore_on_error )
      {
!     // We are creating a copy of the original destination in case we clobber it
!     // and have to restore it because of a computational error.
!     static bool first_time = true;
!     static size_t stash_size = 1024;
!     if( first_time )
!       {
!       first_time = false;
!       gg_assign(stash, gg_cast(UCHAR_P, gg_malloc(stash_size)));
!       }
!     if( stash_size < destref.field->data.capacity() )
!       {
!       stash_size = destref.field->data.capacity();
!       gg_assign(stash, gg_cast(UCHAR_P, gg_realloc(stash, stash_size)));
!       }
!     st_data = qualified_data_location(destref);
!     st_size = refer_size_dest(destref);
      gg_memcpy(stash,
                st_data,
                st_size);
      }
- 
    bool moved = mh_source_is_group(destref, sourceref, tsource);
  
    if( !moved )
--- 3521,3554 ----
      gg_assign(size_error, integer_zero_node);
      }
  
!   tree stash   = NULL_TREE;
    tree st_data = NULL_TREE;
    tree st_size = NULL_TREE;
+ 
    if( restore_on_error )
      {
!     gcc_assert(size_error);
! 
!     st_data = gg_define_variable(UCHAR_P);
!     st_size = gg_define_variable(SIZE_T);
!     stash   = gg_define_variable(UCHAR_P);
! 
!     // Snapshot the destination address and length before executing the move.
!     gg_assign(st_data,
!               qualified_data_location(destref));
!     gg_assign(st_size,
!               refer_size_dest(destref));
! 
!     gg_assign(stash,
!               gg_call_expr(UCHAR_P,
!                            "__gg__move_stash_acquire",
!                            st_size,
!                            NULL_TREE));
! 
      gg_memcpy(stash,
                st_data,
                st_size);
      }
    bool moved = mh_source_is_group(destref, sourceref, tsource);
  
    if( !moved )
*************** move_helper(tree size_error,        // T
*** 3433,3447 ****
  
      int nflags =   (sourceref.all      ? REFER_T_MOVE_ALL   : 0)
                   + (sourceref.addr_of  ? REFER_T_ADDRESS_OF : 0);
- 
      if( size_error )
        {
        gg_assign(size_error,
                  gg_call_expr( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset(destref),
!                               refer_size_dest(destref),
                                tsource.pfield,
                                tsource.offset,
                                tsource.length,
--- 3666,3679 ----
  
      int nflags =   (sourceref.all      ? REFER_T_MOVE_ALL   : 0)
                   + (sourceref.addr_of  ? REFER_T_ADDRESS_OF : 0);
      if( size_error )
        {
        gg_assign(size_error,
                  gg_call_expr( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               gg_cast(SIZE_T, refer_offset(destref)),
!                               gg_cast(SIZE_T, refer_size_dest(destref)),
                                tsource.pfield,
                                tsource.offset,
                                tsource.length,
*************** move_helper(tree size_error,        // T
*** 3454,3461 ****
                  gg_call     ( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               refer_offset(destref),
!                               refer_size_dest(destref),
                                tsource.pfield,
                                tsource.offset,
                                tsource.length,
--- 3686,3693 ----
                  gg_call     ( INT,
                                "__gg__move",
                                gg_get_address_of(destref.field->var_decl_node),
!                               gg_cast(SIZE_T, refer_offset(destref)),
!                               gg_cast(SIZE_T, refer_size_dest(destref)),
                                tsource.pfield,
                                tsource.offset,
                                tsource.length,
*************** move_helper(tree size_error,        // T
*** 3478,3484 ****
  
    if( restore_on_error )
      {
!     IF(size_error, ne_op, integer_zero_node)
        {
        gg_memcpy(st_data,
                  stash,
--- 3710,3716 ----
  
    if( restore_on_error )
      {
!     IF( size_error, ne_op, integer_zero_node )
        {
        gg_memcpy(st_data,
                  stash,
*************** move_helper(tree size_error,        // T
*** 3486,3500 ****
        }
      ELSE
        ENDIF
      }
    else
      {
      if( check_for_error )
        {
!       IF(size_error, ne_op, integer_zero_node)
          {
-         // We had a size error, but there was no restore_on_error.
-         // Let our lord and master know there was a truncation:
          set_exception_code(ec_size_truncation_e);
          }
        ELSE
--- 3718,3735 ----
        }
      ELSE
        ENDIF
+ 
+     gg_call(VOID,
+             "__gg__move_stash_release",
+             stash,
+             NULL_TREE);
      }
    else
      {
      if( check_for_error )
        {
!       IF( size_error, ne_op, integer_zero_node )
          {
          set_exception_code(ec_size_truncation_e);
          }
        ELSE
diff -Nrcpad gcc-17-20260823/gcc/cobol/parse.y gcc-17-20260830/gcc/cobol/parse.y
*** gcc-17-20260823/gcc/cobol/parse.y	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/parse.y	Sun Aug 30 22:32:06 2026
*************** class locale_tgt_t {
*** 371,380 ****
  #include "parse_ante.h"
  %}
  
! %token                  IDENTIFICATION_DIV   "IDENTIFICATION DIVISION"
! 			ENVIRONMENT_DIV      "ENVIRONMENT DIVISION"
! 			PROCEDURE_DIV        "PROCEDURE DIVISION"
!                         DATA_DIV             "DATA DIVISION"
  			FILE_SECT            "FILE SECTION"
  			INPUT_OUTPUT_SECT    "INPUT-OUTPUT SECTION"
  			LINKAGE_SECT         "LINKAGE SECTION"
--- 371,380 ----
  #include "parse_ante.h"
  %}
  
! %token                  IDENTIFICATION IDENTIFICATION_DIV   "IDENTIFICATION DIVISION"
! 			ENVIRONMENT    ENVIRONMENT_DIV      "ENVIRONMENT DIVISION"
!                         DATA           DATA_DIV             "DATA DIVISION"
! 			PROCEDURE      PROCEDURE_DIV        "PROCEDURE DIVISION"
  			FILE_SECT            "FILE SECTION"
  			INPUT_OUTPUT_SECT    "INPUT-OUTPUT SECTION"
  			LINKAGE_SECT         "LINKAGE SECTION"
*************** class locale_tgt_t {
*** 402,416 ****
  			NUMED_CR  "NUMERIC-EDITED CR picture"
  			NUMED_DB  "NUMERIC-EDITED DB picture"
  %token  <number>        NINEDOT NINES NINEV PIC_P "PICTURE P symbol" ONES
! %token  <string>        SPACES EQ "EQUAL"
  %token  <literal>       LITERAL
  %token  <number>        END EOP
! %token  <string>        FILENAME
  %token  <number>        INVALID
  %token  <number>        NUMBER NEGATIVE
  %token  <numstr>        NUMSTR    "numeric literal"
  %token  <number>        OVERFLOW_kw "OVERFLOW"
! %token  <computational> BINARY_INTEGER COMPUTATIONAL
  
  %token  <boolean>       PERFORM BACKWARD
  %token  <number>        POSITIVE
--- 402,416 ----
  			NUMED_CR  "NUMERIC-EDITED CR picture"
  			NUMED_DB  "NUMERIC-EDITED DB picture"
  %token  <number>        NINEDOT NINES NINEV PIC_P "PICTURE P symbol" ONES
! %token  <string>        SPACES _EQ "EQUAL"
  %token  <literal>       LITERAL
  %token  <number>        END EOP
! %token  <string>        _FILENAME
  %token  <number>        INVALID
  %token  <number>        NUMBER NEGATIVE
  %token  <numstr>        NUMSTR    "numeric literal"
  %token  <number>        OVERFLOW_kw "OVERFLOW"
! %token  <computational> _BINARY_INTEGER COMPUTATIONAL
  
  %token  <boolean>       PERFORM BACKWARD
  %token  <number>        POSITIVE
*************** class locale_tgt_t {
*** 440,451 ****
  
  			/* tokens without semantic value */
                          /* CDF (COPY and >> defined here but used in cdf.y) */
! %token			BASIS CBL CONSTANT COPY
  			DEFINED ENTER FEATURE INSERTT
  			LSUB "("
  			PARAMETER_kw "PARAMETER"
  			OVERRIDE READY RESET
! 			RSUB")"
  			SERVICE_RELOAD "SERVICE RELOAD" STAR_CBL "*CBL"
  			SUBSCRIPT SUPPRESS TRACE USE
  
--- 440,475 ----
  
  			/* tokens without semantic value */
                          /* CDF (COPY and >> defined here but used in cdf.y) */
!                         
! %token			// CDF Flag-02 operands
!                         FLAG_02
!                         MOVE_TO_SAME_NAME
!                         RANGE_EXCEPTION_FOR_INDEX
!                         TERMINATE_WITH_VARYING
! 
!                         // CDF Flag-14 operands
!                         FLAG_14
!                         COMPILE_TIME_ARITHMETIC_EXPRESSIONS
!                         I_O_DECLARATIVE I_O_STATUS_04 I_O_STATUS_07
! 			NUM_ED_ZERO_FIGCONST
! 			READ_PREVIOUS REF_MOD_ZERO_LENGTH
! 			VALUE_EDITING VALUE_FIG_CON_LENGTH VALUE_ZERO
! 			WRITE_END_OF_PAGE
! 			// Other unsupported CDF words
!                         LEAP_SECOND LISTING PROPAGATE
!                         ZERO_LENGTH
! 
!                         // boolean operators
! 			B_AND B_NOT B_OR 
!                         B_SHIFT_L B_SHIFT_LC B_SHIFT_R B_SHIFT_RC
!                         B_XOR
!                         
!                         BASIS CBL CONSTANT COPY
  			DEFINED ENTER FEATURE INSERTT
  			LSUB "("
  			PARAMETER_kw "PARAMETER"
  			OVERRIDE READY RESET
! 			RSUB ")"
  			SERVICE_RELOAD "SERVICE RELOAD" STAR_CBL "*CBL"
  			SUBSCRIPT SUPPRESS TRACE USE
  
*************** class locale_tgt_t {
*** 501,512 ****
  			COMMAND_LINE_COUNT "COMMAND-LINE-COUNT"
  			COMMIT COMMON
  
! 			CONCAT CONDITION CONFIGURATION_SECT "CONFIGURATION SECTION"
  			CONTAINS
  			CONTENT CONTROL CONTROLS CONVERT CONVERTING CORRESPONDING COS
  			COUNT CURRENCY CURRENT CURRENT_DATE
  
! 			DATA DATE DATE_COMPILED
  			DATE_OF_INTEGER "DATE-OF-INTEGER"
  			DATE_TO_YYYYMMDD "DATE-TO-YYYYMMDD"
  			DATE_WRITTEN "DATE-WRITTEN"
--- 525,537 ----
  			COMMAND_LINE_COUNT "COMMAND-LINE-COUNT"
  			COMMIT COMMON
  
! 			CONCAT CONDITION
!                         CONFIGURATION CONFIGURATION_SECT "CONFIGURATION SECTION"
  			CONTAINS
  			CONTENT CONTROL CONTROLS CONVERT CONVERTING CORRESPONDING COS
  			COUNT CURRENCY CURRENT CURRENT_DATE
  
! 			DATE DATE_COMPILED
  			DATE_OF_INTEGER "DATE-OF-INTEGER"
  			DATE_TO_YYYYMMDD "DATE-TO-YYYYMMDD"
  			DATE_WRITTEN "DATE-WRITTEN"
*************** class locale_tgt_t {
*** 516,526 ****
  			DBCS DE DEBUGGING DECIMAL_POINT
  			DECLARATIVES DELIMITED DELIMITER DEPENDING
  			DESCENDING DETAIL DIRECT
! 			DIRECT_ACCESS "DIRECT-ACCESS"
  			DOWN DUPLICATES
  			DYNAMIC
  
! 			E EBCDIC EC EGCS ENCODING ENTRY ENVIRONMENT 
  			EVERY EXAMINE EXHIBIT EXP EXP10 EXTEND EXTERNAL
  
  			EXCEPTION_FILE	     "EXCEPTION-FILE"
--- 541,551 ----
  			DBCS DE DEBUGGING DECIMAL_POINT
  			DECLARATIVES DELIMITED DELIMITER DEPENDING
  			DESCENDING DETAIL DIRECT
! 			DIRECT_ACCESS "DIRECT-ACCESS" DIVISION
  			DOWN DUPLICATES
  			DYNAMIC
  
! 			E EBCDIC EC EGCS ENCODING ENTRY
  			EVERY EXAMINE EXHIBIT EXP EXP10 EXTEND EXTERNAL
  
  			EXCEPTION_FILE	     "EXCEPTION-FILE"
*************** class locale_tgt_t {
*** 608,614 ****
  			PAGE_COUNTER "PAGE-COUNTER"
  			PF PH PI PIC PICTURE
  			PLUS PRESENT_VALUE PRINT_SWITCH
! 			PROCEDURE PROCEDURES PROCEED PROCESSING
  			PROGRAM_ID "PROGRAM-ID"
  			PROGRAM_kw "Program" PROPERTY PROTOTYPE PSEUDOTEXT
  
--- 633,639 ----
  			PAGE_COUNTER "PAGE-COUNTER"
  			PF PH PI PIC PICTURE
  			PLUS PRESENT_VALUE PRINT_SWITCH
! 			PROCEDURES PROCEED PROCESSING
  			PROGRAM_ID "PROGRAM-ID"
  			PROGRAM_kw "Program" PROPERTY PROTOTYPE PSEUDOTEXT
  
*************** class locale_tgt_t {
*** 634,639 ****
--- 659,665 ----
  			SPECIAL_NAMES SQRT STACK
  			STANDARD
  			STANDARD_1 "STANDARD-1"
+ 			STANDARD_2 "STANDARD-2"
  			STANDARD_DEVIATION  "STANDARD-DEVIATION "
  			STANDARD_COMPARE "STANDARD-COMPARE"
  			STATUS STRONG
*************** class locale_tgt_t {
*** 739,752 ****
  
  %type   <number>        test_before usage_clause1 might_be alphanational
  %type   <boolean>       all filler initialized is_signed
!                         on_off optional sign_leading strong 
  %type   <number>        count data_clauses data_clause
  %type   <number>        nine nines nps relop spaces_etc reserved_value signed
  %type   <number>        variable_type binary_type
  %type   <number>        true_false posneg eval_posneg
  %type   <number>        open_io alphabet_etc
  %type   <special_type>  device_name
! %type   <string>        numed  context_word ctx_name locale_spec
  %type   <char_class_locales> char_class_locales coll_alphanats 
  %type   <collating_name> coll_alphanat 
  %type   <literal>       namestr alphabet_lit program_as repo_as
--- 765,780 ----
  
  %type   <number>        test_before usage_clause1 might_be alphanational
  %type   <boolean>       all filler initialized is_signed
!                         on_off optional sign_leading strong
!                         with_whatevs
! 
  %type   <number>        count data_clauses data_clause
  %type   <number>        nine nines nps relop spaces_etc reserved_value signed
  %type   <number>        variable_type binary_type
  %type   <number>        true_false posneg eval_posneg
  %type   <number>        open_io alphabet_etc
  %type   <special_type>  device_name
! %type   <string>        numed  context_word ctx_name locale_spec selected_file
  %type   <char_class_locales> char_class_locales coll_alphanats 
  %type   <collating_name> coll_alphanat 
  %type   <literal>       namestr alphabet_lit program_as repo_as
*************** class locale_tgt_t {
*** 792,798 ****
  %type   <min_max>       record_vary rec_contains from_to record_desc
  %type   <file_op>       read_file rewrite1 write_file
  %type   <field>         data_descr data_descr1 write_what file_record
! %type   <field>         name88 selected_name 
  %type   <refer>         advancing  advance_by
  %type   <refer>         alphaval alpha_val numeref scalar scalar88 scalar_any
  %type   <refer>         tableref tableish
--- 820,826 ----
  %type   <min_max>       record_vary rec_contains from_to record_desc
  %type   <file_op>       read_file rewrite1 write_file
  %type   <field>         data_descr data_descr1 write_what file_record
! %type   <field>         name88 selected_name
  %type   <refer>         advancing  advance_by
  %type   <refer>         alphaval alpha_val numeref scalar scalar88 scalar_any
  %type   <refer>         tableref tableish
*************** class locale_tgt_t {
*** 937,943 ****
  %type	<module_type>	module_type
  
  %type   <nameloc>       repo_func_name                        
! %type   <namelocs>      repo_func_names
  %type   <tokens>        repo_intrinsics
  %type   <number>        repo_intrinsic
  %type   <codeset>       codeset_name
--- 965,971 ----
  %type	<module_type>	module_type
  
  %type   <nameloc>       repo_func_name                        
! %type   <namelocs>      repo_func_names literals
  %type   <tokens>        repo_intrinsics
  %type   <number>        repo_intrinsic
  %type   <codeset>       codeset_name
*************** class locale_tgt_t {
*** 1090,1096 ****
  
  %printer { fprintf(yyo, "%s (token %d)", keyword_str($$), $$ ); } relop
  %printer { fprintf(yyo, "'%s'", $$? $$ : "" ); } NAME <string>
! %printer { fprintf(yyo, "%s'%.*s'{" HOST_SIZE_T_PRINT_UNSIGNED "} %s",
                          $$.prefix, int($$.len), $$.data, (fmt_size_t)$$.len,
                          $$.symbol_name()); } <literal>
  %printer { fprintf(yyo,"%s (1st of " HOST_SIZE_T_PRINT_UNSIGNED")",
--- 1118,1124 ----
  
  %printer { fprintf(yyo, "%s (token %d)", keyword_str($$), $$ ); } relop
  %printer { fprintf(yyo, "'%s'", $$? $$ : "" ); } NAME <string>
! %printer { fprintf(yyo, "%s'%.*s'{" HOST_SIZE_T_PRINT_UNSIGNED "} name: %s",
                          $$.prefix, int($$.len), $$.data, (fmt_size_t)$$.len,
                          $$.symbol_name()); } <literal>
  %printer { fprintf(yyo,"%s (1st of " HOST_SIZE_T_PRINT_UNSIGNED")",
*************** class locale_tgt_t {
*** 1194,1200 ****
                          CONTENT CONTROL CONTROLS CONVERT CONVERTING CORRESPONDING COS
                          COUNT CSP CURRENCY CURRENT CURRENT_DATE
  
!                         DATA DATE DATE_COMPILED
  			DATE_OF_INTEGER
  			DATE_TO_YYYYMMDD
                          DATE_FMT
--- 1222,1228 ----
                          CONTENT CONTROL CONTROLS CONVERT CONVERTING CORRESPONDING COS
                          COUNT CSP CURRENCY CURRENT CURRENT_DATE
  
!                         DATE DATE_COMPILED
  			DATE_OF_INTEGER
  			DATE_TO_YYYYMMDD
                          DATE_FMT
*************** class locale_tgt_t {
*** 1212,1218 ****
                          DYNAMIC
  
                          E EBCDIC EC EGCS ELEMENT
!                         ENTRY ENVIRONMENT ERROR EVERY
                          EXAMINE EXCEPTION EXHIBIT EXP EXP10 EXTEND EXTERNAL
  
                          EXCEPTION_FILE
--- 1240,1246 ----
                          DYNAMIC
  
                          E EBCDIC EC EGCS ELEMENT
!                         ENTRY ERROR EVERY
                          EXAMINE EXCEPTION EXHIBIT EXP EXP10 EXTEND EXTERNAL
  
                          EXCEPTION_FILE
*************** class locale_tgt_t {
*** 1223,1229 ****
                          EXCEPTION_STATEMENT
  			EXCEPTION_STATUS
  
!                         FACTORIAL FALSE_kw FD FILENAME
  			FILE_CONTROL
  			FILE_KW
                          FILE_LIMIT
--- 1251,1257 ----
                          EXCEPTION_STATEMENT
  			EXCEPTION_STATUS
  
!                         FACTORIAL FALSE_kw FD _FILENAME
  			FILE_CONTROL
  			FILE_KW
                          FILE_LIMIT
*************** class locale_tgt_t {
*** 1415,1424 ****
  			END_IF
  
  %left  THRU
! %left  OR
  %left  AND
  %right  NOT
! %left '<' '>' EQ NE LE GE
  %left '-' '+'
  %left '*' '/'
  %right POW
--- 1443,1452 ----
  			END_IF
  
  %left  THRU
! %left  OR XOR
  %left  AND
  %right  NOT
! %left '<' '>' _EQ _NE _LE _GE
  %left '-' '+'
  %left '*' '/'
  %right POW
*************** cdf_words:	%empty
*** 1639,1660 ****
  cobol_words:	cobol_words1
  	|	cobol_words cobol_words1
  		;
! cobol_words1:	COBOL_WORDS EQUATE NAME[keyword] WITH NAME[name] {
! 		  if( ! cdf_tokens.equate(@keyword, $keyword, $name) ) { YYERROR; }
! 		}
! 	|	COBOL_WORDS UNDEFINE NAME[keyword] {
! 		  if( ! cdf_tokens.undefine(@keyword, $keyword) ) { YYERROR; }
! 		}
! 	|	COBOL_WORDS SUBSTITUTE NAME[keyword] BY NAME[name] {
! 		  if( ! cdf_tokens.substitute(@keyword, $keyword, $name) ) { YYERROR; }
  		}
! 	|	COBOL_WORDS RESERVE NAME[name] {
! 		  if( ! cdf_tokens.reserve(@name, $name) ) { YYERROR; }
  		}
          |       PROCESS {
                    cbl_message(@1, IbmCdf, "CDF directive ignored: %qs", $1);
                  }
  		;
  
  program_id:     PROGRAM_ID dot namestr[name] program_as program_attrs[attr] dot
                  {
--- 1667,1709 ----
  cobol_words:	cobol_words1
  	|	cobol_words cobol_words1
  		;
! cobol_words1:	COBOL_WORDS EQUATE LITERAL[keyword] WITH LITERAL[name] {
! 		  cdf_tokens.equate(@keyword, $keyword.data, $name.data);
  		}
! 	|	COBOL_WORDS UNDEFINE literals[words]
!                 {
!                   for( const auto& word : *$words ) {
! 		    cdf_tokens.undefine(word.loc, word.name);
!                   }
!                 }
! 	|	COBOL_WORDS SUBSTITUTE literal_pairs 
! 	|	COBOL_WORDS RESERVE literals[words]
!                 {
!                   const auto& words(*$words);
!                   for( const auto& word : words ) {
!                     cdf_tokens.reserve(word.loc, word.name);
!                   }
  		}
          |       PROCESS {
                    cbl_message(@1, IbmCdf, "CDF directive ignored: %qs", $1);
                  }
  		;
+ literal_pairs:  literal_pair
+         |       literal_pairs literal_pair
+                 ;
+ literal_pair:   LITERAL[keyword] BY LITERAL[name] {
+ 		  cdf_tokens.substitute(@keyword, $keyword.data, $name.data);
+ 		}
+                 ;
+ literals:       LITERAL { $$ = new cbl_namelocs_t ( 1, cbl_nameloc_t(@1, $1.data) ); }
+         |       literals LITERAL {
+                   $$ = $1;
+                   const auto& word($2);
+                   dbgmsg("%s:%d: pushing ''%s' onto nameloc list", __FILE__, __LINE__,
+                          word.data);
+                   $$->push_back( cbl_nameloc_t(@2, $2.data) );
+                 }
+                 ;
  
  program_id:     PROGRAM_ID dot namestr[name] program_as program_attrs[attr] dot
                  {
*************** program_id:     PROGRAM_ID dot namestr[n
*** 1677,1683 ****
                               name, L->line);
                      YYERROR;
                    }
-                   if( ! successful_parse() ) YYABORT;
  
                    parser_division( identification_div_e, NULL, 0, NULL );
                    int main_error=0;
--- 1726,1731 ----
*************** selects:        select
*** 2084,2090 ****
          |       selects select
                  ;
  
! select:         SELECT optional NAME[name] select_clauses[clauses] '.'
                  {
                    assert($clauses.file);
                    cbl_file_t *file = $clauses.file;
--- 2132,2142 ----
          |       selects select
                  ;
  
! selected_file:  NAME
!         |       device_name { $$ = xstrdup(keyword_str($1.token)); }
!                 ;
! 
! select:         SELECT optional selected_file[name] select_clauses[clauses] '.'
                  {
                    assert($clauses.file);
                    cbl_file_t *file = $clauses.file;
*************** select:         SELECT optional NAME[nam
*** 2158,2164 ****
                      update_symbol_map(symbol_at(isym));
                    }
                  }
!         |       SELECT optional NAME[name] '.'
                  {
                    cbl_file_t file = protofile;
  
--- 2210,2216 ----
                      update_symbol_map(symbol_at(isym));
                    }
                  }
!         |       SELECT optional selected_file[name] '.'
                  {
                    cbl_file_t file = protofile;
  
*************** usage_clause1:  usage BIT
*** 5093,5099 ****
  		{
  		  cbl_unimplemented("Boolean type not implemented");
  		}
!         |       usage BINARY_INTEGER [comp] is_signed
                  {
                    bool signable = $is_signed? $comp.signable : false;
                    if( proto_field.has_clause(picture_clause_e) ) {
--- 5145,5151 ----
  		{
  		  cbl_unimplemented("Boolean type not implemented");
  		}
!         |       usage _BINARY_INTEGER [comp] is_signed
                  {
                    bool signable = $is_signed? $comp.signable : false;
                    if( proto_field.has_clause(picture_clause_e) ) {
*************** end_accept:     %empty %prec ACCEPT
*** 5898,5904 ****
          |       END_ACCEPT
                  ;
  
! accept_body:    ACCEPT scalar[r]
                  {
                    statement_begin(@1, ACCEPT);
  		  $$.func = accept_done_e;
--- 5950,5956 ----
          |       END_ACCEPT
                  ;
  
! accept_body:    ACCEPT scalar[r] with_decorum
                  {
                    statement_begin(@1, ACCEPT);
  		  $$.func = accept_done_e;
*************** end_add:        %empty %prec ADD
*** 6136,6159 ****
  
  add_body:       sum TO rnames
                  {
!                   $$ = new arith_t(no_giving_e, $sum);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
                    rhs.clear();
                  }
          |       sum TO num_operand[value] GIVING rnames
                  {
!                   $$ = new arith_t(giving_e, $sum);
                    $$->A.push_back(*$value);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
                    rhs.clear();
                  }
          |       sum GIVING rnames
                  { // implicit TO
!                   $$ = new arith_t(giving_e, $sum);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
                    rhs.clear();
                  }
          |       CORRESPONDING sum TO rnames
--- 6188,6214 ----
  
  add_body:       sum TO rnames
                  {
!                   $$ = new arith_t(@sum, no_giving_e, $sum);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       sum TO num_operand[value] GIVING rnames
                  {
!                   $$ = new arith_t(@$, giving_e, $sum);
                    $$->A.push_back(*$value);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       sum GIVING rnames
                  { // implicit TO
!                   $$ = new arith_t(@sum, giving_e, $sum);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       CORRESPONDING sum TO rnames
*************** add_body:       sum TO rnames
*** 6169,6176 ****
                      }
                    // First src/tgt elements are templates.
                    // Their subscripts apply to the correspondents.
!                   $$ = new arith_t(corresponding_e, $sum);
                    $$->tgts.push_front(rhs.front());
                    // use arith_t functor to populate A and tgts
                    *$$ = std::for_each( pairs.begin(), pairs.end(), *$$ );
                    $$->A.pop_front();
--- 6224,6232 ----
                      }
                    // First src/tgt elements are templates.
                    // Their subscripts apply to the correspondents.
!                   $$ = new arith_t(@sum, corresponding_e, $sum);
                    $$->tgts.push_front(rhs.front());
+                   $$->locs.tgts = @rnames;
                    // use arith_t functor to populate A and tgts
                    *$$ = std::for_each( pairs.begin(), pairs.end(), *$$ );
                    $$->A.pop_front();
*************** compute_body:   rnames { statement_begin
*** 6336,6342 ****
                    $$.ast_op = $expr;
                  }
                  ;
! compute_expr:   EQ expr {
                    if( $1[0] == 'E' ) { // lexer found EQUALS keyword
                      dialect_ok(@1, IbmEqualAssignE,
                                 "EQUAL as assignment operator" );
--- 6392,6398 ----
                    $$.ast_op = $expr;
                  }
                  ;
! compute_expr:   _EQ expr {
                    if( $1[0] == 'E' ) { // lexer found EQUALS keyword
                      dialect_ok(@1, IbmEqualAssignE,
                                 "EQUAL as assignment operator" );
*************** display:        disp_body end_display[ad
*** 6355,6364 ****
                  }
                  ;
  end_display:    %empty				{ $$ = DISPLAY_ADVANCE; }
!         |                    END_DISPLAY	{ $$ = DISPLAY_ADVANCE; }
!         |       NO ADVANCING			{ $$ = DISPLAY_NO_ADVANCE; }
!         |       NO ADVANCING END_DISPLAY	{ $$ = DISPLAY_NO_ADVANCE; }
                  ;
  disp_body:      disp_vargs[vargs]
                  {
                    $$.special = NULL;
--- 6411,6462 ----
                  }
                  ;
  end_display:    %empty				{ $$ = DISPLAY_ADVANCE; }
!         |       with              END_DISPLAY	{ $$ = DISPLAY_ADVANCE; }
!         |       with NO ADVANCING		{ $$ = DISPLAY_NO_ADVANCE; }
!         |       with NO ADVANCING END_DISPLAY	{ $$ = DISPLAY_NO_ADVANCE; }
!         |       with with_whatevs
!                 {
!                   if( dialect_ok(@2, MfDisplayScreen, "WITH") ) {
!                     if( ! $2 ) {
!                       error_msg(@2, "invalid WITH");
!                     }
!                   }
!                   $$ = DISPLAY_ADVANCE;
!                 }
!                 ;
! 
! with_decorum:   %empty
!         |       WITH with_whatevs
!         |       WITH NAME AFTER NUMSTR /* timeout or time-out */
                  ;
+ 
+ with_whatevs:   ERASE NAME { $$ = strcasecmp($NAME, "eol")
+                               ||  strcasecmp($NAME, "eos"); }
+         |       BLANK LINE { $$ = true; }
+         |       BLANK SCREEN { $$ = true; }
+         |       CONTROL is LITERAL { $$ = true; }
+         |       CONTROL is NAME { $$ = true; }
+         |       NAME {
+                   std::vector<const char *> names(1, $NAME);
+                   $$ = with_gnu_names(names);
+                 }
+         |       NAME[fgbg] is num_operand[color] {
+                   std::vector<const char *> names(1, $fgbg);
+                   $$ = with_gnu_color(names);
+                   if( ! $$ ) {
+                     error_msg(@$, "invalid WITH %s", $fgbg);
+                   } else {
+                     $$ = is_numeric($color->field);
+                     if( ! $$  ) {
+                       error_msg(@$, "invalid color: WITH %s IS %qs",
+                                 $fgbg, nice_name_of($color->field));
+                     }
+                   }
+                 }
+         |       SIZE is NAME   { $$ = true; }
+         |       SIZE is NUMSTR { $$ = true; }
+                 ;
+ 
  disp_body:      disp_vargs[vargs]
                  {
                    $$.special = NULL;
*************** divide_body:    num_operand INTO rnames
*** 6474,6479 ****
--- 6572,6579 ----
                    $$->A.push_back(*$num_operand);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.A = @1;
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       divide_into
*************** divide_body:    num_operand INTO rnames
*** 6486,6491 ****
--- 6586,6592 ----
                    }
                    $$ = $1;
                    $$->remainder = *$rem;
+                   $$->locs.remainder = @rem;
                  }
          |       divide_by
          |       divide_by   REMAINDER scalar[rem]
*************** divide_body:    num_operand INTO rnames
*** 6497,6502 ****
--- 6598,6604 ----
                    }
                    $$ = $1;
                    $$->remainder = *$rem;
+                   $$->locs.remainder = @rem;
                  }
                  ;
  
*************** divide_into:    num_operand[b] INTO num_
*** 6507,6512 ****
--- 6609,6617 ----
                    $$->B.push_back(*$b);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.A = @a;
+                   $$->locs.B = @b;
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
                  ;
*************** divide_by:      num_operand[a] BY num_op
*** 6517,6522 ****
--- 6622,6630 ----
                    $$->B.push_back(*$b);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.A = @a;
+                   $$->locs.B = @b;
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
                  ;
*************** context_word:   APPLY
*** 7616,7621 ****
--- 7724,7731 ----
                                           $$ = s; } // LOCK MODE clause
          |       MULTIPLE               { static char s[] ="MULTIPLE";
                                           $$ = s; } // LOCK ON phrase
+         |       NAMESPACE              { static char s[] ="NAMESPACE";
+                                          $$ = s; } // XML namespace
          |       NAT                    { static char s[] ="NAT";
                                           $$ = s; } // CONVERT function
          |       NEAREST_AWAY_FROM_ZERO { static char s[] ="NEAREST-AWAY-FROM-ZERO";
*************** multiply_body:  num_operand BY rnames
*** 7837,7844 ****
--- 7947,7956 ----
                  {
                    $$ = new arith_t(no_giving_e);
                    $$->A.push_back(*$num_operand);
+                   $$->locs.A = @1;
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       num_operand BY signed_literal[lit]
*************** multiply_body:  num_operand BY rnames
*** 7853,7858 ****
--- 7965,7973 ----
                    $$->B.push_back(*$b);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.A = @a;
+                   $$->locs.B = @b;
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       num_operand[a] BY num_operand[b] GIVING signed_literal[lit]
*************** arith_err:      SIZE_ERROR
*** 7936,7945 ****
      */
  
  relop:          '<' { $$ = '<'; }
!         |       LE  { $$ = LE;  }
!         |       EQ { $$ = EQ; }
!         |       NE  { $$ = NE;  }
!         |       GE  { $$ = GE;  }
          |       '>' { $$ = '>'; }
                  ;
  
--- 8051,8060 ----
      */
  
  relop:          '<' { $$ = '<'; }
!         |       _LE  { $$ = _LE;  }
!         |       _EQ { $$ = _EQ; }
!         |       _NE  { $$ = _NE;  }
!         |       _GE  { $$ = _GE;  }
          |       '>' { $$ = '>'; }
                  ;
  
*************** num_value:      scalar // might actually
*** 8011,8020 ****
  /*              ; */
  /* cce_relexpr: cce_expr */
  /*      |       cce_relexpr '<' cce_expr { $$ = $1 <  $3; } */
! /*      |       cce_relexpr LE  cce_expr { $$ = $1 <= $3; } */
! /*      |       cce_relexpr EQ cce_expr { $$ = $1 == $3; } */
! /*      |       cce_relexpr NE  cce_expr { $$ = $1 != $3; } */
! /*      |       cce_relexpr GE  cce_expr { $$ = $1 >= $3; } */
  /*      |       cce_relexpr '>' cce_expr { $$ = $1 >  $3; } */
  /*              ; */
  
--- 8126,8135 ----
  /*              ; */
  /* cce_relexpr: cce_expr */
  /*      |       cce_relexpr '<' cce_expr { $$ = $1 <  $3; } */
! /*      |       cce_relexpr _LE  cce_expr { $$ = $1 <= $3; } */
! /*      |       cce_relexpr _EQ cce_expr { $$ = $1 == $3; } */
! /*      |       cce_relexpr _NE  cce_expr { $$ = $1 != $3; } */
! /*      |       cce_relexpr _GE  cce_expr { $$ = $1 >= $3; } */
  /*      |       cce_relexpr '>' cce_expr { $$ = $1 >  $3; } */
  /*              ; */
  
*************** end_subtract:   %empty %prec SUBTRACT
*** 8736,8752 ****
  
  subtract_body:  sum FROM rnames
                  {
!                   $$ = new arith_t(no_giving_e, $sum);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
                    rhs.clear();
                  }
          |       sum FROM num_operand[input] GIVING rnames
                  {
!                   $$ = new arith_t(giving_e, $sum);
                    $$->B.push_back(*$input);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
                    rhs.clear();
                  }
          |       CORRESPONDING sum FROM rnames
--- 8851,8870 ----
  
  subtract_body:  sum FROM rnames
                  {
!                   $$ = new arith_t(@sum, no_giving_e, $sum);
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       sum FROM num_operand[input] GIVING rnames
                  {
!                   $$ = new arith_t(@sum, giving_e, $sum);
                    $$->B.push_back(*$input);
+                   $$->locs.B = @input;
                    std::copy( rhs.begin(),
                               rhs.end(), back_inserter($$->tgts) );
+                   $$->locs.tgts = @rnames;
                    rhs.clear();
                  }
          |       CORRESPONDING sum FROM rnames
*************** subtract_body:  sum FROM rnames
*** 8762,8769 ****
                      }
                    // First src/tgt elements are templates.
                    // Their subscripts apply to the correspondents.
!                   $$ = new arith_t(corresponding_e, $sum);
                    $$->tgts.push_front(rhs.front());
                    // use arith_t functor to populate A and tgts
                    *$$ = std::for_each( pairs.begin(), pairs.end(), *$$ );
                    $$->A.pop_front();
--- 8880,8888 ----
                      }
                    // First src/tgt elements are templates.
                    // Their subscripts apply to the correspondents.
!                   $$ = new arith_t(@sum, corresponding_e, $sum);
                    $$->tgts.push_front(rhs.front());
+                   $$->locs.tgts = @rnames;
                    // use arith_t functor to populate A and tgts
                    *$$ = std::for_each( pairs.begin(), pairs.end(), *$$ );
                    $$->A.pop_front();
*************** varg1a:         ADDRESS OF scalar {
*** 8820,8826 ****
                  }
                  ;
  
! binary_type:	BINARY_INTEGER { $$ = $1.capacity; }
  	|	COMPUTATIONAL  { $$ = $1.capacity; }
  		;
  
--- 8939,8945 ----
                  }
                  ;
  
! binary_type:	_BINARY_INTEGER { $$ = $1.capacity; }
  	|	COMPUTATIONAL  { $$ = $1.capacity; }
  		;
  
*************** search_stmts:   statements    %prec ADD
*** 9870,9876 ****
  search_terms:   search_term
          |       search_terms AND search_term
                  ;
! search_term:    scalar[key] EQ search_expr[sarg]
                  {
                    if( $key->nsubscript() == 0 ) {
                      error_msg(@1, "no index for key");
--- 9989,9995 ----
  search_terms:   search_term
          |       search_terms AND search_term
                  ;
! search_term:    scalar[key] _EQ search_expr[sarg]
                  {
                    if( $key->nsubscript() == 0 ) {
                      error_msg(@1, "no index for key");
*************** sort:           sort_table
*** 9902,9908 ****
          |       sort_file
                  ;
  
! sort_table:     SORT tableref[table] sort_keys sort_dup sort_seq {
                    statement_begin(@1, SORT);
                    std::vector <cbl_key_t> keys($sort_keys->key_list.size());
  		  if( ! is_table($table->field) ) {
--- 10021,10027 ----
          |       sort_file
                  ;
  
! sort_table:     SORT tableish[table] sort_keys sort_dup sort_seq {
                    statement_begin(@1, SORT);
                    std::vector <cbl_key_t> keys($sort_keys->key_list.size());
  		  if( ! is_table($table->field) ) {
*************** sort_table:     SORT tableref[table] sor
*** 9921,9947 ****
  
                    parser_sort( *$table, $sort_dup, $sort_seq, keys );
                  }
!         |       SORT tableref[table] sort_dup sort_seq {
                    statement_begin(@1, SORT);
  		  if( ! is_table($table->field) ) {
! 		    error_msg(@1, "%s has no OCCURS clause", $table->field->name);
!                     YYERROR;
! 		  }
! 		  if( !$table->field->occurs.keys ) {
! 		    error_msg(@1, "%s: no key defined", $table->field->name);
                      YYERROR;
  		  }
!                   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_keys  sort_dup    sort_seq
                                      sort_input sort_output
                  {
                    statement_begin(@1, SORT);
--- 10040,10067 ----
  
                    parser_sort( *$table, $sort_dup, $sort_seq, keys );
                  }
!         |       SORT tableish[table] sort_dup sort_seq {
                    statement_begin(@1, SORT);
  		  if( ! is_table($table->field) ) {
! 		    error_msg(@1, "%qs has no OCCURS clause", $table->field->name);
                      YYERROR;
  		  }
!                   cbl_key_t key(1, &$table->field); // a key of 1 column by default
!                   if( $table->field->occurs.keys ) {
!                     // a key of N columns, if defined.
!                     key = cbl_key_t($table->field->occurs.keys[0]);
!                   } else {
!                     if( ! $sort_seq ) {
!                       error_msg(@1, "%s: no key defined", $table->field->name);
!                     }
!                   }
!                   // sort by 1 key
                    std::vector<cbl_key_t> keys(1, key);
                    parser_sort( *$table, $sort_dup, $sort_seq, keys );
                  }
                  ;
  
! sort_file:      SORT _FILENAME[file] sort_keys  sort_dup    sort_seq
                                      sort_input sort_output
                  {
                    statement_begin(@1, SORT);
*************** sort_file:      SORT FILENAME[file] sort
*** 9983,9989 ****
                                      noutput, outputs,
                                      in_proc, out_proc );
                  }
!         |       SORT FILENAME[file] sort_keys sort_dup sort_seq  error
                  {
                    error_msg(@file, "SORT missing INPUT or OUTPUT phrase");
                  }
--- 10103,10109 ----
                                      noutput, outputs,
                                      in_proc, out_proc );
                  }
!         |       SORT _FILENAME[file] sort_keys sort_dup sort_seq  error
                  {
                    error_msg(@file, "SORT missing INPUT or OUTPUT phrase");
                  }
*************** nume:           qnume {
*** 10374,10380 ****
  		    auto nameloc = names.front();
                      if( (e = symbol_field(PROGRAM,
                                            index, nameloc.name)) == NULL ) {
!                       error_msg(nameloc.loc, "DATA-ITEM '%s' not found", nameloc.name );
                        YYERROR;
                      }
                      $$ = cbl_field_of(e);
--- 10494,10500 ----
  		    auto nameloc = names.front();
                      if( (e = symbol_field(PROGRAM,
                                            index, nameloc.name)) == NULL ) {
!                       error_msg(nameloc.loc, "%qs not found", nameloc.name );
                        YYERROR;
                      }
                      $$ = cbl_field_of(e);
*************** call_body:      ffi_name
*** 10642,10647 ****
--- 10762,10768 ----
                    $$.ffi_name = $ffi_name;
                    $$.using_params = $parameters;
                    $$.ffi_returning = cbl_refer_t::empty();
+                   by_content_ok(@parameters, $parameters->elems);
                  }
          |       ffi_name call_returning scalar[ret]
                  { statement_begin(@1, CALL);
*************** call_body:      ffi_name
*** 10654,10659 ****
--- 10775,10781 ----
                    $$.ffi_name = $ffi_name;
                    $$.using_params = $parameters;
                    $$.ffi_returning = $ret;
+                   by_content_ok(@parameters, $parameters->elems);
                  }
                  ;
  call_returning:	RETURNING
*************** ffi_name:       scalar
*** 10696,10701 ****
--- 10818,10826 ----
                      assert($1->field->parent > 0);
                      auto& L = *cbl_label_of(symbol_at($1->field->parent));
                      $$->field = new_literal(strlen(L.name), L.name, quoted_e);
+                   } else {
+                     cbl_message( @1, ParDynamicCall, "dynamic target: CALL %s",
+                                  nice_name_of($1->field) );
                    }
                  }
          |       LITERAL
*************** current_tokens_t::tokenset_t::find( cons
*** 13105,13126 ****
     * The input name may be one of:
     *  1. an intrinsic function name (OK if include_intrinsics)
     *  2. an ISO/GCC reserved word or context-sensitive word (OK)
!    *  3. a token in our token list for convenience, such as BINARY_INTEGER (bzzt)
     */  
    cbl_name_t lname;
    std::transform(name, name + strlen(name) + 1, lname, ftolower);
-   dbgmsg("current_tokens_t::tokenset_t::find: scanning %lu tokens for '%s'",
-          (unsigned long)tokens.size(), lname);
    auto p = tokens.find(lname);
    if( p == tokens.end() ) return 0;
    int token = p->second;
  
    if( token == SECTION ) yylval.number = 0;
  
!   if( include_intrinsics && intrinsic_cname(token) ) return token;
!   if( iso_cobol_word(uppercase(name), true) ) return token;
!   
!   return 0;
  }
  
  int
--- 13230,13248 ----
     * The input name may be one of:
     *  1. an intrinsic function name (OK if include_intrinsics)
     *  2. an ISO/GCC reserved word or context-sensitive word (OK)
!    *  3. a token in our token list for convenience, such as _BINARY_INTEGER (bzzt)
     */  
    cbl_name_t lname;
    std::transform(name, name + strlen(name) + 1, lname, ftolower);
    auto p = tokens.find(lname);
    if( p == tokens.end() ) return 0;
    int token = p->second;
  
    if( token == SECTION ) yylval.number = 0;
  
!   if( intrinsic_cname(token) && ! include_intrinsics ) token = 0;
! 
!   return token;
  }
  
  int
*************** static enum relop_t
*** 13155,13164 ****
  relop_of(int token) {
    switch(token) {
    case '<': return lt_op;
!   case LE:  return le_op;
!   case EQ: return eq_op;
!   case NE:  return ne_op;
!   case GE:  return ge_op;
    case '>': return gt_op;
    }
    cbl_internal_error( "%s:%d: invalid relop token %d",
--- 13277,13286 ----
  relop_of(int token) {
    switch(token) {
    case '<': return lt_op;
!   case _LE:  return le_op;
!   case _EQ: return eq_op;
!   case _NE:  return ne_op;
!   case _GE:  return ge_op;
    case '>': return gt_op;
    }
    cbl_internal_error( "%s:%d: invalid relop token %d",
*************** relop_debug_str(int token) {
*** 13188,13197 ****
    switch(token) {
    case 0:   return "zilch";
    case '<': return "<";
!   case LE:  return "LE";
!   case EQ: return "=";
!   case NE:  return "NE";
!   case GE:  return "GE";
    case '>': return ">";
    }
    dbgmsg("%s:%d: invalid relop token %d", __func__, __LINE__, token);
--- 13310,13319 ----
    switch(token) {
    case 0:   return "zilch";
    case '<': return "<";
!   case _LE:  return "LE";
!   case _EQ: return "=";
!   case _NE:  return "NE";
!   case _GE:  return "GE";
    case '>': return ">";
    }
    dbgmsg("%s:%d: invalid relop token %d", __func__, __LINE__, token);
*************** static int
*** 13202,13211 ****
  token_of(enum relop_t op) {
    switch(op) {
    case lt_op: return '<';
!   case le_op: return LE;
!   case eq_op: return EQ;
!   case ne_op: return NE;
!   case ge_op: return GE;
    case gt_op: return '>';
    }
    cbl_errx( "%s:%d: invalid relop_t %d", __func__, __LINE__, op);
--- 13324,13333 ----
  token_of(enum relop_t op) {
    switch(op) {
    case lt_op: return '<';
!   case le_op: return _LE;
!   case eq_op: return _EQ;
!   case ne_op: return _NE;
!   case ge_op: return _GE;
    case gt_op: return '>';
    }
    cbl_errx( "%s:%d: invalid relop_t %d", __func__, __LINE__, op);
*************** valid_pointer_relop( const cbl_loc_t& ll
*** 13689,13699 ****
    return true; // no pointers
  }
  
! arith_t::arith_t( cbl_arith_format_t format, refer_list_t * refers )
    : format(format), on_error(NULL), not_error(NULL)
  {
    std::copy( refers->refers.begin(), refers->refers.end(), back_inserter(A) );
    refers->refers.clear();
    delete refers;
  }
  
--- 13811,13823 ----
    return true; // no pointers
  }
  
! arith_t::arith_t( const cbl_loc_t& loc,
!                   cbl_arith_format_t format, refer_list_t * refers )
    : format(format), on_error(NULL), not_error(NULL)
  {
    std::copy( refers->refers.begin(), refers->refers.end(), back_inserter(A) );
    refers->refers.clear();
+   locs.A = loc;
    delete refers;
  }
  
*************** ast_op_t::choose_intermediate_type::sele
*** 13740,13746 ****
  }
  
  bool
! ast_op_t::op_ok( const cbl_loc_t& loc, char op, const ast_op_t *rhstack )
  {
    assert(rhstack);
    
--- 13864,13870 ----
  }
  
  bool
! ast_op_t:: op_ok( const cbl_loc_t& loc, char op, const ast_op_t *rhstack )
  {
    assert(rhstack);
    
*************** ast_relop( const cbl_loc_t& loc, cbl_fie
*** 13793,13798 ****
--- 13917,13923 ----
  
  static void
  ast_add( arith_t *arith ) {
+   arith->numeric_ok();
    size_t nC = arith->tgts.size(), nA = arith->A.size();
    std::vector <cbl_num_result_t> C(nC);
    cbl_num_result_t *pC;
*************** ast_add( arith_t *arith ) {
*** 13802,13814 ****
    pC = use_any(arith->tgts, C);
    pA = use_any(arith->A, A);
  
!   parser_add( nC, pC, nA, pA, arith->format, arith->on_error, arith->not_error );
  
    current.declaratives_evaluate();
  }
  
  static bool
  ast_subtract( arith_t *arith ) {
    size_t nC = arith->tgts.size(), nA = arith->A.size(), nB = arith->B.size();
    std::vector <cbl_refer_t> A(nA);
    std::vector <cbl_refer_t> B(nB);
--- 13927,13941 ----
    pC = use_any(arith->tgts, C);
    pA = use_any(arith->A, A);
  
!   parser_add( nC, pC, nA, pA, arith->format,
!               arith->on_error, arith->not_error );
  
    current.declaratives_evaluate();
  }
  
  static bool
  ast_subtract( arith_t *arith ) {
+   arith->numeric_ok();
    size_t nC = arith->tgts.size(), nA = arith->A.size(), nB = arith->B.size();
    std::vector <cbl_refer_t> A(nA);
    std::vector <cbl_refer_t> B(nB);
*************** ast_subtract( arith_t *arith ) {
*** 13818,13824 ****
    cbl_refer_t *pB = use_any(arith->B, B);
    cbl_num_result_t *pC = use_any(arith->tgts, C);
  
!   parser_subtract( nC, pC, nA, pA, nB, pB, arith->format, arith->on_error, arith->not_error );
  
    current.declaratives_evaluate();
    return true;
--- 13945,13952 ----
    cbl_refer_t *pB = use_any(arith->B, B);
    cbl_num_result_t *pC = use_any(arith->tgts, C);
  
!   parser_subtract( nC, pC, nA, pA, nB, pB, arith->format,
!                    arith->on_error, arith->not_error );
  
    current.declaratives_evaluate();
    return true;
*************** ast_subtract( arith_t *arith ) {
*** 13826,13831 ****
--- 13954,13960 ----
  
  static bool
  ast_multiply( arith_t *arith ) {
+   arith->numeric_ok();
    size_t nC = arith->tgts.size(), nA = arith->A.size(), nB = arith->B.size();
    std::vector <cbl_refer_t> A(nA);
    std::vector <cbl_refer_t> B(nB);
*************** ast_multiply( arith_t *arith ) {
*** 13835,13841 ****
    cbl_refer_t *pB = use_any(arith->B, B);
    cbl_num_result_t *pC = use_any(arith->tgts, C);
  
!   parser_multiply( nC, pC, nA, pA, nB, pB, arith->on_error, arith->not_error );
  
    current.declaratives_evaluate();
    return true;
--- 13964,13971 ----
    cbl_refer_t *pB = use_any(arith->B, B);
    cbl_num_result_t *pC = use_any(arith->tgts, C);
  
!   parser_multiply( nC, pC, nA, pA, nB, pB,
!                    arith->on_error, arith->not_error );
  
    current.declaratives_evaluate();
    return true;
*************** ast_multiply( arith_t *arith ) {
*** 13843,13848 ****
--- 13973,13979 ----
  
  static bool
  ast_divide( arith_t *arith ) {
+   arith->numeric_ok();
    size_t nC = arith->tgts.size(), nA = arith->A.size(), nB = arith->B.size();
    std::vector <cbl_refer_t> A(nA);
    std::vector <cbl_refer_t> B(nB);
*************** ast_divide( arith_t *arith ) {
*** 13852,13861 ****
    cbl_refer_t *pB = use_any(arith->B, B);
    cbl_num_result_t *pC = use_any(arith->tgts, C);
  
!   parser_divide( nC, pC, nA, pA, nB, pB,
!                  arith->remainder, arith->on_error, arith->not_error );
  
-   current.declaratives_evaluate();
    return true;
  }
  
--- 13983,13992 ----
    cbl_refer_t *pB = use_any(arith->B, B);
    cbl_num_result_t *pC = use_any(arith->tgts, C);
  
!   arith->numeric_ok();
!   parser_divide( nC, pC, nA, pA, nB, pB, arith->remainder,
!                  arith->on_error, arith->not_error );
  
    return true;
  }
  
diff -Nrcpad gcc-17-20260823/gcc/cobol/parse_ante.h gcc-17-20260830/gcc/cobol/parse_ante.h
*** gcc-17-20260823/gcc/cobol/parse_ante.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/parse_ante.h	Sun Aug 30 22:32:06 2026
*************** struct arith_t {
*** 596,606 ****
    list<cbl_refer_t> A, B;
    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 );
  
    bool corresponding() const { return format == corresponding_e; }
  
--- 596,610 ----
    list<cbl_refer_t> A, B;
    cbl_refer_t remainder;
    cbl_label_t *on_error, *not_error;
+   struct locs_t {
+     cbl_loc_t A, B, tgts, remainder;
+   } locs;
  
    explicit arith_t( cbl_arith_format_t format )
      : format(format), on_error(NULL), not_error(NULL)
    {}
!   arith_t( const cbl_loc_t& loc,
!            cbl_arith_format_t format, refer_list_t * refers );
  
    bool corresponding() const { return format == corresponding_e; }
  
*************** struct arith_t {
*** 633,638 ****
--- 637,673 ----
      }
      return "???";
    }
+ 
+   void numeric_ok() {
+     are_numeric(locs.A, A);
+     are_numeric(locs.B, B);
+     are_numeric(locs.tgts, tgts);
+     is_numeric(locs.remainder, cbl_num_result_t{prohibited_e,remainder});
+   }
+ 
+  protected:
+   static bool is_numeric( const cbl_loc_t& loc, const cbl_refer_t& r ) {
+     if( r.field && ! ::is_numeric(r.field) ) {
+       error_msg(loc, "%qs (%s) is not numeric",
+                 nice_name_of(r.field),
+                 cbl_field_type_name(r.field->type));
+       return false;
+     }
+     return true;
+   }
+   static bool is_numeric( const cbl_loc_t& loc, const cbl_num_result_t& res ) {
+     // only targets have rounding, and may be numeric-edited
+     bool edited = res.refer.field && res.refer.field->type == FldNumericEdited;
+     return edited || is_numeric( loc, res.refer );
+   }
+   template <typename T>
+   static bool are_numeric( const cbl_loc_t& loc, const T& args ) {
+     bool ok = true;
+     for (const auto& elem : args) {
+       ok = ok && is_numeric(loc, elem);
+     }
+     return ok;
+   }
  };
  
  static void 
*************** redefined_token( const cbl_name_t name )
*** 1176,1181 ****
--- 1211,1253 ----
    return cdf_tokens.redefined_as(name);
  }
  
+ static bool
+ with_gnu_stuff( const std::set<std::string>& kw,
+                 const std::vector<const char *>& names ) {
+   return std::all_of( names.begin(), names.end(),
+                       [&kw] ( const auto& name ) {
+                         cbl_name_t lname;
+                         std::transform(name, name + strlen(name) + 1, lname, ftolower);
+                         return 1 == kw.count(lname);
+                       } );
+ }
+ 
+ static bool
+ with_gnu_names( const std::vector<const char *>& names ) {
+   static const std::set<std::string> kw {
+     "beep", "bell", "blank", "blink",
+     "control",
+     "eol", "eos", "erase",
+     "grid",
+     "highlight",
+     "leftline", "line", "lowlight",
+     "number",
+     "overline",
+     "reverse-video",
+     "screen", "size",
+     "underline",
+   };
+   return with_gnu_stuff(kw, names);
+ }
+ static bool
+ with_gnu_color( const std::vector<const char *>& names ) {
+   static const std::set<std::string> kw {
+     "background-color", "background-colour",
+     "foreground-color", "foreground-colour",
+   };
+   return with_gnu_stuff(kw, names);
+ }
+ 
  struct file_list_t {
    list<cbl_file_t*> files;
    file_list_t() {}
*************** valid_redefine( const cbl_loc_t& loc,
*** 3122,3130 ****
  
    // cannot redefine a table
    if( orig->occurs.ntimes() ) {
!     error_msg(loc, "cannot redefine table %s %s",
!             orig->level_str(), orig->name);
!     return false;
    }
  
    // redefined field cannot be ODO
--- 3194,3202 ----
  
    // cannot redefine a table
    if( orig->occurs.ntimes() ) {
!     if( ! dialect_ok(loc, MfRedefinesTable, "cannot redefine table") ) {
!       return false;
!     }
    }
  
    // redefined field cannot be ODO
*************** valid_redefine( const cbl_loc_t& loc,
*** 3195,3200 ****
--- 3267,3285 ----
    return true;
  }
  
+ void
+ by_content_ok( const cbl_loc_t& loc,
+                const std::list<cbl_ffi_arg_t>& args ) {
+   for( const auto& arg : args ) {
+     if( arg.by_content() && arg.field()->has_attr(intermediate_e) ) {
+       auto e = symbol_program( 0, arg.field()->name, true ); // seek prototoype
+       if( ! e ) {
+         dialect_ok(loc, IbmContentExpr, "BY CONTENT expression");
+       }
+     }
+   }
+ }
+ 
  static cbl_field_t *
  parent_has_picture( cbl_field_t *field ) {
    while( (field = parent_of(field)) != NULL ) {
*************** parser_move_carefully( const char */*F*/
*** 3612,3619 ****
            dialect_ok(src.loc, MfMovePointer, "MOVE POINTER");
          } else {
            error_msg(src.loc, "cannot MOVE %qs (%s) TO %qs (%s)",
!                     nice_name_of(src.field), 3 + cbl_field_type_str(src.field->type),
!                     nice_name_of(tgt.field), 3 + cbl_field_type_str(tgt.field->type));
          }
        }
      }
--- 3697,3704 ----
            dialect_ok(src.loc, MfMovePointer, "MOVE POINTER");
          } else {
            error_msg(src.loc, "cannot MOVE %qs (%s) TO %qs (%s)",
!                     nice_name_of(src.field), cbl_field_type_name(src.field->type),
!                     nice_name_of(tgt.field), cbl_field_type_name(tgt.field->type));
          }
        }
      }
*************** procedure_division_ready( const cbl_loc_
*** 3846,3851 ****
--- 3931,3937 ----
    // Apply ECs from the command line
    std::list<exception_turn_t>& exception_turns = current.pending_exceptions();
    for( const auto& exception_turn : exception_turns) {
+     //// exception_turn.dump();
      apply_cdf_turn(exception_turn);
    }
    exception_turns.clear();
diff -Nrcpad gcc-17-20260823/gcc/cobol/scan.l gcc-17-20260830/gcc/cobol/scan.l
*** gcc-17-20260823/gcc/cobol/scan.l	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/scan.l	Sun Aug 30 22:32:06 2026
*************** TIME_FMT   {TIME_FMT_B}|{TIME_FMT_E}
*** 156,162 ****
  
  DATETIME_FMT ({DATE_FMT_B}T{TIME_FMT_B})|({DATE_FMT_E}T{TIME_FMT_E})
  
! TITLE    TITLE({EOL}|[^\n[:alnum:]$_-].+)
  
  NAME      [[:alnum:]]+([_-]+[[:alnum:]]+)*
  SUBELEMS  {NAME}({SPC}{NAME})*
--- 156,162 ----
  
  DATETIME_FMT ({DATE_FMT_B}T{TIME_FMT_B})|({DATE_FMT_E}T{TIME_FMT_E})
  
! TITLE    TITLE
  
  NAME      [[:alnum:]]+([_-]+[[:alnum:]]+)*
  SUBELEMS  {NAME}({SPC}{NAME})*
*************** SUBSCRIPT [(]{OSPC}{SUBELEMS}{OSPC}[)]
*** 168,177 ****
  NAMEQUAL  OF{SPC}{NAME}
  NAMEQUALS {NAMEQUAL}({SPC}{NAMEQUAL})*
  
! STRING   [^\r\n""]+
! STRING1  [^\r\n'']+
  QSTRING1 ['']{STRING1}(['']{2}{STRING1})*['']
! QSTRING2 [""]{STRING}([""]{2}{STRING})*[""]
  
  			/* comma & semicolon must be followed by a space */
  COMMA    [,;][[:blank:]]*
--- 168,177 ----
  NAMEQUAL  OF{SPC}{NAME}
  NAMEQUALS {NAMEQUAL}({SPC}{NAMEQUAL})*
  
! STRING2  [^\n""]+
! STRING1  [^\n'']+
  QSTRING1 ['']{STRING1}(['']{2}{STRING1})*['']
! QSTRING2 [""]{STRING2}([""]{2}{STRING2})*[""]
  
  			/* comma & semicolon must be followed by a space */
  COMMA    [,;][[:blank:]]*
*************** PROGRAM-ID{OSPC}{DOTSEP}?	{ yy_push_stat
*** 281,295 ****
                        if( ! dialect_ibm() ) {
                          warn_msg(yylloc, "ignored TITLE: %qs", yytext);
                        }
                      } else {
! 		      auto p = std::find_if( yytext, yytext + yyleng,
! 		                        []( char ch ) {
! 		                          return ! is_name_char(ch);
! 		                        } );
!                       auto keep = p - yytext;
!                       myless(keep);
!                       auto s = xstrdup(yytext);
!                       ydflval.string = yylval.string = s;
                        return NAME;
                      }
  		}
--- 281,292 ----
                        if( ! dialect_ibm() ) {
                          warn_msg(yylloc, "ignored TITLE: %qs", yytext);
                        }
+                       int ch;  // consume characters to EOL
+                       while ((ch = yyinput()) != '\n' ) {
+                         if (ch == EOF) return YYEOF;
+                       }
                      } else {
!                       ydflval.string = yylval.string = xstrdup(yytext);
                        return NAME;
                      }
  		}
*************** PROGRAM-ID{OSPC}{DOTSEP}?	{ yy_push_stat
*** 305,310 ****
--- 302,308 ----
  
  <ident_state>{
    {BLANK_OEOL}
+   EJECT{DOTEOL}?			{ dialect_ok(yylloc, IbmEjectE, "EJECT"); }
    ID(ENTIFICATION)?{SPC}DIVISION	{ myless(0); yy_pop_state(); }
    (ENVIRONMENT|DATA|PROCEDURE){SPC}DIVISION {
  					  myless(0); yy_pop_state(); }
*************** PROGRAM-ID{OSPC}{DOTSEP}?	{ yy_push_stat
*** 340,372 ****
  
  <INITIAL,procedure_div,cdf_state>{
    (IS{SPC})?"<"         { return '<'; }
!   (IS{SPC})?"<="        { return LE;  }
    (IS{SPC})?"="         { static char eq[] = "=";
  			  ydflval.string = yylval.string = eq;
!   			  return EQ; }
!   (IS{SPC})?"<>"        { return NE;  }
!   (IS{SPC})?">="        { return GE;  }
    (IS{SPC})?">"         { return '>'; }
  
    {LESS_THAN}/[[:space:]] 		{ return '<'; }
!   {LESS_THAN}{SPC}{OR_EQUAL}/[[:space:]]	{ return LE; }
    (IS{SPC})?EQUALS?({SPC}TO)?/[[:space:]] {
  		  static char eq[] = "EQUAL";
  		  ydflval.string = yylval.string = eq;
! 		  return EQ; }
!   {GREATER_THAN}{SPC}{OR_EQUAL}/[[:space:]]	{ return GE; }
    {GREATER_THAN}/[[:space:]]			{ return '>'; }
  
    {ISNT}{OSPC}">="        { verify_ws(yytext[yyleng - 3]); return '<'; }
!   {ISNT}{OSPC}">"         { verify_ws(yytext[yyleng - 2]); return LE;  }
!   {ISNT}{OSPC}"="         { verify_ws(yytext[yyleng - 2]); return NE;  }
!   {ISNT}{OSPC}"<"         { verify_ws(yytext[yyleng - 2]); return GE;  }
    {ISNT}{OSPC}"<="        { verify_ws(yytext[yyleng - 3]); return '>'; }
  
    {ISNT}{SPC}GREATER({SPC}THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '<'; }
!   {ISNT}{SPC}GREATER({SPC}THAN)?/[[:space:]]	{ return LE; }
!   {ISNT}{SPC}EQUALS?({SPC}TO)?/[[:space:]]	{ return NE; }
!   {ISNT}{SPC}LESS({SPC}THAN)?/[[:space:]]	{ return GE; }
    {ISNT}{SPC}LESS({SPC}THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '>'; }
  
    [*]{2}	{ return POW; }
--- 338,370 ----
  
  <INITIAL,procedure_div,cdf_state>{
    (IS{SPC})?"<"         { return '<'; }
!   (IS{SPC})?"<="        { return _LE;  }
    (IS{SPC})?"="         { static char eq[] = "=";
  			  ydflval.string = yylval.string = eq;
!   			  return _EQ; }
!   (IS{SPC})?"<>"        { return _NE;  }
!   (IS{SPC})?">="        { return _GE;  }
    (IS{SPC})?">"         { return '>'; }
  
    {LESS_THAN}/[[:space:]] 		{ return '<'; }
!   {LESS_THAN}{SPC}{OR_EQUAL}/[[:space:]]	{ return _LE; }
    (IS{SPC})?EQUALS?({SPC}TO)?/[[:space:]] {
  		  static char eq[] = "EQUAL";
  		  ydflval.string = yylval.string = eq;
! 		  return _EQ; }
!   {GREATER_THAN}{SPC}{OR_EQUAL}/[[:space:]]	{ return _GE; }
    {GREATER_THAN}/[[:space:]]			{ return '>'; }
  
    {ISNT}{OSPC}">="        { verify_ws(yytext[yyleng - 3]); return '<'; }
!   {ISNT}{OSPC}">"         { verify_ws(yytext[yyleng - 2]); return _LE;  }
!   {ISNT}{OSPC}"="         { verify_ws(yytext[yyleng - 2]); return _NE;  }
!   {ISNT}{OSPC}"<"         { verify_ws(yytext[yyleng - 2]); return _GE;  }
    {ISNT}{OSPC}"<="        { verify_ws(yytext[yyleng - 3]); return '>'; }
  
    {ISNT}{SPC}GREATER({SPC}THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '<'; }
!   {ISNT}{SPC}GREATER({SPC}THAN)?/[[:space:]]	{ return _LE; }
!   {ISNT}{SPC}EQUALS?({SPC}TO)?/[[:space:]]	{ return _NE; }
!   {ISNT}{SPC}LESS({SPC}THAN)?/[[:space:]]	{ return _GE; }
    {ISNT}{SPC}LESS({SPC}THAN)?{SPC}{OR_EQUAL}/[[:space:]] { return '>'; }
  
    [*]{2}	{ return POW; }
*************** XML-DECLARATION		{ return XML_DECLARATIO
*** 564,576 ****
  END-XML			{ return END_XML; }
  
  ZEROE?S?	{ return ZERO; }
- 
  WRITE		{ return WRITE; }
- 
- WITH{SPC}NO/[[:^alnum:]_-]		{ return NO; }
- 
  WITH		{ return WITH; }
- 
  WHEN	        { return WHEN; }
  ALSO	        { return ALSO; }
  
--- 562,569 ----
*************** VARYING		{ return VARYING; }
*** 578,584 ****
  VALUE		{ return VALUE; }
  UTILITY		{ return UTILITY; }
  USING		{ return USING; }
! USE{SPC}(AFTER{SPC})?/(EC|EXCEPTION)		{ return USE; }
  USE		{ return USE; }
  
  UPON		{ return UPON; }
--- 571,578 ----
  VALUE		{ return VALUE; }
  UTILITY		{ return UTILITY; }
  USING		{ return USING; }
! 
! USE{SPC}(AFTER{SPC})?/(EC|EXCEPTION) |
  USE		{ return USE; }
  
  UPON		{ return UPON; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1151,1156 ****
--- 1145,1151 ----
    TRUE			{ return TRUE_kw; }
    TYPE			{ return TYPE; }
    TYPEDEF		{ return TYPEDEF; }
+   VALUE			{ return VALUE; }
    VARYING		{ return VARYING; }
    VOLATILE    		{ return VOLATILE; }
    WHEN    		{ return WHEN; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1467,1473 ****
  			  ydflval.string = s;
  			  update_location_col(s);
  			  return LITERAL; }
!   {PREFIX}?[""]{STRING}[""]    { ydflval.string = xstrdup(yytext);
  			  update_location_col(yytext);
  			  return LITERAL; }
    [=]{4}                { static char nullstring[] = "";
--- 1462,1468 ----
  			  ydflval.string = s;
  			  update_location_col(s);
  			  return LITERAL; }
!   {PREFIX}?[""]{STRING2}[""]    { ydflval.string = xstrdup(yytext);
  			  update_location_col(yytext);
  			  return LITERAL; }
    [=]{4}                { static char nullstring[] = "";
*************** USE({SPC}FOR)?		{ return USE; }
*** 1503,1512 ****
  }
  
  <quoted2>{
!   {STRING}$           { tmpstring_append(yyleng); }
    ^-[ ]{4,}[""]/.+    /* ignore continuation mark */
!   {STRING}?[""]{2}    { tmpstring_append(yyleng - 1); }
!   {STRING}            { tmpstring_append(yyleng); }
    [""]{SPC}[&]{SPC}[""''] {
  		        if( yytext[yyleng - 1] == '\'' ) BEGIN(quoted1);
  		      }
--- 1498,1507 ----
  }
  
  <quoted2>{
!   {STRING2}$           { tmpstring_append(yyleng); }
    ^-[ ]{4,}[""]/.+    /* ignore continuation mark */
!   {STRING2}?[""]{2}    { tmpstring_append(yyleng - 1); }
!   {STRING2}            { tmpstring_append(yyleng); }
    [""]{SPC}[&]{SPC}[""''] {
  		        if( yytext[yyleng - 1] == '\'' ) BEGIN(quoted1);
  		      }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1536,1541 ****
--- 1531,1717 ----
                          tmpstring = NULL; pop_return LITERAL; }
  }
  
+   /* These appear only in ISO list of CDF reserved words */
+   /* DE-EDITING 		{ return DE_EDITING; } */
+   /* EXTERNAL-FILE-FILE-STATUS 	{ return EXTERNAL_FILE_FILE_STATUS; } */
+   /* FORMAT 		{ return FORMAT; } */
+   /* FUNCTION-ARGUMENT	{ return FUNCTION_ARGUMENT; } */
+   /* GREATER 		{ return GREATER; } */
+ 
+ <cdf_state>{
+   ALL 			{ return ALL; }
+   AND 			{ return AND; }
+   AS 			{ return AS; }
+   B-AND 		{ return B_AND; }
+   B-NOT 		{ return B_NOT; }
+   B-OR 			{ return B_OR; }
+   B-SHIFT-L 		{ return B_SHIFT_L; }
+   B-SHIFT-LC 		{ return B_SHIFT_LC; }
+   B-SHIFT-R 		{ return B_SHIFT_R; }
+   B-SHIFT-RC 		{ return B_SHIFT_RC; }
+   B-XOR 		{ return B_XOR; }
+   CALL-CONVENTION 	{ return CALL_CONVENTION; }
+   CHECKING 		{ return CHECKING; }
+   COBOL 		{ return COBOL; }
+   /* COBOL-WORDS 		{ return COBOL_WORDS; } */
+   COMPILE-TIME-ARITHMETIC-EXPRESSIONS 	{ return COMPILE_TIME_ARITHMETIC_EXPRESSIONS; }
+   CORRESPONDING 	{ return CORRESPONDING; }
+   DEFINE 		{ return CDF_DEFINE; }
+   DEFINED 		{ return DEFINED; }
+   DISPLAY 		{ return CDF_DISPLAY; }
+   DIVIDE 		{ return DIVIDE; }
+   ELSE 			{ return CDF_ELSE; }
+   END-EVALUATE 		{ return CDF_END_EVALUATE; }
+   END-IF 		{ return CDF_END_IF; }
+   EQUAL 		{ return '='; }
+   EQUATE 		{ return EQUATE; }
+   EVALUATE 		{ return CDF_EVALUATE; }
+   FIXED 		{ return FIXED; }
+   FLAG-02 		{ return FLAG_02; }
+   FLAG-14 		{ return FLAG_14; }
+   FREE 			{ return FREE; }
+   I-O-DECLARATIVE 	{ return I_O_DECLARATIVE; }
+   I-O-STATUS-04 	{ return I_O_STATUS_04; }
+   I-O-STATUS-07 	{ return I_O_STATUS_07; }
+   IF 			{ return CDF_IF; }
+   IS 			{ return IS; }
+   LEAP-SECOND 		{ return LEAP_SECOND; }
+   LISTING 		{ return LISTING; }
+   LOCATION 		{ return LOCATION; }
+   MOVE 			{ return MOVE; }
+   MOVE-TO-SAME-NAME	{ return MOVE_TO_SAME_NAME; }
+   NOT 			{ return NOT; }
+   NUM-ED-ZERO-FIGCONST	{ return NUM_ED_ZERO_FIGCONST; }
+   NUMVAL 		{ return NUMVAL; }
+   OFF 			{ return OFF; }
+   ON 			{ return ON; }
+   OR 			{ return OR; }
+   OTHER 		{ return OTHER; }
+   OVERRIDE 		{ return OVERRIDE; }
+   PAGE 			{ return PAGE; }
+   PARAMETER 		{ return PARAMETER_kw; }
+   POP	 		{ return CDF_POP; }
+   PROPAGATE 		{ return PROPAGATE; }
+   PUSH 			{ return CDF_PUSH; }
+   RANGE-EXCEPTION-FOR-INDEX { return RANGE_EXCEPTION_FOR_INDEX; }
+   READ-PREVIOUS 	{ return READ_PREVIOUS; }
+   REF-MOD-ZERO-LENGTH	{ return REF_MOD_ZERO_LENGTH; }
+   TERMINATE-WITH-VARYING { return TERMINATE_WITH_VARYING; }
+   RESERVE 		{ return RESERVE; }
+   SET	 		{ return SET; }
+   SIZE 			{ return SIZE; }
+   SOURCE 		{ return SOURCE; }
+   SOURCE{BLANK}FORMAT	{ return SOURCE_FORMAT; }
+   STANDARD-1 		{ return STANDARD_1; }
+   STANDARD-2 		{ return STANDARD_2; }
+   STATUS 		{ return STATUS; }
+   SUBSTITUTE 		{ return SUBSTITUTE; }
+   THAN 			{ return THAN; }
+   THROUGH |
+   THRU 			{ return THRU; }
+   TO 			{ return TO; }
+   TRUE 			{ return TRUE; }
+   TURN 			{ return TURN; }
+   UNDEFINE 		{ return UNDEFINE; }
+   UPON 			{ return UPON; }
+   VALUE-EDITING 	{ return VALUE_EDITING; }
+   VALUE-FIG-CON-LENGTH	{ return VALUE_FIG_CON_LENGTH; }
+   VALUE-ZERO 		{ return VALUE_ZERO; }
+   WHEN	 		{ return CDF_WHEN; }
+   WITH 			{ return WITH; }
+   WRITE-END-OF-PAGE	{ return WRITE_END_OF_PAGE; }
+   EXCLUSIVE-OR |
+   XOR	 		{ return XOR; }
+   ZERO-LENGTH 		{ return ZERO_LENGTH; }
+   
+   [+-]?{INTEGERZ}       { int value;
+ 			  if( is_integer_token(&value) ) {
+ 			    ydflval.number = value;
+ 			    return cdf::parser::token::YDF_NUMBER;
+ 			  }
+ 			  dbgmsg("%s not an integer = %d",
+ 				   yytext, value);
+ 			  return NO_CONDITION;
+ 			}
+ 
+   {NAME}{SPC}AS 	{ char *s = xstrdup(yytext);
+ 			  char *p = strchr(s, 0x20);
+ 			  gcc_assert(p); // just found via regex
+ 			  *p = '\0';
+ 			  ydflval.string = yylval.string = s;
+ 			  return NAME;
+ 			}
+   {NAME}	 	{ ydflval.string = yylval.string = xstrdup(yytext);
+ 			  return NAME;
+ 			}
+ 
+   {QSTRING1} |
+   {QSTRING2}		{ char *s = unquote();
+ 			  ydflval.string = s;
+ 			  auto& lit(yylval.literal);
+ 			  lit.set_data(strlen(s), s);
+ 			  return LITERAL;
+ 			}
+ 
+   %EBCDIC-MODE		{ ydflval.number = feature_internal_ebcdic_e;
+ 			  return FEATURE; }
+   %64-BIT-POINTER	{ ydflval.number = feature_embiggen_e;
+ 			  return FEATURE; }
+   [[:blank:]]+
+   {BLANK_EOL}
+ }
+ 
+ <cobol_words>{
+   BY            { return BY; }
+   EQUATE	{ return EQUATE; }
+   UNDEFINE	{ return UNDEFINE; }
+   SUBSTITUTE	{ return SUBSTITUTE; }
+   RESERVE	{ return RESERVE; }
+   WITH		{ return WITH; }
+ 
+   {QSTRING1} |
+   {QSTRING2} 	{ char *s = unquote();
+ 		  auto& lit(yylval.literal);
+ 		  lit.set_data(strlen(s), s);
+                   dbgmsg("%s:%d: literally '%s'", __FILE__, __LINE__, s);
+ 		  return LITERAL;
+ 		}
+ 
+   ID(ENTIFICATION)?{SPC}DIVISION { BEGIN(0); return IDENTIFICATION_DIV; }
+ 
+   {NAME}	{ // COBOL-WORDS might change "ID DIVISION" to "Chapter One"
+ 		  static struct {
+                     int token;
+                     size_t pos;
+                   } prior;
+                   dbgmsg("yytext: %s {%d} @ %lu", yytext, yyleng, (unsigned long)prior.pos);
+ 		  if( keyword_tok(yytext) == IDENTIFICATION ) {
+                     int ch;
+ 		    while( (ch = yyinput()) != EOF ) {
+                         dbgmsg("yytext: got  a  '%c'", ch);
+ 		      if( ! ISSPACE(ch) ) {
+ 			unput(ch);
+                         dbgmsg("yytext: skip to '%c'", ch);
+ 			break;
+                       }
+                     }
+                     if( ch == EOF ) return YYEOF;
+                     prior.token = IDENTIFICATION;
+                   } else {
+                     while( YY_START ) yy_pop_state(); // end of COBOL-WORDS, for sure
+                     if( prior.token == IDENTIFICATION ) {
+                       prior = {};
+                       if( keyword_tok(yytext) == DIVISION ) {
+                         return IDENTIFICATION_DIV;
+                       }
+                       myless(0);
+                       return IDENTIFICATION;
+                     }
+                     myless(0); // try again with INIITAL start condition
+                   }
+ 		}
+ }
+ 
      /* ISO Reserved Words */
  <*>{
    ACCEPT	{ return ACCEPT; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1636,1642 ****
    END-WRITE	{ return END_WRITE; }
    ENVIRONMENT	{ return ENVIRONMENT; }
    EQUAL		{ ydflval.string = yylval.string = xstrdup(yytext);
! 		  return EQ; }
    ERROR		{ return ERROR; }
    EVALUATE	{ return EVALUATE; }
    /* EXCEPTION	special handling */
--- 1812,1818 ----
    END-WRITE	{ return END_WRITE; }
    ENVIRONMENT	{ return ENVIRONMENT; }
    EQUAL		{ ydflval.string = yylval.string = xstrdup(yytext);
! 		  return _EQ; }
    ERROR		{ return ERROR; }
    EVALUATE	{ return EVALUATE; }
    /* EXCEPTION	special handling */
*************** USE({SPC}FOR)?		{ return USE; }
*** 1848,1893 ****
    OFF		{ return OFF; }
  }
  
- <cdf_state>{
-   CALL-CONVENTION	{ return CALL_CONVENTION; }
-   COBOL-WORDS		{ return COBOL_WORDS; }
-   DEFINE		{ return CDF_DEFINE; }
-   OVERRIDE		{ return OVERRIDE; }
-   PARAMETER		{ return PARAMETER_kw; }
-   SOURCE{BLANK}FORMAT	{ return SOURCE_FORMAT; }
- 
-   [+-]?{INTEGERZ}       { int value;
- 			  if( is_integer_token(&value) ) {
- 			    ydflval.number = value;
- 			    return cdf::parser::token::YDF_NUMBER;
- 			  }
- 			  dbgmsg("%s not an integer = %d",
- 				   yytext, value);
- 			  return NO_CONDITION;
- 			}
- 
-   {NAME}{SPC}AS 	{ char *s = xstrdup(yytext);
- 			  char *p = strchr(s, 0x20);
- 			  gcc_assert(p); // just found via regex
- 			  *p = '\0';
- 			  ydflval.string = yylval.string = s;
- 			  return NAME;
- 			}
-   {NAME}	 	{ ydflval.string = yylval.string = xstrdup(yytext);
- 			  return NAME;
- 			}
- 
-   {QSTRING1} |
-   {QSTRING2}		{ ydflval.string = unquote(); return LITERAL; }
- 
-   %EBCDIC-MODE		{ ydflval.number = feature_internal_ebcdic_e;
- 			  return FEATURE; }
-   %64-BIT-POINTER	{ ydflval.number = feature_embiggen_e;
- 			  return FEATURE; }
-   [[:blank:]]+
-   {BLANK_EOL}
- }
- 
  <program_id_state>{
    {BLANK_OEOL}
    (IS)?[[:space:]]
--- 2024,2029 ----
*************** USE({SPC}FOR)?		{ return USE; }
*** 1899,1904 ****
--- 2035,2043 ----
    PROGRAM 	{ return PROGRAM_kw; }
  
    {DOTSEP}	{ pop_return '.'; }
+   (ENVIRONMENT|DATA|PROCEDURE){SPC}DIVISION {	myless(0);
+ 						yy_pop_state();   // to ident_state
+ 						yy_pop_state(); } // to initial state
  }
  
  <name_state>{           /* Either pop from here, or let the quoted state pop */
*************** USE({SPC}FOR)?		{ return USE; }
*** 1936,1942 ****
  			     yy_push_state(quoted1); }
    {PREFIX}?[""]                   { yylval.literal.set_prefix(yytext, yyleng-1);
  			     yy_push_state(quoted2); }
!   {PREFIX}?[""]/{STRING}[""]      { yylval.literal.set_prefix(yytext, yyleng-1);
  			     yy_push_state(quoted2); }
  
    {INTEGERZ}/[[:punct:]][[:space:]]{BLANK_OEOL} { return numstr_of(yytext); }
--- 2075,2081 ----
  			     yy_push_state(quoted1); }
    {PREFIX}?[""]                   { yylval.literal.set_prefix(yytext, yyleng-1);
  			     yy_push_state(quoted2); }
!   {PREFIX}?[""]/{STRING2}[""]      { yylval.literal.set_prefix(yytext, yyleng-1);
  			     yy_push_state(quoted2); }
  
    {INTEGERZ}/[[:punct:]][[:space:]]{BLANK_OEOL} { return numstr_of(yytext); }
*************** USE({SPC}FOR)?		{ return USE; }
*** 2143,2149 ****
  	            yy_push_state(partial_name);
  		    tee_up_empty();
  		}
!   {NAME}({SPC}(IN|OF){SPC}{NAME})+ { // Keep only {NAME}.
  		    auto len = length_upto(0x20);
  		    myless(len); // avoid dangerous trailing context
                      int token = keyword_tok(yytext);
--- 2282,2289 ----
  	            yy_push_state(partial_name);
  		    tee_up_empty();
  		}
!   LENGTH{SPC}OF/{SPC}{NAME}	{ return LENGTH_OF; }
!   {NAME}{SPC}(IN|OF){SPC}{NAME} { // Keep only {NAME}.
  		    auto len = length_upto(0x20);
  		    myless(len); // avoid dangerous trailing context
                      int token = keyword_tok(yytext);
*************** USE({SPC}FOR)?		{ return USE; }
*** 2156,2161 ****
--- 2296,2308 ----
  }
  
  <partial_name>{
+   LENGTH{SPC}OF{SPC}{NAME}	{
+     std::reverse_iterator<const char*>  beg(yytext + yyleng), end(yytext);
+     auto p = std::find_if(beg, end, []( char ch ) { return ISSPACE(ch); });
+     auto len = p.base() - yytext;
+     myless(len); // avoid dangerous trailing context
+     return LENGTH_OF; }
+ 
    {NAME}/{SPC}(IN|OF)[[:space:]] {
      tee_up_name(yylloc, xstrdup(yytext));
    }
*************** USE({SPC}FOR)?		{ return USE; }
*** 2206,2213 ****
  }
  
  <sort_state>{
    {NAME} 	{ yylval.string = xstrdup(yytext);
! 		  pop_return symbol_file(PROGRAM, yytext)? FILENAME : NAME;
  		}
  }
  
--- 2353,2364 ----
  }
  
  <sort_state>{
+   LENGTH{SPC}OF/{SPC}{NAME}	{ return LENGTH_OF; }
+   {NAME}{SPC}(IN|OF) |
+   {NAME}{OSPC}[(] { myless(0); yy_pop_state(); }
+ 
    {NAME} 	{ yylval.string = xstrdup(yytext);
! 		  pop_return symbol_file(PROGRAM, yytext)? _FILENAME : NAME;
  		}
  }
  
*************** BASIS		{ yy_push_state(basis); return BA
*** 2436,2442 ****
    [[:blank:]]+
    {BLANK_EOL}
  
!   {STRING}      { yy_pop_state();
                    yypush_buffer_state( yy_create_buffer(yyin, YY_BUF_SIZE) );
                    if( (yyin = cdftext::lex_open(yytext)) == NULL ) {
                      cbl_message(yylloc, LexIncludeE,
--- 2587,2594 ----
    [[:blank:]]+
    {BLANK_EOL}
  
!   {STRING1} |
!   {STRING2}     { yy_pop_state();
                    yypush_buffer_state( yy_create_buffer(yyin, YY_BUF_SIZE) );
                    if( (yyin = cdftext::lex_open(yytext)) == NULL ) {
                      cbl_message(yylloc, LexIncludeE,
*************** BASIS		{ yy_push_state(basis); return BA
*** 2452,2458 ****
  
  <procedure_div>{
     EQUALS?{OSPC}/[(]	{ ydflval.string = yylval.string = xstrdup(yytext);
! 		  	  return EQ; }
  
     {NAME}{OSPC}/[(] { /* If /{OSPC}, "dangerous trailing context" "*/
                    if( is_integer_token() ) return numstr_of(yytext);
--- 2604,2610 ----
  
  <procedure_div>{
     EQUALS?{OSPC}/[(]	{ ydflval.string = yylval.string = xstrdup(yytext);
! 		  	  return _EQ; }
  
     {NAME}{OSPC}/[(] { /* If /{OSPC}, "dangerous trailing context" "*/
                    if( is_integer_token() ) return numstr_of(yytext);
*************** BASIS		{ yy_push_state(basis); return BA
*** 2505,2511 ****
  		    return EXCEPTION_NAME;
  		  }
  		  ydflval.string = xstrdup(yytext);
! 		  return symbol_file(PROGRAM, yytext)? FILENAME : NAME;
  		}
    [[:blank:]]+
    {EOL}		{ yy_pop_state(); }
--- 2657,2663 ----
  		    return EXCEPTION_NAME;
  		  }
  		  ydflval.string = xstrdup(yytext);
! 		  return symbol_file(PROGRAM, yytext)? _FILENAME : NAME;
  		}
    [[:blank:]]+
    {EOL}		{ yy_pop_state(); }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2540,2545 ****
--- 2692,2699 ----
    ^[ ]*[$]{OBLANK}SET({SPC}CONSTANT)? {
  				  dialect_ok(yylloc, MfCdfDollar, yytext); 
  				  PUSH_CDF_STATE; return CDF_DEFINE; }
+   ^[ ]*[$]{OBLANK}DISPLAY 	{ dialect_ok(yylloc, MfCdfDollar, yytext); 
+ 				  PUSH_CDF_STATE; return CDF_DISPLAY; }
  
    ^[ ]*>>{OBLANK}EVALUATE		{ return CDF_EVALUATE; }
    ^[ ]*>>{OBLANK}WHEN		{ return CDF_WHEN; }
*************** BASIS		{ yy_push_state(basis); return BA
*** 2553,2559 ****
    ^[ ]*>>{OBLANK}DISPLAY 	{ PUSH_CDF_STATE; return CDF_DISPLAY; }
  
    ^[ ]*>>{OBLANK}TURN 		{ yy_push_state(exception); return TURN; }
!   ^[ ]*>>{OBLANK}COBOL-WORDS	{ yy_push_state(cobol_words); return COBOL_WORDS; }
  
    ^[ ]*>>{OBLANK}SOURCE{BLANK}FORMAT	{ return SOURCE_FORMAT; }
  
--- 2707,2713 ----
    ^[ ]*>>{OBLANK}DISPLAY 	{ PUSH_CDF_STATE; return CDF_DISPLAY; }
  
    ^[ ]*>>{OBLANK}TURN 		{ yy_push_state(exception); return TURN; }
!   ^[ ]*>>{OBLANK}COBOL-WORDS	{ yy_push_state( cobol_words); return COBOL_WORDS; }
  
    ^[ ]*>>{OBLANK}SOURCE{BLANK}FORMAT	{ return SOURCE_FORMAT; }
  
*************** BASIS		{ yy_push_state(basis); return BA
*** 2572,2588 ****
    ALL			{ return ALL; }
  }
  
- <cobol_words>{
-   EQUATE	{ return EQUATE; }
-   UNDEFINE	{ return UNDEFINE; }
-   SUBSTITUTE	{ return SUBSTITUTE; }
-   RESERVE	{ return RESERVE; }
-   {NAME}	{
-                   ydflval.string = yylval.string = xstrdup(yytext);
- 		  pop_return NAME;
- 		}
- }
- 
  <*>{
    {PUSH_FILE}		{
  			  yy_set_bol(true);
--- 2726,2731 ----
diff -Nrcpad gcc-17-20260823/gcc/cobol/scan_ante.h gcc-17-20260830/gcc/cobol/scan_ante.h
*** gcc-17-20260823/gcc/cobol/scan_ante.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/scan_ante.h	Sun Aug 30 22:32:06 2026
*************** update_location_col( const char str[], i
*** 576,582 ****
  #define bcomputable(T, C)                               \
      yylval.computational.type=T,                        \
      yylval.computational.capacity=C,                    \
!     yylval.computational.signable=true, BINARY_INTEGER
  #define scomputable(T, C)                               \
      yylval.computational.type=T,                        \
      yylval.computational.capacity=C,                    \
--- 576,582 ----
  #define bcomputable(T, C)                               \
      yylval.computational.type=T,                        \
      yylval.computational.capacity=C,                    \
!     yylval.computational.signable=true, _BINARY_INTEGER
  #define scomputable(T, C)                               \
      yylval.computational.type=T,                        \
      yylval.computational.capacity=C,                    \
*************** static char *tmpstring = NULL;
*** 593,603 ****
  // map of alias => canonical
  static std::map <std::string, std::string> keyword_aliases;
  
! const std::string& 
  keyword_alias_add( const std::string& keyword, const std::string& alias ) {
!   auto p = keyword_aliases.find(alias);
!   if( p != keyword_aliases.end() ) return p->second; // error: do not overwrite
!   return keyword_aliases[alias] = keyword;
  }
  
  /*
--- 593,603 ----
  // map of alias => canonical
  static std::map <std::string, std::string> keyword_aliases;
  
! std::pair<std::string, bool> 
  keyword_alias_add( const std::string& keyword, const std::string& alias ) {
!   auto elem = std::make_pair(alias, keyword);
!   auto result = keyword_aliases.insert(elem);
!   return std::make_pair(keyword_aliases[alias], result.second);
  }
  
  /*
*************** static const std::map <std::string, bint
*** 618,628 ****
    { "COMP-4",           { COMPUTATIONAL, FldNumericBinary,  0, false } }, 
    { "COMPUTATIONAL-4",  { COMPUTATIONAL, FldNumericBinary,  0, false } }, 
    
!   { "BINARY-CHAR",      { BINARY_INTEGER, FldNumericBin5,   1, true } }, 
!   { "BINARY-SHORT",     { BINARY_INTEGER, FldNumericBin5,   2, true } }, 
!   { "BINARY-LONG",      { BINARY_INTEGER, FldNumericBin5,   4, true } }, 
!   { "BINARY-DOUBLE",    { BINARY_INTEGER, FldNumericBin5,   8, true } }, 
!   { "BINARY-LONG-LONG", { BINARY_INTEGER, FldNumericBin5,   8, true } }, 
  
    { "COMP-5",           { COMPUTATIONAL, FldNumericBin5,    0, false } }, 
    { "COMPUTATIONAL-5",  { COMPUTATIONAL, FldNumericBin5,    0, false } }, 
--- 618,628 ----
    { "COMP-4",           { COMPUTATIONAL, FldNumericBinary,  0, false } }, 
    { "COMPUTATIONAL-4",  { COMPUTATIONAL, FldNumericBinary,  0, false } }, 
    
!   { "BINARY-CHAR",      { _BINARY_INTEGER, FldNumericBin5,   1, true } }, 
!   { "BINARY-SHORT",     { _BINARY_INTEGER, FldNumericBin5,   2, true } }, 
!   { "BINARY-LONG",      { _BINARY_INTEGER, FldNumericBin5,   4, true } }, 
!   { "BINARY-DOUBLE",    { _BINARY_INTEGER, FldNumericBin5,   8, true } }, 
!   { "BINARY-LONG-LONG", { _BINARY_INTEGER, FldNumericBin5,   8, true } }, 
  
    { "COMP-5",           { COMPUTATIONAL, FldNumericBin5,    0, false } }, 
    { "COMPUTATIONAL-5",  { COMPUTATIONAL, FldNumericBin5,    0, false } }, 
*************** binary_integer_usage_of( const char name
*** 689,695 ****
      int token = p->second.token;
      switch( token ) {
      case COMPUTATIONAL:
!     case BINARY_INTEGER:
        return token;
      default:
        gcc_unreachable();
--- 689,695 ----
      int token = p->second.token;
      switch( token ) {
      case COMPUTATIONAL:
!     case _BINARY_INTEGER:
        return token;
      default:
        gcc_unreachable();
diff -Nrcpad gcc-17-20260823/gcc/cobol/scan_post.h gcc-17-20260830/gcc/cobol/scan_post.h
*** gcc-17-20260823/gcc/cobol/scan_post.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/scan_post.h	Sun Aug 30 22:32:06 2026
*************** start_condition_str( int sc ) {
*** 45,50 ****
--- 45,51 ----
    case datetime_fmt: state = "datetime_fmt"; break;
    case dot_state: state = "dot_state"; break;
    case exception: state = "exception"; break;
+   case fd_state: state = "fd_state"; break;
    case field_data_item: state = "field_data_item"; break;
    case field_state: state = "field_state"; break;
    case function: state = "function"; break;
*************** is_cdf_token( int token ) {
*** 167,172 ****
--- 168,175 ----
    case COPY:
    case TURN:
      return true;
+   case READY: case RESET: case TRACE:
+     return true;
    }
    return false;
  }
*************** prelex() {
*** 305,311 ****
  
    // Do not disturb lexer state while we're not parsing the COBOL. 
    if( parsing.on() ) {
!     if( YY_START == cdf_state ) yy_pop_state();
  
      if( yy_flex_debug ) {
        dbgmsg("scanner SC <%s>", start_condition_is());
--- 308,317 ----
  
    // Do not disturb lexer state while we're not parsing the COBOL. 
    if( parsing.on() ) {
!     if( YY_START == cdf_state ) {
!         yy_pop_state();
!     }
!     // still parsing.on() 
  
      if( yy_flex_debug ) {
        dbgmsg("scanner SC <%s>", start_condition_is());
*************** prelex() {
*** 328,333 ****
--- 334,340 ----
          if( tok ) token = tok;
        }
        yy_pop_state();
+ 
        dbgmsg("%s: scanner SC <%s>, token now %s", __func__,
               start_condition_is(), keyword_str(token));
      }
*************** namespace cdf {
*** 487,490 ****
--- 494,498 ----
  // tokens.h is generated as needed from parse.h with tokens.h.gen
  current_tokens_t::tokenset_t::tokenset_t() {
  #include "token_names.h"
+   // Reserved words that we don't use as terminals.
  }
diff -Nrcpad gcc-17-20260823/gcc/cobol/symbols.cc gcc-17-20260830/gcc/cobol/symbols.cc
*** gcc-17-20260823/gcc/cobol/symbols.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/symbols.cc	Sun Aug 30 22:32:06 2026
*************** new_temporary_clone( const cbl_field_t *
*** 4160,4173 ****
      temporaries.add(field);
    }
    field->data = orig->data;
    if( field->type == FldNumericBin5 ) {
      field->type = orig->type;
      field->codeset = orig->codeset;
      field->attr &= ~big_endian_e;
      field->attr |= endian_bit();
- 
    }
-   field->attr = intermediate_e;
  
    return parser_symbol_add2(field);
  }
--- 4160,4173 ----
      temporaries.add(field);
    }
    field->data = orig->data;
+   field->attr = intermediate_e;
    if( field->type == FldNumericBin5 ) {
      field->type = orig->type;
      field->codeset = orig->codeset;
+     field->attr |= orig->attr & signable_e;
      field->attr &= ~big_endian_e;
      field->attr |= endian_bit();
    }
  
    return parser_symbol_add2(field);
  }
diff -Nrcpad gcc-17-20260823/gcc/cobol/symbols.h gcc-17-20260830/gcc/cobol/symbols.h
*** gcc-17-20260823/gcc/cobol/symbols.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/symbols.h	Sun Aug 30 22:32:06 2026
*************** struct cbl_ffi_arg_t {
*** 1436,1441 ****
--- 1436,1444 ----
      // Update Linkage Section data item.
      refer.field->set_linkage(crv, optional);
    }
+   bool by_content() const {
+     return crv == by_content_e;
+   }
  protected:
    bool by_value() const {
      if( crv == by_reference_e ) return false;
*************** class name_queue_t : private std::queue<
*** 2855,2862 ****
  
  };
  
! const std::string& keyword_alias_add( const std::string& keyword,
! 				      const std::string& alias );
  int binary_integer_usage_of( const char name[] );
    
  void tee_up_empty();
--- 2858,2866 ----
  
  };
  
! std::pair<std::string, bool> keyword_alias_add( const std::string& keyword,
!                                                 const std::string& alias );
! 
  int binary_integer_usage_of( const char name[] );
    
  void tee_up_empty();
*************** class current_tokens_t {
*** 2992,2998 ****
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
        if( ! cw.second ) {
!         error_msg(loc, "COBOL-WORDS %s: %s may appear but once", verb, name);
          return false;
        }
        auto p = tokens.find(lowercase(name));
--- 2996,3002 ----
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
        if( ! cw.second ) {
!         error_msg(loc, "COBOL-WORDS %s: %qs may appear but once", verb, name);
          return false;
        }
        auto p = tokens.find(lowercase(name));
*************** class current_tokens_t {
*** 3001,3020 ****
          tokens[lname] = token;
          dbgmsg("%s:%d: %d has alias %s", __func__, __LINE__, token, name);
        } else {
!         error_msg(loc, "%s: %s already defined as a token", verb, name);
        }
        return fOK;
      }
      bool undefine( const cbl_loc_t& loc,
                     const cbl_name_t name, const cbl_name_t verb = "UNDEFINE" ) {
        auto lname( lowercase(name) );
-       auto cw = cobol_words.insert(lname);
-       if( ! cw.second ) {
-         error_msg(loc, "COBOL-WORDS %s: %s may appear but once", verb, name);
-         return false;
-       }
  
!       // Do not erase generic, multi-type tokens COMPUTATIONAL and BINARY_INTEGER.
        if( binary_integer_usage_of(name) ) {
          dbgmsg("%s:%d: generic %s remains valid as a token", __func__, __LINE__, name);
          return true;
--- 3005,3019 ----
          tokens[lname] = token;
          dbgmsg("%s:%d: %d has alias %s", __func__, __LINE__, token, name);
        } else {
!         error_msg(loc, "%s: %qs already reserved", verb, name);
        }
        return fOK;
      }
      bool undefine( const cbl_loc_t& loc,
                     const cbl_name_t name, const cbl_name_t verb = "UNDEFINE" ) {
        auto lname( lowercase(name) );
  
!       // Do not erase generic, multi-type tokens COMPUTATIONAL and _BINARY_INTEGER.
        if( binary_integer_usage_of(name) ) {
          dbgmsg("%s:%d: generic %s remains valid as a token", __func__, __LINE__, name);
          return true;
*************** class current_tokens_t {
*** 3025,3033 ****
        if( fOK ) { // name in use
          tokens.erase(p);
        } else {
!         error_msg(loc, "%s: %s not defined as a token", verb, name);
        }
!       dbgmsg("%s:%d: %s removed as a valid token name", __func__, __LINE__, name);
        return fOK;
      }
    
--- 3024,3032 ----
        if( fOK ) { // name in use
          tokens.erase(p);
        } else {
!         error_msg(loc, "%s: not a reserved word: %qs", verb, name);
        }
!       dbgmsg("%s:%d: removed as a valid token name: %s", __func__, __LINE__, name);
        return fOK;
      }
    
*************** class current_tokens_t {
*** 3042,3048 ****
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
        if( ! cw.second ) {
!         error_msg(loc, "COBOL-WORDS RESERVE: %s may appear but once", name);
          return false;
        }
        tokens[lname] = -42;
--- 3041,3047 ----
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
        if( ! cw.second ) {
!         error_msg(loc, "COBOL-WORDS RESERVE: %qs may appear but once", name);
          return false;
        }
        tokens[lname] = -42;
*************** class current_tokens_t {
*** 3075,3107 ****
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
! 	error_msg(loc, "EQUATE %s: not a valid token", keyword);
  	return false;
        }
      }
!     auto name = keyword_alias_add(tokens.uppercase(keyword),
! 				  tokens.uppercase(alias));
!     if( name != keyword ) {
!       error_msg(loc, "EQUATE: %s is already an alias for %s", alias, name.c_str());
        return false;
      } 
      return tokens.equate(loc, token, alias);
    }
!   bool undefine( const cbl_loc_t& loc, cbl_name_t keyword ) {
      return tokens.undefine(loc, keyword);
    }
    bool substitute( const cbl_loc_t& loc, const cbl_name_t keyword, const cbl_name_t alias ) {
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
! 	error_msg(loc, "SUBSTITUTE %s: not a valid token", keyword);
  	return false;
        }
      }
!     auto name = keyword_alias_add(tokens.uppercase(keyword),
! 				  tokens.uppercase(alias));
!     if( name != keyword ) {
!       error_msg(loc, "SUBSTITUTE: %s is already an alias for %s", alias, name.c_str());
        return false;
      } 
  
--- 3074,3108 ----
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
! 	error_msg(loc, "EQUATE: not a reserved word: %qs", keyword);
  	return false;
        }
      }
!     auto result = keyword_alias_add(tokens.uppercase(keyword),
!                                     tokens.uppercase(alias));
!     if( ! result.second ) {
!       error_msg(loc, "EQUATE: %qs is already an alias for %qs",
!                 alias, result.first.c_str());
        return false;
      } 
      return tokens.equate(loc, token, alias);
    }
!   bool undefine( const cbl_loc_t& loc, const cbl_name_t keyword ) {
      return tokens.undefine(loc, keyword);
    }
    bool substitute( const cbl_loc_t& loc, const cbl_name_t keyword, const cbl_name_t alias ) {
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
! 	error_msg(loc, "SUBSTITUTE: not a reserved word: %qs", keyword);
  	return false;
        }
      }
!     auto result = keyword_alias_add(tokens.uppercase(keyword),
!                                     tokens.uppercase(alias));
!     if( ! result.second ) {
!       error_msg(loc, "SUBSTITUTE: %qs is already an alias for %qs",
!                 alias, result.first.c_str());
        return false;
      } 
  
diff -Nrcpad gcc-17-20260823/gcc/cobol/token_names.h gcc-17-20260830/gcc/cobol/token_names.h
*** gcc-17-20260823/gcc/cobol/token_names.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/token_names.h	Sun Aug 30 22:32:06 2026
***************
*** 1,1409 ****
  // generated by token_names.h.gen
  tokens = {
! 	{ "identification division", IDENTIFICATION_DIV }, // 258
! 	{ "environment division", ENVIRONMENT_DIV }, // 259
! 	{ "procedure division", PROCEDURE_DIV }, // 260
! 	{ "data division", DATA_DIV }, // 261
! 	{ "file section", FILE_SECT }, // 262
! 	{ "input_output section", INPUT_OUTPUT_SECT }, // 263
! 	{ "linkage section", LINKAGE_SECT }, // 264
! 	{ "local_storage section", LOCAL_STORAGE_SECT }, // 265
! 	{ "working_storage section", WORKING_STORAGE_SECT }, // 266
! 	{ "object-computer", OBJECT_COMPUTER }, // 267
! 	{ "display-of", DISPLAY_OF }, // 268
! 	{ "end-function", END_FUNCTION }, // 269
! 	{ "end-program", END_PROGRAM }, // 270
! 	{ "end-subprogram", END_SUBPROGRAM }, // 271
! 	{ "justified", JUSTIFIED }, // 272
! 	{ "returning", RETURNING }, // 273
! 	{ "no-condition", NO_CONDITION }, // 274
! 	{ "alnum", ALNUM }, // 275
! 	{ "alphed", ALPHED }, // 276
! 	{ "error", ERROR }, // 277
! 	{ "exception", EXCEPTION }, // 278
! 	{ "size-error", SIZE_ERROR }, // 279
! 	{ "exception-name", EXCEPTION_NAME }, // 280
! 	{ "level", LEVEL }, // 281
! 	{ "level66", LEVEL66 }, // 282
! 	{ "level78", LEVEL78 }, // 283
! 	{ "level88", LEVEL88 }, // 284
! 	{ "class-name", CLASS_NAME }, // 285
! 	{ "name", NAME }, // 286
! 	{ "name88", NAME88 }, // 287
! 	{ "nume", NUME }, // 288
! 	{ "numed", NUMED }, // 289
! 	{ "numed-cr", NUMED_CR }, // 290
! 	{ "numed-db", NUMED_DB }, // 291
! 	{ "ninedot", NINEDOT }, // 292
! 	{ "nines", NINES }, // 293
! 	{ "ninev", NINEV }, // 294
! 	{ "pic-p", PIC_P }, // 295
! 	{ "ones", ONES }, // 296
! 	{ "spaces", SPACES }, // 297
! 	{ "space", SPACES }, // 297
! 	{ "eq", EQ }, // 298
! 	{ "literal", LITERAL }, // 299
! 	{ "end", END }, // 300
! 	{ "eop", EOP }, // 301
! 	{ "filename", FILENAME }, // 302
! 	{ "invalid", INVALID }, // 303
! 	{ "number", NUMBER }, // 304
! 	{ "negative", NEGATIVE }, // 305
! 	{ "numstr", NUMSTR }, // 306
! 	{ "overflow", OVERFLOW_kw }, // 307
! 	{ "binary-integer", BINARY_INTEGER }, // 308
! 	{ "computational", COMPUTATIONAL }, // 309
! 	{ "perform", PERFORM }, // 310
! 	{ "backward", BACKWARD }, // 311
! 	{ "positive", POSITIVE }, // 312
! 	{ "pointer", POINTER }, // 313
! 	{ "process", PROCESS }, // 314
! 	{ "section", SECTION }, // 315
! 	{ "standard-alphabet", STANDARD_ALPHABET }, // 316
! 	{ "switch", SWITCH }, // 317
! 	{ "upsi", UPSI }, // 318
! 	{ "zero", ZERO }, // 319
! 	{ "zeros", ZERO }, // 319
! 	{ "zeroes", ZERO }, // 319
! 	{ "sysin", SYSIN }, // 320
! 	{ "sysipt", SYSIPT }, // 321
! 	{ "sysout", SYSOUT }, // 322
! 	{ "syslist", SYSLIST }, // 323
! 	{ "syslst", SYSLST }, // 324
! 	{ "syspunch", SYSPUNCH }, // 325
! 	{ "syspch", SYSPCH }, // 326
! 	{ "console", CONSOLE }, // 327
! 	{ "c01", C01 }, // 328
! 	{ "c02", C02 }, // 329
! 	{ "c03", C03 }, // 330
! 	{ "c04", C04 }, // 331
! 	{ "c05", C05 }, // 332
! 	{ "c06", C06 }, // 333
! 	{ "c07", C07 }, // 334
! 	{ "c08", C08 }, // 335
! 	{ "c09", C09 }, // 336
! 	{ "c10", C10 }, // 337
! 	{ "c11", C11 }, // 338
! 	{ "c12", C12 }, // 339
! 	{ "csp", CSP }, // 340
! 	{ "s01", S01 }, // 341
! 	{ "s02", S02 }, // 342
! 	{ "s03", S03 }, // 343
! 	{ "s04", S04 }, // 344
! 	{ "s05", S05 }, // 345
! 	{ "afp-5a", AFP_5A }, // 346
! 	{ "stdin", STDIN }, // 347
! 	{ "stdout", STDOUT }, // 348
! 	{ "stderr", STDERR }, // 349
! 	{ "list", LIST }, // 350
! 	{ "map", MAP }, // 351
! 	{ "nolist", NOLIST }, // 352
! 	{ "nomap", NOMAP }, // 353
! 	{ "nosource", NOSOURCE }, // 354
! 	{ "might-be", MIGHT_BE }, // 355
! 	{ "function-udf", FUNCTION_UDF }, // 356
! 	{ "function-udf-0", FUNCTION_UDF_0 }, // 357
! 	{ "default", DEFAULT }, // 358
! 	{ "date-fmt", DATE_FMT }, // 359
! 	{ "time-fmt", TIME_FMT }, // 360
! 	{ "datetime-fmt", DATETIME_FMT }, // 361
! 	{ "basis", BASIS }, // 362
! 	{ "cbl", CBL }, // 363
! 	{ "constant", CONSTANT }, // 364
! 	{ "copy", COPY }, // 365
! 	{ "defined", DEFINED }, // 366
! 	{ "enter", ENTER }, // 367
! 	{ "feature", FEATURE }, // 368
! 	{ "insertt", INSERTT }, // 369
! 	{ "lsub", LSUB }, // 370
! 	{ "parameter", PARAMETER_kw }, // 371
! 	{ "override", OVERRIDE }, // 372
! 	{ "ready", READY }, // 373
! 	{ "reset", RESET }, // 374
! 	{ "rsub", RSUB }, // 375
! 	{ "service-reload", SERVICE_RELOAD }, // 376
! 	{ "star-cbl", STAR_CBL }, // 377
! 	{ "subscript", SUBSCRIPT }, // 378
! 	{ "suppress", SUPPRESS }, // 379
! 	{ "trace", TRACE }, // 380
! 	{ "use", USE }, // 381
! 	{ "cobol-words", COBOL_WORDS }, // 382
! 	{ "equate", EQUATE }, // 383
! 	{ "undefine", UNDEFINE }, // 384
! 	{ "cdf-define", CDF_DEFINE }, // 385
! 	{ "cdf-display", CDF_DISPLAY }, // 386
! 	{ "cdf-if", CDF_IF }, // 387
! 	{ "cdf-else", CDF_ELSE }, // 388
! 	{ "cdf-end-if", CDF_END_IF }, // 389
! 	{ "cdf-evaluate", CDF_EVALUATE }, // 390
! 	{ "cdf-when", CDF_WHEN }, // 391
! 	{ "cdf-end-evaluate", CDF_END_EVALUATE }, // 392
! 	{ "call-convention", CALL_CONVENTION }, // 393
! 	{ "call-cobol", CALL_COBOL }, // 394
! 	{ "call-verbatim", CALL_VERBATIM }, // 395
! 	{ "cdf-push", CDF_PUSH }, // 396
! 	{ "cdf-pop", CDF_POP }, // 397
! 	{ "source-format", SOURCE_FORMAT }, // 398
! 	{ "if", IF }, // 399
! 	{ "then", THEN }, // 400
! 	{ "else", ELSE }, // 401
! 	{ "sentence", SENTENCE }, // 402
! 	{ "accept", ACCEPT }, // 403
! 	{ "add", ADD }, // 404
! 	{ "alter", ALTER }, // 405
! 	{ "call", CALL }, // 406
! 	{ "cancel", CANCEL }, // 407
! 	{ "close", CLOSE }, // 408
! 	{ "compute", COMPUTE }, // 409
! 	{ "continue", CONTINUE }, // 410
! 	{ "delete", DELETE }, // 411
! 	{ "display", DISPLAY }, // 412
! 	{ "divide", DIVIDE }, // 413
! 	{ "evaluate", EVALUATE }, // 414
! 	{ "exit", EXIT }, // 415
! 	{ "filler", FILLER_kw }, // 416
! 	{ "goback", GOBACK }, // 417
! 	{ "goto", GOTO }, // 418
! 	{ "initialize", INITIALIZE }, // 419
! 	{ "inspect", INSPECT }, // 420
! 	{ "merge", MERGE }, // 421
! 	{ "move", MOVE }, // 422
! 	{ "multiply", MULTIPLY }, // 423
! 	{ "open", OPEN }, // 424
! 	{ "paragraph", PARAGRAPH }, // 425
! 	{ "read", READ }, // 426
! 	{ "release", RELEASE }, // 427
! 	{ "return", RETURN }, // 428
! 	{ "rewrite", REWRITE }, // 429
! 	{ "search", SEARCH }, // 430
! 	{ "set", SET }, // 431
! 	{ "select", SELECT }, // 432
! 	{ "sort", SORT }, // 433
! 	{ "sort-merge", SORT_MERGE }, // 434
! 	{ "string", STRING_kw }, // 435
! 	{ "stop", STOP }, // 436
! 	{ "subtract", SUBTRACT }, // 437
! 	{ "start", START }, // 438
! 	{ "unstring", UNSTRING }, // 439
! 	{ "write", WRITE }, // 440
! 	{ "when", WHEN }, // 441
! 	{ "argument-number", ARGUMENT_NUMBER }, // 442
! 	{ "argument-value", ARGUMENT_VALUE }, // 443
! 	{ "environment-name", ENVIRONMENT_NAME }, // 444
! 	{ "environment-value", ENVIRONMENT_VALUE }, // 445
! 	{ "abs", ABS }, // 446
! 	{ "access", ACCESS }, // 447
! 	{ "acos", ACOS }, // 448
! 	{ "actual", ACTUAL }, // 449
! 	{ "advancing", ADVANCING }, // 450
! 	{ "after", AFTER }, // 451
! 	{ "all", ALL }, // 452
! 	{ "allocate", ALLOCATE }, // 453
! 	{ "alphabet", ALPHABET }, // 454
! 	{ "alphabetic", ALPHABETIC }, // 455
! 	{ "alphabetic-lower", ALPHABETIC_LOWER }, // 456
! 	{ "alphabetic-upper", ALPHABETIC_UPPER }, // 457
! 	{ "alphanumeric", ALPHANUMERIC }, // 458
! 	{ "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 459
! 	{ "also", ALSO }, // 460
! 	{ "alternate", ALTERNATE }, // 461
! 	{ "annuity", ANNUITY }, // 462
! 	{ "anum", ANUM }, // 463
! 	{ "any", ANY }, // 464
! 	{ "anycase", ANYCASE }, // 465
! 	{ "apply", APPLY }, // 466
! 	{ "are", ARE }, // 467
! 	{ "area", AREA }, // 468
! 	{ "areas", AREAS }, // 469
! 	{ "as", AS }, // 470
! 	{ "ascending", ASCENDING }, // 471
! 	{ "activating", ACTIVATING }, // 472
! 	{ "asin", ASIN }, // 473
! 	{ "assign", ASSIGN }, // 474
! 	{ "at", AT }, // 475
! 	{ "atan", ATAN }, // 476
! 	{ "based", BASED }, // 477
! 	{ "baseconvert", BASECONVERT }, // 478
! 	{ "before", BEFORE }, // 479
! 	{ "binary", BINARY }, // 480
! 	{ "bit", BIT }, // 481
! 	{ "bit-of", BIT_OF }, // 482
! 	{ "bit-to-char", BIT_TO_CHAR }, // 483
! 	{ "blank", BLANK }, // 484
! 	{ "block", BLOCK_kw }, // 485
! 	{ "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 486
! 	{ "bottom", BOTTOM }, // 487
! 	{ "by", BY }, // 488
! 	{ "byte", BYTE }, // 489
! 	{ "byte-length", BYTE_LENGTH }, // 490
! 	{ "cf", CF }, // 491
! 	{ "ch", CH }, // 492
! 	{ "changed", CHANGED }, // 493
! 	{ "char", CHAR }, // 494
! 	{ "char-national", CHAR_NATIONAL }, // 495
! 	{ "character", CHARACTER }, // 496
! 	{ "characters", CHARACTERS }, // 497
! 	{ "checking", CHECKING }, // 498
! 	{ "class", CLASS }, // 499
! 	{ "cobol", COBOL }, // 500
! 	{ "code", CODE }, // 501
! 	{ "code-set", CODESET }, // 502
! 	{ "collating", COLLATING }, // 503
! 	{ "column", COLUMN }, // 504
! 	{ "combined-datetime", COMBINED_DATETIME }, // 505
! 	{ "comma", COMMA }, // 506
! 	{ "command-line", COMMAND_LINE }, // 507
! 	{ "command-line-count", COMMAND_LINE_COUNT }, // 508
! 	{ "commit", COMMIT }, // 509
! 	{ "common", COMMON }, // 510
! 	{ "concat", CONCAT }, // 511
! 	{ "condition", CONDITION }, // 512
! 	{ "configuration section", CONFIGURATION_SECT }, // 513
! 	{ "contains", CONTAINS }, // 514
! 	{ "content", CONTENT }, // 515
! 	{ "control", CONTROL }, // 516
! 	{ "controls", CONTROLS }, // 517
! 	{ "convert", CONVERT }, // 518
! 	{ "converting", CONVERTING }, // 519
! 	{ "corresponding", CORRESPONDING }, // 520
! 	{ "cos", COS }, // 521
! 	{ "count", COUNT }, // 522
! 	{ "currency", CURRENCY }, // 523
! 	{ "current", CURRENT }, // 524
! 	{ "current-date", CURRENT_DATE }, // 525
! 	{ "data", DATA }, // 526
! 	{ "date", DATE }, // 527
! 	{ "date-compiled", DATE_COMPILED }, // 528
! 	{ "date-of-integer", DATE_OF_INTEGER }, // 529
! 	{ "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 530
! 	{ "date-written", DATE_WRITTEN }, // 531
! 	{ "day", DAY }, // 532
! 	{ "day-of-integer", DAY_OF_INTEGER }, // 533
! 	{ "day-of-week", DAY_OF_WEEK }, // 534
! 	{ "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 535
! 	{ "dbcs", DBCS }, // 536
! 	{ "de", DE }, // 537
! 	{ "debugging", DEBUGGING }, // 538
! 	{ "decimal-point", DECIMAL_POINT }, // 539
! 	{ "declaratives", DECLARATIVES }, // 540
! 	{ "delimited", DELIMITED }, // 541
! 	{ "delimiter", DELIMITER }, // 542
! 	{ "depending", DEPENDING }, // 543
! 	{ "descending", DESCENDING }, // 544
! 	{ "detail", DETAIL }, // 545
! 	{ "direct", DIRECT }, // 546
! 	{ "direct-access", DIRECT_ACCESS }, // 547
! 	{ "down", DOWN }, // 548
! 	{ "duplicates", DUPLICATES }, // 549
! 	{ "dynamic", DYNAMIC }, // 550
! 	{ "e", E }, // 551
! 	{ "ebcdic", EBCDIC }, // 552
! 	{ "ec", EC }, // 553
! 	{ "egcs", EGCS }, // 554
! 	{ "encoding", ENCODING }, // 555
! 	{ "entry", ENTRY }, // 556
! 	{ "environment", ENVIRONMENT }, // 557
! 	{ "every", EVERY }, // 558
! 	{ "examine", EXAMINE }, // 559
! 	{ "exhibit", EXHIBIT }, // 560
! 	{ "exp", EXP }, // 561
! 	{ "exp10", EXP10 }, // 562
! 	{ "extend", EXTEND }, // 563
! 	{ "external", EXTERNAL }, // 564
! 	{ "exception-file", EXCEPTION_FILE }, // 565
! 	{ "exception-file-n", EXCEPTION_FILE_N }, // 566
! 	{ "exception-location", EXCEPTION_LOCATION }, // 567
! 	{ "exception-location-n", EXCEPTION_LOCATION_N }, // 568
! 	{ "exception-statement", EXCEPTION_STATEMENT }, // 569
! 	{ "exception-status", EXCEPTION_STATUS }, // 570
! 	{ "factorial", FACTORIAL }, // 571
! 	{ "false", FALSE_kw }, // 572
! 	{ "fd", FD }, // 573
! 	{ "file-control", FILE_CONTROL }, // 574
! 	{ "file", FILE_KW }, // 575
! 	{ "file-limit", FILE_LIMIT }, // 576
! 	{ "final", FINAL }, // 577
! 	{ "finally", FINALLY }, // 578
! 	{ "find-string", FIND_STRING }, // 579
! 	{ "first", FIRST }, // 580
! 	{ "fixed", FIXED }, // 581
! 	{ "footing", FOOTING }, // 582
! 	{ "for", FOR }, // 583
! 	{ "formatted-current-date", FORMATTED_CURRENT_DATE }, // 584
! 	{ "formatted-date", FORMATTED_DATE }, // 585
! 	{ "formatted-datetime", FORMATTED_DATETIME }, // 586
! 	{ "formatted-time", FORMATTED_TIME }, // 587
! 	{ "form-overflow", FORM_OVERFLOW }, // 588
! 	{ "free", FREE }, // 589
! 	{ "fraction-part", FRACTION_PART }, // 590
! 	{ "from", FROM }, // 591
! 	{ "function", FUNCTION }, // 592
! 	{ "generate", GENERATE }, // 593
! 	{ "giving", GIVING }, // 594
! 	{ "global", GLOBAL }, // 595
! 	{ "go", GO }, // 596
! 	{ "group", GROUP }, // 597
! 	{ "heading", HEADING }, // 598
! 	{ "hex", HEX }, // 599
! 	{ "hex-of", HEX_OF }, // 600
! 	{ "hex-to-char", HEX_TO_CHAR }, // 601
! 	{ "high-values", HIGH_VALUES }, // 602
! 	{ "highest-algebraic", HIGHEST_ALGEBRAIC }, // 603
! 	{ "hold", HOLD }, // 604
! 	{ "ibm-360", IBM_360 }, // 605
! 	{ "in", IN }, // 606
! 	{ "include", INCLUDE }, // 607
! 	{ "index", INDEX }, // 608
! 	{ "indexed", INDEXED }, // 609
! 	{ "indicate", INDICATE }, // 610
! 	{ "initial", INITIAL_kw }, // 611
! 	{ "initiate", INITIATE }, // 612
! 	{ "input", INPUT }, // 613
! 	{ "installation", INSTALLATION }, // 614
! 	{ "interface", INTERFACE }, // 615
! 	{ "integer", INTEGER }, // 616
! 	{ "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 617
! 	{ "integer-of-date", INTEGER_OF_DATE }, // 618
! 	{ "integer-of-day", INTEGER_OF_DAY }, // 619
! 	{ "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 620
! 	{ "integer-part", INTEGER_PART }, // 621
! 	{ "into", INTO }, // 622
! 	{ "intrinsic", INTRINSIC }, // 623
! 	{ "invoke", INVOKE }, // 624
! 	{ "i-o", IO }, // 625
! 	{ "i-o-control", IO_CONTROL }, // 626
! 	{ "is", IS }, // 627
! 	{ "isnt", ISNT }, // 628
! 	{ "kanji", KANJI }, // 629
! 	{ "key", KEY }, // 630
! 	{ "label", LABEL }, // 631
! 	{ "last", LAST }, // 632
! 	{ "leading", LEADING }, // 633
! 	{ "left", LEFT }, // 634
! 	{ "length", LENGTH }, // 635
! 	{ "length-of", LENGTH_OF }, // 636
! 	{ "limit", LIMIT }, // 637
! 	{ "limits", LIMITS }, // 638
! 	{ "line", LINE }, // 639
! 	{ "lines", LINES }, // 640
! 	{ "line-counter", LINE_COUNTER }, // 641
! 	{ "linage", LINAGE }, // 642
! 	{ "linkage", LINKAGE }, // 643
! 	{ "locale", LOCALE }, // 644
! 	{ "locale-compare", LOCALE_COMPARE }, // 645
! 	{ "locale-date", LOCALE_DATE }, // 646
! 	{ "locale-time", LOCALE_TIME }, // 647
! 	{ "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 648
! 	{ "local-storage", LOCAL_STORAGE }, // 649
! 	{ "location", LOCATION }, // 650
! 	{ "lock", LOCK }, // 651
! 	{ "lock-on", LOCK_ON }, // 652
! 	{ "log", LOG }, // 653
! 	{ "log10", LOG10 }, // 654
! 	{ "lower-case", LOWER_CASE }, // 655
! 	{ "low-values", LOW_VALUES }, // 656
! 	{ "lowest-algebraic", LOWEST_ALGEBRAIC }, // 657
! 	{ "lparen", LPAREN }, // 658
! 	{ "manual", MANUAL }, // 659
! 	{ "maxx", MAXX }, // 660
! 	{ "mean", MEAN }, // 661
! 	{ "median", MEDIAN }, // 662
! 	{ "midrange", MIDRANGE }, // 663
! 	{ "minn", MINN }, // 664
! 	{ "multiple", MULTIPLE }, // 665
! 	{ "mod", MOD }, // 666
! 	{ "mode", MODE }, // 667
! 	{ "module-name", MODULE_NAME }, // 668
! 	{ "named", NAMED }, // 669
! 	{ "namespace", NAMESPACE }, // 670
! 	{ "namespace-prefix", NAMESPACE_PREFIX }, // 671
! 	{ "nat", NAT }, // 672
! 	{ "national", NATIONAL }, // 673
! 	{ "national-edited", NATIONAL_EDITED }, // 674
! 	{ "national-of", NATIONAL_OF }, // 675
! 	{ "native", NATIVE }, // 676
! 	{ "nested", NESTED }, // 677
! 	{ "next", NEXT }, // 678
! 	{ "no", NO }, // 679
! 	{ "note", NOTE }, // 680
! 	{ "nulls", NULLS }, // 681
! 	{ "null", NULLS }, // 681
! 	{ "nullptr", NULLPTR }, // 682
! 	{ "numeric", NUMERIC }, // 683
! 	{ "numeric-edited", NUMERIC_EDITED }, // 684
! 	{ "numval", NUMVAL }, // 685
! 	{ "numval-c", NUMVAL_C }, // 686
! 	{ "numval-f", NUMVAL_F }, // 687
! 	{ "occurs", OCCURS }, // 688
! 	{ "of", OF }, // 689
! 	{ "off", OFF }, // 690
! 	{ "omitted", OMITTED }, // 691
! 	{ "on", ON }, // 692
! 	{ "only", ONLY }, // 693
! 	{ "optional", OPTIONAL }, // 694
! 	{ "options", OPTIONS }, // 695
! 	{ "ord", ORD }, // 696
! 	{ "order", ORDER }, // 697
! 	{ "ord-max", ORD_MAX }, // 698
! 	{ "ord-min", ORD_MIN }, // 699
! 	{ "organization", ORGANIZATION }, // 700
! 	{ "other", OTHER }, // 701
! 	{ "otherwise", OTHERWISE }, // 702
! 	{ "output", OUTPUT }, // 703
! 	{ "packed-decimal", PACKED_DECIMAL }, // 704
! 	{ "padding", PADDING }, // 705
! 	{ "page", PAGE }, // 706
! 	{ "page-counter", PAGE_COUNTER }, // 707
! 	{ "pf", PF }, // 708
! 	{ "ph", PH }, // 709
! 	{ "pi", PI }, // 710
! 	{ "pic", PIC }, // 711
! 	{ "picture", PICTURE }, // 712
! 	{ "plus", PLUS }, // 713
! 	{ "present-value", PRESENT_VALUE }, // 714
! 	{ "print-switch", PRINT_SWITCH }, // 715
! 	{ "procedure", PROCEDURE }, // 716
! 	{ "procedures", PROCEDURES }, // 717
! 	{ "proceed", PROCEED }, // 718
! 	{ "processing", PROCESSING }, // 719
! 	{ "program-id", PROGRAM_ID }, // 720
! 	{ "program", PROGRAM_kw }, // 721
! 	{ "property", PROPERTY }, // 722
! 	{ "prototype", PROTOTYPE }, // 723
! 	{ "pseudotext", PSEUDOTEXT }, // 724
! 	{ "quotes", QUOTES }, // 725
! 	{ "quote", QUOTES }, // 725
! 	{ "random", RANDOM }, // 726
! 	{ "random-seed", RANDOM_SEED }, // 727
! 	{ "range", RANGE }, // 728
! 	{ "raise", RAISE }, // 729
! 	{ "raising", RAISING }, // 730
! 	{ "rd", RD }, // 731
! 	{ "record", RECORD }, // 732
! 	{ "recording", RECORDING }, // 733
! 	{ "records", RECORDS }, // 734
! 	{ "recursive", RECURSIVE }, // 735
! 	{ "redefines", REDEFINES }, // 736
! 	{ "reel", REEL }, // 737
! 	{ "reference", REFERENCE }, // 738
! 	{ "relative", RELATIVE }, // 739
! 	{ "rem", REM }, // 740
! 	{ "remainder", REMAINDER }, // 741
! 	{ "remarks", REMARKS }, // 742
! 	{ "removal", REMOVAL }, // 743
! 	{ "renames", RENAMES }, // 744
! 	{ "replace", REPLACE }, // 745
! 	{ "replacing", REPLACING }, // 746
! 	{ "report", REPORT }, // 747
! 	{ "reporting", REPORTING }, // 748
! 	{ "reports", REPORTS }, // 749
! 	{ "repository", REPOSITORY }, // 750
! 	{ "rerun", RERUN }, // 751
! 	{ "reserve", RESERVE }, // 752
! 	{ "restricted", RESTRICTED }, // 753
! 	{ "resume", RESUME }, // 754
! 	{ "retry", RETRY }, // 755
! 	{ "reverse", REVERSE }, // 756
! 	{ "reversed", REVERSED }, // 757
! 	{ "rewind", REWIND }, // 758
! 	{ "rf", RF }, // 759
! 	{ "rh", RH }, // 760
! 	{ "right", RIGHT }, // 761
! 	{ "rounded", ROUNDED }, // 762
! 	{ "run", RUN }, // 763
! 	{ "same", SAME }, // 764
! 	{ "screen", SCREEN }, // 765
! 	{ "sd", SD }, // 766
! 	{ "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 767
! 	{ "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 768
! 	{ "security", SECURITY }, // 769
! 	{ "separate", SEPARATE }, // 770
! 	{ "sequence", SEQUENCE }, // 771
! 	{ "sequential", SEQUENTIAL }, // 772
! 	{ "sharing", SHARING }, // 773
! 	{ "simple-exit", SIMPLE_EXIT }, // 774
! 	{ "sign", SIGN }, // 775
! 	{ "sin", SIN }, // 776
! 	{ "size", SIZE }, // 777
! 	{ "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 778
! 	{ "source", SOURCE }, // 779
! 	{ "source-computer", SOURCE_COMPUTER }, // 780
! 	{ "special-names", SPECIAL_NAMES }, // 781
! 	{ "sqrt", SQRT }, // 782
! 	{ "stack", STACK }, // 783
! 	{ "standard", STANDARD }, // 784
! 	{ "standard-1", STANDARD_1 }, // 785
! 	{ "standard-deviation", STANDARD_DEVIATION }, // 786
! 	{ "standard-compare", STANDARD_COMPARE }, // 787
! 	{ "status", STATUS }, // 788
! 	{ "strong", STRONG }, // 789
! 	{ "substitute", SUBSTITUTE }, // 790
! 	{ "sum", SUM }, // 791
! 	{ "symbol", SYMBOL }, // 792
! 	{ "symbolic", SYMBOLIC }, // 793
! 	{ "synchronized", SYNCHRONIZED }, // 794
! 	{ "tallying", TALLYING }, // 795
! 	{ "tan", TAN }, // 796
! 	{ "terminate", TERMINATE }, // 797
! 	{ "test", TEST }, // 798
! 	{ "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 799
! 	{ "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 800
! 	{ "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 801
! 	{ "test-numval", TEST_NUMVAL }, // 802
! 	{ "test-numval-c", TEST_NUMVAL_C }, // 803
! 	{ "test-numval-f", TEST_NUMVAL_F }, // 804
! 	{ "than", THAN }, // 805
! 	{ "time", TIME }, // 806
! 	{ "times", TIMES }, // 807
! 	{ "to", TO }, // 808
! 	{ "top", TOP }, // 809
! 	{ "top-level", TOP_LEVEL }, // 810
! 	{ "tracks", TRACKS }, // 811
! 	{ "track-area", TRACK_AREA }, // 812
! 	{ "trailing", TRAILING }, // 813
! 	{ "transform", TRANSFORM }, // 814
! 	{ "trim", TRIM }, // 815
! 	{ "true", TRUE_kw }, // 816
! 	{ "try", TRY }, // 817
! 	{ "turn", TURN }, // 818
! 	{ "type", TYPE }, // 819
! 	{ "typedef", TYPEDEF }, // 820
! 	{ "ulength", ULENGTH }, // 821
! 	{ "unbounded", UNBOUNDED }, // 822
! 	{ "unit", UNIT }, // 823
! 	{ "units", UNITS }, // 824
! 	{ "unit-record", UNIT_RECORD }, // 825
! 	{ "until", UNTIL }, // 826
! 	{ "up", UP }, // 827
! 	{ "upon", UPON }, // 828
! 	{ "upos", UPOS }, // 829
! 	{ "upper-case", UPPER_CASE }, // 830
! 	{ "usage", USAGE }, // 831
! 	{ "using", USING }, // 832
! 	{ "usubstr", USUBSTR }, // 833
! 	{ "usupplementary", USUPPLEMENTARY }, // 834
! 	{ "utility", UTILITY }, // 835
! 	{ "uuid4", UUID4 }, // 836
! 	{ "uvalid", UVALID }, // 837
! 	{ "uwidth", UWIDTH }, // 838
! 	{ "validating", VALIDATING }, // 839
! 	{ "value", VALUE }, // 840
! 	{ "variance", VARIANCE }, // 841
! 	{ "varying", VARYING }, // 842
! 	{ "volatile", VOLATILE }, // 843
! 	{ "when-compiled", WHEN_COMPILED }, // 844
! 	{ "with", WITH }, // 845
! 	{ "working-storage", WORKING_STORAGE }, // 846
! 	{ "year-to-yyyy", YEAR_TO_YYYY }, // 847
! 	{ "yyyyddd", YYYYDDD }, // 848
! 	{ "yyyymmdd", YYYYMMDD }, // 849
! 	{ "arithmetic", ARITHMETIC }, // 850
! 	{ "attribute", ATTRIBUTE }, // 851
! 	{ "auto", AUTO }, // 852
! 	{ "automatic", AUTOMATIC }, // 853
! 	{ "away-from-zero", AWAY_FROM_ZERO }, // 854
! 	{ "background-color", BACKGROUND_COLOR }, // 855
! 	{ "bell", BELL }, // 856
! 	{ "binary-encoding", BINARY_ENCODING }, // 857
! 	{ "blink", BLINK }, // 858
! 	{ "capacity", CAPACITY }, // 859
! 	{ "center", CENTER }, // 860
! 	{ "classification", CLASSIFICATION }, // 861
! 	{ "cycle", CYCLE }, // 862
! 	{ "decimal-encoding", DECIMAL_ENCODING }, // 863
! 	{ "entry-convention", ENTRY_CONVENTION }, // 864
! 	{ "eol", EOL }, // 865
! 	{ "eos", EOS }, // 866
! 	{ "erase", ERASE }, // 867
! 	{ "expands", EXPANDS }, // 868
! 	{ "float-binary", FLOAT_BINARY }, // 869
! 	{ "float-decimal", FLOAT_DECIMAL }, // 870
! 	{ "foreground-color", FOREGROUND_COLOR }, // 871
! 	{ "forever", FOREVER }, // 872
! 	{ "full", FULL }, // 873
! 	{ "highlight", HIGHLIGHT }, // 874
! 	{ "high-order-left", HIGH_ORDER_LEFT }, // 875
! 	{ "high-order-right", HIGH_ORDER_RIGHT }, // 876
! 	{ "ignoring", IGNORING }, // 877
! 	{ "implements", IMPLEMENTS }, // 878
! 	{ "initialized", INITIALIZED }, // 879
! 	{ "intermediate", INTERMEDIATE }, // 880
! 	{ "lc-all", LC_ALL_kw }, // 881
! 	{ "lc-collate", LC_COLLATE_kw }, // 882
! 	{ "lc-ctype", LC_CTYPE_kw }, // 883
! 	{ "lc-messages", LC_MESSAGES_kw }, // 884
! 	{ "lc-monetary", LC_MONETARY_kw }, // 885
! 	{ "lc-numeric", LC_NUMERIC_kw }, // 886
! 	{ "lc-time", LC_TIME_kw }, // 887
! 	{ "lowlight", LOWLIGHT }, // 888
! 	{ "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 889
! 	{ "nearest-even", NEAREST_EVEN }, // 890
! 	{ "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 891
! 	{ "none", NONE }, // 892
! 	{ "normal", NORMAL }, // 893
! 	{ "numbers", NUMBERS }, // 894
! 	{ "prefixed", PREFIXED }, // 895
! 	{ "previous", PREVIOUS }, // 896
! 	{ "prohibited", PROHIBITED }, // 897
! 	{ "relation", RELATION }, // 898
! 	{ "required", REQUIRED }, // 899
! 	{ "reverse-video", REVERSE_VIDEO }, // 900
! 	{ "rounding", ROUNDING }, // 901
! 	{ "seconds", SECONDS }, // 902
! 	{ "secure", SECURE }, // 903
! 	{ "short", SHORT }, // 904
! 	{ "signed", SIGNED_kw }, // 905
! 	{ "standard-binary", STANDARD_BINARY }, // 906
! 	{ "standard-decimal", STANDARD_DECIMAL }, // 907
! 	{ "statement", STATEMENT }, // 908
! 	{ "step", STEP }, // 909
! 	{ "structure", STRUCTURE }, // 910
! 	{ "toward-greater", TOWARD_GREATER }, // 911
! 	{ "toward-lesser", TOWARD_LESSER }, // 912
! 	{ "truncation", TRUNCATION }, // 913
! 	{ "ucs-4", UCS_4 }, // 914
! 	{ "underline", UNDERLINE }, // 915
! 	{ "unsigned", UNSIGNED_kw }, // 916
! 	{ "utf-16", UTF_16 }, // 917
! 	{ "utf-8", UTF_8 }, // 918
! 	{ "xml-declaration", XML_DECLARATION }, // 919
! 	{ "xmlgenerate", XMLGENERATE }, // 920
! 	{ "xmlparse", XMLPARSE }, // 921
! 	{ "address", ADDRESS }, // 922
! 	{ "end-accept", END_ACCEPT }, // 923
! 	{ "end-add", END_ADD }, // 924
! 	{ "end-call", END_CALL }, // 925
! 	{ "end-compute", END_COMPUTE }, // 926
! 	{ "end-delete", END_DELETE }, // 927
! 	{ "end-display", END_DISPLAY }, // 928
! 	{ "end-divide", END_DIVIDE }, // 929
! 	{ "end-evaluate", END_EVALUATE }, // 930
! 	{ "end-multiply", END_MULTIPLY }, // 931
! 	{ "end-perform", END_PERFORM }, // 932
! 	{ "end-read", END_READ }, // 933
! 	{ "end-return", END_RETURN }, // 934
! 	{ "end-rewrite", END_REWRITE }, // 935
! 	{ "end-search", END_SEARCH }, // 936
! 	{ "end-start", END_START }, // 937
! 	{ "end-string", END_STRING }, // 938
! 	{ "end-subtract", END_SUBTRACT }, // 939
! 	{ "end-unstring", END_UNSTRING }, // 940
! 	{ "end-write", END_WRITE }, // 941
! 	{ "end-xml", END_XML }, // 942
! 	{ "end-if", END_IF }, // 943
! 	{ "attributes", ATTRIBUTES }, // 944
! 	{ "element", ELEMENT }, // 945
! 	{ "nonnumeric", NONNUMERIC }, // 946
! 	{ "thru", THRU }, // 947
! 	{ "through", THRU }, // 947
! 	{ "or", OR }, // 948
! 	{ "and", AND }, // 949
! 	{ "not", NOT }, // 950
! 	{ "ne", NE }, // 951
! 	{ "le", LE }, // 952
! 	{ "ge", GE }, // 953
! 	{ "pow", POW }, // 954
! 	{ "neg", NEG }, // 955
  };
  
  // cppcheck-suppress useInitializationList
  token_names = {
  	"IDENTIFICATION", // 0 (258)
! 	"ENVIRONMENT", // 1 (259)
! 	"PROCEDURE", // 2 (260)
! 	"DATA", // 3 (261)
! 	"FILE", // 4 (262)
! 	"INPUT-OUTPUT", // 5 (263)
! 	"LINKAGE", // 6 (264)
! 	"LOCAL-STORAGE", // 7 (265)
! 	"WORKING-STORAGE", // 8 (266)
! 	"OBJECT-COMPUTER", // 9 (267)
! 	"DISPLAY-OF", // 10 (268)
! 	"END-FUNCTION", // 11 (269)
! 	"END-PROGRAM", // 12 (270)
! 	"END-SUBPROGRAM", // 13 (271)
! 	"JUSTIFIED", // 14 (272)
! 	"RETURNING", // 15 (273)
! 	"NO-CONDITION", // 16 (274)
! 	"ALNUM", // 17 (275)
! 	"ALPHED", // 18 (276)
! 	"ERROR", // 19 (277)
! 	"EXCEPTION", // 20 (278)
! 	"SIZE-ERROR", // 21 (279)
! 	"EXCEPTION-NAME", // 22 (280)
! 	"LEVEL", // 23 (281)
! 	"LEVEL66", // 24 (282)
! 	"LEVEL78", // 25 (283)
! 	"LEVEL88", // 26 (284)
! 	"CLASS-NAME", // 27 (285)
! 	"NAME", // 28 (286)
! 	"NAME88", // 29 (287)
! 	"NUME", // 30 (288)
! 	"NUMED", // 31 (289)
! 	"NUMED-CR", // 32 (290)
! 	"NUMED-DB", // 33 (291)
! 	"NINEDOT", // 34 (292)
! 	"NINES", // 35 (293)
! 	"NINEV", // 36 (294)
! 	"PIC-P", // 37 (295)
! 	"ONES", // 38 (296)
! 	"SPACES", // 39 (297)
! 	"EQ", // 40 (298)
! 	"LITERAL", // 41 (299)
! 	"END", // 42 (300)
! 	"EOP", // 43 (301)
! 	"FILENAME", // 44 (302)
! 	"INVALID", // 45 (303)
! 	"NUMBER", // 46 (304)
! 	"NEGATIVE", // 47 (305)
! 	"NUMSTR", // 48 (306)
! 	"OVERFLOW", // 49 (307)
! 	"BINARY-INTEGER", // 50 (308)
! 	"COMPUTATIONAL", // 51 (309)
! 	"PERFORM", // 52 (310)
! 	"BACKWARD", // 53 (311)
! 	"POSITIVE", // 54 (312)
! 	"POINTER", // 55 (313)
! 	"PROCESS", // 56 (314)
! 	"SECTION", // 57 (315)
! 	"STANDARD-ALPHABET", // 58 (316)
! 	"SWITCH", // 59 (317)
! 	"UPSI", // 60 (318)
! 	"ZERO", // 61 (319)
! 	"SYSIN", // 62 (320)
! 	"SYSIPT", // 63 (321)
! 	"SYSOUT", // 64 (322)
! 	"SYSLIST", // 65 (323)
! 	"SYSLST", // 66 (324)
! 	"SYSPUNCH", // 67 (325)
! 	"SYSPCH", // 68 (326)
! 	"CONSOLE", // 69 (327)
! 	"C01", // 70 (328)
! 	"C02", // 71 (329)
! 	"C03", // 72 (330)
! 	"C04", // 73 (331)
! 	"C05", // 74 (332)
! 	"C06", // 75 (333)
! 	"C07", // 76 (334)
! 	"C08", // 77 (335)
! 	"C09", // 78 (336)
! 	"C10", // 79 (337)
! 	"C11", // 80 (338)
! 	"C12", // 81 (339)
! 	"CSP", // 82 (340)
! 	"S01", // 83 (341)
! 	"S02", // 84 (342)
! 	"S03", // 85 (343)
! 	"S04", // 86 (344)
! 	"S05", // 87 (345)
! 	"AFP-5A", // 88 (346)
! 	"STDIN", // 89 (347)
! 	"STDOUT", // 90 (348)
! 	"STDERR", // 91 (349)
! 	"LIST", // 92 (350)
! 	"MAP", // 93 (351)
! 	"NOLIST", // 94 (352)
! 	"NOMAP", // 95 (353)
! 	"NOSOURCE", // 96 (354)
! 	"MIGHT-BE", // 97 (355)
! 	"FUNCTION-UDF", // 98 (356)
! 	"FUNCTION-UDF-0", // 99 (357)
! 	"DEFAULT", // 100 (358)
! 	"DATE-FMT", // 101 (359)
! 	"TIME-FMT", // 102 (360)
! 	"DATETIME-FMT", // 103 (361)
! 	"BASIS", // 104 (362)
! 	"CBL", // 105 (363)
! 	"CONSTANT", // 106 (364)
! 	"COPY", // 107 (365)
! 	"DEFINED", // 108 (366)
! 	"ENTER", // 109 (367)
! 	"FEATURE", // 110 (368)
! 	"INSERTT", // 111 (369)
! 	"LSUB", // 112 (370)
! 	"PARAMETER", // 113 (371)
! 	"OVERRIDE", // 114 (372)
! 	"READY", // 115 (373)
! 	"RESET", // 116 (374)
! 	"RSUB", // 117 (375)
! 	"SERVICE-RELOAD", // 118 (376)
! 	"STAR-CBL", // 119 (377)
! 	"SUBSCRIPT", // 120 (378)
! 	"SUPPRESS", // 121 (379)
! 	"TRACE", // 122 (380)
! 	"USE", // 123 (381)
! 	"COBOL-WORDS", // 124 (382)
! 	"EQUATE", // 125 (383)
! 	"UNDEFINE", // 126 (384)
! 	"CDF-DEFINE", // 127 (385)
! 	"CDF-DISPLAY", // 128 (386)
! 	"CDF-IF", // 129 (387)
! 	"CDF-ELSE", // 130 (388)
! 	"CDF-END-IF", // 131 (389)
! 	"CDF-EVALUATE", // 132 (390)
! 	"CDF-WHEN", // 133 (391)
! 	"CDF-END-EVALUATE", // 134 (392)
! 	"CALL-CONVENTION", // 135 (393)
! 	"CALL-COBOL", // 136 (394)
! 	"CALL-VERBATIM", // 137 (395)
! 	"CDF-PUSH", // 138 (396)
! 	"CDF-POP", // 139 (397)
! 	"SOURCE-FORMAT", // 140 (398)
! 	"IF", // 141 (399)
! 	"THEN", // 142 (400)
! 	"ELSE", // 143 (401)
! 	"SENTENCE", // 144 (402)
! 	"ACCEPT", // 145 (403)
! 	"ADD", // 146 (404)
! 	"ALTER", // 147 (405)
! 	"CALL", // 148 (406)
! 	"CANCEL", // 149 (407)
! 	"CLOSE", // 150 (408)
! 	"COMPUTE", // 151 (409)
! 	"CONTINUE", // 152 (410)
! 	"DELETE", // 153 (411)
! 	"DISPLAY", // 154 (412)
! 	"DIVIDE", // 155 (413)
! 	"EVALUATE", // 156 (414)
! 	"EXIT", // 157 (415)
! 	"FILLER", // 158 (416)
! 	"GOBACK", // 159 (417)
! 	"GOTO", // 160 (418)
! 	"INITIALIZE", // 161 (419)
! 	"INSPECT", // 162 (420)
! 	"MERGE", // 163 (421)
! 	"MOVE", // 164 (422)
! 	"MULTIPLY", // 165 (423)
! 	"OPEN", // 166 (424)
! 	"PARAGRAPH", // 167 (425)
! 	"READ", // 168 (426)
! 	"RELEASE", // 169 (427)
! 	"RETURN", // 170 (428)
! 	"REWRITE", // 171 (429)
! 	"SEARCH", // 172 (430)
! 	"SET", // 173 (431)
! 	"SELECT", // 174 (432)
! 	"SORT", // 175 (433)
! 	"SORT-MERGE", // 176 (434)
! 	"STRING", // 177 (435)
! 	"STOP", // 178 (436)
! 	"SUBTRACT", // 179 (437)
! 	"START", // 180 (438)
! 	"UNSTRING", // 181 (439)
! 	"WRITE", // 182 (440)
! 	"WHEN", // 183 (441)
! 	"ARGUMENT-NUMBER", // 184 (442)
! 	"ARGUMENT-VALUE", // 185 (443)
! 	"ENVIRONMENT-NAME", // 186 (444)
! 	"ENVIRONMENT-VALUE", // 187 (445)
! 	"ABS", // 188 (446)
! 	"ACCESS", // 189 (447)
! 	"ACOS", // 190 (448)
! 	"ACTUAL", // 191 (449)
! 	"ADVANCING", // 192 (450)
! 	"AFTER", // 193 (451)
! 	"ALL", // 194 (452)
! 	"ALLOCATE", // 195 (453)
! 	"ALPHABET", // 196 (454)
! 	"ALPHABETIC", // 197 (455)
! 	"ALPHABETIC-LOWER", // 198 (456)
! 	"ALPHABETIC-UPPER", // 199 (457)
! 	"ALPHANUMERIC", // 200 (458)
! 	"ALPHANUMERIC-EDITED", // 201 (459)
! 	"ALSO", // 202 (460)
! 	"ALTERNATE", // 203 (461)
! 	"ANNUITY", // 204 (462)
! 	"ANUM", // 205 (463)
! 	"ANY", // 206 (464)
! 	"ANYCASE", // 207 (465)
! 	"APPLY", // 208 (466)
! 	"ARE", // 209 (467)
! 	"AREA", // 210 (468)
! 	"AREAS", // 211 (469)
! 	"AS", // 212 (470)
! 	"ASCENDING", // 213 (471)
! 	"ACTIVATING", // 214 (472)
! 	"ASIN", // 215 (473)
! 	"ASSIGN", // 216 (474)
! 	"AT", // 217 (475)
! 	"ATAN", // 218 (476)
! 	"BASED", // 219 (477)
! 	"BASECONVERT", // 220 (478)
! 	"BEFORE", // 221 (479)
! 	"BINARY", // 222 (480)
! 	"BIT", // 223 (481)
! 	"BIT-OF", // 224 (482)
! 	"BIT-TO-CHAR", // 225 (483)
! 	"BLANK", // 226 (484)
! 	"BLOCK", // 227 (485)
! 	"BOOLEAN-OF-INTEGER", // 228 (486)
! 	"BOTTOM", // 229 (487)
! 	"BY", // 230 (488)
! 	"BYTE", // 231 (489)
! 	"BYTE-LENGTH", // 232 (490)
! 	"CF", // 233 (491)
! 	"CH", // 234 (492)
! 	"CHANGED", // 235 (493)
! 	"CHAR", // 236 (494)
! 	"CHAR-NATIONAL", // 237 (495)
! 	"CHARACTER", // 238 (496)
! 	"CHARACTERS", // 239 (497)
! 	"CHECKING", // 240 (498)
! 	"CLASS", // 241 (499)
! 	"COBOL", // 242 (500)
! 	"CODE", // 243 (501)
! 	"CODE-SET", // 244 (502)
! 	"COLLATING", // 245 (503)
! 	"COLUMN", // 246 (504)
! 	"COMBINED-DATETIME", // 247 (505)
! 	"COMMA", // 248 (506)
! 	"COMMAND-LINE", // 249 (507)
! 	"COMMAND-LINE-COUNT", // 250 (508)
! 	"COMMIT", // 251 (509)
! 	"COMMON", // 252 (510)
! 	"CONCAT", // 253 (511)
! 	"CONDITION", // 254 (512)
! 	"CONFIGURATION", // 255 (513)
! 	"CONTAINS", // 256 (514)
! 	"CONTENT", // 257 (515)
! 	"CONTROL", // 258 (516)
! 	"CONTROLS", // 259 (517)
! 	"CONVERT", // 260 (518)
! 	"CONVERTING", // 261 (519)
! 	"CORRESPONDING", // 262 (520)
! 	"COS", // 263 (521)
! 	"COUNT", // 264 (522)
! 	"CURRENCY", // 265 (523)
! 	"CURRENT", // 266 (524)
! 	"CURRENT-DATE", // 267 (525)
! 	"DATA", // 268 (526)
! 	"DATE", // 269 (527)
! 	"DATE-COMPILED", // 270 (528)
! 	"DATE-OF-INTEGER", // 271 (529)
! 	"DATE-TO-YYYYMMDD", // 272 (530)
! 	"DATE-WRITTEN", // 273 (531)
! 	"DAY", // 274 (532)
! 	"DAY-OF-INTEGER", // 275 (533)
! 	"DAY-OF-WEEK", // 276 (534)
! 	"DAY-TO-YYYYDDD", // 277 (535)
! 	"DBCS", // 278 (536)
! 	"DE", // 279 (537)
! 	"DEBUGGING", // 280 (538)
! 	"DECIMAL-POINT", // 281 (539)
! 	"DECLARATIVES", // 282 (540)
! 	"DELIMITED", // 283 (541)
! 	"DELIMITER", // 284 (542)
! 	"DEPENDING", // 285 (543)
! 	"DESCENDING", // 286 (544)
! 	"DETAIL", // 287 (545)
! 	"DIRECT", // 288 (546)
! 	"DIRECT-ACCESS", // 289 (547)
! 	"DOWN", // 290 (548)
! 	"DUPLICATES", // 291 (549)
! 	"DYNAMIC", // 292 (550)
! 	"E", // 293 (551)
! 	"EBCDIC", // 294 (552)
! 	"EC", // 295 (553)
! 	"EGCS", // 296 (554)
! 	"ENCODING", // 297 (555)
! 	"ENTRY", // 298 (556)
! 	"ENVIRONMENT", // 299 (557)
! 	"EVERY", // 300 (558)
! 	"EXAMINE", // 301 (559)
! 	"EXHIBIT", // 302 (560)
! 	"EXP", // 303 (561)
! 	"EXP10", // 304 (562)
! 	"EXTEND", // 305 (563)
! 	"EXTERNAL", // 306 (564)
! 	"EXCEPTION-FILE", // 307 (565)
! 	"EXCEPTION-FILE-N", // 308 (566)
! 	"EXCEPTION-LOCATION", // 309 (567)
! 	"EXCEPTION-LOCATION-N", // 310 (568)
! 	"EXCEPTION-STATEMENT", // 311 (569)
! 	"EXCEPTION-STATUS", // 312 (570)
! 	"FACTORIAL", // 313 (571)
! 	"FALSE", // 314 (572)
! 	"FD", // 315 (573)
! 	"FILE-CONTROL", // 316 (574)
! 	"FILE", // 317 (575)
! 	"FILE-LIMIT", // 318 (576)
! 	"FINAL", // 319 (577)
! 	"FINALLY", // 320 (578)
! 	"FIND-STRING", // 321 (579)
! 	"FIRST", // 322 (580)
! 	"FIXED", // 323 (581)
! 	"FOOTING", // 324 (582)
! 	"FOR", // 325 (583)
! 	"FORMATTED-CURRENT-DATE", // 326 (584)
! 	"FORMATTED-DATE", // 327 (585)
! 	"FORMATTED-DATETIME", // 328 (586)
! 	"FORMATTED-TIME", // 329 (587)
! 	"FORM-OVERFLOW", // 330 (588)
! 	"FREE", // 331 (589)
! 	"FRACTION-PART", // 332 (590)
! 	"FROM", // 333 (591)
! 	"FUNCTION", // 334 (592)
! 	"GENERATE", // 335 (593)
! 	"GIVING", // 336 (594)
! 	"GLOBAL", // 337 (595)
! 	"GO", // 338 (596)
! 	"GROUP", // 339 (597)
! 	"HEADING", // 340 (598)
! 	"HEX", // 341 (599)
! 	"HEX-OF", // 342 (600)
! 	"HEX-TO-CHAR", // 343 (601)
! 	"HIGH-VALUES", // 344 (602)
! 	"HIGHEST-ALGEBRAIC", // 345 (603)
! 	"HOLD", // 346 (604)
! 	"IBM-360", // 347 (605)
! 	"IN", // 348 (606)
! 	"INCLUDE", // 349 (607)
! 	"INDEX", // 350 (608)
! 	"INDEXED", // 351 (609)
! 	"INDICATE", // 352 (610)
! 	"INITIAL", // 353 (611)
! 	"INITIATE", // 354 (612)
! 	"INPUT", // 355 (613)
! 	"INSTALLATION", // 356 (614)
! 	"INTERFACE", // 357 (615)
! 	"INTEGER", // 358 (616)
! 	"INTEGER-OF-BOOLEAN", // 359 (617)
! 	"INTEGER-OF-DATE", // 360 (618)
! 	"INTEGER-OF-DAY", // 361 (619)
! 	"INTEGER-OF-FORMATTED-DATE", // 362 (620)
! 	"INTEGER-PART", // 363 (621)
! 	"INTO", // 364 (622)
! 	"INTRINSIC", // 365 (623)
! 	"INVOKE", // 366 (624)
! 	"I-O", // 367 (625)
! 	"I-O-CONTROL", // 368 (626)
! 	"IS", // 369 (627)
! 	"ISNT", // 370 (628)
! 	"KANJI", // 371 (629)
! 	"KEY", // 372 (630)
! 	"LABEL", // 373 (631)
! 	"LAST", // 374 (632)
! 	"LEADING", // 375 (633)
! 	"LEFT", // 376 (634)
! 	"LENGTH", // 377 (635)
! 	"LENGTH-OF", // 378 (636)
! 	"LIMIT", // 379 (637)
! 	"LIMITS", // 380 (638)
! 	"LINE", // 381 (639)
! 	"LINES", // 382 (640)
! 	"LINE-COUNTER", // 383 (641)
! 	"LINAGE", // 384 (642)
! 	"LINKAGE", // 385 (643)
! 	"LOCALE", // 386 (644)
! 	"LOCALE-COMPARE", // 387 (645)
! 	"LOCALE-DATE", // 388 (646)
! 	"LOCALE-TIME", // 389 (647)
! 	"LOCALE-TIME-FROM-SECONDS", // 390 (648)
! 	"LOCAL-STORAGE", // 391 (649)
! 	"LOCATION", // 392 (650)
! 	"LOCK", // 393 (651)
! 	"LOCK-ON", // 394 (652)
! 	"LOG", // 395 (653)
! 	"LOG10", // 396 (654)
! 	"LOWER-CASE", // 397 (655)
! 	"LOW-VALUES", // 398 (656)
! 	"LOWEST-ALGEBRAIC", // 399 (657)
! 	"LPAREN", // 400 (658)
! 	"MANUAL", // 401 (659)
! 	"MAXX", // 402 (660)
! 	"MEAN", // 403 (661)
! 	"MEDIAN", // 404 (662)
! 	"MIDRANGE", // 405 (663)
! 	"MINN", // 406 (664)
! 	"MULTIPLE", // 407 (665)
! 	"MOD", // 408 (666)
! 	"MODE", // 409 (667)
! 	"MODULE-NAME", // 410 (668)
! 	"NAMED", // 411 (669)
! 	"NAMESPACE", // 412 (670)
! 	"NAMESPACE-PREFIX", // 413 (671)
! 	"NAT", // 414 (672)
! 	"NATIONAL", // 415 (673)
! 	"NATIONAL-EDITED", // 416 (674)
! 	"NATIONAL-OF", // 417 (675)
! 	"NATIVE", // 418 (676)
! 	"NESTED", // 419 (677)
! 	"NEXT", // 420 (678)
! 	"NO", // 421 (679)
! 	"NOTE", // 422 (680)
! 	"NULLS", // 423 (681)
! 	"NULLPTR", // 424 (682)
! 	"NUMERIC", // 425 (683)
! 	"NUMERIC-EDITED", // 426 (684)
! 	"NUMVAL", // 427 (685)
! 	"NUMVAL-C", // 428 (686)
! 	"NUMVAL-F", // 429 (687)
! 	"OCCURS", // 430 (688)
! 	"OF", // 431 (689)
! 	"OFF", // 432 (690)
! 	"OMITTED", // 433 (691)
! 	"ON", // 434 (692)
! 	"ONLY", // 435 (693)
! 	"OPTIONAL", // 436 (694)
! 	"OPTIONS", // 437 (695)
! 	"ORD", // 438 (696)
! 	"ORDER", // 439 (697)
! 	"ORD-MAX", // 440 (698)
! 	"ORD-MIN", // 441 (699)
! 	"ORGANIZATION", // 442 (700)
! 	"OTHER", // 443 (701)
! 	"OTHERWISE", // 444 (702)
! 	"OUTPUT", // 445 (703)
! 	"PACKED-DECIMAL", // 446 (704)
! 	"PADDING", // 447 (705)
! 	"PAGE", // 448 (706)
! 	"PAGE-COUNTER", // 449 (707)
! 	"PF", // 450 (708)
! 	"PH", // 451 (709)
! 	"PI", // 452 (710)
! 	"PIC", // 453 (711)
! 	"PICTURE", // 454 (712)
! 	"PLUS", // 455 (713)
! 	"PRESENT-VALUE", // 456 (714)
! 	"PRINT-SWITCH", // 457 (715)
! 	"PROCEDURE", // 458 (716)
! 	"PROCEDURES", // 459 (717)
! 	"PROCEED", // 460 (718)
! 	"PROCESSING", // 461 (719)
! 	"PROGRAM-ID", // 462 (720)
! 	"PROGRAM", // 463 (721)
! 	"PROPERTY", // 464 (722)
! 	"PROTOTYPE", // 465 (723)
! 	"PSEUDOTEXT", // 466 (724)
! 	"QUOTES", // 467 (725)
! 	"RANDOM", // 468 (726)
! 	"RANDOM-SEED", // 469 (727)
! 	"RANGE", // 470 (728)
! 	"RAISE", // 471 (729)
! 	"RAISING", // 472 (730)
! 	"RD", // 473 (731)
! 	"RECORD", // 474 (732)
! 	"RECORDING", // 475 (733)
! 	"RECORDS", // 476 (734)
! 	"RECURSIVE", // 477 (735)
! 	"REDEFINES", // 478 (736)
! 	"REEL", // 479 (737)
! 	"REFERENCE", // 480 (738)
! 	"RELATIVE", // 481 (739)
! 	"REM", // 482 (740)
! 	"REMAINDER", // 483 (741)
! 	"REMARKS", // 484 (742)
! 	"REMOVAL", // 485 (743)
! 	"RENAMES", // 486 (744)
! 	"REPLACE", // 487 (745)
! 	"REPLACING", // 488 (746)
! 	"REPORT", // 489 (747)
! 	"REPORTING", // 490 (748)
! 	"REPORTS", // 491 (749)
! 	"REPOSITORY", // 492 (750)
! 	"RERUN", // 493 (751)
! 	"RESERVE", // 494 (752)
! 	"RESTRICTED", // 495 (753)
! 	"RESUME", // 496 (754)
! 	"RETRY", // 497 (755)
! 	"REVERSE", // 498 (756)
! 	"REVERSED", // 499 (757)
! 	"REWIND", // 500 (758)
! 	"RF", // 501 (759)
! 	"RH", // 502 (760)
! 	"RIGHT", // 503 (761)
! 	"ROUNDED", // 504 (762)
! 	"RUN", // 505 (763)
! 	"SAME", // 506 (764)
! 	"SCREEN", // 507 (765)
! 	"SD", // 508 (766)
! 	"SECONDS-FROM-FORMATTED-TIME", // 509 (767)
! 	"SECONDS-PAST-MIDNIGHT", // 510 (768)
! 	"SECURITY", // 511 (769)
! 	"SEPARATE", // 512 (770)
! 	"SEQUENCE", // 513 (771)
! 	"SEQUENTIAL", // 514 (772)
! 	"SHARING", // 515 (773)
! 	"SIMPLE-EXIT", // 516 (774)
! 	"SIGN", // 517 (775)
! 	"SIN", // 518 (776)
! 	"SIZE", // 519 (777)
! 	"SMALLEST-ALGEBRAIC", // 520 (778)
! 	"SOURCE", // 521 (779)
! 	"SOURCE-COMPUTER", // 522 (780)
! 	"SPECIAL-NAMES", // 523 (781)
! 	"SQRT", // 524 (782)
! 	"STACK", // 525 (783)
! 	"STANDARD", // 526 (784)
! 	"STANDARD-1", // 527 (785)
! 	"STANDARD-DEVIATION", // 528 (786)
! 	"STANDARD-COMPARE", // 529 (787)
! 	"STATUS", // 530 (788)
! 	"STRONG", // 531 (789)
! 	"SUBSTITUTE", // 532 (790)
! 	"SUM", // 533 (791)
! 	"SYMBOL", // 534 (792)
! 	"SYMBOLIC", // 535 (793)
! 	"SYNCHRONIZED", // 536 (794)
! 	"TALLYING", // 537 (795)
! 	"TAN", // 538 (796)
! 	"TERMINATE", // 539 (797)
! 	"TEST", // 540 (798)
! 	"TEST-DATE-YYYYMMDD", // 541 (799)
! 	"TEST-DAY-YYYYDDD", // 542 (800)
! 	"TEST-FORMATTED-DATETIME", // 543 (801)
! 	"TEST-NUMVAL", // 544 (802)
! 	"TEST-NUMVAL-C", // 545 (803)
! 	"TEST-NUMVAL-F", // 546 (804)
! 	"THAN", // 547 (805)
! 	"TIME", // 548 (806)
! 	"TIMES", // 549 (807)
! 	"TO", // 550 (808)
! 	"TOP", // 551 (809)
! 	"TOP-LEVEL", // 552 (810)
! 	"TRACKS", // 553 (811)
! 	"TRACK-AREA", // 554 (812)
! 	"TRAILING", // 555 (813)
! 	"TRANSFORM", // 556 (814)
! 	"TRIM", // 557 (815)
! 	"TRUE", // 558 (816)
! 	"TRY", // 559 (817)
! 	"TURN", // 560 (818)
! 	"TYPE", // 561 (819)
! 	"TYPEDEF", // 562 (820)
! 	"ULENGTH", // 563 (821)
! 	"UNBOUNDED", // 564 (822)
! 	"UNIT", // 565 (823)
! 	"UNITS", // 566 (824)
! 	"UNIT-RECORD", // 567 (825)
! 	"UNTIL", // 568 (826)
! 	"UP", // 569 (827)
! 	"UPON", // 570 (828)
! 	"UPOS", // 571 (829)
! 	"UPPER-CASE", // 572 (830)
! 	"USAGE", // 573 (831)
! 	"USING", // 574 (832)
! 	"USUBSTR", // 575 (833)
! 	"USUPPLEMENTARY", // 576 (834)
! 	"UTILITY", // 577 (835)
! 	"UUID4", // 578 (836)
! 	"UVALID", // 579 (837)
! 	"UWIDTH", // 580 (838)
! 	"VALIDATING", // 581 (839)
! 	"VALUE", // 582 (840)
! 	"VARIANCE", // 583 (841)
! 	"VARYING", // 584 (842)
! 	"VOLATILE", // 585 (843)
! 	"WHEN-COMPILED", // 586 (844)
! 	"WITH", // 587 (845)
! 	"WORKING-STORAGE", // 588 (846)
! 	"YEAR-TO-YYYY", // 589 (847)
! 	"YYYYDDD", // 590 (848)
! 	"YYYYMMDD", // 591 (849)
! 	"ARITHMETIC", // 592 (850)
! 	"ATTRIBUTE", // 593 (851)
! 	"AUTO", // 594 (852)
! 	"AUTOMATIC", // 595 (853)
! 	"AWAY-FROM-ZERO", // 596 (854)
! 	"BACKGROUND-COLOR", // 597 (855)
! 	"BELL", // 598 (856)
! 	"BINARY-ENCODING", // 599 (857)
! 	"BLINK", // 600 (858)
! 	"CAPACITY", // 601 (859)
! 	"CENTER", // 602 (860)
! 	"CLASSIFICATION", // 603 (861)
! 	"CYCLE", // 604 (862)
! 	"DECIMAL-ENCODING", // 605 (863)
! 	"ENTRY-CONVENTION", // 606 (864)
! 	"EOL", // 607 (865)
! 	"EOS", // 608 (866)
! 	"ERASE", // 609 (867)
! 	"EXPANDS", // 610 (868)
! 	"FLOAT-BINARY", // 611 (869)
! 	"FLOAT-DECIMAL", // 612 (870)
! 	"FOREGROUND-COLOR", // 613 (871)
! 	"FOREVER", // 614 (872)
! 	"FULL", // 615 (873)
! 	"HIGHLIGHT", // 616 (874)
! 	"HIGH-ORDER-LEFT", // 617 (875)
! 	"HIGH-ORDER-RIGHT", // 618 (876)
! 	"IGNORING", // 619 (877)
! 	"IMPLEMENTS", // 620 (878)
! 	"INITIALIZED", // 621 (879)
! 	"INTERMEDIATE", // 622 (880)
! 	"LC-ALL", // 623 (881)
! 	"LC-COLLATE", // 624 (882)
! 	"LC-CTYPE", // 625 (883)
! 	"LC-MESSAGES", // 626 (884)
! 	"LC-MONETARY", // 627 (885)
! 	"LC-NUMERIC", // 628 (886)
! 	"LC-TIME", // 629 (887)
! 	"LOWLIGHT", // 630 (888)
! 	"NEAREST-AWAY-FROM-ZERO", // 631 (889)
! 	"NEAREST-EVEN", // 632 (890)
! 	"NEAREST-TOWARD-ZERO", // 633 (891)
! 	"NONE", // 634 (892)
! 	"NORMAL", // 635 (893)
! 	"NUMBERS", // 636 (894)
! 	"PREFIXED", // 637 (895)
! 	"PREVIOUS", // 638 (896)
! 	"PROHIBITED", // 639 (897)
! 	"RELATION", // 640 (898)
! 	"REQUIRED", // 641 (899)
! 	"REVERSE-VIDEO", // 642 (900)
! 	"ROUNDING", // 643 (901)
! 	"SECONDS", // 644 (902)
! 	"SECURE", // 645 (903)
! 	"SHORT", // 646 (904)
! 	"SIGNED", // 647 (905)
! 	"STANDARD-BINARY", // 648 (906)
! 	"STANDARD-DECIMAL", // 649 (907)
! 	"STATEMENT", // 650 (908)
! 	"STEP", // 651 (909)
! 	"STRUCTURE", // 652 (910)
! 	"TOWARD-GREATER", // 653 (911)
! 	"TOWARD-LESSER", // 654 (912)
! 	"TRUNCATION", // 655 (913)
! 	"UCS-4", // 656 (914)
! 	"UNDERLINE", // 657 (915)
! 	"UNSIGNED", // 658 (916)
! 	"UTF-16", // 659 (917)
! 	"UTF-8", // 660 (918)
! 	"XML-DECLARATION", // 661 (919)
! 	"XMLGENERATE", // 662 (920)
! 	"XMLPARSE", // 663 (921)
! 	"ADDRESS", // 664 (922)
! 	"END-ACCEPT", // 665 (923)
! 	"END-ADD", // 666 (924)
! 	"END-CALL", // 667 (925)
! 	"END-COMPUTE", // 668 (926)
! 	"END-DELETE", // 669 (927)
! 	"END-DISPLAY", // 670 (928)
! 	"END-DIVIDE", // 671 (929)
! 	"END-EVALUATE", // 672 (930)
! 	"END-MULTIPLY", // 673 (931)
! 	"END-PERFORM", // 674 (932)
! 	"END-READ", // 675 (933)
! 	"END-RETURN", // 676 (934)
! 	"END-REWRITE", // 677 (935)
! 	"END-SEARCH", // 678 (936)
! 	"END-START", // 679 (937)
! 	"END-STRING", // 680 (938)
! 	"END-SUBTRACT", // 681 (939)
! 	"END-UNSTRING", // 682 (940)
! 	"END-WRITE", // 683 (941)
! 	"END-XML", // 684 (942)
! 	"END-IF", // 685 (943)
! 	"ATTRIBUTES", // 686 (944)
! 	"ELEMENT", // 687 (945)
! 	"NONNUMERIC", // 688 (946)
! 	"THRU", // 689 (947)
! 	"OR", // 690 (948)
! 	"AND", // 691 (949)
! 	"NOT", // 692 (950)
! 	"NE", // 693 (951)
! 	"LE", // 694 (952)
! 	"GE", // 695 (953)
! 	"POW", // 696 (954)
! 	"NEG", // 697 (955)
  };
--- 1,1475 ----
  // generated by token_names.h.gen
  tokens = {
! 	{ "identification", IDENTIFICATION }, // 258
! 	{ "identification division", IDENTIFICATION_DIV }, // 259
! 	{ "environment", ENVIRONMENT }, // 260
! 	{ "environment division", ENVIRONMENT_DIV }, // 261
! 	{ "data", DATA }, // 262
! 	{ "data division", DATA_DIV }, // 263
! 	{ "procedure", PROCEDURE }, // 264
! 	{ "procedure division", PROCEDURE_DIV }, // 265
! 	{ "file section", FILE_SECT }, // 266
! 	{ "input_output section", INPUT_OUTPUT_SECT }, // 267
! 	{ "linkage section", LINKAGE_SECT }, // 268
! 	{ "local_storage section", LOCAL_STORAGE_SECT }, // 269
! 	{ "working_storage section", WORKING_STORAGE_SECT }, // 270
! 	{ "object-computer", OBJECT_COMPUTER }, // 271
! 	{ "display-of", DISPLAY_OF }, // 272
! 	{ "end-function", END_FUNCTION }, // 273
! 	{ "end-program", END_PROGRAM }, // 274
! 	{ "end-subprogram", END_SUBPROGRAM }, // 275
! 	{ "justified", JUSTIFIED }, // 276
! 	{ "returning", RETURNING }, // 277
! 	{ "no-condition", NO_CONDITION }, // 278
! 	{ "alnum", ALNUM }, // 279
! 	{ "alphed", ALPHED }, // 280
! 	{ "error", ERROR }, // 281
! 	{ "exception", EXCEPTION }, // 282
! 	{ "size-error", SIZE_ERROR }, // 283
! 	{ "exception-name", EXCEPTION_NAME }, // 284
! 	{ "level", LEVEL }, // 285
! 	{ "level66", LEVEL66 }, // 286
! 	{ "level78", LEVEL78 }, // 287
! 	{ "level88", LEVEL88 }, // 288
! 	{ "class-name", CLASS_NAME }, // 289
! 	{ "name", NAME }, // 290
! 	{ "name88", NAME88 }, // 291
! 	{ "nume", NUME }, // 292
! 	{ "numed", NUMED }, // 293
! 	{ "numed-cr", NUMED_CR }, // 294
! 	{ "numed-db", NUMED_DB }, // 295
! 	{ "ninedot", NINEDOT }, // 296
! 	{ "nines", NINES }, // 297
! 	{ "ninev", NINEV }, // 298
! 	{ "pic-p", PIC_P }, // 299
! 	{ "ones", ONES }, // 300
! 	{ "spaces", SPACES }, // 301
! 	{ "space", SPACES }, // 301
! 	{ "-eq", _EQ }, // 302
! 	{ "literal", LITERAL }, // 303
! 	{ "end", END }, // 304
! 	{ "eop", EOP }, // 305
! 	{ "-filename", _FILENAME }, // 306
! 	{ "invalid", INVALID }, // 307
! 	{ "number", NUMBER }, // 308
! 	{ "negative", NEGATIVE }, // 309
! 	{ "numstr", NUMSTR }, // 310
! 	{ "overflow", OVERFLOW_kw }, // 311
! 	{ "-binary-integer", _BINARY_INTEGER }, // 312
! 	{ "computational", COMPUTATIONAL }, // 313
! 	{ "perform", PERFORM }, // 314
! 	{ "backward", BACKWARD }, // 315
! 	{ "positive", POSITIVE }, // 316
! 	{ "pointer", POINTER }, // 317
! 	{ "process", PROCESS }, // 318
! 	{ "section", SECTION }, // 319
! 	{ "standard-alphabet", STANDARD_ALPHABET }, // 320
! 	{ "switch", SWITCH }, // 321
! 	{ "upsi", UPSI }, // 322
! 	{ "zero", ZERO }, // 323
! 	{ "zeros", ZERO }, // 323
! 	{ "zeroes", ZERO }, // 323
! 	{ "sysin", SYSIN }, // 324
! 	{ "sysipt", SYSIPT }, // 325
! 	{ "sysout", SYSOUT }, // 326
! 	{ "syslist", SYSLIST }, // 327
! 	{ "syslst", SYSLST }, // 328
! 	{ "syspunch", SYSPUNCH }, // 329
! 	{ "syspch", SYSPCH }, // 330
! 	{ "console", CONSOLE }, // 331
! 	{ "c01", C01 }, // 332
! 	{ "c02", C02 }, // 333
! 	{ "c03", C03 }, // 334
! 	{ "c04", C04 }, // 335
! 	{ "c05", C05 }, // 336
! 	{ "c06", C06 }, // 337
! 	{ "c07", C07 }, // 338
! 	{ "c08", C08 }, // 339
! 	{ "c09", C09 }, // 340
! 	{ "c10", C10 }, // 341
! 	{ "c11", C11 }, // 342
! 	{ "c12", C12 }, // 343
! 	{ "csp", CSP }, // 344
! 	{ "s01", S01 }, // 345
! 	{ "s02", S02 }, // 346
! 	{ "s03", S03 }, // 347
! 	{ "s04", S04 }, // 348
! 	{ "s05", S05 }, // 349
! 	{ "afp-5a", AFP_5A }, // 350
! 	{ "stdin", STDIN }, // 351
! 	{ "stdout", STDOUT }, // 352
! 	{ "stderr", STDERR }, // 353
! 	{ "list", LIST }, // 354
! 	{ "map", MAP }, // 355
! 	{ "nolist", NOLIST }, // 356
! 	{ "nomap", NOMAP }, // 357
! 	{ "nosource", NOSOURCE }, // 358
! 	{ "might-be", MIGHT_BE }, // 359
! 	{ "function-udf", FUNCTION_UDF }, // 360
! 	{ "function-udf-0", FUNCTION_UDF_0 }, // 361
! 	{ "default", DEFAULT }, // 362
! 	{ "date-fmt", DATE_FMT }, // 363
! 	{ "time-fmt", TIME_FMT }, // 364
! 	{ "datetime-fmt", DATETIME_FMT }, // 365
! 	{ "flag-02", FLAG_02 }, // 366
! 	{ "move-to-same-name", MOVE_TO_SAME_NAME }, // 367
! 	{ "range-exception-for-index", RANGE_EXCEPTION_FOR_INDEX }, // 368
! 	{ "terminate-with-varying", TERMINATE_WITH_VARYING }, // 369
! 	{ "flag-14", FLAG_14 }, // 370
! 	{ "compile-time-arithmetic-expressions", COMPILE_TIME_ARITHMETIC_EXPRESSIONS }, // 371
! 	{ "i-o-declarative", I_O_DECLARATIVE }, // 372
! 	{ "i-o-status-04", I_O_STATUS_04 }, // 373
! 	{ "i-o-status-07", I_O_STATUS_07 }, // 374
! 	{ "num-ed-zero-figconst", NUM_ED_ZERO_FIGCONST }, // 375
! 	{ "read-previous", READ_PREVIOUS }, // 376
! 	{ "ref-mod-zero-length", REF_MOD_ZERO_LENGTH }, // 377
! 	{ "value-editing", VALUE_EDITING }, // 378
! 	{ "value-fig-con-length", VALUE_FIG_CON_LENGTH }, // 379
! 	{ "value-zero", VALUE_ZERO }, // 380
! 	{ "write-end-of-page", WRITE_END_OF_PAGE }, // 381
! 	{ "leap-second", LEAP_SECOND }, // 382
! 	{ "listing", LISTING }, // 383
! 	{ "propagate", PROPAGATE }, // 384
! 	{ "zero-length", ZERO_LENGTH }, // 385
! 	{ "b-and", B_AND }, // 386
! 	{ "b-not", B_NOT }, // 387
! 	{ "b-or", B_OR }, // 388
! 	{ "b-shift-l", B_SHIFT_L }, // 389
! 	{ "b-shift-lc", B_SHIFT_LC }, // 390
! 	{ "b-shift-r", B_SHIFT_R }, // 391
! 	{ "b-shift-rc", B_SHIFT_RC }, // 392
! 	{ "b-xor", B_XOR }, // 393
! 	{ "basis", BASIS }, // 394
! 	{ "cbl", CBL }, // 395
! 	{ "constant", CONSTANT }, // 396
! 	{ "copy", COPY }, // 397
! 	{ "defined", DEFINED }, // 398
! 	{ "enter", ENTER }, // 399
! 	{ "feature", FEATURE }, // 400
! 	{ "insertt", INSERTT }, // 401
! 	{ "lsub", LSUB }, // 402
! 	{ "parameter", PARAMETER_kw }, // 403
! 	{ "override", OVERRIDE }, // 404
! 	{ "ready", READY }, // 405
! 	{ "reset", RESET }, // 406
! 	{ "rsub", RSUB }, // 407
! 	{ "service-reload", SERVICE_RELOAD }, // 408
! 	{ "star-cbl", STAR_CBL }, // 409
! 	{ "subscript", SUBSCRIPT }, // 410
! 	{ "suppress", SUPPRESS }, // 411
! 	{ "trace", TRACE }, // 412
! 	{ "use", USE }, // 413
! 	{ "cobol-words", COBOL_WORDS }, // 414
! 	{ "equate", EQUATE }, // 415
! 	{ "undefine", UNDEFINE }, // 416
! 	{ "cdf-define", CDF_DEFINE }, // 417
! 	{ "cdf-display", CDF_DISPLAY }, // 418
! 	{ "cdf-if", CDF_IF }, // 419
! 	{ "cdf-else", CDF_ELSE }, // 420
! 	{ "cdf-end-if", CDF_END_IF }, // 421
! 	{ "cdf-evaluate", CDF_EVALUATE }, // 422
! 	{ "cdf-when", CDF_WHEN }, // 423
! 	{ "cdf-end-evaluate", CDF_END_EVALUATE }, // 424
! 	{ "call-convention", CALL_CONVENTION }, // 425
! 	{ "call-cobol", CALL_COBOL }, // 426
! 	{ "call-verbatim", CALL_VERBATIM }, // 427
! 	{ "cdf-push", CDF_PUSH }, // 428
! 	{ "cdf-pop", CDF_POP }, // 429
! 	{ "source-format", SOURCE_FORMAT }, // 430
! 	{ "if", IF }, // 431
! 	{ "then", THEN }, // 432
! 	{ "else", ELSE }, // 433
! 	{ "sentence", SENTENCE }, // 434
! 	{ "accept", ACCEPT }, // 435
! 	{ "add", ADD }, // 436
! 	{ "alter", ALTER }, // 437
! 	{ "call", CALL }, // 438
! 	{ "cancel", CANCEL }, // 439
! 	{ "close", CLOSE }, // 440
! 	{ "compute", COMPUTE }, // 441
! 	{ "continue", CONTINUE }, // 442
! 	{ "delete", DELETE }, // 443
! 	{ "display", DISPLAY }, // 444
! 	{ "divide", DIVIDE }, // 445
! 	{ "evaluate", EVALUATE }, // 446
! 	{ "exit", EXIT }, // 447
! 	{ "filler", FILLER_kw }, // 448
! 	{ "goback", GOBACK }, // 449
! 	{ "goto", GOTO }, // 450
! 	{ "initialize", INITIALIZE }, // 451
! 	{ "inspect", INSPECT }, // 452
! 	{ "merge", MERGE }, // 453
! 	{ "move", MOVE }, // 454
! 	{ "multiply", MULTIPLY }, // 455
! 	{ "open", OPEN }, // 456
! 	{ "paragraph", PARAGRAPH }, // 457
! 	{ "read", READ }, // 458
! 	{ "release", RELEASE }, // 459
! 	{ "return", RETURN }, // 460
! 	{ "rewrite", REWRITE }, // 461
! 	{ "search", SEARCH }, // 462
! 	{ "set", SET }, // 463
! 	{ "select", SELECT }, // 464
! 	{ "sort", SORT }, // 465
! 	{ "sort-merge", SORT_MERGE }, // 466
! 	{ "string", STRING_kw }, // 467
! 	{ "stop", STOP }, // 468
! 	{ "subtract", SUBTRACT }, // 469
! 	{ "start", START }, // 470
! 	{ "unstring", UNSTRING }, // 471
! 	{ "write", WRITE }, // 472
! 	{ "when", WHEN }, // 473
! 	{ "argument-number", ARGUMENT_NUMBER }, // 474
! 	{ "argument-value", ARGUMENT_VALUE }, // 475
! 	{ "environment-name", ENVIRONMENT_NAME }, // 476
! 	{ "environment-value", ENVIRONMENT_VALUE }, // 477
! 	{ "abs", ABS }, // 478
! 	{ "access", ACCESS }, // 479
! 	{ "acos", ACOS }, // 480
! 	{ "actual", ACTUAL }, // 481
! 	{ "advancing", ADVANCING }, // 482
! 	{ "after", AFTER }, // 483
! 	{ "all", ALL }, // 484
! 	{ "allocate", ALLOCATE }, // 485
! 	{ "alphabet", ALPHABET }, // 486
! 	{ "alphabetic", ALPHABETIC }, // 487
! 	{ "alphabetic-lower", ALPHABETIC_LOWER }, // 488
! 	{ "alphabetic-upper", ALPHABETIC_UPPER }, // 489
! 	{ "alphanumeric", ALPHANUMERIC }, // 490
! 	{ "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 491
! 	{ "also", ALSO }, // 492
! 	{ "alternate", ALTERNATE }, // 493
! 	{ "annuity", ANNUITY }, // 494
! 	{ "anum", ANUM }, // 495
! 	{ "any", ANY }, // 496
! 	{ "anycase", ANYCASE }, // 497
! 	{ "apply", APPLY }, // 498
! 	{ "are", ARE }, // 499
! 	{ "area", AREA }, // 500
! 	{ "areas", AREAS }, // 501
! 	{ "as", AS }, // 502
! 	{ "ascending", ASCENDING }, // 503
! 	{ "activating", ACTIVATING }, // 504
! 	{ "asin", ASIN }, // 505
! 	{ "assign", ASSIGN }, // 506
! 	{ "at", AT }, // 507
! 	{ "atan", ATAN }, // 508
! 	{ "based", BASED }, // 509
! 	{ "baseconvert", BASECONVERT }, // 510
! 	{ "before", BEFORE }, // 511
! 	{ "binary", BINARY }, // 512
! 	{ "bit", BIT }, // 513
! 	{ "bit-of", BIT_OF }, // 514
! 	{ "bit-to-char", BIT_TO_CHAR }, // 515
! 	{ "blank", BLANK }, // 516
! 	{ "block", BLOCK_kw }, // 517
! 	{ "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 518
! 	{ "bottom", BOTTOM }, // 519
! 	{ "by", BY }, // 520
! 	{ "byte", BYTE }, // 521
! 	{ "byte-length", BYTE_LENGTH }, // 522
! 	{ "cf", CF }, // 523
! 	{ "ch", CH }, // 524
! 	{ "changed", CHANGED }, // 525
! 	{ "char", CHAR }, // 526
! 	{ "char-national", CHAR_NATIONAL }, // 527
! 	{ "character", CHARACTER }, // 528
! 	{ "characters", CHARACTERS }, // 529
! 	{ "checking", CHECKING }, // 530
! 	{ "class", CLASS }, // 531
! 	{ "cobol", COBOL }, // 532
! 	{ "code", CODE }, // 533
! 	{ "code-set", CODESET }, // 534
! 	{ "collating", COLLATING }, // 535
! 	{ "column", COLUMN }, // 536
! 	{ "combined-datetime", COMBINED_DATETIME }, // 537
! 	{ "comma", COMMA }, // 538
! 	{ "command-line", COMMAND_LINE }, // 539
! 	{ "command-line-count", COMMAND_LINE_COUNT }, // 540
! 	{ "commit", COMMIT }, // 541
! 	{ "common", COMMON }, // 542
! 	{ "concat", CONCAT }, // 543
! 	{ "condition", CONDITION }, // 544
! 	{ "configuration", CONFIGURATION }, // 545
! 	{ "configuration section", CONFIGURATION_SECT }, // 546
! 	{ "contains", CONTAINS }, // 547
! 	{ "content", CONTENT }, // 548
! 	{ "control", CONTROL }, // 549
! 	{ "controls", CONTROLS }, // 550
! 	{ "convert", CONVERT }, // 551
! 	{ "converting", CONVERTING }, // 552
! 	{ "corresponding", CORRESPONDING }, // 553
! 	{ "cos", COS }, // 554
! 	{ "count", COUNT }, // 555
! 	{ "currency", CURRENCY }, // 556
! 	{ "current", CURRENT }, // 557
! 	{ "current-date", CURRENT_DATE }, // 558
! 	{ "date", DATE }, // 559
! 	{ "date-compiled", DATE_COMPILED }, // 560
! 	{ "date-of-integer", DATE_OF_INTEGER }, // 561
! 	{ "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 562
! 	{ "date-written", DATE_WRITTEN }, // 563
! 	{ "day", DAY }, // 564
! 	{ "day-of-integer", DAY_OF_INTEGER }, // 565
! 	{ "day-of-week", DAY_OF_WEEK }, // 566
! 	{ "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 567
! 	{ "dbcs", DBCS }, // 568
! 	{ "de", DE }, // 569
! 	{ "debugging", DEBUGGING }, // 570
! 	{ "decimal-point", DECIMAL_POINT }, // 571
! 	{ "declaratives", DECLARATIVES }, // 572
! 	{ "delimited", DELIMITED }, // 573
! 	{ "delimiter", DELIMITER }, // 574
! 	{ "depending", DEPENDING }, // 575
! 	{ "descending", DESCENDING }, // 576
! 	{ "detail", DETAIL }, // 577
! 	{ "direct", DIRECT }, // 578
! 	{ "direct-access", DIRECT_ACCESS }, // 579
! 	{ "division", DIVISION }, // 580
! 	{ "down", DOWN }, // 581
! 	{ "duplicates", DUPLICATES }, // 582
! 	{ "dynamic", DYNAMIC }, // 583
! 	{ "e", E }, // 584
! 	{ "ebcdic", EBCDIC }, // 585
! 	{ "ec", EC }, // 586
! 	{ "egcs", EGCS }, // 587
! 	{ "encoding", ENCODING }, // 588
! 	{ "entry", ENTRY }, // 589
! 	{ "every", EVERY }, // 590
! 	{ "examine", EXAMINE }, // 591
! 	{ "exhibit", EXHIBIT }, // 592
! 	{ "exp", EXP }, // 593
! 	{ "exp10", EXP10 }, // 594
! 	{ "extend", EXTEND }, // 595
! 	{ "external", EXTERNAL }, // 596
! 	{ "exception-file", EXCEPTION_FILE }, // 597
! 	{ "exception-file-n", EXCEPTION_FILE_N }, // 598
! 	{ "exception-location", EXCEPTION_LOCATION }, // 599
! 	{ "exception-location-n", EXCEPTION_LOCATION_N }, // 600
! 	{ "exception-statement", EXCEPTION_STATEMENT }, // 601
! 	{ "exception-status", EXCEPTION_STATUS }, // 602
! 	{ "factorial", FACTORIAL }, // 603
! 	{ "false", FALSE_kw }, // 604
! 	{ "fd", FD }, // 605
! 	{ "file-control", FILE_CONTROL }, // 606
! 	{ "file", FILE_KW }, // 607
! 	{ "file-limit", FILE_LIMIT }, // 608
! 	{ "final", FINAL }, // 609
! 	{ "finally", FINALLY }, // 610
! 	{ "find-string", FIND_STRING }, // 611
! 	{ "first", FIRST }, // 612
! 	{ "fixed", FIXED }, // 613
! 	{ "footing", FOOTING }, // 614
! 	{ "for", FOR }, // 615
! 	{ "formatted-current-date", FORMATTED_CURRENT_DATE }, // 616
! 	{ "formatted-date", FORMATTED_DATE }, // 617
! 	{ "formatted-datetime", FORMATTED_DATETIME }, // 618
! 	{ "formatted-time", FORMATTED_TIME }, // 619
! 	{ "form-overflow", FORM_OVERFLOW }, // 620
! 	{ "free", FREE }, // 621
! 	{ "fraction-part", FRACTION_PART }, // 622
! 	{ "from", FROM }, // 623
! 	{ "function", FUNCTION }, // 624
! 	{ "generate", GENERATE }, // 625
! 	{ "giving", GIVING }, // 626
! 	{ "global", GLOBAL }, // 627
! 	{ "go", GO }, // 628
! 	{ "group", GROUP }, // 629
! 	{ "heading", HEADING }, // 630
! 	{ "hex", HEX }, // 631
! 	{ "hex-of", HEX_OF }, // 632
! 	{ "hex-to-char", HEX_TO_CHAR }, // 633
! 	{ "high-values", HIGH_VALUES }, // 634
! 	{ "highest-algebraic", HIGHEST_ALGEBRAIC }, // 635
! 	{ "hold", HOLD }, // 636
! 	{ "ibm-360", IBM_360 }, // 637
! 	{ "in", IN }, // 638
! 	{ "include", INCLUDE }, // 639
! 	{ "index", INDEX }, // 640
! 	{ "indexed", INDEXED }, // 641
! 	{ "indicate", INDICATE }, // 642
! 	{ "initial", INITIAL_kw }, // 643
! 	{ "initiate", INITIATE }, // 644
! 	{ "input", INPUT }, // 645
! 	{ "installation", INSTALLATION }, // 646
! 	{ "interface", INTERFACE }, // 647
! 	{ "integer", INTEGER }, // 648
! 	{ "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 649
! 	{ "integer-of-date", INTEGER_OF_DATE }, // 650
! 	{ "integer-of-day", INTEGER_OF_DAY }, // 651
! 	{ "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 652
! 	{ "integer-part", INTEGER_PART }, // 653
! 	{ "into", INTO }, // 654
! 	{ "intrinsic", INTRINSIC }, // 655
! 	{ "invoke", INVOKE }, // 656
! 	{ "i-o", IO }, // 657
! 	{ "i-o-control", IO_CONTROL }, // 658
! 	{ "is", IS }, // 659
! 	{ "isnt", ISNT }, // 660
! 	{ "kanji", KANJI }, // 661
! 	{ "key", KEY }, // 662
! 	{ "label", LABEL }, // 663
! 	{ "last", LAST }, // 664
! 	{ "leading", LEADING }, // 665
! 	{ "left", LEFT }, // 666
! 	{ "length", LENGTH }, // 667
! 	{ "length-of", LENGTH_OF }, // 668
! 	{ "limit", LIMIT }, // 669
! 	{ "limits", LIMITS }, // 670
! 	{ "line", LINE }, // 671
! 	{ "lines", LINES }, // 672
! 	{ "line-counter", LINE_COUNTER }, // 673
! 	{ "linage", LINAGE }, // 674
! 	{ "linkage", LINKAGE }, // 675
! 	{ "locale", LOCALE }, // 676
! 	{ "locale-compare", LOCALE_COMPARE }, // 677
! 	{ "locale-date", LOCALE_DATE }, // 678
! 	{ "locale-time", LOCALE_TIME }, // 679
! 	{ "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 680
! 	{ "local-storage", LOCAL_STORAGE }, // 681
! 	{ "location", LOCATION }, // 682
! 	{ "lock", LOCK }, // 683
! 	{ "lock-on", LOCK_ON }, // 684
! 	{ "log", LOG }, // 685
! 	{ "log10", LOG10 }, // 686
! 	{ "lower-case", LOWER_CASE }, // 687
! 	{ "low-values", LOW_VALUES }, // 688
! 	{ "lowest-algebraic", LOWEST_ALGEBRAIC }, // 689
! 	{ "lparen", LPAREN }, // 690
! 	{ "manual", MANUAL }, // 691
! 	{ "maxx", MAXX }, // 692
! 	{ "mean", MEAN }, // 693
! 	{ "median", MEDIAN }, // 694
! 	{ "midrange", MIDRANGE }, // 695
! 	{ "minn", MINN }, // 696
! 	{ "multiple", MULTIPLE }, // 697
! 	{ "mod", MOD }, // 698
! 	{ "mode", MODE }, // 699
! 	{ "module-name", MODULE_NAME }, // 700
! 	{ "named", NAMED }, // 701
! 	{ "namespace", NAMESPACE }, // 702
! 	{ "namespace-prefix", NAMESPACE_PREFIX }, // 703
! 	{ "nat", NAT }, // 704
! 	{ "national", NATIONAL }, // 705
! 	{ "national-edited", NATIONAL_EDITED }, // 706
! 	{ "national-of", NATIONAL_OF }, // 707
! 	{ "native", NATIVE }, // 708
! 	{ "nested", NESTED }, // 709
! 	{ "next", NEXT }, // 710
! 	{ "no", NO }, // 711
! 	{ "note", NOTE }, // 712
! 	{ "nulls", NULLS }, // 713
! 	{ "null", NULLS }, // 713
! 	{ "nullptr", NULLPTR }, // 714
! 	{ "numeric", NUMERIC }, // 715
! 	{ "numeric-edited", NUMERIC_EDITED }, // 716
! 	{ "numval", NUMVAL }, // 717
! 	{ "numval-c", NUMVAL_C }, // 718
! 	{ "numval-f", NUMVAL_F }, // 719
! 	{ "occurs", OCCURS }, // 720
! 	{ "of", OF }, // 721
! 	{ "off", OFF }, // 722
! 	{ "omitted", OMITTED }, // 723
! 	{ "on", ON }, // 724
! 	{ "only", ONLY }, // 725
! 	{ "optional", OPTIONAL }, // 726
! 	{ "options", OPTIONS }, // 727
! 	{ "ord", ORD }, // 728
! 	{ "order", ORDER }, // 729
! 	{ "ord-max", ORD_MAX }, // 730
! 	{ "ord-min", ORD_MIN }, // 731
! 	{ "organization", ORGANIZATION }, // 732
! 	{ "other", OTHER }, // 733
! 	{ "otherwise", OTHERWISE }, // 734
! 	{ "output", OUTPUT }, // 735
! 	{ "packed-decimal", PACKED_DECIMAL }, // 736
! 	{ "padding", PADDING }, // 737
! 	{ "page", PAGE }, // 738
! 	{ "page-counter", PAGE_COUNTER }, // 739
! 	{ "pf", PF }, // 740
! 	{ "ph", PH }, // 741
! 	{ "pi", PI }, // 742
! 	{ "pic", PIC }, // 743
! 	{ "picture", PICTURE }, // 744
! 	{ "plus", PLUS }, // 745
! 	{ "present-value", PRESENT_VALUE }, // 746
! 	{ "print-switch", PRINT_SWITCH }, // 747
! 	{ "procedures", PROCEDURES }, // 748
! 	{ "proceed", PROCEED }, // 749
! 	{ "processing", PROCESSING }, // 750
! 	{ "program-id", PROGRAM_ID }, // 751
! 	{ "program", PROGRAM_kw }, // 752
! 	{ "property", PROPERTY }, // 753
! 	{ "prototype", PROTOTYPE }, // 754
! 	{ "pseudotext", PSEUDOTEXT }, // 755
! 	{ "quotes", QUOTES }, // 756
! 	{ "quote", QUOTES }, // 756
! 	{ "random", RANDOM }, // 757
! 	{ "random-seed", RANDOM_SEED }, // 758
! 	{ "range", RANGE }, // 759
! 	{ "raise", RAISE }, // 760
! 	{ "raising", RAISING }, // 761
! 	{ "rd", RD }, // 762
! 	{ "record", RECORD }, // 763
! 	{ "recording", RECORDING }, // 764
! 	{ "records", RECORDS }, // 765
! 	{ "recursive", RECURSIVE }, // 766
! 	{ "redefines", REDEFINES }, // 767
! 	{ "reel", REEL }, // 768
! 	{ "reference", REFERENCE }, // 769
! 	{ "relative", RELATIVE }, // 770
! 	{ "rem", REM }, // 771
! 	{ "remainder", REMAINDER }, // 772
! 	{ "remarks", REMARKS }, // 773
! 	{ "removal", REMOVAL }, // 774
! 	{ "renames", RENAMES }, // 775
! 	{ "replace", REPLACE }, // 776
! 	{ "replacing", REPLACING }, // 777
! 	{ "report", REPORT }, // 778
! 	{ "reporting", REPORTING }, // 779
! 	{ "reports", REPORTS }, // 780
! 	{ "repository", REPOSITORY }, // 781
! 	{ "rerun", RERUN }, // 782
! 	{ "reserve", RESERVE }, // 783
! 	{ "restricted", RESTRICTED }, // 784
! 	{ "resume", RESUME }, // 785
! 	{ "retry", RETRY }, // 786
! 	{ "reverse", REVERSE }, // 787
! 	{ "reversed", REVERSED }, // 788
! 	{ "rewind", REWIND }, // 789
! 	{ "rf", RF }, // 790
! 	{ "rh", RH }, // 791
! 	{ "right", RIGHT }, // 792
! 	{ "rounded", ROUNDED }, // 793
! 	{ "run", RUN }, // 794
! 	{ "same", SAME }, // 795
! 	{ "screen", SCREEN }, // 796
! 	{ "sd", SD }, // 797
! 	{ "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 798
! 	{ "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 799
! 	{ "security", SECURITY }, // 800
! 	{ "separate", SEPARATE }, // 801
! 	{ "sequence", SEQUENCE }, // 802
! 	{ "sequential", SEQUENTIAL }, // 803
! 	{ "sharing", SHARING }, // 804
! 	{ "simple-exit", SIMPLE_EXIT }, // 805
! 	{ "sign", SIGN }, // 806
! 	{ "sin", SIN }, // 807
! 	{ "size", SIZE }, // 808
! 	{ "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 809
! 	{ "source", SOURCE }, // 810
! 	{ "source-computer", SOURCE_COMPUTER }, // 811
! 	{ "special-names", SPECIAL_NAMES }, // 812
! 	{ "sqrt", SQRT }, // 813
! 	{ "stack", STACK }, // 814
! 	{ "standard", STANDARD }, // 815
! 	{ "standard-1", STANDARD_1 }, // 816
! 	{ "standard-2", STANDARD_2 }, // 817
! 	{ "standard-deviation", STANDARD_DEVIATION }, // 818
! 	{ "standard-compare", STANDARD_COMPARE }, // 819
! 	{ "status", STATUS }, // 820
! 	{ "strong", STRONG }, // 821
! 	{ "substitute", SUBSTITUTE }, // 822
! 	{ "sum", SUM }, // 823
! 	{ "symbol", SYMBOL }, // 824
! 	{ "symbolic", SYMBOLIC }, // 825
! 	{ "synchronized", SYNCHRONIZED }, // 826
! 	{ "tallying", TALLYING }, // 827
! 	{ "tan", TAN }, // 828
! 	{ "terminate", TERMINATE }, // 829
! 	{ "test", TEST }, // 830
! 	{ "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 831
! 	{ "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 832
! 	{ "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 833
! 	{ "test-numval", TEST_NUMVAL }, // 834
! 	{ "test-numval-c", TEST_NUMVAL_C }, // 835
! 	{ "test-numval-f", TEST_NUMVAL_F }, // 836
! 	{ "than", THAN }, // 837
! 	{ "time", TIME }, // 838
! 	{ "times", TIMES }, // 839
! 	{ "to", TO }, // 840
! 	{ "top", TOP }, // 841
! 	{ "top-level", TOP_LEVEL }, // 842
! 	{ "tracks", TRACKS }, // 843
! 	{ "track-area", TRACK_AREA }, // 844
! 	{ "trailing", TRAILING }, // 845
! 	{ "transform", TRANSFORM }, // 846
! 	{ "trim", TRIM }, // 847
! 	{ "true", TRUE_kw }, // 848
! 	{ "try", TRY }, // 849
! 	{ "turn", TURN }, // 850
! 	{ "type", TYPE }, // 851
! 	{ "typedef", TYPEDEF }, // 852
! 	{ "ulength", ULENGTH }, // 853
! 	{ "unbounded", UNBOUNDED }, // 854
! 	{ "unit", UNIT }, // 855
! 	{ "units", UNITS }, // 856
! 	{ "unit-record", UNIT_RECORD }, // 857
! 	{ "until", UNTIL }, // 858
! 	{ "up", UP }, // 859
! 	{ "upon", UPON }, // 860
! 	{ "upos", UPOS }, // 861
! 	{ "upper-case", UPPER_CASE }, // 862
! 	{ "usage", USAGE }, // 863
! 	{ "using", USING }, // 864
! 	{ "usubstr", USUBSTR }, // 865
! 	{ "usupplementary", USUPPLEMENTARY }, // 866
! 	{ "utility", UTILITY }, // 867
! 	{ "uuid4", UUID4 }, // 868
! 	{ "uvalid", UVALID }, // 869
! 	{ "uwidth", UWIDTH }, // 870
! 	{ "validating", VALIDATING }, // 871
! 	{ "value", VALUE }, // 872
! 	{ "variance", VARIANCE }, // 873
! 	{ "varying", VARYING }, // 874
! 	{ "volatile", VOLATILE }, // 875
! 	{ "when-compiled", WHEN_COMPILED }, // 876
! 	{ "with", WITH }, // 877
! 	{ "working-storage", WORKING_STORAGE }, // 878
! 	{ "year-to-yyyy", YEAR_TO_YYYY }, // 879
! 	{ "yyyyddd", YYYYDDD }, // 880
! 	{ "yyyymmdd", YYYYMMDD }, // 881
! 	{ "arithmetic", ARITHMETIC }, // 882
! 	{ "attribute", ATTRIBUTE }, // 883
! 	{ "auto", AUTO }, // 884
! 	{ "automatic", AUTOMATIC }, // 885
! 	{ "away-from-zero", AWAY_FROM_ZERO }, // 886
! 	{ "background-color", BACKGROUND_COLOR }, // 887
! 	{ "bell", BELL }, // 888
! 	{ "binary-encoding", BINARY_ENCODING }, // 889
! 	{ "blink", BLINK }, // 890
! 	{ "capacity", CAPACITY }, // 891
! 	{ "center", CENTER }, // 892
! 	{ "classification", CLASSIFICATION }, // 893
! 	{ "cycle", CYCLE }, // 894
! 	{ "decimal-encoding", DECIMAL_ENCODING }, // 895
! 	{ "entry-convention", ENTRY_CONVENTION }, // 896
! 	{ "eol", EOL }, // 897
! 	{ "eos", EOS }, // 898
! 	{ "erase", ERASE }, // 899
! 	{ "expands", EXPANDS }, // 900
! 	{ "float-binary", FLOAT_BINARY }, // 901
! 	{ "float-decimal", FLOAT_DECIMAL }, // 902
! 	{ "foreground-color", FOREGROUND_COLOR }, // 903
! 	{ "forever", FOREVER }, // 904
! 	{ "full", FULL }, // 905
! 	{ "highlight", HIGHLIGHT }, // 906
! 	{ "high-order-left", HIGH_ORDER_LEFT }, // 907
! 	{ "high-order-right", HIGH_ORDER_RIGHT }, // 908
! 	{ "ignoring", IGNORING }, // 909
! 	{ "implements", IMPLEMENTS }, // 910
! 	{ "initialized", INITIALIZED }, // 911
! 	{ "intermediate", INTERMEDIATE }, // 912
! 	{ "lc-all", LC_ALL_kw }, // 913
! 	{ "lc-collate", LC_COLLATE_kw }, // 914
! 	{ "lc-ctype", LC_CTYPE_kw }, // 915
! 	{ "lc-messages", LC_MESSAGES_kw }, // 916
! 	{ "lc-monetary", LC_MONETARY_kw }, // 917
! 	{ "lc-numeric", LC_NUMERIC_kw }, // 918
! 	{ "lc-time", LC_TIME_kw }, // 919
! 	{ "lowlight", LOWLIGHT }, // 920
! 	{ "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 921
! 	{ "nearest-even", NEAREST_EVEN }, // 922
! 	{ "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 923
! 	{ "none", NONE }, // 924
! 	{ "normal", NORMAL }, // 925
! 	{ "numbers", NUMBERS }, // 926
! 	{ "prefixed", PREFIXED }, // 927
! 	{ "previous", PREVIOUS }, // 928
! 	{ "prohibited", PROHIBITED }, // 929
! 	{ "relation", RELATION }, // 930
! 	{ "required", REQUIRED }, // 931
! 	{ "reverse-video", REVERSE_VIDEO }, // 932
! 	{ "rounding", ROUNDING }, // 933
! 	{ "seconds", SECONDS }, // 934
! 	{ "secure", SECURE }, // 935
! 	{ "short", SHORT }, // 936
! 	{ "signed", SIGNED_kw }, // 937
! 	{ "standard-binary", STANDARD_BINARY }, // 938
! 	{ "standard-decimal", STANDARD_DECIMAL }, // 939
! 	{ "statement", STATEMENT }, // 940
! 	{ "step", STEP }, // 941
! 	{ "structure", STRUCTURE }, // 942
! 	{ "toward-greater", TOWARD_GREATER }, // 943
! 	{ "toward-lesser", TOWARD_LESSER }, // 944
! 	{ "truncation", TRUNCATION }, // 945
! 	{ "ucs-4", UCS_4 }, // 946
! 	{ "underline", UNDERLINE }, // 947
! 	{ "unsigned", UNSIGNED_kw }, // 948
! 	{ "utf-16", UTF_16 }, // 949
! 	{ "utf-8", UTF_8 }, // 950
! 	{ "xml-declaration", XML_DECLARATION }, // 951
! 	{ "xmlgenerate", XMLGENERATE }, // 952
! 	{ "xmlparse", XMLPARSE }, // 953
! 	{ "address", ADDRESS }, // 954
! 	{ "end-accept", END_ACCEPT }, // 955
! 	{ "end-add", END_ADD }, // 956
! 	{ "end-call", END_CALL }, // 957
! 	{ "end-compute", END_COMPUTE }, // 958
! 	{ "end-delete", END_DELETE }, // 959
! 	{ "end-display", END_DISPLAY }, // 960
! 	{ "end-divide", END_DIVIDE }, // 961
! 	{ "end-evaluate", END_EVALUATE }, // 962
! 	{ "end-multiply", END_MULTIPLY }, // 963
! 	{ "end-perform", END_PERFORM }, // 964
! 	{ "end-read", END_READ }, // 965
! 	{ "end-return", END_RETURN }, // 966
! 	{ "end-rewrite", END_REWRITE }, // 967
! 	{ "end-search", END_SEARCH }, // 968
! 	{ "end-start", END_START }, // 969
! 	{ "end-string", END_STRING }, // 970
! 	{ "end-subtract", END_SUBTRACT }, // 971
! 	{ "end-unstring", END_UNSTRING }, // 972
! 	{ "end-write", END_WRITE }, // 973
! 	{ "end-xml", END_XML }, // 974
! 	{ "end-if", END_IF }, // 975
! 	{ "attributes", ATTRIBUTES }, // 976
! 	{ "element", ELEMENT }, // 977
! 	{ "nonnumeric", NONNUMERIC }, // 978
! 	{ "thru", THRU }, // 979
! 	{ "through", THRU }, // 979
! 	{ "or", OR }, // 980
! 	{ "xor", XOR }, // 981
! 	{ "and", AND }, // 982
! 	{ "not", NOT }, // 983
! 	{ "-ne", _NE }, // 984
! 	{ "-le", _LE }, // 985
! 	{ "-ge", _GE }, // 986
! 	{ "pow", POW }, // 987
! 	{ "neg", NEG }, // 988
  };
  
  // cppcheck-suppress useInitializationList
  token_names = {
  	"IDENTIFICATION", // 0 (258)
! 	"IDENTIFICATION", // 1 (259)
! 	"ENVIRONMENT", // 2 (260)
! 	"ENVIRONMENT", // 3 (261)
! 	"DATA", // 4 (262)
! 	"DATA", // 5 (263)
! 	"PROCEDURE", // 6 (264)
! 	"PROCEDURE", // 7 (265)
! 	"FILE", // 8 (266)
! 	"INPUT-OUTPUT", // 9 (267)
! 	"LINKAGE", // 10 (268)
! 	"LOCAL-STORAGE", // 11 (269)
! 	"WORKING-STORAGE", // 12 (270)
! 	"OBJECT-COMPUTER", // 13 (271)
! 	"DISPLAY-OF", // 14 (272)
! 	"END-FUNCTION", // 15 (273)
! 	"END-PROGRAM", // 16 (274)
! 	"END-SUBPROGRAM", // 17 (275)
! 	"JUSTIFIED", // 18 (276)
! 	"RETURNING", // 19 (277)
! 	"NO-CONDITION", // 20 (278)
! 	"ALNUM", // 21 (279)
! 	"ALPHED", // 22 (280)
! 	"ERROR", // 23 (281)
! 	"EXCEPTION", // 24 (282)
! 	"SIZE-ERROR", // 25 (283)
! 	"EXCEPTION-NAME", // 26 (284)
! 	"LEVEL", // 27 (285)
! 	"LEVEL66", // 28 (286)
! 	"LEVEL78", // 29 (287)
! 	"LEVEL88", // 30 (288)
! 	"CLASS-NAME", // 31 (289)
! 	"NAME", // 32 (290)
! 	"NAME88", // 33 (291)
! 	"NUME", // 34 (292)
! 	"NUMED", // 35 (293)
! 	"NUMED-CR", // 36 (294)
! 	"NUMED-DB", // 37 (295)
! 	"NINEDOT", // 38 (296)
! 	"NINES", // 39 (297)
! 	"NINEV", // 40 (298)
! 	"PIC-P", // 41 (299)
! 	"ONES", // 42 (300)
! 	"SPACES", // 43 (301)
! 	"-EQ", // 44 (302)
! 	"LITERAL", // 45 (303)
! 	"END", // 46 (304)
! 	"EOP", // 47 (305)
! 	"-FILENAME", // 48 (306)
! 	"INVALID", // 49 (307)
! 	"NUMBER", // 50 (308)
! 	"NEGATIVE", // 51 (309)
! 	"NUMSTR", // 52 (310)
! 	"OVERFLOW", // 53 (311)
! 	"-BINARY-INTEGER", // 54 (312)
! 	"COMPUTATIONAL", // 55 (313)
! 	"PERFORM", // 56 (314)
! 	"BACKWARD", // 57 (315)
! 	"POSITIVE", // 58 (316)
! 	"POINTER", // 59 (317)
! 	"PROCESS", // 60 (318)
! 	"SECTION", // 61 (319)
! 	"STANDARD-ALPHABET", // 62 (320)
! 	"SWITCH", // 63 (321)
! 	"UPSI", // 64 (322)
! 	"ZERO", // 65 (323)
! 	"SYSIN", // 66 (324)
! 	"SYSIPT", // 67 (325)
! 	"SYSOUT", // 68 (326)
! 	"SYSLIST", // 69 (327)
! 	"SYSLST", // 70 (328)
! 	"SYSPUNCH", // 71 (329)
! 	"SYSPCH", // 72 (330)
! 	"CONSOLE", // 73 (331)
! 	"C01", // 74 (332)
! 	"C02", // 75 (333)
! 	"C03", // 76 (334)
! 	"C04", // 77 (335)
! 	"C05", // 78 (336)
! 	"C06", // 79 (337)
! 	"C07", // 80 (338)
! 	"C08", // 81 (339)
! 	"C09", // 82 (340)
! 	"C10", // 83 (341)
! 	"C11", // 84 (342)
! 	"C12", // 85 (343)
! 	"CSP", // 86 (344)
! 	"S01", // 87 (345)
! 	"S02", // 88 (346)
! 	"S03", // 89 (347)
! 	"S04", // 90 (348)
! 	"S05", // 91 (349)
! 	"AFP-5A", // 92 (350)
! 	"STDIN", // 93 (351)
! 	"STDOUT", // 94 (352)
! 	"STDERR", // 95 (353)
! 	"LIST", // 96 (354)
! 	"MAP", // 97 (355)
! 	"NOLIST", // 98 (356)
! 	"NOMAP", // 99 (357)
! 	"NOSOURCE", // 100 (358)
! 	"MIGHT-BE", // 101 (359)
! 	"FUNCTION-UDF", // 102 (360)
! 	"FUNCTION-UDF-0", // 103 (361)
! 	"DEFAULT", // 104 (362)
! 	"DATE-FMT", // 105 (363)
! 	"TIME-FMT", // 106 (364)
! 	"DATETIME-FMT", // 107 (365)
! 	"FLAG-02", // 108 (366)
! 	"MOVE-TO-SAME-NAME", // 109 (367)
! 	"RANGE-EXCEPTION-FOR-INDEX", // 110 (368)
! 	"TERMINATE-WITH-VARYING", // 111 (369)
! 	"FLAG-14", // 112 (370)
! 	"COMPILE-TIME-ARITHMETIC-EXPRESSIONS", // 113 (371)
! 	"I-O-DECLARATIVE", // 114 (372)
! 	"I-O-STATUS-04", // 115 (373)
! 	"I-O-STATUS-07", // 116 (374)
! 	"NUM-ED-ZERO-FIGCONST", // 117 (375)
! 	"READ-PREVIOUS", // 118 (376)
! 	"REF-MOD-ZERO-LENGTH", // 119 (377)
! 	"VALUE-EDITING", // 120 (378)
! 	"VALUE-FIG-CON-LENGTH", // 121 (379)
! 	"VALUE-ZERO", // 122 (380)
! 	"WRITE-END-OF-PAGE", // 123 (381)
! 	"LEAP-SECOND", // 124 (382)
! 	"LISTING", // 125 (383)
! 	"PROPAGATE", // 126 (384)
! 	"ZERO-LENGTH", // 127 (385)
! 	"B-AND", // 128 (386)
! 	"B-NOT", // 129 (387)
! 	"B-OR", // 130 (388)
! 	"B-SHIFT-L", // 131 (389)
! 	"B-SHIFT-LC", // 132 (390)
! 	"B-SHIFT-R", // 133 (391)
! 	"B-SHIFT-RC", // 134 (392)
! 	"B-XOR", // 135 (393)
! 	"BASIS", // 136 (394)
! 	"CBL", // 137 (395)
! 	"CONSTANT", // 138 (396)
! 	"COPY", // 139 (397)
! 	"DEFINED", // 140 (398)
! 	"ENTER", // 141 (399)
! 	"FEATURE", // 142 (400)
! 	"INSERTT", // 143 (401)
! 	"LSUB", // 144 (402)
! 	"PARAMETER", // 145 (403)
! 	"OVERRIDE", // 146 (404)
! 	"READY", // 147 (405)
! 	"RESET", // 148 (406)
! 	"RSUB", // 149 (407)
! 	"SERVICE-RELOAD", // 150 (408)
! 	"STAR-CBL", // 151 (409)
! 	"SUBSCRIPT", // 152 (410)
! 	"SUPPRESS", // 153 (411)
! 	"TRACE", // 154 (412)
! 	"USE", // 155 (413)
! 	"COBOL-WORDS", // 156 (414)
! 	"EQUATE", // 157 (415)
! 	"UNDEFINE", // 158 (416)
! 	"CDF-DEFINE", // 159 (417)
! 	"CDF-DISPLAY", // 160 (418)
! 	"CDF-IF", // 161 (419)
! 	"CDF-ELSE", // 162 (420)
! 	"CDF-END-IF", // 163 (421)
! 	"CDF-EVALUATE", // 164 (422)
! 	"CDF-WHEN", // 165 (423)
! 	"CDF-END-EVALUATE", // 166 (424)
! 	"CALL-CONVENTION", // 167 (425)
! 	"CALL-COBOL", // 168 (426)
! 	"CALL-VERBATIM", // 169 (427)
! 	"CDF-PUSH", // 170 (428)
! 	"CDF-POP", // 171 (429)
! 	"SOURCE-FORMAT", // 172 (430)
! 	"IF", // 173 (431)
! 	"THEN", // 174 (432)
! 	"ELSE", // 175 (433)
! 	"SENTENCE", // 176 (434)
! 	"ACCEPT", // 177 (435)
! 	"ADD", // 178 (436)
! 	"ALTER", // 179 (437)
! 	"CALL", // 180 (438)
! 	"CANCEL", // 181 (439)
! 	"CLOSE", // 182 (440)
! 	"COMPUTE", // 183 (441)
! 	"CONTINUE", // 184 (442)
! 	"DELETE", // 185 (443)
! 	"DISPLAY", // 186 (444)
! 	"DIVIDE", // 187 (445)
! 	"EVALUATE", // 188 (446)
! 	"EXIT", // 189 (447)
! 	"FILLER", // 190 (448)
! 	"GOBACK", // 191 (449)
! 	"GOTO", // 192 (450)
! 	"INITIALIZE", // 193 (451)
! 	"INSPECT", // 194 (452)
! 	"MERGE", // 195 (453)
! 	"MOVE", // 196 (454)
! 	"MULTIPLY", // 197 (455)
! 	"OPEN", // 198 (456)
! 	"PARAGRAPH", // 199 (457)
! 	"READ", // 200 (458)
! 	"RELEASE", // 201 (459)
! 	"RETURN", // 202 (460)
! 	"REWRITE", // 203 (461)
! 	"SEARCH", // 204 (462)
! 	"SET", // 205 (463)
! 	"SELECT", // 206 (464)
! 	"SORT", // 207 (465)
! 	"SORT-MERGE", // 208 (466)
! 	"STRING", // 209 (467)
! 	"STOP", // 210 (468)
! 	"SUBTRACT", // 211 (469)
! 	"START", // 212 (470)
! 	"UNSTRING", // 213 (471)
! 	"WRITE", // 214 (472)
! 	"WHEN", // 215 (473)
! 	"ARGUMENT-NUMBER", // 216 (474)
! 	"ARGUMENT-VALUE", // 217 (475)
! 	"ENVIRONMENT-NAME", // 218 (476)
! 	"ENVIRONMENT-VALUE", // 219 (477)
! 	"ABS", // 220 (478)
! 	"ACCESS", // 221 (479)
! 	"ACOS", // 222 (480)
! 	"ACTUAL", // 223 (481)
! 	"ADVANCING", // 224 (482)
! 	"AFTER", // 225 (483)
! 	"ALL", // 226 (484)
! 	"ALLOCATE", // 227 (485)
! 	"ALPHABET", // 228 (486)
! 	"ALPHABETIC", // 229 (487)
! 	"ALPHABETIC-LOWER", // 230 (488)
! 	"ALPHABETIC-UPPER", // 231 (489)
! 	"ALPHANUMERIC", // 232 (490)
! 	"ALPHANUMERIC-EDITED", // 233 (491)
! 	"ALSO", // 234 (492)
! 	"ALTERNATE", // 235 (493)
! 	"ANNUITY", // 236 (494)
! 	"ANUM", // 237 (495)
! 	"ANY", // 238 (496)
! 	"ANYCASE", // 239 (497)
! 	"APPLY", // 240 (498)
! 	"ARE", // 241 (499)
! 	"AREA", // 242 (500)
! 	"AREAS", // 243 (501)
! 	"AS", // 244 (502)
! 	"ASCENDING", // 245 (503)
! 	"ACTIVATING", // 246 (504)
! 	"ASIN", // 247 (505)
! 	"ASSIGN", // 248 (506)
! 	"AT", // 249 (507)
! 	"ATAN", // 250 (508)
! 	"BASED", // 251 (509)
! 	"BASECONVERT", // 252 (510)
! 	"BEFORE", // 253 (511)
! 	"BINARY", // 254 (512)
! 	"BIT", // 255 (513)
! 	"BIT-OF", // 256 (514)
! 	"BIT-TO-CHAR", // 257 (515)
! 	"BLANK", // 258 (516)
! 	"BLOCK", // 259 (517)
! 	"BOOLEAN-OF-INTEGER", // 260 (518)
! 	"BOTTOM", // 261 (519)
! 	"BY", // 262 (520)
! 	"BYTE", // 263 (521)
! 	"BYTE-LENGTH", // 264 (522)
! 	"CF", // 265 (523)
! 	"CH", // 266 (524)
! 	"CHANGED", // 267 (525)
! 	"CHAR", // 268 (526)
! 	"CHAR-NATIONAL", // 269 (527)
! 	"CHARACTER", // 270 (528)
! 	"CHARACTERS", // 271 (529)
! 	"CHECKING", // 272 (530)
! 	"CLASS", // 273 (531)
! 	"COBOL", // 274 (532)
! 	"CODE", // 275 (533)
! 	"CODE-SET", // 276 (534)
! 	"COLLATING", // 277 (535)
! 	"COLUMN", // 278 (536)
! 	"COMBINED-DATETIME", // 279 (537)
! 	"COMMA", // 280 (538)
! 	"COMMAND-LINE", // 281 (539)
! 	"COMMAND-LINE-COUNT", // 282 (540)
! 	"COMMIT", // 283 (541)
! 	"COMMON", // 284 (542)
! 	"CONCAT", // 285 (543)
! 	"CONDITION", // 286 (544)
! 	"CONFIGURATION", // 287 (545)
! 	"CONFIGURATION", // 288 (546)
! 	"CONTAINS", // 289 (547)
! 	"CONTENT", // 290 (548)
! 	"CONTROL", // 291 (549)
! 	"CONTROLS", // 292 (550)
! 	"CONVERT", // 293 (551)
! 	"CONVERTING", // 294 (552)
! 	"CORRESPONDING", // 295 (553)
! 	"COS", // 296 (554)
! 	"COUNT", // 297 (555)
! 	"CURRENCY", // 298 (556)
! 	"CURRENT", // 299 (557)
! 	"CURRENT-DATE", // 300 (558)
! 	"DATE", // 301 (559)
! 	"DATE-COMPILED", // 302 (560)
! 	"DATE-OF-INTEGER", // 303 (561)
! 	"DATE-TO-YYYYMMDD", // 304 (562)
! 	"DATE-WRITTEN", // 305 (563)
! 	"DAY", // 306 (564)
! 	"DAY-OF-INTEGER", // 307 (565)
! 	"DAY-OF-WEEK", // 308 (566)
! 	"DAY-TO-YYYYDDD", // 309 (567)
! 	"DBCS", // 310 (568)
! 	"DE", // 311 (569)
! 	"DEBUGGING", // 312 (570)
! 	"DECIMAL-POINT", // 313 (571)
! 	"DECLARATIVES", // 314 (572)
! 	"DELIMITED", // 315 (573)
! 	"DELIMITER", // 316 (574)
! 	"DEPENDING", // 317 (575)
! 	"DESCENDING", // 318 (576)
! 	"DETAIL", // 319 (577)
! 	"DIRECT", // 320 (578)
! 	"DIRECT-ACCESS", // 321 (579)
! 	"DIVISION", // 322 (580)
! 	"DOWN", // 323 (581)
! 	"DUPLICATES", // 324 (582)
! 	"DYNAMIC", // 325 (583)
! 	"E", // 326 (584)
! 	"EBCDIC", // 327 (585)
! 	"EC", // 328 (586)
! 	"EGCS", // 329 (587)
! 	"ENCODING", // 330 (588)
! 	"ENTRY", // 331 (589)
! 	"EVERY", // 332 (590)
! 	"EXAMINE", // 333 (591)
! 	"EXHIBIT", // 334 (592)
! 	"EXP", // 335 (593)
! 	"EXP10", // 336 (594)
! 	"EXTEND", // 337 (595)
! 	"EXTERNAL", // 338 (596)
! 	"EXCEPTION-FILE", // 339 (597)
! 	"EXCEPTION-FILE-N", // 340 (598)
! 	"EXCEPTION-LOCATION", // 341 (599)
! 	"EXCEPTION-LOCATION-N", // 342 (600)
! 	"EXCEPTION-STATEMENT", // 343 (601)
! 	"EXCEPTION-STATUS", // 344 (602)
! 	"FACTORIAL", // 345 (603)
! 	"FALSE", // 346 (604)
! 	"FD", // 347 (605)
! 	"FILE-CONTROL", // 348 (606)
! 	"FILE", // 349 (607)
! 	"FILE-LIMIT", // 350 (608)
! 	"FINAL", // 351 (609)
! 	"FINALLY", // 352 (610)
! 	"FIND-STRING", // 353 (611)
! 	"FIRST", // 354 (612)
! 	"FIXED", // 355 (613)
! 	"FOOTING", // 356 (614)
! 	"FOR", // 357 (615)
! 	"FORMATTED-CURRENT-DATE", // 358 (616)
! 	"FORMATTED-DATE", // 359 (617)
! 	"FORMATTED-DATETIME", // 360 (618)
! 	"FORMATTED-TIME", // 361 (619)
! 	"FORM-OVERFLOW", // 362 (620)
! 	"FREE", // 363 (621)
! 	"FRACTION-PART", // 364 (622)
! 	"FROM", // 365 (623)
! 	"FUNCTION", // 366 (624)
! 	"GENERATE", // 367 (625)
! 	"GIVING", // 368 (626)
! 	"GLOBAL", // 369 (627)
! 	"GO", // 370 (628)
! 	"GROUP", // 371 (629)
! 	"HEADING", // 372 (630)
! 	"HEX", // 373 (631)
! 	"HEX-OF", // 374 (632)
! 	"HEX-TO-CHAR", // 375 (633)
! 	"HIGH-VALUES", // 376 (634)
! 	"HIGHEST-ALGEBRAIC", // 377 (635)
! 	"HOLD", // 378 (636)
! 	"IBM-360", // 379 (637)
! 	"IN", // 380 (638)
! 	"INCLUDE", // 381 (639)
! 	"INDEX", // 382 (640)
! 	"INDEXED", // 383 (641)
! 	"INDICATE", // 384 (642)
! 	"INITIAL", // 385 (643)
! 	"INITIATE", // 386 (644)
! 	"INPUT", // 387 (645)
! 	"INSTALLATION", // 388 (646)
! 	"INTERFACE", // 389 (647)
! 	"INTEGER", // 390 (648)
! 	"INTEGER-OF-BOOLEAN", // 391 (649)
! 	"INTEGER-OF-DATE", // 392 (650)
! 	"INTEGER-OF-DAY", // 393 (651)
! 	"INTEGER-OF-FORMATTED-DATE", // 394 (652)
! 	"INTEGER-PART", // 395 (653)
! 	"INTO", // 396 (654)
! 	"INTRINSIC", // 397 (655)
! 	"INVOKE", // 398 (656)
! 	"I-O", // 399 (657)
! 	"I-O-CONTROL", // 400 (658)
! 	"IS", // 401 (659)
! 	"ISNT", // 402 (660)
! 	"KANJI", // 403 (661)
! 	"KEY", // 404 (662)
! 	"LABEL", // 405 (663)
! 	"LAST", // 406 (664)
! 	"LEADING", // 407 (665)
! 	"LEFT", // 408 (666)
! 	"LENGTH", // 409 (667)
! 	"LENGTH-OF", // 410 (668)
! 	"LIMIT", // 411 (669)
! 	"LIMITS", // 412 (670)
! 	"LINE", // 413 (671)
! 	"LINES", // 414 (672)
! 	"LINE-COUNTER", // 415 (673)
! 	"LINAGE", // 416 (674)
! 	"LINKAGE", // 417 (675)
! 	"LOCALE", // 418 (676)
! 	"LOCALE-COMPARE", // 419 (677)
! 	"LOCALE-DATE", // 420 (678)
! 	"LOCALE-TIME", // 421 (679)
! 	"LOCALE-TIME-FROM-SECONDS", // 422 (680)
! 	"LOCAL-STORAGE", // 423 (681)
! 	"LOCATION", // 424 (682)
! 	"LOCK", // 425 (683)
! 	"LOCK-ON", // 426 (684)
! 	"LOG", // 427 (685)
! 	"LOG10", // 428 (686)
! 	"LOWER-CASE", // 429 (687)
! 	"LOW-VALUES", // 430 (688)
! 	"LOWEST-ALGEBRAIC", // 431 (689)
! 	"LPAREN", // 432 (690)
! 	"MANUAL", // 433 (691)
! 	"MAXX", // 434 (692)
! 	"MEAN", // 435 (693)
! 	"MEDIAN", // 436 (694)
! 	"MIDRANGE", // 437 (695)
! 	"MINN", // 438 (696)
! 	"MULTIPLE", // 439 (697)
! 	"MOD", // 440 (698)
! 	"MODE", // 441 (699)
! 	"MODULE-NAME", // 442 (700)
! 	"NAMED", // 443 (701)
! 	"NAMESPACE", // 444 (702)
! 	"NAMESPACE-PREFIX", // 445 (703)
! 	"NAT", // 446 (704)
! 	"NATIONAL", // 447 (705)
! 	"NATIONAL-EDITED", // 448 (706)
! 	"NATIONAL-OF", // 449 (707)
! 	"NATIVE", // 450 (708)
! 	"NESTED", // 451 (709)
! 	"NEXT", // 452 (710)
! 	"NO", // 453 (711)
! 	"NOTE", // 454 (712)
! 	"NULLS", // 455 (713)
! 	"NULLPTR", // 456 (714)
! 	"NUMERIC", // 457 (715)
! 	"NUMERIC-EDITED", // 458 (716)
! 	"NUMVAL", // 459 (717)
! 	"NUMVAL-C", // 460 (718)
! 	"NUMVAL-F", // 461 (719)
! 	"OCCURS", // 462 (720)
! 	"OF", // 463 (721)
! 	"OFF", // 464 (722)
! 	"OMITTED", // 465 (723)
! 	"ON", // 466 (724)
! 	"ONLY", // 467 (725)
! 	"OPTIONAL", // 468 (726)
! 	"OPTIONS", // 469 (727)
! 	"ORD", // 470 (728)
! 	"ORDER", // 471 (729)
! 	"ORD-MAX", // 472 (730)
! 	"ORD-MIN", // 473 (731)
! 	"ORGANIZATION", // 474 (732)
! 	"OTHER", // 475 (733)
! 	"OTHERWISE", // 476 (734)
! 	"OUTPUT", // 477 (735)
! 	"PACKED-DECIMAL", // 478 (736)
! 	"PADDING", // 479 (737)
! 	"PAGE", // 480 (738)
! 	"PAGE-COUNTER", // 481 (739)
! 	"PF", // 482 (740)
! 	"PH", // 483 (741)
! 	"PI", // 484 (742)
! 	"PIC", // 485 (743)
! 	"PICTURE", // 486 (744)
! 	"PLUS", // 487 (745)
! 	"PRESENT-VALUE", // 488 (746)
! 	"PRINT-SWITCH", // 489 (747)
! 	"PROCEDURES", // 490 (748)
! 	"PROCEED", // 491 (749)
! 	"PROCESSING", // 492 (750)
! 	"PROGRAM-ID", // 493 (751)
! 	"PROGRAM", // 494 (752)
! 	"PROPERTY", // 495 (753)
! 	"PROTOTYPE", // 496 (754)
! 	"PSEUDOTEXT", // 497 (755)
! 	"QUOTES", // 498 (756)
! 	"RANDOM", // 499 (757)
! 	"RANDOM-SEED", // 500 (758)
! 	"RANGE", // 501 (759)
! 	"RAISE", // 502 (760)
! 	"RAISING", // 503 (761)
! 	"RD", // 504 (762)
! 	"RECORD", // 505 (763)
! 	"RECORDING", // 506 (764)
! 	"RECORDS", // 507 (765)
! 	"RECURSIVE", // 508 (766)
! 	"REDEFINES", // 509 (767)
! 	"REEL", // 510 (768)
! 	"REFERENCE", // 511 (769)
! 	"RELATIVE", // 512 (770)
! 	"REM", // 513 (771)
! 	"REMAINDER", // 514 (772)
! 	"REMARKS", // 515 (773)
! 	"REMOVAL", // 516 (774)
! 	"RENAMES", // 517 (775)
! 	"REPLACE", // 518 (776)
! 	"REPLACING", // 519 (777)
! 	"REPORT", // 520 (778)
! 	"REPORTING", // 521 (779)
! 	"REPORTS", // 522 (780)
! 	"REPOSITORY", // 523 (781)
! 	"RERUN", // 524 (782)
! 	"RESERVE", // 525 (783)
! 	"RESTRICTED", // 526 (784)
! 	"RESUME", // 527 (785)
! 	"RETRY", // 528 (786)
! 	"REVERSE", // 529 (787)
! 	"REVERSED", // 530 (788)
! 	"REWIND", // 531 (789)
! 	"RF", // 532 (790)
! 	"RH", // 533 (791)
! 	"RIGHT", // 534 (792)
! 	"ROUNDED", // 535 (793)
! 	"RUN", // 536 (794)
! 	"SAME", // 537 (795)
! 	"SCREEN", // 538 (796)
! 	"SD", // 539 (797)
! 	"SECONDS-FROM-FORMATTED-TIME", // 540 (798)
! 	"SECONDS-PAST-MIDNIGHT", // 541 (799)
! 	"SECURITY", // 542 (800)
! 	"SEPARATE", // 543 (801)
! 	"SEQUENCE", // 544 (802)
! 	"SEQUENTIAL", // 545 (803)
! 	"SHARING", // 546 (804)
! 	"SIMPLE-EXIT", // 547 (805)
! 	"SIGN", // 548 (806)
! 	"SIN", // 549 (807)
! 	"SIZE", // 550 (808)
! 	"SMALLEST-ALGEBRAIC", // 551 (809)
! 	"SOURCE", // 552 (810)
! 	"SOURCE-COMPUTER", // 553 (811)
! 	"SPECIAL-NAMES", // 554 (812)
! 	"SQRT", // 555 (813)
! 	"STACK", // 556 (814)
! 	"STANDARD", // 557 (815)
! 	"STANDARD-1", // 558 (816)
! 	"STANDARD-2", // 559 (817)
! 	"STANDARD-DEVIATION", // 560 (818)
! 	"STANDARD-COMPARE", // 561 (819)
! 	"STATUS", // 562 (820)
! 	"STRONG", // 563 (821)
! 	"SUBSTITUTE", // 564 (822)
! 	"SUM", // 565 (823)
! 	"SYMBOL", // 566 (824)
! 	"SYMBOLIC", // 567 (825)
! 	"SYNCHRONIZED", // 568 (826)
! 	"TALLYING", // 569 (827)
! 	"TAN", // 570 (828)
! 	"TERMINATE", // 571 (829)
! 	"TEST", // 572 (830)
! 	"TEST-DATE-YYYYMMDD", // 573 (831)
! 	"TEST-DAY-YYYYDDD", // 574 (832)
! 	"TEST-FORMATTED-DATETIME", // 575 (833)
! 	"TEST-NUMVAL", // 576 (834)
! 	"TEST-NUMVAL-C", // 577 (835)
! 	"TEST-NUMVAL-F", // 578 (836)
! 	"THAN", // 579 (837)
! 	"TIME", // 580 (838)
! 	"TIMES", // 581 (839)
! 	"TO", // 582 (840)
! 	"TOP", // 583 (841)
! 	"TOP-LEVEL", // 584 (842)
! 	"TRACKS", // 585 (843)
! 	"TRACK-AREA", // 586 (844)
! 	"TRAILING", // 587 (845)
! 	"TRANSFORM", // 588 (846)
! 	"TRIM", // 589 (847)
! 	"TRUE", // 590 (848)
! 	"TRY", // 591 (849)
! 	"TURN", // 592 (850)
! 	"TYPE", // 593 (851)
! 	"TYPEDEF", // 594 (852)
! 	"ULENGTH", // 595 (853)
! 	"UNBOUNDED", // 596 (854)
! 	"UNIT", // 597 (855)
! 	"UNITS", // 598 (856)
! 	"UNIT-RECORD", // 599 (857)
! 	"UNTIL", // 600 (858)
! 	"UP", // 601 (859)
! 	"UPON", // 602 (860)
! 	"UPOS", // 603 (861)
! 	"UPPER-CASE", // 604 (862)
! 	"USAGE", // 605 (863)
! 	"USING", // 606 (864)
! 	"USUBSTR", // 607 (865)
! 	"USUPPLEMENTARY", // 608 (866)
! 	"UTILITY", // 609 (867)
! 	"UUID4", // 610 (868)
! 	"UVALID", // 611 (869)
! 	"UWIDTH", // 612 (870)
! 	"VALIDATING", // 613 (871)
! 	"VALUE", // 614 (872)
! 	"VARIANCE", // 615 (873)
! 	"VARYING", // 616 (874)
! 	"VOLATILE", // 617 (875)
! 	"WHEN-COMPILED", // 618 (876)
! 	"WITH", // 619 (877)
! 	"WORKING-STORAGE", // 620 (878)
! 	"YEAR-TO-YYYY", // 621 (879)
! 	"YYYYDDD", // 622 (880)
! 	"YYYYMMDD", // 623 (881)
! 	"ARITHMETIC", // 624 (882)
! 	"ATTRIBUTE", // 625 (883)
! 	"AUTO", // 626 (884)
! 	"AUTOMATIC", // 627 (885)
! 	"AWAY-FROM-ZERO", // 628 (886)
! 	"BACKGROUND-COLOR", // 629 (887)
! 	"BELL", // 630 (888)
! 	"BINARY-ENCODING", // 631 (889)
! 	"BLINK", // 632 (890)
! 	"CAPACITY", // 633 (891)
! 	"CENTER", // 634 (892)
! 	"CLASSIFICATION", // 635 (893)
! 	"CYCLE", // 636 (894)
! 	"DECIMAL-ENCODING", // 637 (895)
! 	"ENTRY-CONVENTION", // 638 (896)
! 	"EOL", // 639 (897)
! 	"EOS", // 640 (898)
! 	"ERASE", // 641 (899)
! 	"EXPANDS", // 642 (900)
! 	"FLOAT-BINARY", // 643 (901)
! 	"FLOAT-DECIMAL", // 644 (902)
! 	"FOREGROUND-COLOR", // 645 (903)
! 	"FOREVER", // 646 (904)
! 	"FULL", // 647 (905)
! 	"HIGHLIGHT", // 648 (906)
! 	"HIGH-ORDER-LEFT", // 649 (907)
! 	"HIGH-ORDER-RIGHT", // 650 (908)
! 	"IGNORING", // 651 (909)
! 	"IMPLEMENTS", // 652 (910)
! 	"INITIALIZED", // 653 (911)
! 	"INTERMEDIATE", // 654 (912)
! 	"LC-ALL", // 655 (913)
! 	"LC-COLLATE", // 656 (914)
! 	"LC-CTYPE", // 657 (915)
! 	"LC-MESSAGES", // 658 (916)
! 	"LC-MONETARY", // 659 (917)
! 	"LC-NUMERIC", // 660 (918)
! 	"LC-TIME", // 661 (919)
! 	"LOWLIGHT", // 662 (920)
! 	"NEAREST-AWAY-FROM-ZERO", // 663 (921)
! 	"NEAREST-EVEN", // 664 (922)
! 	"NEAREST-TOWARD-ZERO", // 665 (923)
! 	"NONE", // 666 (924)
! 	"NORMAL", // 667 (925)
! 	"NUMBERS", // 668 (926)
! 	"PREFIXED", // 669 (927)
! 	"PREVIOUS", // 670 (928)
! 	"PROHIBITED", // 671 (929)
! 	"RELATION", // 672 (930)
! 	"REQUIRED", // 673 (931)
! 	"REVERSE-VIDEO", // 674 (932)
! 	"ROUNDING", // 675 (933)
! 	"SECONDS", // 676 (934)
! 	"SECURE", // 677 (935)
! 	"SHORT", // 678 (936)
! 	"SIGNED", // 679 (937)
! 	"STANDARD-BINARY", // 680 (938)
! 	"STANDARD-DECIMAL", // 681 (939)
! 	"STATEMENT", // 682 (940)
! 	"STEP", // 683 (941)
! 	"STRUCTURE", // 684 (942)
! 	"TOWARD-GREATER", // 685 (943)
! 	"TOWARD-LESSER", // 686 (944)
! 	"TRUNCATION", // 687 (945)
! 	"UCS-4", // 688 (946)
! 	"UNDERLINE", // 689 (947)
! 	"UNSIGNED", // 690 (948)
! 	"UTF-16", // 691 (949)
! 	"UTF-8", // 692 (950)
! 	"XML-DECLARATION", // 693 (951)
! 	"XMLGENERATE", // 694 (952)
! 	"XMLPARSE", // 695 (953)
! 	"ADDRESS", // 696 (954)
! 	"END-ACCEPT", // 697 (955)
! 	"END-ADD", // 698 (956)
! 	"END-CALL", // 699 (957)
! 	"END-COMPUTE", // 700 (958)
! 	"END-DELETE", // 701 (959)
! 	"END-DISPLAY", // 702 (960)
! 	"END-DIVIDE", // 703 (961)
! 	"END-EVALUATE", // 704 (962)
! 	"END-MULTIPLY", // 705 (963)
! 	"END-PERFORM", // 706 (964)
! 	"END-READ", // 707 (965)
! 	"END-RETURN", // 708 (966)
! 	"END-REWRITE", // 709 (967)
! 	"END-SEARCH", // 710 (968)
! 	"END-START", // 711 (969)
! 	"END-STRING", // 712 (970)
! 	"END-SUBTRACT", // 713 (971)
! 	"END-UNSTRING", // 714 (972)
! 	"END-WRITE", // 715 (973)
! 	"END-XML", // 716 (974)
! 	"END-IF", // 717 (975)
! 	"ATTRIBUTES", // 718 (976)
! 	"ELEMENT", // 719 (977)
! 	"NONNUMERIC", // 720 (978)
! 	"THRU", // 721 (979)
! 	"OR", // 722 (980)
! 	"XOR", // 723 (981)
! 	"AND", // 724 (982)
! 	"NOT", // 725 (983)
! 	"-NE", // 726 (984)
! 	"-LE", // 727 (985)
! 	"-GE", // 728 (986)
! 	"POW", // 729 (987)
! 	"NEG", // 730 (988)
  };
diff -Nrcpad gcc-17-20260823/gcc/cobol/util.cc gcc-17-20260830/gcc/cobol/util.cc
*** gcc-17-20260823/gcc/cobol/util.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cobol/util.cc	Sun Aug 30 22:32:06 2026
*************** cbl_field_type_str( enum cbl_field_type_
*** 438,444 ****
    case FldPointer:
      return "FldPointer";
   }
!   cbl_internal_error("%s:%d: invalid %<symbol_type_t%> %d", __func__, __LINE__, type);
    return "???";
  }
  
--- 438,444 ----
    case FldPointer:
      return "FldPointer";
   }
!   ////cbl_internal_error("%s:%d: invalid %<field_type_t%> %d", __func__, __LINE__, type);
    return "???";
  }
  
*************** valid_move( const cbl_refer_t& tgt_ref,
*** 2261,2270 ****
          { 0, 1, 6, 1, 1, 1, 1, 1, 1, 2, 0, 0, },  // FldNumericDisplay (numeric)
          { 0, 1, 4, 1, 1, 1, 1, 1, 1, 1, 0, 0, },  // FldNumericEdited
          { 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, },  // FldAlphaEdited
!         { 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, },  // FldLiteralA
          { 0, 1, 6, 1, 1, 1, 1, 1, 1, 2, 0, 0, },  // FldLiteralN       (numeric)
      };
-   /* Needs C++11 */
    static_assert(sizeof(matrix[0]) == COUNT_OF(matrix[0]),
                  "matrix should be square");
  
--- 2261,2269 ----
          { 0, 1, 6, 1, 1, 1, 1, 1, 1, 2, 0, 0, },  // FldNumericDisplay (numeric)
          { 0, 1, 4, 1, 1, 1, 1, 1, 1, 1, 0, 0, },  // FldNumericEdited
          { 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, },  // FldAlphaEdited
!         { 0, 1, 1, 0, 0, 0, 0, 0, 8, 1, 0, 0, },  // FldLiteralA
          { 0, 1, 6, 1, 1, 1, 1, 1, 1, 2, 0, 0, },  // FldLiteralN       (numeric)
      };
    static_assert(sizeof(matrix[0]) == COUNT_OF(matrix[0]),
                  "matrix should be square");
  
*************** class temp_loc_t {
*** 3627,3661 ****
    }
  };
  
- /*
-  * Both CDF and parser need to call error_msg, each with their own distinct
-  * location type, not because they *need* to be different, but because they
-  * are, as an artifact of using different prefixes.  Possibly a better plan
-  * would be to convert cdf.y to a pure parser, using no global variables.  But
-  * this is where we are.
-  *
-  * Because we can't reliably instantiate it as a forward-declared template
-  * function, and because the parameters are variadic, we can't use a template
-  * function or call one.  So, a macro.
-  */
- 
- #define ERROR_MSG_BODY                                                  \
-   temp_loc_t looker(loc);                                               \
-   verify_format(gmsgid);                                                \
-   parse_error_inc();                                                    \
-   global_dc->begin_group();                                             \
-   va_list ap;                                                           \
-   va_start (ap, gmsgid);                                                \
-   rich_location richloc (line_table, token_location);                   \
-   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_zero,        \
-                                          gmsgid, &ap,                   \
-                                          diagnostics::kind::error);     \
-   va_end (ap);                                                          \
-   global_dc->end_group();
- 
- 
  void error_msg( const cbl_loc_t& loc, const char gmsgid[], ... ) {
!   ERROR_MSG_BODY
  }
  
  bool
--- 3626,3644 ----
    }
  };
  
  void error_msg( const cbl_loc_t& loc, const char gmsgid[], ... ) {
!   temp_loc_t looker(loc);
!   verify_format(gmsgid);
!   parse_error_inc();
!   global_dc->begin_group();
!   va_list ap;
!   va_start (ap, gmsgid);
!   rich_location richloc (line_table, token_location);
!   bool ret = global_dc->diagnostic_impl (&richloc, nullptr, option_zero,
!                                          gmsgid, &ap,
!                                          diagnostics::kind::error);
!   va_end (ap);
!   global_dc->end_group();
  }
  
  bool
*************** static const std::set<std::string> reser
*** 4087,4092 ****
--- 4070,4083 ----
    "END-START",
  
    // ISO 2023 keywords
+   "B_AND",
+   "B_NOT",
+   "B_OR",
+   "B_SHIFT_L",
+   "B_SHIFT_LC",
+   "B_SHIFT_R",
+   "B_SHIFT_RC",
+   "B_XOR",
    "ACCEPT",
    "ACCESS",
    "ACTIVE-CLASS",
diff -Nrcpad gcc-17-20260823/gcc/common/config/avr/avr-common.cc gcc-17-20260830/gcc/common/config/avr/avr-common.cc
*** gcc-17-20260823/gcc/common/config/avr/avr-common.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/common/config/avr/avr-common.cc	Sun Aug 30 22:32:06 2026
*************** static const struct default_options avr_
*** 44,49 ****
--- 44,50 ----
      { OPT_LEVELS_1_PLUS, OPT_mmain_is_OS_task, NULL, 1 },
      { OPT_LEVELS_1_PLUS, OPT_mfuse_add_, NULL, 1 },
      { OPT_LEVELS_2_PLUS, OPT_mfuse_add_, NULL, 2 },
+     { OPT_LEVELS_1_PLUS, OPT_mfuse_ifelse, NULL, 1 },
      { OPT_LEVELS_1_PLUS, OPT_mfuse_move2, NULL, 1 },
      { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_mfuse_move_, NULL, 3 },
      { OPT_LEVELS_2_PLUS, OPT_mfuse_move_, NULL, 23 },
diff -Nrcpad gcc-17-20260823/gcc/common/config/i386/cpuinfo.h gcc-17-20260830/gcc/common/config/i386/cpuinfo.h
*** gcc-17-20260823/gcc/common/config/i386/cpuinfo.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/common/config/i386/cpuinfo.h	Sun Aug 30 22:32:06 2026
*************** get_available_features (struct __process
*** 1110,1125 ****
  	}
      }
  
-   /* Get Advanced Features at level 0x21 (eax = 0x21).  */
-   if (max_cpuid_level >= 0x21)
-     {
-       __cpuid (0x21, eax, ebx, ecx, edx);
-       if (eax & bit_AVX512BMM)
- 	{
- 	  set_feature (FEATURE_AVX512BMM);
- 	}
-     }
- 
    /* Get Advanced Features at level 0x24 (eax = 0x24, ecx = 0).  */
    if (avx10_set && max_cpuid_level >= 0x24)
      {
--- 1110,1115 ----
*************** get_available_features (struct __process
*** 1202,1210 ****
      {
        __cpuid (0x80000021, eax, ebx, ecx, edx);
        if (eax & bit_AMD_PREFETCHI)
! 	{
! 	  set_feature (FEATURE_PREFETCHI);
! 	}
      }
  
  #undef set_feature
--- 1192,1200 ----
      {
        __cpuid (0x80000021, eax, ebx, ecx, edx);
        if (eax & bit_AMD_PREFETCHI)
! 	set_feature (FEATURE_PREFETCHI);
!       if (eax & bit_AVX512BMM)
! 	set_feature (FEATURE_AVX512BMM);
      }
  
  #undef set_feature
diff -Nrcpad gcc-17-20260823/gcc/common/config/riscv/riscv-common.cc gcc-17-20260830/gcc/common/config/riscv/riscv-common.cc
*** gcc-17-20260823/gcc/common/config/riscv/riscv-common.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/common/config/riscv/riscv-common.cc	Sun Aug 30 22:32:06 2026
*************** subset_cmp (const std::string &a, const
*** 522,531 ****
      }
  }
  
! /* Return true if EXT is a standard extension.  */
  
! static bool
! standard_extensions_p (const char *ext)
  {
    auto itr = riscv_ext_infos.find (ext);
    return itr != riscv_ext_infos.end ();
--- 522,532 ----
      }
  }
  
! /* Return true if EXT names an extension this compiler knows about, whether
!    standard or vendor defined.  */
  
! bool
! riscv_ext_is_known_p (const char *ext)
  {
    auto itr = riscv_ext_infos.find (ext);
    return itr != riscv_ext_infos.end ();
*************** riscv_subset_list::add (const char *subs
*** 562,568 ****
  	}
        return;
      }
!   else if (strlen (subset) == 1 && !standard_extensions_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
--- 563,569 ----
  	}
        return;
      }
!   else if (strlen (subset) == 1 && !riscv_ext_is_known_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
*************** riscv_subset_list::add (const char *subs
*** 571,577 ****
  		  m_arch, subset);
        return;
      }
!   else if (subset[0] == 'z' && !standard_extensions_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
--- 572,578 ----
  		  m_arch, subset);
        return;
      }
!   else if (subset[0] == 'z' && !riscv_ext_is_known_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
*************** riscv_subset_list::add (const char *subs
*** 580,586 ****
  		  m_arch, subset);
        return;
      }
!   else if (subset[0] == 's' && !standard_extensions_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
--- 581,587 ----
  		  m_arch, subset);
        return;
      }
!   else if (subset[0] == 's' && !riscv_ext_is_known_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
*************** riscv_subset_list::add (const char *subs
*** 589,595 ****
  		  m_arch, subset);
        return;
      }
!   else if (subset[0] == 'x' && !standard_extensions_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
--- 590,596 ----
  		  m_arch, subset);
        return;
      }
!   else if (subset[0] == 'x' && !riscv_ext_is_known_p (subset))
      {
        if (m_loc)
  	error_at (*m_loc,
diff -Nrcpad gcc-17-20260823/gcc/common/config/riscv/riscv-hwprobe.def gcc-17-20260830/gcc/common/config/riscv/riscv-hwprobe.def
*** gcc-17-20260823/gcc/common/config/riscv/riscv-hwprobe.def	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/common/config/riscv/riscv-hwprobe.def	Sun Aug 30 22:32:06 2026
***************
*** 0 ****
--- 1,146 ----
+ /* Description of the Linux riscv_hwprobe interface.
+ 
+    Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ /* This transcribes the part of <asm/hwprobe.h> that both the compiler and
+    libgcc need.  It is a stable Linux ABI, transcribed rather than included
+    so that neither the driver nor libgcc depends on the kernel headers being
+    installed, or on a glibc new enough to provide <sys/hwprobe.h>.
+ 
+    The file is written to be read more than once.  Before each #include,
+    define whichever of these macros you want:
+ 
+       RISCV_HWPROBE_KEY (NAME, VALUE)
+ 
+    NAME is the key name without its RISCV_HWPROBE_KEY_ prefix, and VALUE
+    is the number the kernel knows it by.
+ 
+       RISCV_HWPROBE_EXT (NAME, UPPERCASE_NAME, KEY, BIT, XLEN)
+ 
+    NAME is the extension name as it appears in an ISA string,
+    UPPERCASE_NAME is the same name as an upper case token, KEY names the
+    key whose value holds the bit, BIT is the bit position within that
+    value, and XLEN is 32 or 64 if the extension only exists on that XLEN,
+    or 0 if it exists on both.
+ 
+    RISCV_HWPROBE_IMA_FD covers both F and D, so bit 0 of IMA_EXT_0 has two
+    entries.  Extensions implied by others are listed all the same; callers
+    that care must drop the redundant ones themselves.  */
+ 
+ #ifndef RISCV_HWPROBE_KEY
+ #define RISCV_HWPROBE_KEY(NAME, VALUE)
+ #endif
+ 
+ #ifndef RISCV_HWPROBE_EXT
+ #define RISCV_HWPROBE_EXT(NAME, UPPERCASE_NAME, KEY, BIT, XLEN)
+ #endif
+ 
+ RISCV_HWPROBE_KEY (MVENDORID,		 0)
+ RISCV_HWPROBE_KEY (MARCHID,		 1)
+ RISCV_HWPROBE_KEY (MIMPID,		 2)
+ RISCV_HWPROBE_KEY (BASE_BEHAVIOR,	 3)
+ RISCV_HWPROBE_KEY (IMA_EXT_0,		 4)
+ RISCV_HWPROBE_KEY (CPUPERF_0,		 5)
+ RISCV_HWPROBE_KEY (ZICBOZ_BLOCK_SIZE,	 6)
+ RISCV_HWPROBE_KEY (HIGHEST_VIRT_ADDRESS, 7)
+ RISCV_HWPROBE_KEY (TIME_CSR_FREQ,	 8)
+ RISCV_HWPROBE_KEY (MISALIGNED_SCALAR_PERF, 9)
+ RISCV_HWPROBE_KEY (MISALIGNED_VECTOR_PERF, 10)
+ RISCV_HWPROBE_KEY (VENDOR_EXT_THEAD_0,	 11)
+ RISCV_HWPROBE_KEY (ZICBOM_BLOCK_SIZE,	 12)
+ RISCV_HWPROBE_KEY (VENDOR_EXT_SIFIVE_0,	 13)
+ RISCV_HWPROBE_KEY (VENDOR_EXT_MIPS_0,	 14)
+ RISCV_HWPROBE_KEY (IMA_EXT_1,		 16)
+ 
+ RISCV_HWPROBE_EXT ("f", F,		RISCV_HWPROBE_KEY_IMA_EXT_0,  0, 0)
+ RISCV_HWPROBE_EXT ("d", D,		RISCV_HWPROBE_KEY_IMA_EXT_0,  0, 0)
+ RISCV_HWPROBE_EXT ("c", C,		RISCV_HWPROBE_KEY_IMA_EXT_0,  1, 0)
+ RISCV_HWPROBE_EXT ("v", V,		RISCV_HWPROBE_KEY_IMA_EXT_0,  2, 0)
+ RISCV_HWPROBE_EXT ("zba", ZBA,		RISCV_HWPROBE_KEY_IMA_EXT_0,  3, 0)
+ RISCV_HWPROBE_EXT ("zbb", ZBB,		RISCV_HWPROBE_KEY_IMA_EXT_0,  4, 0)
+ RISCV_HWPROBE_EXT ("zbs", ZBS,		RISCV_HWPROBE_KEY_IMA_EXT_0,  5, 0)
+ RISCV_HWPROBE_EXT ("zicboz", ZICBOZ,	RISCV_HWPROBE_KEY_IMA_EXT_0,  6, 0)
+ RISCV_HWPROBE_EXT ("zbc", ZBC,		RISCV_HWPROBE_KEY_IMA_EXT_0,  7, 0)
+ RISCV_HWPROBE_EXT ("zbkb", ZBKB,	RISCV_HWPROBE_KEY_IMA_EXT_0,  8, 0)
+ RISCV_HWPROBE_EXT ("zbkc", ZBKC,	RISCV_HWPROBE_KEY_IMA_EXT_0,  9, 0)
+ RISCV_HWPROBE_EXT ("zbkx", ZBKX,	RISCV_HWPROBE_KEY_IMA_EXT_0, 10, 0)
+ RISCV_HWPROBE_EXT ("zknd", ZKND,	RISCV_HWPROBE_KEY_IMA_EXT_0, 11, 0)
+ RISCV_HWPROBE_EXT ("zkne", ZKNE,	RISCV_HWPROBE_KEY_IMA_EXT_0, 12, 0)
+ RISCV_HWPROBE_EXT ("zknh", ZKNH,	RISCV_HWPROBE_KEY_IMA_EXT_0, 13, 0)
+ RISCV_HWPROBE_EXT ("zksed", ZKSED,	RISCV_HWPROBE_KEY_IMA_EXT_0, 14, 0)
+ RISCV_HWPROBE_EXT ("zksh", ZKSH,	RISCV_HWPROBE_KEY_IMA_EXT_0, 15, 0)
+ RISCV_HWPROBE_EXT ("zkt", ZKT,		RISCV_HWPROBE_KEY_IMA_EXT_0, 16, 0)
+ RISCV_HWPROBE_EXT ("zvbb", ZVBB,	RISCV_HWPROBE_KEY_IMA_EXT_0, 17, 0)
+ RISCV_HWPROBE_EXT ("zvbc", ZVBC,	RISCV_HWPROBE_KEY_IMA_EXT_0, 18, 0)
+ RISCV_HWPROBE_EXT ("zvkb", ZVKB,	RISCV_HWPROBE_KEY_IMA_EXT_0, 19, 0)
+ RISCV_HWPROBE_EXT ("zvkg", ZVKG,	RISCV_HWPROBE_KEY_IMA_EXT_0, 20, 0)
+ RISCV_HWPROBE_EXT ("zvkned", ZVKNED,	RISCV_HWPROBE_KEY_IMA_EXT_0, 21, 0)
+ RISCV_HWPROBE_EXT ("zvknha", ZVKNHA,	RISCV_HWPROBE_KEY_IMA_EXT_0, 22, 0)
+ RISCV_HWPROBE_EXT ("zvknhb", ZVKNHB,	RISCV_HWPROBE_KEY_IMA_EXT_0, 23, 0)
+ RISCV_HWPROBE_EXT ("zvksed", ZVKSED,	RISCV_HWPROBE_KEY_IMA_EXT_0, 24, 0)
+ RISCV_HWPROBE_EXT ("zvksh", ZVKSH,	RISCV_HWPROBE_KEY_IMA_EXT_0, 25, 0)
+ RISCV_HWPROBE_EXT ("zvkt", ZVKT,	RISCV_HWPROBE_KEY_IMA_EXT_0, 26, 0)
+ RISCV_HWPROBE_EXT ("zfh", ZFH,		RISCV_HWPROBE_KEY_IMA_EXT_0, 27, 0)
+ RISCV_HWPROBE_EXT ("zfhmin", ZFHMIN,	RISCV_HWPROBE_KEY_IMA_EXT_0, 28, 0)
+ RISCV_HWPROBE_EXT ("zihintntl", ZIHINTNTL, RISCV_HWPROBE_KEY_IMA_EXT_0, 29, 0)
+ RISCV_HWPROBE_EXT ("zvfh", ZVFH,	RISCV_HWPROBE_KEY_IMA_EXT_0, 30, 0)
+ RISCV_HWPROBE_EXT ("zvfhmin", ZVFHMIN,	RISCV_HWPROBE_KEY_IMA_EXT_0, 31, 0)
+ RISCV_HWPROBE_EXT ("zfa", ZFA,		RISCV_HWPROBE_KEY_IMA_EXT_0, 32, 0)
+ RISCV_HWPROBE_EXT ("ztso", ZTSO,	RISCV_HWPROBE_KEY_IMA_EXT_0, 33, 0)
+ RISCV_HWPROBE_EXT ("zacas", ZACAS,	RISCV_HWPROBE_KEY_IMA_EXT_0, 34, 0)
+ RISCV_HWPROBE_EXT ("zicond", ZICOND,	RISCV_HWPROBE_KEY_IMA_EXT_0, 35, 0)
+ RISCV_HWPROBE_EXT ("zihintpause", ZIHINTPAUSE,
+ 		   RISCV_HWPROBE_KEY_IMA_EXT_0, 36, 0)
+ RISCV_HWPROBE_EXT ("zve32x", ZVE32X,	RISCV_HWPROBE_KEY_IMA_EXT_0, 37, 0)
+ RISCV_HWPROBE_EXT ("zve32f", ZVE32F,	RISCV_HWPROBE_KEY_IMA_EXT_0, 38, 0)
+ RISCV_HWPROBE_EXT ("zve64x", ZVE64X,	RISCV_HWPROBE_KEY_IMA_EXT_0, 39, 0)
+ RISCV_HWPROBE_EXT ("zve64f", ZVE64F,	RISCV_HWPROBE_KEY_IMA_EXT_0, 40, 0)
+ RISCV_HWPROBE_EXT ("zve64d", ZVE64D,	RISCV_HWPROBE_KEY_IMA_EXT_0, 41, 0)
+ RISCV_HWPROBE_EXT ("zimop", ZIMOP,	RISCV_HWPROBE_KEY_IMA_EXT_0, 42, 0)
+ RISCV_HWPROBE_EXT ("zca", ZCA,		RISCV_HWPROBE_KEY_IMA_EXT_0, 43, 0)
+ RISCV_HWPROBE_EXT ("zcb", ZCB,		RISCV_HWPROBE_KEY_IMA_EXT_0, 44, 0)
+ RISCV_HWPROBE_EXT ("zcd", ZCD,		RISCV_HWPROBE_KEY_IMA_EXT_0, 45, 0)
+ RISCV_HWPROBE_EXT ("zcf", ZCF,		RISCV_HWPROBE_KEY_IMA_EXT_0, 46, 32)
+ RISCV_HWPROBE_EXT ("zcmop", ZCMOP,	RISCV_HWPROBE_KEY_IMA_EXT_0, 47, 0)
+ RISCV_HWPROBE_EXT ("zawrs", ZAWRS,	RISCV_HWPROBE_KEY_IMA_EXT_0, 48, 0)
+ RISCV_HWPROBE_EXT ("supm", SUPM,	RISCV_HWPROBE_KEY_IMA_EXT_0, 49, 0)
+ RISCV_HWPROBE_EXT ("zicntr", ZICNTR,	RISCV_HWPROBE_KEY_IMA_EXT_0, 50, 0)
+ RISCV_HWPROBE_EXT ("zihpm", ZIHPM,	RISCV_HWPROBE_KEY_IMA_EXT_0, 51, 0)
+ RISCV_HWPROBE_EXT ("zfbfmin", ZFBFMIN,	RISCV_HWPROBE_KEY_IMA_EXT_0, 52, 0)
+ RISCV_HWPROBE_EXT ("zvfbfmin", ZVFBFMIN, RISCV_HWPROBE_KEY_IMA_EXT_0, 53, 0)
+ RISCV_HWPROBE_EXT ("zvfbfwma", ZVFBFWMA, RISCV_HWPROBE_KEY_IMA_EXT_0, 54, 0)
+ RISCV_HWPROBE_EXT ("zicbom", ZICBOM,	RISCV_HWPROBE_KEY_IMA_EXT_0, 55, 0)
+ RISCV_HWPROBE_EXT ("zaamo", ZAAMO,	RISCV_HWPROBE_KEY_IMA_EXT_0, 56, 0)
+ RISCV_HWPROBE_EXT ("zalrsc", ZALRSC,	RISCV_HWPROBE_KEY_IMA_EXT_0, 57, 0)
+ RISCV_HWPROBE_EXT ("zabha", ZABHA,	RISCV_HWPROBE_KEY_IMA_EXT_0, 58, 0)
+ RISCV_HWPROBE_EXT ("zalasr", ZALASR,	RISCV_HWPROBE_KEY_IMA_EXT_0, 59, 0)
+ RISCV_HWPROBE_EXT ("zicbop", ZICBOP,	RISCV_HWPROBE_KEY_IMA_EXT_0, 60, 0)
+ RISCV_HWPROBE_EXT ("zilsd", ZILSD,	RISCV_HWPROBE_KEY_IMA_EXT_0, 61, 32)
+ RISCV_HWPROBE_EXT ("zclsd", ZCLSD,	RISCV_HWPROBE_KEY_IMA_EXT_0, 62, 32)
+ RISCV_HWPROBE_EXT ("zicfilp", ZICFILP,	RISCV_HWPROBE_KEY_IMA_EXT_0, 63, 0)
+ 
+ RISCV_HWPROBE_EXT ("zicfiss", ZICFISS,	RISCV_HWPROBE_KEY_IMA_EXT_1,  0, 0)
+ 
+ #undef RISCV_HWPROBE_KEY
+ #undef RISCV_HWPROBE_EXT
diff -Nrcpad gcc-17-20260823/gcc/common/config/riscv/riscv-hwprobe.h gcc-17-20260830/gcc/common/config/riscv/riscv-hwprobe.h
*** gcc-17-20260823/gcc/common/config/riscv/riscv-hwprobe.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/common/config/riscv/riscv-hwprobe.h	Sun Aug 30 22:32:06 2026
***************
*** 0 ****
--- 1,85 ----
+ /* Definitions for the Linux riscv_hwprobe interface.
+ 
+    Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_RISCV_HWPROBE_H
+ #define GCC_RISCV_HWPROBE_H
+ 
+ #ifndef __NR_riscv_hwprobe
+ #define __NR_riscv_hwprobe 258
+ #endif
+ 
+ enum {
+ #define RISCV_HWPROBE_KEY(NAME, VALUE) RISCV_HWPROBE_KEY_##NAME = VALUE,
+ #include "common/config/riscv/riscv-hwprobe.def"
+ #define RISCV_HWPROBE_EXT(NAME, UPPERCASE_NAME, KEY, BIT, XLEN) \
+   RISCV_HWPROBE_EXT_##UPPERCASE_NAME = (1ULL << BIT),
+ #include "common/config/riscv/riscv-hwprobe.def"
+ };
+ 
+ #define RISCV_HWPROBE_BASE_BEHAVIOR_IMA (1ULL << 0)
+ 
+ struct riscv_hwprobe {
+   long long key;
+   unsigned long long value;
+ };
+ 
+ static inline long
+ syscall_5_args (long number, long arg1, long arg2, long arg3,
+ 		long arg4, long arg5)
+ {
+   register long a7 __asm__ ("a7") = number;
+   register long a0 __asm__ ("a0") = arg1;
+   register long a1 __asm__ ("a1") = arg2;
+   register long a2 __asm__ ("a2") = arg3;
+   register long a3 __asm__ ("a3") = arg4;
+   register long a4 __asm__ ("a4") = arg5;
+   __asm__ __volatile__ ("ecall\n\t"
+ 			: "=r"(a0)
+ 			: "r"(a7), "r"(a0), "r"(a1), "r"(a2), "r"(a3), "r"(a4)
+ 			: "memory");
+   return a0;
+ }
+ 
+ static inline long
+ riscv_hwprobe (struct riscv_hwprobe *hwprobes, long npairs)
+ {
+   return syscall_5_args (__NR_riscv_hwprobe, (long)hwprobes, npairs, 0,
+ 			 0, 0);
+ }
+ 
+ static inline unsigned long long
+ riscv_hwprobe_value (const struct riscv_hwprobe *pairs, int npairs,
+ 		     long long key)
+ {
+   int i;
+ 
+   for (i = 0; i < npairs; i++)
+     if (pairs[i].key == key)
+       return pairs[i].value;
+ 
+   return 0;
+ }
+ 
+ #endif
diff -Nrcpad gcc-17-20260823/gcc/common.opt gcc-17-20260830/gcc/common.opt
*** gcc-17-20260823/gcc/common.opt	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/common.opt	Sun Aug 30 22:32:06 2026
*************** Warn if dereferencing a NULL pointer may
*** 696,702 ****
  
  Wunsafe-loop-optimizations
  Common Ignore Warning
! Does nothing. Preserved for backward compatibility.
  
  Wmissing-noreturn
  Common Warning Alias(Wsuggest-attribute=noreturn)
--- 696,702 ----
  
  Wunsafe-loop-optimizations
  Common Ignore Warning
! Does nothing.  Preserved for backward compatibility.
  
  Wmissing-noreturn
  Common Warning Alias(Wsuggest-attribute=noreturn)
*************** Warn about maybe uninitialized automatic
*** 854,860 ****
  
  Wunreachable-code
  Common Ignore Warning
! Does nothing. Preserved for backward compatibility.
  
  Wunused
  Common Var(warn_unused) Init(0) Warning
--- 854,860 ----
  
  Wunreachable-code
  Common Ignore Warning
! Does nothing.  Preserved for backward compatibility.
  
  Wunused
  Common Var(warn_unused) Init(0) Warning
*************** Enable static analysis pass.
*** 1134,1152 ****
  
  fargument-alias
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fargument-noalias
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fargument-noalias-global
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fargument-noalias-anything
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fsanitize=
  Common Driver Joined
--- 1134,1152 ----
  
  fargument-alias
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fargument-noalias
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fargument-noalias-global
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fargument-noalias-anything
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fsanitize=
  Common Driver Joined
*************** Use STB_GNU_UNIQUE if supported by the a
*** 1938,1944 ****
  
  floop-flatten
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  floop-nest-optimize
  Common Var(flag_loop_nest_optimize) Optimization
--- 1938,1944 ----
  
  floop-flatten
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  floop-nest-optimize
  Common Var(flag_loop_nest_optimize) Optimization
*************** EnumValue
*** 2038,2049 ****
  Enum(stack_reuse_level) String(none) Value(SR_NONE)
  
  ftree-loop-if-convert
! Common Var(flag_tree_loop_if_convert) Init(-1) Optimization
! Convert conditional jumps in innermost loops to branchless equivalents.
  
  ftree-loop-if-convert-stores
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  ; -finhibit-size-directive inhibits output of .size for ELF.
  ; This is used only for compiling crtstuff.c,
--- 2038,2049 ----
  Enum(stack_reuse_level) String(none) Value(SR_NONE)
  
  ftree-loop-if-convert
! Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  ftree-loop-if-convert-stores
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  ; -finhibit-size-directive inhibits output of .size for ELF.
  ; This is used only for compiling crtstuff.c,
*************** Reduce stack alignment on call sites if
*** 2225,2235 ****
  
  fipa-matrix-reorg
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fipa-struct-reorg
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fipa-vrp
  Common Var(flag_ipa_vrp) Optimization
--- 2225,2235 ----
  
  fipa-matrix-reorg
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fipa-struct-reorg
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fipa-vrp
  Common Var(flag_ipa_vrp) Optimization
*************** If neither case applies, generate table-
*** 2567,2573 ****
  
  foptimize-register-move
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  foptimize-sibling-calls
  Common Var(flag_optimize_sibling_calls) Optimization
--- 2567,2573 ----
  
  foptimize-register-move
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  foptimize-sibling-calls
  Common Var(flag_optimize_sibling_calls) Optimization
*************** Return small aggregates in registers.
*** 2793,2799 ****
  
  fregmove
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  flifetime-dse
  Common Var(flag_lifetime_dse,2) Init(2) Optimization
--- 2793,2799 ----
  
  fregmove
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  flifetime-dse
  Common Var(flag_lifetime_dse,2) Init(2) Optimization
*************** Enables the dynamic vectorizer cost mode
*** 3574,3580 ****
  
  ftree-vect-loop-version
  Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  ftree-scev-cprop
  Common Var(flag_tree_scev_cprop) Init(1) Optimization
--- 3574,3580 ----
  
  ftree-vect-loop-version
  Common Ignore
! Does nothing.  Preserved for backward compatibility.
  
  ftree-scev-cprop
  Common Var(flag_tree_scev_cprop) Init(1) Optimization
diff -Nrcpad gcc-17-20260823/gcc/common.opt.urls gcc-17-20260830/gcc/common.opt.urls
*** gcc-17-20260823/gcc/common.opt.urls	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/common.opt.urls	Sun Aug 30 22:32:06 2026
*************** UrlSuffix(gcc/Optimize-Options.html#inde
*** 1098,1106 ****
  fstack-reuse=
  UrlSuffix(gcc/Code-Gen-Options.html#index-fstack-reuse)
  
- ftree-loop-if-convert
- UrlSuffix(gcc/Optimize-Options.html#index-fno-tree-loop-if-convert)
- 
  finhibit-size-directive
  UrlSuffix(gcc/Code-Gen-Options.html#index-finhibit-size-directive)
  
--- 1098,1103 ----
diff -Nrcpad gcc-17-20260823/gcc/config/aarch64/aarch64.cc gcc-17-20260830/gcc/config/aarch64/aarch64.cc
*** gcc-17-20260823/gcc/config/aarch64/aarch64.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/aarch64/aarch64.cc	Sun Aug 30 22:32:06 2026
*************** aarch64_emit_call_insn (rtx pat)
*** 12675,12714 ****
    return as_a<rtx_call_insn *> (insn);
  }
  
  machine_mode
  aarch64_select_cc_mode (RTX_CODE code, rtx x, rtx y)
  {
    machine_mode mode_x = GET_MODE (x);
    rtx_code code_x = GET_CODE (x);
  
-   /* All floating point compares return CCFP if it is an equality
-      comparison, and CCFPE otherwise.  */
    if (GET_MODE_CLASS (mode_x) == MODE_FLOAT)
!     {
!       switch (code)
! 	{
! 	case EQ:
! 	case NE:
! 	case UNORDERED:
! 	case ORDERED:
! 	case UNLT:
! 	case UNLE:
! 	case UNGT:
! 	case UNGE:
! 	case UNEQ:
! 	  return CCFPmode;
! 
! 	case LT:
! 	case LE:
! 	case GT:
! 	case GE:
! 	case LTGT:
! 	  return CCFPEmode;
! 
! 	default:
! 	  gcc_unreachable ();
! 	}
!     }
  
    /* Equality comparisons of short modes against zero can be performed
       using the TST instruction with the appropriate bitmask.  */
--- 12675,12723 ----
    return as_a<rtx_call_insn *> (insn);
  }
  
+ /* Return the condition code mode for comparison CODE of MODE floating-point
+    operands.  FCMP and FCMPE set the same flags, but FCMPE also raises Invalid
+    for a quiet NaN.  Use CCFPE only when that exception is observable.  */
+ 
+ static machine_mode
+ aarch64_fp_cc_mode (rtx_code code, machine_mode mode)
+ {
+   if (!HONOR_NANS (mode) || !flag_trapping_math)
+     return CCFPmode;
+ 
+   switch (code)
+     {
+     case EQ:
+     case NE:
+     case UNORDERED:
+     case ORDERED:
+     case UNLT:
+     case UNLE:
+     case UNGT:
+     case UNGE:
+     case UNEQ:
+       return CCFPmode;
+ 
+     case LT:
+     case LE:
+     case GT:
+     case GE:
+     case LTGT:
+       return CCFPEmode;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ }
+ 
  machine_mode
  aarch64_select_cc_mode (RTX_CODE code, rtx x, rtx y)
  {
    machine_mode mode_x = GET_MODE (x);
    rtx_code code_x = GET_CODE (x);
  
    if (GET_MODE_CLASS (mode_x) == MODE_FLOAT)
!     return aarch64_fp_cc_mode (code, mode_x);
  
    /* Equality comparisons of short modes against zero can be performed
       using the TST instruction with the appropriate bitmask.  */
*************** aarch64_evpc_rev_global (struct expand_v
*** 28385,28390 ****
--- 28394,28438 ----
    return true;
  }
  
+ inline static bool
+ is_bb_in_loop (basic_block bb)
+ {
+   return bb && bb_loop_depth (bb) > 0;
+ }
+ 
+ /* Recognize patterns for the Advanced SIMD REV64 + EXT insns, which reverse
+    elements within a full vector.  */
+ 
+ static bool
+ aarch64_evpc_rev64_ext (struct expand_vec_perm_d *d)
+ {
+   poly_uint64 nelt = d->perm.length ();
+ 
+   if (!d->one_vector_p || d->vec_flags != VEC_ADVSIMD)
+     return false;
+ 
+   if (!d->perm.series_p (0, 1, nelt - 1, -1))
+     return false;
+ 
+   if (is_bb_in_loop (gimple_bb (currently_expanding_gimple_stmt)))
+     return false;
+ 
+   if (d->testing_p)
+     return true;
+ 
+   rtx tmp1 = gen_reg_rtx (d->vmode);
+   rtx tmp2 = gen_reg_rtx (V16QImode);
+   rtx unspec_rev64
+       = gen_rtx_UNSPEC (d->vmode, gen_rtvec (1, d->op0), UNSPEC_REV64);
+   emit_set_insn (tmp1, unspec_rev64);
+   rtvec vec = gen_rtvec (3, gen_lowpart (V16QImode, tmp1),
+ 			 gen_lowpart (V16QImode, tmp1), GEN_INT (8));
+   rtx unspec_ext = gen_rtx_UNSPEC (V16QImode, vec, UNSPEC_EXT);
+   emit_set_insn (tmp2, unspec_ext);
+   emit_set_insn (d->target, gen_lowpart (d->vmode, tmp2));
+   return true;
+ }
+ 
  static bool
  aarch64_evpc_dup (struct expand_vec_perm_d *d)
  {
*************** aarch64_expand_vec_perm_const_1 (struct
*** 28849,28854 ****
--- 28897,28904 ----
  	    return true;
  	  else if (aarch64_evpc_hvla (d))
  	    return true;
+ 	  else if (aarch64_evpc_rev64_ext (d))
+ 	    return true;
  	  else if (aarch64_evpc_reencode (d))
  	    return true;
  
*************** aarch64_gen_ccmp_first (rtx_insn **prep_
*** 29729,29734 ****
--- 29779,29795 ----
        icode = CODE_FOR_cmpdi;
        break;
  
+     case E_HFmode:
+       if (!TARGET_FP_F16INST)
+ 	{
+ 	  end_sequence ();
+ 	  return NULL_RTX;
+ 	}
+       cmp_mode = HFmode;
+       cc_mode = aarch64_select_cc_mode (code, op0, op1);
+       icode = cc_mode == CCFPEmode ? CODE_FOR_fcmpehf : CODE_FOR_fcmphf;
+       break;
+ 
      case E_SFmode:
        cmp_mode = SFmode;
        cc_mode = aarch64_select_cc_mode (code, op0, op1);
*************** aarch64_gen_ccmp_next (rtx_insn **prep_s
*** 29785,29793 ****
--- 29846,29865 ----
    /* Exit early for modes that are ot handled to avoid O(n^2) part of expand_operands. */
    op_mode = TYPE_MODE (TREE_TYPE (treeop0));
    if (!(op_mode == QImode || op_mode == HImode || op_mode == SImode || op_mode == DImode
+ 	|| (op_mode == HFmode && TARGET_FP_F16INST)
  	|| op_mode == SFmode || op_mode == DFmode))
     return NULL_RTX;
  
+   /* A conditional comparison does not compare its operands when the preceding
+      condition is false, so it cannot raise the exception that the comparison
+      it replaces would raise.  CCFPE marks a comparison that raises Invalid for
+      a quiet NaN, and every comparison raises it for a signalling NaN.  Reject
+      it here, before the operands are expanded.  */
+   if (FLOAT_MODE_P (op_mode)
+       && (aarch64_fp_cc_mode (cmp_code, op_mode) == CCFPEmode
+ 	  || HONOR_SNANS (op_mode)))
+     return NULL_RTX;
+ 
    push_to_sequence (*prep_seq);
    expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, EXPAND_NORMAL);
  
*************** aarch64_gen_ccmp_next (rtx_insn **prep_s
*** 29810,29822 ****
        cmp_mode = DImode;
        break;
  
      case E_SFmode:
-       cmp_mode = SFmode;
-       cc_mode = aarch64_select_cc_mode (cmp_code, op0, op1);
-       break;
- 
      case E_DFmode:
!       cmp_mode = DFmode;
        cc_mode = aarch64_select_cc_mode (cmp_code, op0, op1);
        break;
  
--- 29882,29891 ----
        cmp_mode = DImode;
        break;
  
+     case E_HFmode:
      case E_SFmode:
      case E_DFmode:
!       cmp_mode = op_mode;
        cc_mode = aarch64_select_cc_mode (cmp_code, op0, op1);
        break;
  
diff -Nrcpad gcc-17-20260823/gcc/config/aarch64/aarch64.md gcc-17-20260830/gcc/config/aarch64/aarch64.md
*** gcc-17-20260823/gcc/config/aarch64/aarch64.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/aarch64/aarch64.md	Sun Aug 30 22:32:06 2026
***************
*** 1138,1158 ****
    }
  )
  
! (define_insn "@ccmp<CCFP_CCFPE:mode><GPF:mode>"
    [(set (match_operand:CCFP_CCFPE 1 "cc_register" "")
  	(if_then_else:CCFP_CCFPE
  	  (match_operator 4 "aarch64_comparison_operator"
  	   [(match_operand 0 "cc_register" "")
  	    (const_int 0)])
  	  (compare:CCFP_CCFPE
! 	    (match_operand:GPF 2 "register_operand" "w")
! 	    (match_operand:GPF 3 "register_operand" "w"))
  	  (unspec:CCFP_CCFPE
  	    [(match_operand 5 "immediate_operand")]
  	    UNSPEC_NZCV)))]
    "TARGET_FLOAT"
    "fccmp<e>\\t%<s>2, %<s>3, %k5, %m4"
!   [(set_attr "type" "fccmp<s>")]
  )
  
  (define_insn "@ccmp<CC_ONLY:mode><GPI:mode>_rev"
--- 1138,1158 ----
    }
  )
  
! (define_insn "@ccmp<CCFP_CCFPE:mode><GPF_F16:mode>"
    [(set (match_operand:CCFP_CCFPE 1 "cc_register" "")
  	(if_then_else:CCFP_CCFPE
  	  (match_operator 4 "aarch64_comparison_operator"
  	   [(match_operand 0 "cc_register" "")
  	    (const_int 0)])
  	  (compare:CCFP_CCFPE
! 	    (match_operand:GPF_F16 2 "register_operand" "w")
! 	    (match_operand:GPF_F16 3 "register_operand" "w"))
  	  (unspec:CCFP_CCFPE
  	    [(match_operand 5 "immediate_operand")]
  	    UNSPEC_NZCV)))]
    "TARGET_FLOAT"
    "fccmp<e>\\t%<s>2, %<s>3, %k5, %m4"
!   [(set_attr "type" "fccmp<stype>")]
  )
  
  (define_insn "@ccmp<CC_ONLY:mode><GPI:mode>_rev"
***************
*** 1175,1181 ****
    }
  )
  
! (define_insn "@ccmp<CCFP_CCFPE:mode><GPF:mode>_rev"
    [(set (match_operand:CCFP_CCFPE 1 "cc_register" "")
  	(if_then_else:CCFP_CCFPE
  	  (match_operator 4 "aarch64_comparison_operator"
--- 1175,1181 ----
    }
  )
  
! (define_insn "@ccmp<CCFP_CCFPE:mode><GPF_F16:mode>_rev"
    [(set (match_operand:CCFP_CCFPE 1 "cc_register" "")
  	(if_then_else:CCFP_CCFPE
  	  (match_operator 4 "aarch64_comparison_operator"
***************
*** 1185,1195 ****
  	    [(match_operand 5 "immediate_operand")]
  	    UNSPEC_NZCV)
  	  (compare:CCFP_CCFPE
! 	    (match_operand:GPF 2 "register_operand" "w")
! 	    (match_operand:GPF 3 "register_operand" "w"))))]
    "TARGET_FLOAT"
    "fccmp<e>\\t%<s>2, %<s>3, %k5, %M4"
!   [(set_attr "type" "fccmp<s>")]
  )
  
  ;; Expansion of signed mod by a power of 2 using CSNEG.
--- 1185,1195 ----
  	    [(match_operand 5 "immediate_operand")]
  	    UNSPEC_NZCV)
  	  (compare:CCFP_CCFPE
! 	    (match_operand:GPF_F16 2 "register_operand" "w")
! 	    (match_operand:GPF_F16 3 "register_operand" "w"))))]
    "TARGET_FLOAT"
    "fccmp<e>\\t%<s>2, %<s>3, %k5, %M4"
!   [(set_attr "type" "fccmp<stype>")]
  )
  
  ;; Expansion of signed mod by a power of 2 using CSNEG.
***************
*** 4959,4966 ****
  ;; CRC32 instructions.
  (define_insn "aarch64_<crc_variant>"
    [(set (match_operand:SI 0 "register_operand" "=r")
!         (unspec:SI [(match_operand:SI 1 "register_operand" "r")
!                     (match_operand:<crc_mode> 2 "register_operand" "r")]
           CRC))]
    "TARGET_CRC32"
    {
--- 4959,4966 ----
  ;; CRC32 instructions.
  (define_insn "aarch64_<crc_variant>"
    [(set (match_operand:SI 0 "register_operand" "=r")
! 	(unspec:SI [(match_operand:SI 1 "aarch64_reg_or_zero" "rZ")
! 		    (match_operand:<crc_mode> 2 "aarch64_reg_or_zero" "rZ")]
           CRC))]
    "TARGET_CRC32"
    {
diff -Nrcpad gcc-17-20260823/gcc/config/alpha/alpha.cc gcc-17-20260830/gcc/config/alpha/alpha.cc
*** gcc-17-20260823/gcc/config/alpha/alpha.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/alpha/alpha.cc	Sun Aug 30 22:32:06 2026
*************** alpha_expand_unaligned_load (rtx tgt, rt
*** 3509,3515 ****
  
    meml = gen_reg_rtx (DImode);
    memh = gen_reg_rtx (DImode);
-   addr = gen_reg_rtx (DImode);
    extl = gen_reg_rtx (DImode);
    exth = gen_reg_rtx (DImode);
  
--- 3509,3514 ----
*************** alpha_expand_unaligned_load (rtx tgt, rt
*** 3538,3544 ****
  
    if (sign && size == 2)
      {
!       emit_move_insn (addr, plus_constant (Pmode, mema, ofs+2));
  
        emit_insn (gen_extql (extl, meml, addr));
        emit_insn (gen_extqh (exth, memh, addr));
--- 3537,3543 ----
  
    if (sign && size == 2)
      {
!       addr = copy_addr_to_reg (plus_constant (Pmode, mema, ofs + 2));
  
        emit_insn (gen_extql (extl, meml, addr));
        emit_insn (gen_extqh (exth, memh, addr));
*************** alpha_expand_unaligned_load (rtx tgt, rt
*** 3552,3558 ****
      }
    else
      {
!       emit_move_insn (addr, plus_constant (Pmode, mema, ofs));
        emit_insn (gen_extxl (extl, meml, GEN_INT (size*8), addr));
        switch ((int) size)
  	{
--- 3551,3557 ----
      }
    else
      {
!       addr = copy_addr_to_reg (plus_constant (Pmode, mema, ofs));
        emit_insn (gen_extxl (extl, meml, GEN_INT (size*8), addr));
        switch ((int) size)
  	{
*************** alpha_expand_unaligned_store_safe_partia
*** 3771,3780 ****
    /* Must handle high before low for degenerate case of aligned.  */
    if (size != 1)
      {
!       rtx addrh = gen_reg_rtx (DImode);
        rtx aligned_addrh = gen_reg_rtx (DImode);
-       emit_insn (gen_rtx_SET (addrh,
- 			      plus_constant (DImode, dsta, ofs + size - 1)));
        emit_insn (gen_rtx_SET (aligned_addrh,
  			      gen_rtx_AND (DImode, addrh, GEN_INT (-8))));
  
--- 3770,3778 ----
    /* Must handle high before low for degenerate case of aligned.  */
    if (size != 1)
      {
!       rtx addrh = copy_addr_to_reg (plus_constant (Pmode, dsta,
! 						   ofs + size - 1));
        rtx aligned_addrh = gen_reg_rtx (DImode);
        emit_insn (gen_rtx_SET (aligned_addrh,
  			      gen_rtx_AND (DImode, addrh, GEN_INT (-8))));
  
*************** alpha_expand_unaligned_store_safe_partia
*** 3882,3890 ****
      }
  
    /* Now handle low.  */
!   rtx addrl = gen_reg_rtx (DImode);
    rtx aligned_addrl = gen_reg_rtx (DImode);
-   emit_insn (gen_rtx_SET (addrl, plus_constant (DImode, dsta, ofs)));
    emit_insn (gen_rtx_SET (aligned_addrl,
  			  gen_rtx_AND (DImode, addrl, GEN_INT (-8))));
  
--- 3880,3887 ----
      }
  
    /* Now handle low.  */
!   rtx addrl = copy_addr_to_reg (plus_constant (Pmode, dsta, ofs));
    rtx aligned_addrl = gen_reg_rtx (DImode);
    emit_insn (gen_rtx_SET (aligned_addrl,
  			  gen_rtx_AND (DImode, addrl, GEN_INT (-8))));
  
*************** alpha_initial_elimination_offset (unsign
*** 8075,8081 ****
    switch (from)
      {
      case FRAME_POINTER_REGNUM:
!       break;
  
      case ARG_POINTER_REGNUM:
        ret += (ALPHA_ROUND (get_frame_size ()
--- 8072,8083 ----
    switch (from)
      {
      case FRAME_POINTER_REGNUM:
!       /* With a downward-growing frame the frame pointer sits at the high
! 	 end of the local variables, which is where the argument pointer
! 	 is too.  */
!       if (!FRAME_GROWS_DOWNWARD)
! 	break;
!       /* FALLTHRU */
  
      case ARG_POINTER_REGNUM:
        ret += (ALPHA_ROUND (get_frame_size ()
*************** alpha_vms_initial_elimination_offset (un
*** 8160,8167 ****
      switch (from)
        {
        case FRAME_POINTER_REGNUM:
! 	offset = ALPHA_ROUND (sa_size + pv_save_size);
! 	break;
        case ARG_POINTER_REGNUM:
  	offset = (ALPHA_ROUND (sa_size + pv_save_size
  			       + get_frame_size ()
--- 8162,8177 ----
      switch (from)
        {
        case FRAME_POINTER_REGNUM:
! 	/* With a downward-growing frame the frame pointer sits at the high
! 	   end of the local variables, which is where the argument pointer
! 	   is too.  */
! 	if (!FRAME_GROWS_DOWNWARD)
! 	  {
! 	    offset = ALPHA_ROUND (sa_size + pv_save_size);
! 	    break;
! 	  }
! 	/* FALLTHRU */
! 
        case ARG_POINTER_REGNUM:
  	offset = (ALPHA_ROUND (sa_size + pv_save_size
  			       + get_frame_size ()
diff -Nrcpad gcc-17-20260823/gcc/config/alpha/alpha.h gcc-17-20260830/gcc/config/alpha/alpha.h
*** gcc-17-20260823/gcc/config/alpha/alpha.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/alpha/alpha.h	Sun Aug 30 22:32:06 2026
*************** enum reg_class {
*** 479,486 ****
  /* Define this to nonzero if the nominal address of the stack frame
     is at the high-address end of the local variables;
     that is, each additional local variable allocated
!    goes at a more negative offset in the frame.  */
! /* #define FRAME_GROWS_DOWNWARD 0 */
  
  /* If we generate an insn to push BYTES bytes,
     this says how many the stack pointer really advances by.
--- 479,491 ----
  /* Define this to nonzero if the nominal address of the stack frame
     is at the high-address end of the local variables;
     that is, each additional local variable allocated
!    goes at a more negative offset in the frame.
! 
!    The stack protector requires that the canary be placed above the
!    local arrays it protects, which only happens with a downward-growing
!    frame.  Alpha otherwise grows the frame upward, so switch the
!    direction only when the stack protector is in use.  */
! #define FRAME_GROWS_DOWNWARD (flag_stack_protect != 0)
  
  /* If we generate an insn to push BYTES bytes,
     this says how many the stack pointer really advances by.
*************** enum reg_class {
*** 623,628 ****
--- 628,641 ----
  
  #define RETURN_ADDR_RTX  alpha_return_addr
  
+ /* An Alpha frame carries no link to its caller: $15 is a frame pointer only
+    in a function that needs one, and offset 0 of a frame that has one holds
+    the saved return address, not a saved frame pointer.  Decline frames above
+    the current one the way alpha_return_addr already does, so that the caller
+    gets 0 and a diagnostic rather than a text address.  */
+ 
+ #define FRAME_ADDR_RTX(COUNT, FRAME) ((COUNT) == 0 ? (FRAME) : NULL_RTX)
+ 
  /* Provide a definition of DWARF_FRAME_REGNUM here so that fallback unwinders
     can use DWARF_ALT_FRAME_RETURN_COLUMN defined below.  This is just the same
     as the default definition in dwarf2out.cc.  */
diff -Nrcpad gcc-17-20260823/gcc/config/alpha/alpha.md gcc-17-20260830/gcc/config/alpha/alpha.md
*** gcc-17-20260823/gcc/config/alpha/alpha.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/alpha/alpha.md	Sun Aug 30 22:32:06 2026
***************
*** 58,63 ****
--- 58,67 ----
    UNSPEC_ATOMIC
    UNSPEC_CMPXCHG
    UNSPEC_XCHG
+ 
+   ;; Stack protector
+   UNSPEC_SSP_SET
+   UNSPEC_SSP_TEST
  ])
  
  ;; UNSPEC_VOLATILE:
***************
*** 3680,3685 ****
--- 3684,3754 ----
    "call_pal 0x81"
    [(set_attr "type" "callpal")])
  
+ ;; Stack protector.  The canary is read from __stack_chk_guard, whose
+ ;; address is not a valid memory address on its own, so legitimize it
+ ;; here; only the address, never the canary value itself, is allowed to
+ ;; live in a pseudo.
+ 
+ (define_expand "stack_protect_set"
+   [(match_operand:DI 0 "memory_operand")
+    (match_operand:DI 1 "memory_operand")]
+   ""
+ {
+   if (!memory_operand (operands[1], DImode))
+     operands[1] = replace_equiv_address (operands[1],
+ 					 copy_addr_to_reg (XEXP (operands[1],
+ 								 0)));
+   emit_insn (gen_stack_protect_setdi (operands[0], operands[1]));
+   DONE;
+ })
+ 
+ ;; DO NOT SPLIT THIS PATTERN.  It is important for security reasons that
+ ;; the canary value does not live beyond the life of this sequence.
+ (define_insn "stack_protect_setdi"
+   [(set (match_operand:DI 0 "memory_operand" "=m")
+ 	(unspec:DI [(match_operand:DI 1 "memory_operand" "m")]
+ 		   UNSPEC_SSP_SET))
+    (set (match_scratch:DI 2 "=&r") (const_int 0))]
+   ""
+   "ldq %2,%1\;stq %2,%0\;bis $31,$31,%2"
+   [(set_attr "type" "multi")
+    (set_attr "length" "12")])
+ 
+ (define_expand "stack_protect_test"
+   [(match_operand:DI 0 "memory_operand")
+    (match_operand:DI 1 "memory_operand")
+    (match_operand 2)]
+   ""
+ {
+   rtx res, ops[4];
+ 
+   if (!memory_operand (operands[1], DImode))
+     operands[1] = replace_equiv_address (operands[1],
+ 					 copy_addr_to_reg (XEXP (operands[1],
+ 								 0)));
+   res = gen_reg_rtx (DImode);
+   emit_insn (gen_stack_protect_testdi (res, operands[0], operands[1]));
+ 
+   ops[0] = gen_rtx_EQ (VOIDmode, res, const0_rtx);
+   ops[1] = res;
+   ops[2] = const0_rtx;
+   ops[3] = operands[2];
+   alpha_emit_conditional_branch (ops, DImode);
+   DONE;
+ })
+ 
+ ;; DO NOT SPLIT THIS PATTERN, as above.
+ (define_insn "stack_protect_testdi"
+   [(set (match_operand:DI 0 "register_operand" "=&r")
+ 	(unspec:DI [(match_operand:DI 1 "memory_operand" "m")
+ 		    (match_operand:DI 2 "memory_operand" "m")]
+ 		   UNSPEC_SSP_TEST))
+    (clobber (match_scratch:DI 3 "=&r"))]
+   ""
+   "ldq %0,%1\;ldq %3,%2\;xor %0,%3,%0\;bis $31,$31,%3"
+   [(set_attr "type" "multi")
+    (set_attr "length" "16")])
+ 
  ;; For userland, we load the thread pointer from the TCB.
  ;; For the kernel, we load the per-cpu private value.
  
diff -Nrcpad gcc-17-20260823/gcc/config/alpha/alpha.opt gcc-17-20260830/gcc/config/alpha/alpha.opt
*** gcc-17-20260823/gcc/config/alpha/alpha.opt	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/alpha/alpha.opt	Sun Aug 30 22:32:06 2026
*************** Use fp registers.
*** 28,34 ****
  
  mgas
  Target Ignore Undocumented
! Does nothing. Preserved for backward compatibility.
  
  mieee-conformant
  Target RejectNegative Mask(IEEE_CONFORMANT)
--- 28,34 ----
  
  mgas
  Target Ignore Undocumented
! Does nothing.  Preserved for backward compatibility.
  
  mieee-conformant
  Target RejectNegative Mask(IEEE_CONFORMANT)
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr-passes.cc gcc-17-20260830/gcc/config/avr/avr-passes.cc
*** gcc-17-20260823/gcc/config/avr/avr-passes.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr-passes.cc	Sun Aug 30 22:32:06 2026
***************
*** 30,35 ****
--- 30,38 ----
  #include "rtl.h"
  #include "rtl-iter.h"
  #include "tree.h"
+ #include "gimple.h"
+ #include "gimple-iterator.h"
+ #include "gimple-walk.h"
  #include "diagnostic-core.h"
  #include "cfghooks.h"
  #include "cfganal.h"
*************** public:
*** 3346,3352 ****
  
    bool gate (function *) final override
    {
!     return optimize > 0;
    }
  
    unsigned int execute (function *func) final override;
--- 3349,3355 ----
  
    bool gate (function *) final override
    {
!     return optimize > 0 && avropt_fuse_ifelse;
    }
  
    unsigned int execute (function *func) final override;
*************** public:
*** 5555,5560 ****
--- 5558,5649 ----
    }
  }; // avr_pass_recompute_notes
  
+ 
+ 
+ //////////////////////////////////////////////////////////////////////////////
+ // Determine whether the target code uses some features:
+ // - avr_uses_vtable_p: Are there vtable calls?
+ // - avr_uses_double_p: Is double being used?
+ // - avr_uses_long_double_p: Is long double being used?
+ // In any case, avr_file_end handles objects in static storage.
+ 
+ static const pass_data avr_pass_data_has =
+ {
+   GIMPLE_PASS,   // type
+   "",            // name (will be patched)
+   OPTGROUP_NONE, // optinfo_flags
+   TV_NONE,       // tv_id
+   PROP_cfg | PROP_ssa, // properties_required
+   0,             // properties_provided
+   0,             // properties_destroyed
+   0,             // todo_flags_start
+   0              // todo_flags_finish
+ };
+ 
+ class avr_pass_has : public gimple_opt_pass
+ {
+ public:
+   avr_pass_has (gcc::context *ctxt, const char *name)
+     : gimple_opt_pass (avr_pass_data_has, ctxt)
+   {
+     this->name = name;
+   }
+ 
+   static tree op_callback (tree *t, int *walk_subtrees, void *data)
+   {
+     // Almost all of a function's data is piped through SSA_NAMEs, so that
+     // for the purpose of avr_uses_[long_]double_p it is sufficient to look
+     // at these and compile-time constants.
+     if (SSA_VAR_P (*t)
+ 	|| TREE_CODE (*t) == REAL_CST
+ 	|| TREE_CODE (*t) == COMPLEX_CST)
+       {
+ 	walk_stmt_info *wi = (walk_stmt_info *) data;
+ 	avr_find_double (TREE_TYPE (*t), wi->pset);
+       }
+ 
+     *walk_subtrees = 1;
+     return NULL_TREE;
+   }
+ 
+   void scan_bb (basic_block bb, walk_stmt_info &wi)
+   {
+     gimple_stmt_iterator gsi;
+     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+       {
+ 	tree fncall;
+ 	gimple *stmt = gsi_stmt (gsi);
+ 
+ 	if (is_gimple_call (stmt)
+ 	    && (fncall = gimple_call_fn (stmt))
+ 	    && TREE_CODE (fncall) == OBJ_TYPE_REF)
+ 	  avr_uses_vtable_p = true;
+ 
+ 	walk_gimple_op (stmt, op_callback, &wi);
+       }
+   }
+ 
+ #ifndef HAVE_AS_AVR_GNU_ATTRIBUTE
+   bool gate (function *) final override
+   {
+     return false;
+   }
+ #endif // !HAVE_AS_AVR_GNU_ATTRIBUTE
+ 
+   unsigned int execute (function *func) final override
+   {
+     walk_stmt_info wi;
+     hash_set<tree> hset;
+     wi.pset = &hset;
+ 
+     basic_block bb;
+     FOR_ALL_BB_FN (bb, func)
+       scan_bb (bb, wi);
+ 
+     return 0;
+   }
+ }; // avr_pass_has
+ 
  } // anonymous namespace
  
  
*************** avr_split_ldst (rtx *xop)
*** 5850,5855 ****
--- 5939,5952 ----
  // according to the pass declaration in avr-passes.def.  GCC's pass
  // manager uses these function to create the respective pass object.
  
+ // This pass sets `avr_uses_vtable_p'.
+ 
+ gimple_opt_pass *
+ make_avr_pass_has (gcc::context *ctxt)
+ {
+   return new avr_pass_has (ctxt, "avr-has");
+ }
+ 
  // Optimize results of the casesi expander for modes < SImode.
  
  rtl_opt_pass *
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr-passes.def gcc-17-20260830/gcc/config/avr/avr-passes.def
*** gcc-17-20260823/gcc/config/avr/avr-passes.def	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr-passes.def	Sun Aug 30 22:32:06 2026
***************
*** 17,22 ****
--- 17,31 ----
     along with GCC; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
  
+ /* A gimple pass that sets
+    `avr_uses_vtable_p', i.e. whether the target code is using vtables.
+    `avr_uses_double_p', i.e. whether the target code is using double.
+    `avr_uses_long_double_p', i.e. whether the target code is using long double.
+    Where the pass is inserted doesn't really matter,
+    though it should be an SSA pass that runs after LTO streaming.  */
+ 
+ INSERT_PASS_AFTER (pass_musttail, 1, avr_pass_has);
+ 
  /* A post reload optimization pass that fuses PLUS insns with CONST_INT
     addend with a load or store insn to get POST_INC or PRE_DEC addressing.
     It can also fuse two PLUSes to a single one, which may occur due to
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr-protos.h gcc-17-20260830/gcc/config/avr/avr-protos.h
*** gcc-17-20260823/gcc/config/avr/avr-protos.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr-protos.h	Sun Aug 30 22:32:06 2026
*************** extern void avr_declare_function_name (F
*** 38,43 ****
--- 38,44 ----
  extern void asm_output_external (FILE *file, tree decl, char *name);
  extern int avr_progmem_p (tree decl, tree attributes);
  extern bool avr_addr_space_supported_p (addr_space_t, location_t loc = UNKNOWN_LOCATION);
+ extern void avr_find_double (tree typ, hash_set<tree> *pset);
  
  #ifdef RTX_CODE /* inside TREE_CODE */
  extern void avr_init_cumulative_args (CUMULATIVE_ARGS*, tree, rtx, tree);
*************** extern void asm_output_float (FILE *file
*** 194,205 ****
--- 195,209 ----
  #endif
  
  extern bool avr_have_dimode;
+ extern bool avr_uses_vtable_p;
  
  /* From avr-passes.cc */
  
  namespace gcc { class context; }
  class rtl_opt_pass;
+ class gimple_opt_pass;
  
+ extern gimple_opt_pass *make_avr_pass_has (gcc::context *);
  extern rtl_opt_pass *make_avr_pass_fuse_add (gcc::context *);
  extern rtl_opt_pass *make_avr_pass_fuse_move (gcc::context *);
  extern rtl_opt_pass *make_avr_pass_pre_proep (gcc::context *);
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr.cc gcc-17-20260830/gcc/config/avr/avr.cc
*** gcc-17-20260823/gcc/config/avr/avr.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr.cc	Sun Aug 30 22:32:06 2026
***************
*** 108,122 ****
     enum from avr.h (or designated initialized must be used).  */
  const avr_addrspace_t avr_addrspace[ADDR_SPACE_COUNT] =
  {
!   { ADDR_SPACE_RAM,  0, 2, "", 0, nullptr },
!   { ADDR_SPACE_FLASH,  1, 2, "__flash",   0, ".progmem.data" },
!   { ADDR_SPACE_FLASH1, 1, 2, "__flash1",  1, ".progmem1.data" },
!   { ADDR_SPACE_FLASH2, 1, 2, "__flash2",  2, ".progmem2.data" },
!   { ADDR_SPACE_FLASH3, 1, 2, "__flash3",  3, ".progmem3.data" },
!   { ADDR_SPACE_FLASH4, 1, 2, "__flash4",  4, ".progmem4.data" },
!   { ADDR_SPACE_FLASH5, 1, 2, "__flash5",  5, ".progmem5.data" },
!   { ADDR_SPACE_FLASHX, 1, 3, "__flashx",  0, ".progmemx.data" },
!   { ADDR_SPACE_MEMX, 1, 3, "__memx",  0, ".progmemx.data" },
  };
  
  
--- 108,129 ----
     enum from avr.h (or designated initialized must be used).  */
  const avr_addrspace_t avr_addrspace[ADDR_SPACE_COUNT] =
  {
!   { ADDR_SPACE_RAM,  0, 2, "", 0, nullptr, Val_GNU_AVR_VTABLE_RAM },
!   { ADDR_SPACE_FLASH,  1, 2, "__flash",  0, ".progmem.data",
! 					    Val_GNU_AVR_VTABLE_FLASH },
!   { ADDR_SPACE_FLASH1, 1, 2, "__flash1", 1, ".progmem1.data",
! 					    Val_GNU_AVR_VTABLE_FLASH1 },
!   { ADDR_SPACE_FLASH2, 1, 2, "__flash2", 2, ".progmem2.data",
! 					    Val_GNU_AVR_VTABLE_FLASH2 },
!   { ADDR_SPACE_FLASH3, 1, 2, "__flash3", 3, ".progmem3.data",
! 					    Val_GNU_AVR_VTABLE_FLASH3 },
!   { ADDR_SPACE_FLASH4, 1, 2, "__flash4", 4, ".progmem4.data",
! 					    Val_GNU_AVR_VTABLE_FLASH4 },
!   { ADDR_SPACE_FLASH5, 1, 2, "__flash5", 5, ".progmem5.data",
! 					    Val_GNU_AVR_VTABLE_FLASH5 },
!   { ADDR_SPACE_FLASHX, 1, 3, "__flashx", 0, ".progmemx.data",
! 					    Val_GNU_AVR_VTABLE_FLASHX },
!   { ADDR_SPACE_MEMX, 1, 3, "__memx", 0, ".progmemx.data", -1 },
  };
  
  
*************** bool avr_need_clear_bss_p = false;
*** 249,254 ****
--- 256,272 ----
  bool avr_need_copy_data_p = false;
  bool avr_has_rodata_p = false;
  
+ /* Features used by the target code that are affected by the chosen ABI.
+    Output as .gnu_attribute in order to guarantee that only compatible
+    objects files are linked together.
+       Notice that for the latter two cases, there are loop holes like
+    sizeof(double).  Just mapping -mdouble=X to a .gnu_attribute *,X
+    would be too strict since libgcc may reuse a multilib provided it
+    doesn't depend on -m[long-]double.  */
+ bool avr_uses_vtable_p = false;
+ static bool avr_uses_double_p = false;
+ static bool avr_uses_long_double_p = false;
+ 
  /* Counts how often pass avr-fuse-add has been executed.  It is kept in
     sync with cfun->machine->n_avr_fuse_add_executed and serves as an
     insn condition for shift insn splitters.  */
*************** avr_file_start (void)
*** 12786,12791 ****
--- 12804,12844 ----
  }
  
  
+ /* Scan TYP for the occurence of [long] double, and set `avr_uses_double_p'
+    and `avr_uses_long_double_p' accordingly.  This is used by avr_file_end()
+    and also by the avr_pass_has gimple pass.
+    walk_tree() doesn't quite fit the puropse, so cook our own.  */
+ 
+ void
+ avr_find_double (tree typ, hash_set<tree> *pset)
+ {
+   if (typ == NULL_TREE
+       || typ == error_mark_node
+       || pset->add (typ))
+     return;
+ 
+   if (POINTER_TYPE_P (typ))
+     return avr_find_double (TREE_TYPE (typ), pset);
+ 
+   if (TREE_CODE (typ) == ARRAY_TYPE)
+     return avr_find_double (strip_array_types (typ), pset);
+ 
+   if (RECORD_OR_UNION_TYPE_P (typ))
+     {
+       for (tree fld = TYPE_FIELDS (typ); fld; fld = DECL_CHAIN (fld))
+ 	if (TREE_CODE (fld) == FIELD_DECL)
+ 	  avr_find_double (TREE_TYPE (fld), pset);
+       return;
+     }
+ 
+   if (VECTOR_FLOAT_TYPE_P (typ) || COMPLEX_FLOAT_TYPE_P (typ))
+     typ = TREE_TYPE (typ);
+ 
+   avr_uses_double_p |= TYPE_MAIN_VARIANT (typ) == double_type_node;
+   avr_uses_long_double_p |= TYPE_MAIN_VARIANT (typ) == long_double_type_node;
+ }
+ 
+ 
  /* Implement `TARGET_ASM_FILE_END'.  */
  /* Outputs to the stdio stream FILE some
     appropriate text to go at the end of an assembler file.  */
*************** avr_file_end (void)
*** 12805,12810 ****
--- 12858,12896 ----
  
    if (avr_need_clear_bss_p)
      fputs (".global __do_clear_bss\n", asm_out_file);
+ 
+ #ifdef HAVE_AS_AVR_GNU_ATTRIBUTE
+   /* Output .gnu_attribute to tag object files with aspects of the ABI. */
+ 
+   hash_set<tree> hset;
+   varpool_node *vnode;
+ 
+   FOR_EACH_VARIABLE (vnode)
+     {
+       const char *id = IDENTIFIER_POINTER (DECL_NAME (vnode->decl));
+       avr_uses_vtable_p |= startswith (id, "_ZTV"); // vtable
+       avr_uses_vtable_p |= startswith (id, "_ZTT"); // vtable table
+ 
+       avr_find_double (TREE_TYPE (vnode->decl), &hset);
+     }
+ 
+   // .gnu_attribute 4: The named address space for C++ virtual tables.
+   if (avr_uses_vtable_p)
+     fprintf (asm_out_file, ".gnu_attribute %d,%d\n",
+ 	     Tag_GNU_AVR_VTABLE_AS, Val_GNU_AVR_VTABLE_RAM);
+ 
+   // .gnu_attribute 8: The bitsize of double, or 0 if not used.
+   if (avr_uses_double_p)
+     fprintf (asm_out_file, ".gnu_attribute %d,%d\n",
+ 	     Tag_GNU_AVR_BITS_DOUBLE,
+ 	     (int) (CHAR_BIT * int_size_in_bytes (double_type_node)));
+ 
+   // .gnu_attribute 12: The bitsize of long double, or 0 if not used.
+   if (avr_uses_long_double_p)
+     fprintf (asm_out_file, ".gnu_attribute %d,%d\n",
+ 	     Tag_GNU_AVR_BITS_LONG_DOUBLE,
+ 	     (int) (CHAR_BIT * int_size_in_bytes (long_double_type_node)));
+ #endif // HAVE_AS_AVR_GNU_ATTRIBUTE
  }
  
  
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr.h gcc-17-20260830/gcc/config/avr/avr.h
*** gcc-17-20260823/gcc/config/avr/avr.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr.h	Sun Aug 30 22:32:06 2026
*************** typedef struct
*** 38,43 ****
--- 38,46 ----
  
    /* Section prefix, e.g. ".progmem1.data"  */
    const char *section_name;
+ 
+   /* Value for Tag_GNU_AVR_VTABLE_AS (4) is 1 + id.  */
+   int gnu_attr_val;
  } avr_addrspace_t;
  
  extern const avr_addrspace_t avr_addrspace[];
*************** enum reg_class {
*** 321,330 ****
  
  #define RETURN_ADDR_RTX(count, tem) avr_return_addr_rtx (count, tem)
  
- /* Don't use Push rounding. expr.cc: emit_single_push_insn is broken
-    for POST_DEC targets (PR27386).  */
- /*#define PUSH_ROUNDING(NPUSHED) (NPUSHED)*/
- 
  typedef struct avr_args
  {
    /* # Registers available for passing */
--- 324,329 ----
*************** struct GTY(()) machine_function
*** 603,609 ****
  };
  
  /* AVR does not round pushes, but the existence of this macro is
!    required in order for pushes to be generated.  */
  #define PUSH_ROUNDING(X)	(X)
  
  /* Define prototype here to avoid build warning.  Some files using
--- 602,612 ----
  };
  
  /* AVR does not round pushes, but the existence of this macro is
!    required in order for pushes to be generated.
!    This macro was removed for PR27386 and then later re-added when
!    push insns were introduced.  Push insns can work around broken
!    argument setup in expr.cc that doesn't work properly for
!    STACK_GROWS_DOWNWARDS + POST_DEC push, see PR127098.  */
  #define PUSH_ROUNDING(X)	(X)
  
  /* Define prototype here to avoid build warning.  Some files using
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr.md gcc-17-20260830/gcc/config/avr/avr.md
*** gcc-17-20260823/gcc/config/avr/avr.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr.md	Sun Aug 30 22:32:06 2026
***************
*** 113,118 ****
--- 113,135 ----
     (GASISR_Done     0)
     ])
  
+ ;; Repeat values for .gnu_attribute from Binutils include/elf/avr.h.
+ (define_constants
+  [(Tag_GNU_AVR_VTABLE_AS 4)
+   (Val_GNU_AVR_VTABLE_NONE   0)
+   (Val_GNU_AVR_VTABLE_RAM    1)
+   (Val_GNU_AVR_VTABLE_FLASH  2)
+   (Val_GNU_AVR_VTABLE_FLASH1 3)
+   (Val_GNU_AVR_VTABLE_FLASH2 4)
+   (Val_GNU_AVR_VTABLE_FLASH3 5)
+   (Val_GNU_AVR_VTABLE_FLASH4 6)
+   (Val_GNU_AVR_VTABLE_FLASH5 7)
+   (Val_GNU_AVR_VTABLE_FLASHX 8)
+ 
+   (Tag_GNU_AVR_BITS_DOUBLE       8)
+   (Tag_GNU_AVR_BITS_LONG_DOUBLE 12)
+   ])
+ 
  (include "predicates.md")
  (include "constraints.md")
  
***************
*** 478,484 ****
     HI CHI HA UHA HQ UHQ
     SI CSI SA USA SQ USQ
     DI CDI DA UDA DQ UDQ
!    TA UTA
     SF DF SC DC
     PSI])
  
--- 495,501 ----
     HI CHI HA UHA HQ UHQ
     SI CSI SA USA SQ USQ
     DI CDI DA UDA DQ UDQ
!    TA UTA TI
     SF DF SC DC
     PSI])
  
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr.opt gcc-17-20260830/gcc/config/avr/avr.opt
*** gcc-17-20260823/gcc/config/avr/avr.opt	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr.opt	Sun Aug 30 22:32:06 2026
*************** mfract-convert-truncate
*** 164,169 ****
--- 164,173 ----
  Target Mask(FRACT_CONV_TRUNC)
  Allow to use truncation instead of rounding towards zero for fractional fixed-point types.
  
+ mfuse-ifelse
+ Target Var(avropt_fuse_ifelse) Init(0) Optimization
+ Optimize compare-branch-compare-branch sequences to compare-branch-branch.
+ 
  mfuse-move
  Target Alias(mfuse-move=, 23, 0) Optimization
  Optimization. Run a post-reload pass that tweaks move instructions.
diff -Nrcpad gcc-17-20260823/gcc/config/avr/avr.opt.urls gcc-17-20260830/gcc/config/avr/avr.opt.urls
*** gcc-17-20260823/gcc/config/avr/avr.opt.urls	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/avr/avr.opt.urls	Sun Aug 30 22:32:06 2026
*************** UrlSuffix(gcc/AVR-Options.html#index-Wmi
*** 96,101 ****
--- 96,104 ----
  mfract-convert-truncate
  UrlSuffix(gcc/AVR-Options.html#index-mfract-convert-truncate)
  
+ mfuse-ifelse
+ UrlSuffix(gcc/AVR-Options.html#index-mfuse-ifelse)
+ 
  mfuse-move
  UrlSuffix(gcc/AVR-Options.html#index-mfuse-move)
  
diff -Nrcpad gcc-17-20260823/gcc/config/cris/cris.md gcc-17-20260830/gcc/config/cris/cris.md
*** gcc-17-20260823/gcc/config/cris/cris.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/cris/cris.md	Sun Aug 30 22:32:06 2026
***************
*** 430,449 ****
  ;; power of 2, or if val + 1 is a power of two, where we check for a bunch
  ;; of zeros starting at bit 0).
  
! (define_insn "*btst<BWD:mode><ZnNNZSET:mode>"
    [(set (reg:ZnNNZSET CRIS_CC0_REGNUM)
  	(compare:ZnNNZSET
! 	 (zero_extract:BWD
! 	  (match_operand:BWD 0 "nonmemory_operand" "r, r,r, r,r, r,Kp")
  	  (match_operand:SI 1 "const_int_operand" "Kc,n,Kc,n,Kc,n,n")
  	  (match_operand:SI 2 "nonmemory_operand" "M, M,Kc,n,r, r,r"))
  	 (const_int 0)))]
    ;; Either it is a single bit, or consecutive ones starting at 0.
    "reload_completed
     && CONST_INT_P (operands[1])
!    && ((operands[1] == const1_rtx && <ZnNNZSET:MODE>mode == CC_ZnNmode)
!        || (operands[2] == const0_rtx && <ZnNNZSET:MODE>mode == CC_NZmode))
!    && (REG_S_P (operands[0])
         || (operands[1] == const1_rtx
  	   && REG_S_P (operands[2])
  	   && CONST_INT_P (operands[0])
--- 430,453 ----
  ;; power of 2, or if val + 1 is a power of two, where we check for a bunch
  ;; of zeros starting at bit 0).
  
! ;; SImode.  This mode is the only one needed, since we generate only
! ;; SImode in the define_insn_and_split splitters.  Note that first
! ;; operand can also be HImode or QImode.
! (define_insn "*btst<mode>"
    [(set (reg:ZnNNZSET CRIS_CC0_REGNUM)
  	(compare:ZnNNZSET
! 	 (zero_extract:SI
! 	  (match_operand 0 "nonmemory_operand"    "r, r,r, r,r, r,Kp")
  	  (match_operand:SI 1 "const_int_operand" "Kc,n,Kc,n,Kc,n,n")
  	  (match_operand:SI 2 "nonmemory_operand" "M, M,Kc,n,r, r,r"))
  	 (const_int 0)))]
    ;; Either it is a single bit, or consecutive ones starting at 0.
    "reload_completed
     && CONST_INT_P (operands[1])
!    && ((operands[1] == const1_rtx && <MODE>mode == CC_ZnNmode)
!        || (operands[2] == const0_rtx && <MODE>mode == CC_NZmode))
!    && ((REG_S_P (operands[0])
!         && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD)
         || (operands[1] == const1_rtx
  	   && REG_S_P (operands[2])
  	   && CONST_INT_P (operands[0])
***************
*** 2195,2205 ****
    "swapwb %0"
    [(set_attr "slottable" "yes")])
  
  ;; This instruction swaps all bits in a register.
  ;; That means that the most significant bit is put in the place
  ;; of the least significant bit, and so on.
  
! (define_insn "cris_swap_bits"
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(bitreverse:SI (match_operand:SI 1 "register_operand" "0")))
     (clobber (reg:CC CRIS_CC0_REGNUM))]
--- 2199,2218 ----
    "swapwb %0"
    [(set_attr "slottable" "yes")])
  
+ (define_insn "*bswapsi2_not<setcc><setnz><setnzvc>"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+ 	(bswap:SI
+ 	 (not:SI (match_operand:SI 1 "register_operand" "0"))))
+    (clobber (reg:CC CRIS_CC0_REGNUM))]
+   "TARGET_HAS_SWAP"
+   "swapnwb %0"
+   [(set_attr "slottable" "yes")])
+ 
  ;; This instruction swaps all bits in a register.
  ;; That means that the most significant bit is put in the place
  ;; of the least significant bit, and so on.
  
! (define_insn "<acc><anz><anzvc>bitreversesi2<setcc><setnz><setnzvc>"
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(bitreverse:SI (match_operand:SI 1 "register_operand" "0")))
     (clobber (reg:CC CRIS_CC0_REGNUM))]
***************
*** 2207,2212 ****
--- 2220,2254 ----
    "swapwbr %0"
    [(set_attr "slottable" "yes")])
  
+ ;; Takes an cycle extra but is shorter than a BITREVERSE and a NOT.
+ (define_insn "*bitreversesi2_not<setcc><setnz><setnzvc>"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+ 	(bitreverse:SI
+ 	 (not:SI (match_operand:SI 1 "register_operand" "0"))))
+    (clobber (reg:CC CRIS_CC0_REGNUM))]
+   "TARGET_HAS_SWAP"
+   "swapnwbr %0"
+   [(set_attr "slottable" "yes")])
+ 
+ (define_insn "*rotsi2_16<setcc><setnz><setnzvc>"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+ 	(rotate:SI (match_operand:SI 1 "register_operand" "0")
+ 		   (const_int 16)))
+    (clobber (reg:CC CRIS_CC0_REGNUM))]
+   "TARGET_HAS_SWAP"
+   "swapw %0"
+   [(set_attr "slottable" "yes")])
+ 
+ (define_insn "*rotsi2_16_not<setcc><setnz><setnzvc>"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+ 	(not:SI
+ 	 (rotate:SI (match_operand:SI 1 "register_operand" "0")
+ 		    (const_int 16))))
+    (clobber (reg:CC CRIS_CC0_REGNUM))]
+   "TARGET_HAS_SWAP"
+   "swapnw %0"
+   [(set_attr "slottable" "yes")])
+ 
  ;; Implement ctz using two instructions, one for bit swap and one for clz.
  ;; Defines a scratch register to avoid clobbering input.
  
***************
*** 2378,2384 ****
    "&& reload_completed"
    [(set (reg:CC_ZnN CRIS_CC0_REGNUM)
  	(compare:CC_ZnN
! 	 (zero_extract:BWD (match_dup 0) (const_int 1) (match_dup 1))
  	 (const_int 0)))
     (set (pc)
  	(if_then_else (zcond (reg:CC_ZnN CRIS_CC0_REGNUM) (const_int 0))
--- 2420,2426 ----
    "&& reload_completed"
    [(set (reg:CC_ZnN CRIS_CC0_REGNUM)
  	(compare:CC_ZnN
! 	 (zero_extract:SI (match_dup 0) (const_int 1) (match_dup 1))
  	 (const_int 0)))
     (set (pc)
  	(if_then_else (zcond (reg:CC_ZnN CRIS_CC0_REGNUM) (const_int 0))
***************
*** 2404,2410 ****
    "&& reload_completed"
    [(set (reg:CC_NZ CRIS_CC0_REGNUM)
  	(compare:CC_NZ
! 	 (zero_extract:BWD (match_dup 0) (match_dup 1) (const_int 0))
  	 (const_int 0)))
     (set (pc)
  	(if_then_else (zcond (reg:CC_NZ CRIS_CC0_REGNUM) (const_int 0))
--- 2446,2452 ----
    "&& reload_completed"
    [(set (reg:CC_NZ CRIS_CC0_REGNUM)
  	(compare:CC_NZ
! 	 (zero_extract:SI (match_dup 0) (match_dup 1) (const_int 0))
  	 (const_int 0)))
     (set (pc)
  	(if_then_else (zcond (reg:CC_NZ CRIS_CC0_REGNUM) (const_int 0))
***************
*** 2516,2521 ****
--- 2558,2599 ----
  	(cond:SI (reg:<xCC> CRIS_CC0_REGNUM) (const_int 0)))]
    "")
  
+ ;; Test a field of bits starting at bit 0 against 0/non-0.
+ (define_insn_and_split "*cstore<mode>4_btstqb0_<CC>"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+ 	(zcond
+ 	 (zero_extract:BWD
+ 	  (match_operand:BWD 1 "register_operand" "r")
+ 	  (match_operand 2 "const_int_operand" "Kc")
+ 	  (const_int 0))
+ 	 (const_int 0)))
+    (clobber (reg:CC CRIS_CC0_REGNUM))]
+   ""
+   "#"
+   "&& reload_completed"
+   [(set (reg:CC_NZ CRIS_CC0_REGNUM)
+ 	(compare:CC_NZ
+ 	 (zero_extract:SI (match_dup 1) (match_dup 2) (const_int 0))
+ 	 (const_int 0)))
+    (set (match_dup 0)
+ 	(zcond:SI (reg:CC_NZ CRIS_CC0_REGNUM) (const_int 0)))]
+   "")
+ 
+ ;; Setting a register to (the result of a test of zero against) a
+ ;; single bit at operand[0] (to 0 or non-0) is at the moment a bit too
+ ;; complicated to be worthwhile: for the non-zero case, it's a tie
+ ;; using btstq+smi or lsrq+andq.  For the zero case (in effect an
+ ;; extzv+negation) we could do with one insn less (no negation).
+ ;; However, for the negated combination, combine looks for a match
+ ;; against different patterns depending on which bit (number) is
+ ;; tested.  FIXME: Revisit for combine changes.  Guided by combine
+ ;; attempts, attempted extzv+matching an anonymous pattern that does
+ ;; (zero_extract:BWD (xor (reg:BWD) (const_int 1 << pos))
+ ;;                   (const_int 1) (const_int pos)))
+ ;; where pos is a Kc constant.  (Works for some values of pos, not for
+ ;; others.  Combine seems to always pick BWD=QI regardless of size of
+ ;; datum matched.)
+ 
  ;; Like bCC, we have to check the overflow bit for
  ;; signed conditions.
  
diff -Nrcpad gcc-17-20260823/gcc/config/epiphany/epiphany.h gcc-17-20260830/gcc/config/epiphany/epiphany.h
*** gcc-17-20260823/gcc/config/epiphany/epiphany.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/epiphany/epiphany.h	Sun Aug 30 22:32:06 2026
*************** typedef struct GTY (()) machine_function
*** 538,544 ****
  
  /* Given an rtx for the frame pointer,
     return an rtx for the address of the frame.  */
! #define FRAME_ADDR_RTX(frame) \
    ((frame) == hard_frame_pointer_rtx ? arg_pointer_rtx : NULL)
  
  #define EPIPHANY_RETURN_REGNO \
--- 538,544 ----
  
  /* Given an rtx for the frame pointer,
     return an rtx for the address of the frame.  */
! #define FRAME_ADDR_RTX(count, frame) \
    ((frame) == hard_frame_pointer_rtx ? arg_pointer_rtx : NULL)
  
  #define EPIPHANY_RETURN_REGNO \
diff -Nrcpad gcc-17-20260823/gcc/config/i386/cpuid.h gcc-17-20260830/gcc/config/i386/cpuid.h
*** gcc-17-20260823/gcc/config/i386/cpuid.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/cpuid.h	Sun Aug 30 22:32:06 2026
***************
*** 75,80 ****
--- 75,81 ----
  /* Extended Features (%eax == 0x80000021) */
  /* %eax */
  #define bit_AMD_PREFETCHI (1 << 20)
+ #define bit_AVX512BMM (1 << 23)
  
  /* Extended Features Leaf (%eax == 7, %ecx == 0) */
  /* %ebx */
***************
*** 167,175 ****
  #define bit_AESKLE	( 1<<0 )
  #define bit_WIDEKL	( 1<<2 )
  
- /* Sub leaf (%eax == 0x21) */
- #define bit_AVX512BMM	( 1<<23 )
- 
  /* AVX10 sub leaf (%eax == 0x24, %ecx == 1) */
  /* %ecx */
  #define bit_AVX10V2AUX	(1 << 3)
--- 168,173 ----
diff -Nrcpad gcc-17-20260823/gcc/config/i386/i386-expand.cc gcc-17-20260830/gcc/config/i386/i386-expand.cc
*** gcc-17-20260823/gcc/config/i386/i386-expand.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/i386-expand.cc	Sun Aug 30 22:32:06 2026
*************** ix86_expand_vector_init_one_nonzero (boo
*** 18121,18141 ****
  	}
        return true;
      case E_V4SFmode:
!       var = force_reg (SFmode, var);
!       x = gen_rtx_VEC_DUPLICATE (V4SFmode, var);
!       x = gen_rtx_VEC_MERGE (V4SFmode, x, CONST0_RTX (V4SFmode), const1_rtx);
        if (!one_var)
! 	emit_insn (gen_rtx_SET (target, x));
        else if (TARGET_SSE2)
  	{
  	  rtx tmp = gen_reg_rtx (V4SFmode);
! 	  emit_insn (gen_rtx_SET (tmp, x));
  	  emit_insn (gen_vec_shl_v4sf (target, tmp, GEN_INT (one_var * 32)));
  	}
        else
  	{
  	  rtx tmp = gen_reg_rtx (V4SFmode);
! 	  emit_insn (gen_rtx_SET (tmp, x));
  	  emit_insn (gen_sse_shufps_v4sf (target, tmp, tmp,
  					  const1_rtx,
  					  GEN_INT (one_var == 1 ? 0 : 1),
--- 18121,18165 ----
  	}
        return true;
      case E_V4SFmode:
!       if (TARGET_SSE4_1)
! 	{
! 	  if (!REG_P (var) && !MEM_P (var))
! 	    var = force_reg (SFmode, var);
! 	  if (one_var)
! 	    emit_insn (gen_sse4_1_insertps_v4sf_init (target, var,
! 						      CONST0_RTX (V4SFmode),
! 						      GEN_INT (1 << one_var)));
! 	  else
! 	    emit_insn (gen_vec_setv4sf_0 (target, CONST0_RTX (V4SFmode), var));
! 	  return true;
! 	}
!       if (TARGET_SSE2 && REG_P (var))
! 	{
! 	  if (one_var == 3)
! 	    emit_insn (gen_sse2_insertps_v4sf_3 (target, var,
! 						 CONST0_RTX (V4SFmode)));
! 	  else
! 	    {
! 	      rtx tmp = gen_reg_rtx (V4SFmode);
! 	      emit_insn (gen_sse2_insertps_v4sf_3 (tmp, var,
! 						   CONST0_RTX (V4SFmode)));
! 	      emit_insn (gen_vec_shr_v4sf (target, tmp,
! 					   GEN_INT ((3 - one_var) * 32)));
! 	    }
! 	  return true;
! 	}
        if (!one_var)
! 	emit_insn (gen_vec_setv4sf_0 (target, CONST0_RTX (V4SFmode), var));
        else if (TARGET_SSE2)
  	{
  	  rtx tmp = gen_reg_rtx (V4SFmode);
! 	  emit_insn (gen_vec_setv4sf_0 (tmp, CONST0_RTX (V4SFmode), var));
  	  emit_insn (gen_vec_shl_v4sf (target, tmp, GEN_INT (one_var * 32)));
  	}
        else
  	{
  	  rtx tmp = gen_reg_rtx (V4SFmode);
! 	  emit_insn (gen_vec_setv4sf_0 (tmp, CONST0_RTX (V4SFmode), var));
  	  emit_insn (gen_sse_shufps_v4sf (target, tmp, tmp,
  					  const1_rtx,
  					  GEN_INT (one_var == 1 ? 0 : 1),
*************** ix86_expand_vector_init_v4sf (rtx target
*** 19237,19248 ****
    else if (ops[1] == CONST0_RTX (SFmode)
  	   && ops[2] == CONST0_RTX (SFmode)
  	   && ops[3] == CONST0_RTX (SFmode))
!     {
!       rtx val = ops[0];
!       if (!REG_P (val) && !MEM_P (val))
! 	val = force_reg (SFmode, val);
!       emit_insn (gen_vec_setv4sf_0 (target, CONST0_RTX (V4SFmode), val));
!     }
    else if (rtx_equal_p (ops[0], ops[1])
  	   && rtx_equal_p (ops[0], ops[2])
  	   && rtx_equal_p (ops[0], ops[3]))
--- 19261,19267 ----
    else if (ops[1] == CONST0_RTX (SFmode)
  	   && ops[2] == CONST0_RTX (SFmode)
  	   && ops[3] == CONST0_RTX (SFmode))
!     ix86_expand_vector_init_one_nonzero (false, V4SFmode, target, ops[0], 0);
    else if (rtx_equal_p (ops[0], ops[1])
  	   && rtx_equal_p (ops[0], ops[2])
  	   && rtx_equal_p (ops[0], ops[3]))
*************** ix86_expand_vector_init_v4sf (rtx target
*** 19260,19292 ****
        rtx vec = gen_rtx_CONST_VECTOR (V4SFmode, gen_rtvec_v (4, ops));
        emit_move_insn (target, vec);
      }
    else if (onevar_perm_p (ops, 4, perm, vars))
      {
        rtx tmp = gen_reg_rtx (V4SFmode);
!       vars[1] = CONST0_RTX (SFmode);
!       vars[2] = CONST0_RTX (SFmode);
!       vars[3] = CONST0_RTX (SFmode);
!       ix86_expand_vector_init_v4sf (tmp, vars);
!       emit_insn (gen_sse_shufps_v4sf (target, tmp, tmp,
! 				      GEN_INT (perm[0]),
! 				      GEN_INT (perm[1]),
! 				      GEN_INT (perm[2] + 4),
! 				      GEN_INT (perm[3] + 4)));
      }
    else if (ops[2] == CONST0_RTX (SFmode)
  	   && ops[3] == CONST0_RTX (SFmode))
      {
!       rtx tmp1 = gen_reg_rtx (V4SFmode);
!       vars[0] = ops[0];
!       vars[1] = CONST0_RTX (SFmode);
!       vars[2] = CONST0_RTX (SFmode);
!       vars[3] = CONST0_RTX (SFmode);
!       ix86_expand_vector_init_v4sf (tmp1, vars);
  
        rtx tmp2 = gen_reg_rtx (V4SFmode);
!       vars[0] = ops[1];
!       ix86_expand_vector_init_v4sf (tmp2, vars);
!       emit_insn (gen_vec_interleave_lowv4sf (target, tmp1, tmp2));
      }
    else if (twovar_perm_p (ops, 4, perm, vars))
      {
--- 19279,19378 ----
        rtx vec = gen_rtx_CONST_VECTOR (V4SFmode, gen_rtvec_v (4, ops));
        emit_move_insn (target, vec);
      }
+   else if (ops[0] == CONST0_RTX (SFmode)
+ 	   && ops[2] == CONST0_RTX (SFmode)
+ 	   && ops[3] == CONST0_RTX (SFmode))
+     ix86_expand_vector_init_one_nonzero (false, V4SFmode, target, ops[1], 1);
+   else if (ops[0] == CONST0_RTX (SFmode)
+ 	   && ops[1] == CONST0_RTX (SFmode)
+ 	   && ops[3] == CONST0_RTX (SFmode))
+     ix86_expand_vector_init_one_nonzero (false, V4SFmode, target, ops[2], 2);
+   else if (ops[0] == CONST0_RTX (SFmode)
+ 	   && ops[1] == CONST0_RTX (SFmode)
+ 	   && ops[2] == CONST0_RTX (SFmode))
+     ix86_expand_vector_init_one_nonzero (false, V4SFmode, target, ops[3], 3);
    else if (onevar_perm_p (ops, 4, perm, vars))
      {
        rtx tmp = gen_reg_rtx (V4SFmode);
!       if (TARGET_SSE2 && !TARGET_SSE4_1 && REG_P (ops[0]))
! 	{
! 	  emit_insn (gen_sse2_insertps_v4sf_3 (tmp, ops[0],
! 					       CONST0_RTX (V4SFmode)));
! 	  emit_insn (gen_sse_shufps_v4sf (target, tmp, tmp,
! 					  GEN_INT (perm[0] ? 0 : 3),
! 					  GEN_INT (perm[1] ? 0 : 3),
! 					  GEN_INT (perm[2] ? 4 : 7),
! 					  GEN_INT (perm[3] ? 4 : 7)));
! 	}
!       else
! 	{
! 	  vars[1] = CONST0_RTX (SFmode);
! 	  vars[2] = CONST0_RTX (SFmode);
! 	  vars[3] = CONST0_RTX (SFmode);
! 	  ix86_expand_vector_init_v4sf (tmp, vars);
! 	  emit_insn (gen_sse_shufps_v4sf (target, tmp, tmp,
! 					  GEN_INT (perm[0]),
! 					  GEN_INT (perm[1]),
! 					  GEN_INT (perm[2] + 4),
! 					  GEN_INT (perm[3] + 4)));
! 	}
      }
    else if (ops[2] == CONST0_RTX (SFmode)
  	   && ops[3] == CONST0_RTX (SFmode))
      {
!       if (TARGET_SSE4_1)
! 	{
! 	  rtx tmp = gen_reg_rtx (V4SFmode);
! 	  rtx val = ops[0];
! 	  if (!REG_P (val) && !MEM_P (val))
! 	    val = force_reg (SFmode, val);
! 	  emit_insn (gen_vec_setv4sf_0 (tmp, CONST0_RTX (V4SFmode), val));
! 	  val = ops[1];
! 	  if (!REG_P (val) && !MEM_P (val))
! 	    val = force_reg (SFmode, val);
! 	  emit_insn (gen_vec_setv4sf_sse4_1 (target, tmp, val, GEN_INT (2)));
! 	}
!       else if (MEM_P (ops[0]) && MEM_P (ops[1]))
! 	{
! 	  rtx tmp1 = gen_reg_rtx (V4SFmode);
! 	  vars[0] = ops[0];
! 	  vars[1] = CONST0_RTX (SFmode);
! 	  vars[2] = CONST0_RTX (SFmode);
! 	  vars[3] = CONST0_RTX (SFmode);
! 	  ix86_expand_vector_init_v4sf (tmp1, vars);
  
+ 	  rtx tmp2 = gen_reg_rtx (V4SFmode);
+ 	  vars[0] = ops[1];
+ 	  ix86_expand_vector_init_v4sf (tmp2, vars);
+ 	  emit_insn (gen_vec_interleave_lowv4sf (target, tmp1, tmp2));
+ 	}
+       else if (TARGET_SSE2)
+ 	{
+ 	  rtx tmp = gen_reg_rtx (V2SFmode);
+ 	  ix86_expand_vector_init_concat (V2SFmode, tmp, ops, 2);
+ 	  tmp = gen_rtx_VEC_CONCAT (V4SFmode, tmp, CONST0_RTX (V2SFmode));
+ 	  emit_insn (gen_rtx_SET (target, tmp));
+ 	}
+       else
+ 	{
+ 	  rtx tmp1 = gen_reg_rtx (V2SFmode);
+ 	  ix86_expand_vector_init_concat (V2SFmode, tmp1, ops, 2);
+ 	  rtx tmp2 = gen_reg_rtx (V2SFmode);
+ 	  emit_insn (gen_rtx_SET (tmp2, CONST0_RTX (V2SFmode)));
+ 	  rtx tmp = gen_rtx_VEC_CONCAT (V4SFmode, tmp1, tmp2);
+ 	  emit_insn (gen_rtx_SET (target, tmp));
+ 	}
+     }
+   else if (MEM_P (ops[0])
+ 	   && ops[1] == CONST0_RTX (SFmode)
+ 	   && MEM_P (ops[2])
+ 	   && ops[3] == CONST0_RTX (SFmode))
+     {
+       rtx tmp1 = gen_reg_rtx (V4SFmode);
+       ix86_expand_vector_init_one_nonzero (false, V4SFmode, tmp1, ops[0], 0);
        rtx tmp2 = gen_reg_rtx (V4SFmode);
!       ix86_expand_vector_init_one_nonzero (false, V4SFmode, tmp2, ops[2], 0);
!       emit_insn (gen_sse_movlhps (target, tmp1, tmp2));
      }
    else if (twovar_perm_p (ops, 4, perm, vars))
      {
*************** ix86_expand_vector_init_v4sf (rtx target
*** 19322,19328 ****
        emit_move_insn (tmp2, vec);
        emit_insn (gen_rtx_SET (target, gen_rtx_IOR (V4SFmode, tmp1, tmp2)));
      }
!   else
      {
        rtx tmp1 = gen_reg_rtx (V4SFmode);
        rtx tmp2 = gen_reg_rtx (V4SFmode);
--- 19408,19442 ----
        emit_move_insn (tmp2, vec);
        emit_insn (gen_rtx_SET (target, gen_rtx_IOR (V4SFmode, tmp1, tmp2)));
      }
!   else if (TARGET_SSE4_1 && optimize_insn_for_size_p ())
!     {
!       int i;
!       rtx tmp = gen_reg_rtx (V4SFmode);
!       bool first_p = true;
!       for (i = 0; i < 4; i++)
! 	if (ops[i] != CONST0_RTX (SFmode))
! 	  {
! 	    rtx idx = GEN_INT (1 << i);
! 	    rtx val = ops[i];
! 	    if (!REG_P (val) && !MEM_P (val))
! 	      val = force_reg (SFmode, val);
! 	    rtx pat;
! 	    if (!first_p)
! 	      pat = gen_vec_setv4sf_sse4_1 (tmp, tmp, val, idx);
! 	    else if (i == 0)
! 	      pat = gen_vec_setv4sf_0 (tmp, CONST0_RTX (V4SFmode), val);
! 	    else
! 	      pat = gen_sse4_1_insertps_v4sf_init (tmp, val,
! 						   CONST0_RTX (V4SFmode), idx);
! 	    emit_insn (pat);
! 	    first_p = false;
! 	  }
!       emit_move_insn (target, tmp);
!     }
!   else if (MEM_P (ops[0])
! 	   && MEM_P (ops[1])
! 	   && MEM_P (ops[2])
! 	   && MEM_P (ops[3]))
      {
        rtx tmp1 = gen_reg_rtx (V4SFmode);
        rtx tmp2 = gen_reg_rtx (V4SFmode);
*************** ix86_expand_vector_init_v4sf (rtx target
*** 19338,19343 ****
--- 19452,19459 ----
  				      const0_rtx, const1_rtx,
  				      GEN_INT (4), GEN_INT (5)));
      }
+   else
+     ix86_expand_vector_init_concat (V4SFmode, target, ops, 4);
  }
  
  /* A subroutine of ix86_expand_vector_init for V8HImode.  */
*************** ix86_expand_truncdf_32 (rtx operand0, rt
*** 22554,22559 ****
--- 22670,22765 ----
    emit_move_insn (operand0, res);
  }
  
+ /* Expand truncsfbf2 like vcvtneps2bf16, which doesn't honor SNAN,
+    turns sNAN into qNAN quietly, it always rounds to nearest even
+    and flushes denormals to zero.  We can expand the conversion
+    inline as (fromi + 0x7fff + ((fromi >> 16) & 1)) >> 16, flushing
+    denormals to zero.  */
+ 
+ void
+ ix86_expand_truncsfbf2 (rtx op0, rtx op1)
+ {
+   rtx set;
+ 
+   if (TARGET_AVXNECONVERT
+       || (TARGET_AVX512BF16 && TARGET_AVX512VL))
+     {
+       set = gen_truncsfbf2_vcvtneps2bf16 (op0, op1);
+       emit_insn (set);
+       return;
+     }
+ 
+   /* Convert OP1 to REG1_SI in SImode.  */
+   rtx reg1_si = gen_reg_rtx (SImode);
+   rtx op1_si = gen_lowpart (SImode, op1);
+   set = gen_rtx_SET (reg1_si, op1_si);
+   emit_insn (set);
+ 
+   /* Set TMP0 to REG1_SI >> 16. */
+   rtx tmp0 = expand_simple_binop (SImode, LSHIFTRT, reg1_si,
+ 				  GEN_INT(16), nullptr, 0,
+ 				  OPTAB_DIRECT);
+ 
+   rtx_code_label *zero_label = gen_label_rtx ();
+   rtx_code_label *cast_label = gen_label_rtx ();
+ 
+   rtx result = gen_reg_rtx (SImode);
+ 
+   /* OP1 is zero or denormal if (REG1_SI & 0x7f800000) == 0.  */
+   rtx tmp1 = expand_simple_binop (SImode, AND, reg1_si,
+ 				  GEN_INT(0x7f800000), nullptr, 0,
+ 				  OPTAB_DIRECT);
+ 
+   emit_cmp_and_jump_insns (tmp1, const0_rtx, EQ, nullptr, SImode,
+ 			   true, zero_label,
+ 			   profile_probability::unlikely ());
+ 
+   /* Set TMP1 to TMP0 & 1. */
+   tmp1 = expand_simple_binop (SImode, AND, tmp0, const1_rtx, nullptr,
+ 			      0, OPTAB_DIRECT);
+ 
+   /* Set TMP2 to REG1_SI + 0x7fff.  */
+   rtx tmp2 = expand_simple_binop (SImode, PLUS, reg1_si,
+ 				  GEN_INT (0x7fff), nullptr, 0,
+ 				  OPTAB_DIRECT);
+   /* Set TMP1 to TMP2 + TMP1.  */
+   tmp1 = expand_simple_binop (SImode, PLUS, tmp2, tmp1, nullptr, 0,
+ 			      OPTAB_DIRECT);
+ 
+   /* Set TMP1 to TMP1 >> 16. */
+   tmp1 = expand_simple_binop (SImode, LSHIFTRT, tmp1, GEN_INT(16),
+ 			      nullptr, 0, OPTAB_DIRECT);
+ 
+   /* Move TMP1 to RESULT.  */
+   emit_move_insn (result, tmp1);
+ 
+   emit_jump_insn (gen_jump (cast_label));
+   emit_barrier ();
+ 
+   emit_label (zero_label);
+ 
+   /* Flush TMP0 to zero while keeping the sign bit for zero and
+      denormal.  */
+   tmp1 = expand_simple_binop (SImode, AND, tmp0, GEN_INT(0x8000),
+ 			      nullptr, 0, OPTAB_DIRECT);
+ 
+   /* Move TMP1 to RESULT.  */
+   emit_move_insn (result, tmp1);
+ 
+   emit_label (cast_label);
+ 
+   /* Cast RESULT to TMP2 in HImode.  */
+   tmp2 = gen_reg_rtx (HImode);
+   tmp0 = gen_lowpart (HImode, result);
+   set = gen_rtx_SET (tmp2, tmp0);
+   emit_insn (set);
+ 
+   /* Convert TMP2 to OP0.  */
+   tmp0 = gen_lowpart (BFmode, tmp2);
+   set = gen_rtx_SET (op0, tmp0);
+   emit_insn (set);
+ }
+ 
  /* Expand SSE sequence for computing round
     from OPERAND1 storing into OPERAND0.  */
  void
diff -Nrcpad gcc-17-20260823/gcc/config/i386/i386-features.cc gcc-17-20260830/gcc/config/i386/i386-features.cc
*** gcc-17-20260823/gcc/config/i386/i386-features.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/i386-features.cc	Sun Aug 30 22:32:06 2026
*************** timode_scalar_chain::compute_convert_gai
*** 1677,1684 ****
  	case REG:
  	  if (GENERAL_REGNO_P (REGNO (src)))
  	    {
! 	      if (TARGET_AVX)
! 		/* vmovq + vpinsrq */
  		igain = speed_p ? -ix86_cost->integer_to_sse
  				  - COSTS_N_INSNS (1)
  				: -COSTS_N_BYTES (11);
--- 1677,1684 ----
  	case REG:
  	  if (GENERAL_REGNO_P (REGNO (src)))
  	    {
! 	      if (TARGET_SSE4_1)
! 		/* movq + pinsrq */
  		igain = speed_p ? -ix86_cost->integer_to_sse
  				  - COSTS_N_INSNS (1)
  				: -COSTS_N_BYTES (11);
*************** timode_scalar_chain::compute_convert_gai
*** 1690,1697 ****
  	    }
  	  else if (GENERAL_REG_P (dst))
  	    {
! 	      if (TARGET_AVX)
! 		/* vpextrq + vmovq */
  		igain = speed_p ? -ix86_cost->sse_to_integer
  				  - COSTS_N_INSNS (1)
  				: -COSTS_N_BYTES (11);
--- 1690,1697 ----
  	    }
  	  else if (GENERAL_REG_P (dst))
  	    {
! 	      if (TARGET_SSE4_1)
! 		/* pextrq + movq */
  		igain = speed_p ? -ix86_cost->sse_to_integer
  				  - COSTS_N_INSNS (1)
  				: -COSTS_N_BYTES (11);
diff -Nrcpad gcc-17-20260823/gcc/config/i386/i386-protos.h gcc-17-20260830/gcc/config/i386/i386-protos.h
*** gcc-17-20260823/gcc/config/i386/i386-protos.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/i386-protos.h	Sun Aug 30 22:32:06 2026
*************** extern void ix86_expand_floorceil (rtx,
*** 233,238 ****
--- 233,239 ----
  extern void ix86_expand_floorceildf_32 (rtx, rtx, bool);
  extern void ix86_expand_trunc (rtx, rtx);
  extern void ix86_expand_truncdf_32 (rtx, rtx);
+ extern void ix86_expand_truncsfbf2 (rtx, rtx);
  extern void ix86_expand_round (rtx, rtx);
  extern void ix86_expand_rounddf_32 (rtx, rtx);
  extern void ix86_expand_round_sse4 (rtx, rtx);
diff -Nrcpad gcc-17-20260823/gcc/config/i386/i386.cc gcc-17-20260830/gcc/config/i386/i386.cc
*** gcc-17-20260823/gcc/config/i386/i386.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/i386.cc	Sun Aug 30 22:32:06 2026
*************** ix86_hard_regno_mode_ok (unsigned int re
*** 21865,21870 ****
--- 21865,21874 ----
        if (EXT_REX_SSE_REGNO_P (regno))
  	return false;
  
+       /* Without SSE2, 16-bit moves are not supported.  */
+       if (!TARGET_SSE2 && GET_MODE_SIZE (mode) == GET_MODE_SIZE (HImode))
+ 	return false;
+ 
        /* OImode and AVX modes are available only when AVX is enabled.  */
        return ((TARGET_AVX
  	       && VALID_AVX256_REG_OR_OI_MODE (mode))
diff -Nrcpad gcc-17-20260823/gcc/config/i386/i386.md gcc-17-20260830/gcc/config/i386/i386.md
*** gcc-17-20260823/gcc/config/i386/i386.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/i386.md	Sun Aug 30 22:32:06 2026
***************
*** 5817,5844 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "HF")])
  
! /* vcvtneps2bf16 doesn't honor SNAN, and turn sNAN into qNAN quietly,
!    and it always round to even.
!    flag_unsafe_math_optimization is needed for psrld.
!    If we don't expect qNaNs nor sNaNs and can assume rounding
!    to nearest, we can expand the conversion inline as
!    (fromi + 0x7fff + ((fromi >> 16) & 1)) >> 16.  */
! (define_insn "truncsfbf2"
!   [(set (match_operand:BF 0 "register_operand" "=x,x,v,Yv")
  	(float_truncate:BF
! 	  (match_operand:SF 1 "register_operand" "0,x,v,Yv")))]
    "TARGET_SSE2 && !HONOR_NANS (BFmode) && !flag_rounding_math
     && (flag_unsafe_math_optimizations
         || TARGET_AVXNECONVERT
         || (TARGET_AVX512BF16 && TARGET_AVX512VL))"
    "@
-   psrld\t{$16, %0|%0, 16}
    %{vex%} vcvtneps2bf16\t{%1, %0|%0, %1}
!   vcvtneps2bf16\t{%1, %0|%0, %1}
!   vpsrld\t{$16, %1, %0|%0, %1, 16}"
!   [(set_attr "isa" "noavx,avxneconvert,avx512bf16vl,avx")
!    (set_attr "prefix" "orig,vex,evex,vex")
!    (set_attr "type" "sseishft1,ssecvt,ssecvt,sseishft1")])
  
  ;; Signed conversion to DImode.
  
--- 5817,5852 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "HF")])
  
! /* vcvtneps2bf16 doesn't honor SNAN, turns sNAN into qNAN quietly, it
!    always rounds to nearest even and flushes input denormals to zero.
!    flag_unsafe_math_optimization is needed for vcvtneps2bf16 emulation
!    which doesn't support sNAN and qNAN.  */
! (define_expand "truncsfbf2"
!   [(set (match_operand:BF 0 "register_operand" "")
  	(float_truncate:BF
! 	  (match_operand:SF 1 "register_operand" "")))]
    "TARGET_SSE2 && !HONOR_NANS (BFmode) && !flag_rounding_math
     && (flag_unsafe_math_optimizations
         || TARGET_AVXNECONVERT
         || (TARGET_AVX512BF16 && TARGET_AVX512VL))"
+ {
+   ix86_expand_truncsfbf2 (operands[0], operands[1]);
+   DONE;
+ })
+ 
+ (define_insn "truncsfbf2_vcvtneps2bf16"
+   [(set (match_operand:BF 0 "register_operand" "=x,v")
+ 	(float_truncate:BF
+ 	  (match_operand:SF 1 "register_operand" "x,v")))]
+   "(TARGET_AVXNECONVERT || (TARGET_AVX512BF16 && TARGET_AVX512VL))
+    && !HONOR_NANS (BFmode)
+    && !flag_rounding_math"
    "@
    %{vex%} vcvtneps2bf16\t{%1, %0|%0, %1}
!   vcvtneps2bf16\t{%1, %0|%0, %1}"
!   [(set_attr "isa" "avxneconvert,avx512bf16vl")
!    (set_attr "prefix" "vex,evex")
!    (set_attr "type" "ssecvt,ssecvt")])
  
  ;; Signed conversion to DImode.
  
***************
*** 6071,6109 ****
     (set_attr "athlon_decode" "double,vector")
     (set_attr "amdfam10_decode" "double,double")
     (set_attr "bdver1_decode" "double,double")])
- 
- (define_insn "*fix_trunc<mode>si_sse_zext"
-   [(set (match_operand:DI 0 "register_operand" "=r,r")
-         (zero_extend:DI
-           (fix:SI (match_operand:MODEF 1 "nonimmediate_operand" "v,m"))))]
-   "TARGET_64BIT
-    && SSE_FLOAT_MODE_P (<MODE>mode)
-    && (!TARGET_FISTTP || TARGET_SSE_MATH)"
-   "%vcvtt<ssemodesuffix>2si{l}\t{%1, %k0|%k0, %1}"
-   [(set_attr "type" "sseicvt")
-    (set_attr "prefix" "maybe_vex")
-    (set_attr "prefix_rex" "*")
-    (set_attr "mode" "<MODE>")
-    (set_attr "athlon_decode" "double,vector")
-    (set_attr "amdfam10_decode" "double,double")
-    (set_attr "bdver1_decode" "double,double")])
- 
- (define_insn "*fix_trunc<mode>si_sse_2_zext"
-   [(set (match_operand:DI 0 "register_operand" "=r,r")
-         (zero_extend:DI
-           (subreg:SI
-             (fix:DI (match_operand:MODEF 1 "nonimmediate_operand" "v,m")) 0)))]
-   "TARGET_64BIT
-    && SSE_FLOAT_MODE_P (<MODE>mode)
-    && (!TARGET_FISTTP || TARGET_SSE_MATH)"
-   "%vcvtt<ssemodesuffix>2si{l}\t{%1, %k0|%k0, %1}"
-   [(set_attr "type" "sseicvt")
-    (set_attr "prefix" "maybe_vex")
-    (set_attr "prefix_rex" "*")
-    (set_attr "mode" "<MODE>")
-    (set_attr "athlon_decode" "double,vector")
-    (set_attr "amdfam10_decode" "double,double")
-    (set_attr "bdver1_decode" "double,double")])
  
  ;; Avoid vector decoded forms of the instruction.
  (define_peephole2
--- 6079,6084 ----
diff -Nrcpad gcc-17-20260823/gcc/config/i386/sse.md gcc-17-20260830/gcc/config/i386/sse.md
*** gcc-17-20260823/gcc/config/i386/sse.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/sse.md	Sun Aug 30 22:32:06 2026
***************
*** 12570,12584 ****
     (set_attr "prefix" "orig,maybe_vex,maybe_vex")
     (set_attr "mode" "SF")])
  
  ;; Avoid combining registers from different units in a single alternative,
  ;; see comment above inline_secondary_memory_needed function in i386.cc
  (define_insn "vec_set<mode>_0"
    [(set (match_operand:VI4F_128 0 "nonimmediate_operand"
! 	  "=Yr,*x,v,v,v,v,x,x,v,Yr ,?x ,x  ,m ,m   ,m")
  	(vec_merge:VI4F_128
  	  (vec_duplicate:VI4F_128
  	    (match_operand:<ssescalarmode> 2 "general_operand"
! 	  " Yr,*x,v,v,m,r ,m,x,v,?jrjm,?jrjm,?rm,!x,?re,!*fF"))
  	  (match_operand:VI4F_128 1 "nonimm_or_0_operand"
  	  " C , C,C,C,C,C ,C,0,v,0  ,0  ,x  ,0 ,0   ,0")
  	  (const_int 1)))]
--- 12570,12587 ----
     (set_attr "prefix" "orig,maybe_vex,maybe_vex")
     (set_attr "mode" "SF")])
  
+ ;; Different register preferences for V4SI vs V4SF.
+ (define_mode_attr vec_set_0_gpr [(V4SI "r ") (V4SF "?r")])
+ 
  ;; Avoid combining registers from different units in a single alternative,
  ;; see comment above inline_secondary_memory_needed function in i386.cc
  (define_insn "vec_set<mode>_0"
    [(set (match_operand:VI4F_128 0 "nonimmediate_operand"
! 	  "=Yr,*x,v,v,v,v ,x,x,v,Yr ,?x ,x  ,m ,m   ,m")
  	(vec_merge:VI4F_128
  	  (vec_duplicate:VI4F_128
  	    (match_operand:<ssescalarmode> 2 "general_operand"
! 	  " Yr,*x,v,v,m,<vec_set_0_gpr>,m,x,v,?jrjm,?jrjm,?rm,!x,?re,!*fF"))
  	  (match_operand:VI4F_128 1 "nonimm_or_0_operand"
  	  " C , C,C,C,C,C ,C,0,v,0  ,0  ,x  ,0 ,0   ,0")
  	  (const_int 1)))]
***************
*** 12836,12842 ****
     (set_attr "mode" "HF,HI")])
  
  ;; A subset is vec_setv4sf.
! (define_insn "*vec_setv4sf_sse4_1"
    [(set (match_operand:V4SF 0 "register_operand" "=Yr,*x,v")
  	(vec_merge:V4SF
  	  (vec_duplicate:V4SF
--- 12839,12845 ----
     (set_attr "mode" "HF,HI")])
  
  ;; A subset is vec_setv4sf.
! (define_insn "vec_setv4sf_sse4_1"
    [(set (match_operand:V4SF 0 "register_operand" "=Yr,*x,v")
  	(vec_merge:V4SF
  	  (vec_duplicate:V4SF
***************
*** 13000,13005 ****
--- 13003,13064 ----
     (set_attr "prefix" "orig,maybe_evex")
     (set_attr "mode" "V4SF")])
  
+ ;; Use sse4_1_insertps_v4sf to vector_init one non-zero value.
+ (define_insn "sse4_1_insertps_v4sf_init"
+   [(set (match_operand:V4SF 0 "register_operand" "=Yr,*x,v,v")
+ 	(vec_merge:V4SF
+ 	  (vec_duplicate:V4SF
+ 	    (match_operand:SF 1 "nonimmediate_operand" "Yrjm,*xjm,v,m"))
+ 	  (match_operand:V4SF 2 "const0_operand")
+ 	  (match_operand:SI 3 "const248_operand")))]
+   "TARGET_SSE4_1"
+ {
+   int op3 = INTVAL (operands[3]);
+   operands[3] = GEN_INT ((exact_log2 (op3) << 4) + (op3 ^ 15));
+   switch (which_alternative)
+     {
+     case 0:
+     case 1:
+       return "insertps\t{%3, %1, %0|%0, %1, %3}";
+     case 2:
+       return "vinsertps\t{%3, %1, %1, %0|%0, %1, %1, %3}";
+     case 3:
+       return "vinsertps\t{%3, %1, %0, %0|%0, %0, %1, %3}";
+     default:
+       gcc_unreachable ();
+     }
+ }
+   [(set_attr "isa" "noavx,noavx,avx,avx")
+    (set_attr "type" "sselog")
+    (set_attr "addr" "gpr16,gpr16,*,*")
+    (set_attr "prefix_data16" "1,1,*,*")
+    (set_attr "prefix_extra" "1")
+    (set_attr "length_immediate" "1")
+    (set_attr "prefix" "orig,orig,maybe_evex,maybe_evex")
+    (set (attr "preferred_for_speed")
+     (cond [(eq_attr "alternative" "3")
+ 	     (symbol_ref "false")]
+ 	   (symbol_ref "true")))
+    (set_attr "mode" "V4SF")])
+ 
+ ;; Use SSE2's pslldq to vector_init v4sf one non-zero value at 3.
+ (define_insn "sse2_insertps_v4sf_3"
+   [(set (match_operand:V4SF 0 "register_operand" "=x")
+ 	(vec_merge:V4SF
+ 	  (vec_duplicate:V4SF
+ 	    (match_operand:SF 1 "register_operand" "0"))
+ 	  (match_operand:V4SF 2 "const0_operand")
+ 	  (const_int 8)))]
+   "TARGET_SSE2 && !TARGET_SSE4_1"
+   "pslldq\t{$12, %0|%0, 12}"
+   [(set_attr "isa" "noavx")
+    (set_attr "type" "sseishft")
+    (set_attr "length_immediate" "1")
+    (set_attr "atom_unit" "sishuf")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix" "orig")
+    (set_attr "mode" "V4SF")])
+ 
  (define_split
    [(set (match_operand:VI4F_128 0 "memory_operand")
  	(vec_merge:VI4F_128
diff -Nrcpad gcc-17-20260823/gcc/config/i386/x86-tune-costs.h gcc-17-20260830/gcc/config/i386/x86-tune-costs.h
*** gcc-17-20260823/gcc/config/i386/x86-tune-costs.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/i386/x86-tune-costs.h	Sun Aug 30 22:32:06 2026
*************** struct processor_costs znver4_cost = {
*** 2231,2237 ****
    "16",					/* Func alignment.  */
    4,					/* Small unroll limit.  */
    2,					/* Small unroll factor.  */
!   COSTS_N_INSNS (2),			/* Branch mispredict scale.  */
  };
  
  /* This table currently replicates znver4_cost table. */
--- 2231,2237 ----
    "16",					/* Func alignment.  */
    4,					/* Small unroll limit.  */
    2,					/* Small unroll factor.  */
!   COSTS_N_INSNS (2) + 3,		/* Branch mispredict scale.  */
  };
  
  /* This table currently replicates znver4_cost table. */
*************** struct processor_costs znver5_cost = {
*** 2399,2405 ****
    "16",					/* Func alignment.  */
    4,					/* Small unroll limit.  */
    2,					/* Small unroll factor.  */
!   COSTS_N_INSNS (2),			/* Branch mispredict scale.  */
  };
  
  /* skylake_cost should produce code tuned for Skylake family of CPUs.  */
--- 2399,2405 ----
    "16",					/* Func alignment.  */
    4,					/* Small unroll limit.  */
    2,					/* Small unroll factor.  */
!   COSTS_N_INSNS (2) + 3,		/* Branch mispredict scale.  */
  };
  
  /* skylake_cost should produce code tuned for Skylake family of CPUs.  */
diff -Nrcpad gcc-17-20260823/gcc/config/riscv/driver-riscv.cc gcc-17-20260830/gcc/config/riscv/driver-riscv.cc
*** gcc-17-20260823/gcc/config/riscv/driver-riscv.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/config/riscv/driver-riscv.cc	Sun Aug 30 22:32:06 2026
***************
*** 0 ****
--- 1,382 ----
+ /* Native CPU detection for RISC-V.
+    Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #define IN_TARGET_CODE 1
+ 
+ #include "config.h"
+ #define INCLUDE_STRING
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "riscv-subset.h"
+ 
+ #ifdef __linux__
+ #include "common/config/riscv/riscv-hwprobe.h"
+ 
+ #ifndef __NR_getcpu
+ #define __NR_getcpu 168
+ #endif
+ 
+ /* One entry per extension the kernel can report.  */
+ 
+ struct riscv_hwprobe_ext
+ {
+   const char *name;
+   int key;
+   int bit;
+   int xlen;
+ };
+ 
+ static const struct riscv_hwprobe_ext riscv_hwprobe_exts[] = {
+ #define RISCV_HWPROBE_EXT(NAME, UPPERCASE_NAME, KEY, BIT, XLEN)		\
+   { NAME, KEY, BIT, XLEN },
+ #include "common/config/riscv/riscv-hwprobe.def"
+ };
+ 
+ /* Return the number of the CPU this process is currently running on, or -1
+    if it cannot be determined.  */
+ 
+ static int
+ riscv_current_cpu (void)
+ {
+   unsigned int cpu = 0;
+ 
+   if (syscall_5_args (__NR_getcpu, (long) &cpu, 0, 0, 0, 0) != 0)
+     return -1;
+ 
+   return (int) cpu;
+ }
+ 
+ /* Append the Zvl extension for this machine's vector register width,
+    which only the vlenb CSR reports.  */
+ 
+ static void
+ riscv_add_vlen (std::string &isa)
+ {
+   unsigned long vlenb;
+   unsigned long vlen;
+   char buf[32];
+ 
+   __asm__ volatile ("csrr %0, 0xc22" : "=r" (vlenb));
+ 
+   vlen = vlenb * 8;
+ 
+   gcc_assert (vlen >= 32 && vlen <= 65536 && (vlen & (vlen - 1)) == 0);
+ 
+   snprintf (buf, sizeof (buf), "_zvl%lub", vlen);
+   isa += buf;
+ }
+ 
+ /* Build the ISA string from what hwprobe reports, and set *VECTOR_P if the
+    machine can execute vector instructions.  Return false if hwprobe cannot
+    describe the machine.  */
+ 
+ static bool
+ riscv_arch_from_hwprobe (std::string &isa, bool *vector_p)
+ {
+   struct riscv_hwprobe pairs[] = {
+     { RISCV_HWPROBE_KEY_IMA_EXT_0, 0 },
+     { RISCV_HWPROBE_KEY_IMA_EXT_1, 0 }
+   };
+   size_t npairs = ARRAY_SIZE (pairs);
+   unsigned long long ima0;
+ 
+   if (riscv_hwprobe (pairs, npairs) != 0)
+     return false;
+ 
+   const int xlen = __riscv_xlen;
+ 
+   isa = xlen == 32 ? "rv32ima" : "rv64ima";
+ 
+   for (size_t i = 0; i < ARRAY_SIZE (riscv_hwprobe_exts); i++)
+     {
+       const struct riscv_hwprobe_ext *ext = &riscv_hwprobe_exts[i];
+       unsigned long long value;
+ 
+       if (ext->xlen != 0 && ext->xlen != xlen)
+ 	continue;
+ 
+       value = riscv_hwprobe_value (pairs, npairs, ext->key);
+       if (value & (1ULL << ext->bit))
+ 	{
+ 	  isa += '_';
+ 	  isa += ext->name;
+ 	}
+     }
+ 
+   ima0 = riscv_hwprobe_value (pairs, npairs, RISCV_HWPROBE_KEY_IMA_EXT_0);
+ 
+   if (ima0 & (RISCV_HWPROBE_EXT_V
+ 	      | RISCV_HWPROBE_EXT_ZVE32X
+ 	      | RISCV_HWPROBE_EXT_ZVE64X))
+     *vector_p = true;
+ 
+   return true;
+ }
+ 
+ /* What the /proc/cpuinfo fallback managed to read out of one processor
+    block.  */
+ 
+ struct riscv_cpuinfo
+ {
+   std::string isa;
+ };
+ 
+ /* GCC_CPUINFO names a file to read instead of /proc/cpuinfo, and
+    GCC_CPUINFO_CPU the processor to look for in it.  Both are for
+    testing.  */
+ 
+ static const char *
+ riscv_cpuinfo_file (void)
+ {
+   const char *path = getenv ("GCC_CPUINFO");
+ 
+   return path != NULL ? path : "/proc/cpuinfo";
+ }
+ 
+ static bool
+ riscv_cpuinfo_forced (void)
+ {
+   return getenv ("GCC_CPUINFO") != NULL;
+ }
+ 
+ static int
+ riscv_cpuinfo_cpu (void)
+ {
+   const char *forced = getenv ("GCC_CPUINFO_CPU");
+ 
+   return forced != NULL ? atoi (forced) : riscv_current_cpu ();
+ }
+ 
+ /* Split LINE, which /proc/cpuinfo writes as "name\t: value", putting the
+    name in NAME and returning the value.  Both are stripped of surrounding
+    whitespace.  Return NULL if LINE is not of that shape.  */
+ 
+ static const char *
+ riscv_cpuinfo_field (char *line, std::string &name)
+ {
+   char *colon = strchr (line, ':');
+   char *end;
+ 
+   if (colon == NULL)
+     return NULL;
+ 
+   end = colon;
+   while (end > line && ISSPACE (end[-1]))
+     end--;
+   name.assign (line, end - line);
+ 
+   colon++;
+   while (ISSPACE (*colon))
+     colon++;
+ 
+   end = colon + strlen (colon);
+   while (end > colon && ISSPACE (end[-1]))
+     end--;
+   *end = '\0';
+ 
+   return colon;
+ }
+ 
+ /* Read the /proc/cpuinfo block describing processor WANT into OUT, or the
+    first block in the file if WANT is negative.  The processor field holds
+    the number sched_getcpu would return, not the hart id.  Return false if
+    there is no such block, or if it says nothing about the ISA.  */
+ 
+ static bool
+ riscv_read_cpuinfo (int want, struct riscv_cpuinfo *out)
+ {
+   FILE *f = fopen (riscv_cpuinfo_file (), "r");
+   char line[1024];
+   bool in_block = false;
+   bool hart_isa_p = false;
+ 
+   if (f == NULL)
+     return false;
+ 
+   out->isa.clear ();
+ 
+   while (fgets (line, sizeof (line), f) != NULL)
+     {
+       std::string name;
+       const char *value = riscv_cpuinfo_field (line, name);
+ 
+       if (value == NULL)
+ 	continue;
+ 
+       if (name == "processor")
+ 	{
+ 	  if (in_block)
+ 	    break;
+ 	  in_block = want < 0 || atoi (value) == want;
+ 	  continue;
+ 	}
+ 
+       if (!in_block)
+ 	continue;
+ 
+       /* "hart isa" describes this core alone and is the one to go by, but
+ 	 the kernels this fallback exists for are older than that line and
+ 	 offer only the machine-wide "isa".  */
+       if (name == "hart isa")
+ 	{
+ 	  out->isa = value;
+ 	  hart_isa_p = true;
+ 	}
+       else if (name == "isa" && !hart_isa_p)
+ 	out->isa = value;
+     }
+ 
+   fclose (f);
+ 
+   return !out->isa.empty ();
+ }
+ 
+ /* Read the block for the current CPU, or the first one if it has none.  */
+ 
+ static bool
+ riscv_cpuinfo (struct riscv_cpuinfo *out)
+ {
+   return (riscv_read_cpuinfo (riscv_cpuinfo_cpu (), out)
+ 	  || riscv_read_cpuinfo (-1, out));
+ }
+ 
+ /* Copy KERNEL_ISA into ISA, dropping every extension this compiler does
+    not know: one unrecognised name would make -march= fail outright.  Set
+    *VECTOR_P if what is left has vectors.  Return false if KERNEL_ISA is
+    not an ISA string at all.  */
+ 
+ static bool
+ riscv_filter_isa (const char *kernel_isa, std::string &isa, bool *vector_p)
+ {
+   const char *base = __riscv_xlen == 32 ? "rv32" : "rv64";
+   const char *p = kernel_isa;
+ 
+   if (strncmp (p, base, 4) != 0)
+     return false;
+   p += 4;
+ 
+   if (*p != 'i' && *p != 'e' && *p != 'g')
+     return false;
+ 
+   isa = base;
+   isa += *p++;
+ 
+   /* The single-letter extensions run together up to the first underscore.  */
+   for (; *p != '\0' && *p != '_'; p++)
+     {
+       const char name[2] = { *p, '\0' };
+ 
+       if (!riscv_ext_is_known_p (name))
+ 	continue;
+ 
+       isa += '_';
+       isa += *p;
+       if (*p == 'v')
+ 	*vector_p = true;
+     }
+ 
+   /* The multi-letter ones are separated by underscores.  */
+   while (*p == '_')
+     {
+       const char *end = ++p;
+ 
+       while (*end != '\0' && *end != '_')
+ 	end++;
+ 
+       std::string name (p, end - p);
+       p = end;
+ 
+       if (name.empty () || !riscv_ext_is_known_p (name.c_str ()))
+ 	continue;
+ 
+       isa += '_';
+       isa += name;
+       if (name.compare (0, 3, "zve") == 0)
+ 	*vector_p = true;
+     }
+ 
+   return true;
+ }
+ 
+ /* Build the ISA string from /proc/cpuinfo, for kernels that are too old to
+    have hwprobe.  */
+ 
+ static bool
+ riscv_arch_from_cpuinfo (std::string &isa, bool *vector_p)
+ {
+   struct riscv_cpuinfo info;
+ 
+   if (!riscv_cpuinfo (&info))
+     return false;
+ 
+   return riscv_filter_isa (info.isa.c_str (), isa, vector_p);
+ }
+ 
+ /* Return the ISA string describing this machine, or NULL if it cannot be
+    determined.  */
+ 
+ static const char *
+ riscv_native_arch (void)
+ {
+   std::string isa;
+   bool vector_p = false;
+   bool forced = riscv_cpuinfo_forced ();
+ 
+   if ((forced || !riscv_arch_from_hwprobe (isa, &vector_p))
+       && !riscv_arch_from_cpuinfo (isa, &vector_p))
+     return NULL;
+ 
+   if (vector_p && !forced)
+     riscv_add_vlen (isa);
+ 
+   return xstrdup (isa.c_str ());
+ }
+ 
+ #else /* !__linux__ */
+ 
+ static const char *
+ riscv_native_arch (void)
+ {
+   return NULL;
+ }
+ 
+ #endif /* __linux__ */
+ 
+ /* Implement the local_cpu_detect spec function.  ARGV[0] selects what to
+    report: "arch" for an -march= option.  */
+ 
+ const char *
+ host_detect_local_cpu (int argc, const char **argv)
+ {
+   if (argc < 1 || argv[0] == NULL)
+     return NULL;
+ 
+   if (strcmp (argv[0], "arch") == 0)
+     {
+       const char *isa = riscv_native_arch ();
+ 
+       if (isa == NULL)
+ 	return NULL;
+ 
+       return concat ("-march=", isa, NULL);
+     }
+ 
+   return NULL;
+ }
diff -Nrcpad gcc-17-20260823/gcc/config/riscv/riscv-cores.def gcc-17-20260830/gcc/config/riscv/riscv-cores.def
*** gcc-17-20260823/gcc/config/riscv/riscv-cores.def	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/riscv/riscv-cores.def	Sun Aug 30 22:32:06 2026
*************** RISCV_TUNE("sifive-5-series", generic, r
*** 40,45 ****
--- 40,47 ----
  RISCV_TUNE("sifive-7-series", sifive_7, sifive_7_tune_info)
  RISCV_TUNE("sifive-p400-series", sifive_p400, sifive_p400_tune_info)
  RISCV_TUNE("sifive-p600-series", sifive_p600, sifive_p600_tune_info)
+ RISCV_TUNE("sifive-p550", sifive_p600, sifive_p550_tune_info)
+ RISCV_TUNE("sifive-p870-d", sifive_p600, sifive_p870_tune_info)
  RISCV_TUNE("tt-ascalon-x", tt_ascalon_d8, tt_ascalon_d8_tune_info)
  RISCV_TUNE("tt-ascalon-xg", tt_ascalon_xg, tt_ascalon_d8_tune_info)
  RISCV_TUNE("thead-c906", generic, thead_c906_tune_info)
*************** RISCV_CORE("sifive-p450",     "rv64imafd
*** 113,123 ****
--- 115,133 ----
  			      "ziccamoa_ziccif_zicclsm_ziccrse_zicsr_zifencei_"
  			      "zihintntl_zihintpause_zihpm_zfhmin_zba_zbb_zbs",
  			      "sifive-p400-series")
+ RISCV_CORE("sifive-p550",     "rv64imafdc_zifencei_zfhmin_zba_zbb",
+ 			      "sifive-p550")
  RISCV_CORE("sifive-p670",     "rv64imafdcv_za64rs_zic64b_zicbom_zicbop_zicboz_"
  			      "ziccamoa_ziccif_zicclsm_ziccrse_zicsr_zifencei_"
  			      "zihintntl_zihintpause_zihpm_zfhmin_zba_zbb_zbs_"
  			      "zvl128b_zvbb_zvknc_zvkng_zvksc_zvksg",
  			      "sifive-p600-series")
+ RISCV_CORE("sifive-p870-d",   "rv64imafdcbv_zic64b_zicbom_zicbop_zicboz_"
+ 			      "ziccamoa_ziccif_zicclsm_ziccrse_zicntr_zicond_"
+ 			      "zifencei_zihintntl_zihintpause_zihpm_zimop_"
+ 			      "za64rs_zama16b_zawrs_zfa_zfh_zcb_zcmop_zkr_zkt_"
+ 			      "zvbb_zvfbfwma_zvfh_zvfhmin_zvknc_zvksg",
+ 			      "sifive-p870-d")
  
  RISCV_CORE("thead-c906",      "rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_"
  			      "xtheadcondmov_xtheadfmemidx_xtheadmac_"
diff -Nrcpad gcc-17-20260823/gcc/config/riscv/riscv-subset.h gcc-17-20260830/gcc/config/riscv/riscv-subset.h
*** gcc-17-20260823/gcc/config/riscv/riscv-subset.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/riscv/riscv-subset.h	Sun Aug 30 22:32:06 2026
*************** public:
*** 178,183 ****
--- 178,184 ----
    const_iterator end() const   { return const_iterator(nullptr); }
  };
  
+ extern bool riscv_ext_is_known_p (const char *);
  extern const riscv_subset_list *riscv_cmdline_subset_list (void);
  extern void
  riscv_set_arch_by_subset_list (riscv_subset_list *, struct gcc_options *);
diff -Nrcpad gcc-17-20260823/gcc/config/riscv/riscv.cc gcc-17-20260830/gcc/config/riscv/riscv.cc
*** gcc-17-20260823/gcc/config/riscv/riscv.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/riscv/riscv.cc	Sun Aug 30 22:32:06 2026
*************** static const struct riscv_tune_param sif
*** 600,605 ****
--- 600,655 ----
    true,						/* prefer-agnostic.  */
  };
  
+ /* Costs to use when optimizing for SiFive P550.  */
+ static const struct riscv_tune_param sifive_p550_tune_info = {
+   {COSTS_N_INSNS (4), COSTS_N_INSNS (4)},	/* fp_add */
+   {COSTS_N_INSNS (4), COSTS_N_INSNS (4)},	/* fp_mul */
+   {COSTS_N_INSNS (19), COSTS_N_INSNS (33)},	/* fp_div */
+   {COSTS_N_INSNS (3), COSTS_N_INSNS (3)},	/* int_mul */
+   {COSTS_N_INSNS (20), COSTS_N_INSNS (35)},	/* int_div */
+   3,						/* issue_rate */
+   4,						/* branch_cost */
+   3,						/* memory_cost */
+   4,						/* fmv_cost */
+   true,						/* slow_unaligned_access */
+   false,					/* vector_unaligned_access */
+   false,					/* use_divmod_expansion */
+   false,					/* overlap_op_by_pieces */
+   true,						/* use_zero_stride_load */
+   false,					/* speculative_sched_vsetvl */
+   RISCV_FUSE_LUI_ADDI | RISCV_FUSE_AUIPC_ADDI,	/* fusible_ops */
+   NULL,						/* vector cost */
+   NULL,						/* function_align */
+   NULL,						/* jump_align */
+   NULL,						/* loop_align */
+   false,					/* prefer-agnostic.  */
+ };
+ 
+ /* Costs to use when optimizing for SiFive P870-D.  */
+ static const struct riscv_tune_param sifive_p870_tune_info = {
+   {COSTS_N_INSNS (2), COSTS_N_INSNS (2)},	/* fp_add */
+   {COSTS_N_INSNS (3), COSTS_N_INSNS (3)},	/* fp_mul */
+   {COSTS_N_INSNS (6), COSTS_N_INSNS (11)},	/* fp_div */
+   {COSTS_N_INSNS (2), COSTS_N_INSNS (2)},	/* int_mul */
+   {COSTS_N_INSNS (20), COSTS_N_INSNS (35)},	/* int_div */
+   6,						/* issue_rate */
+   4,						/* branch_cost */
+   3,						/* memory_cost */
+   4,						/* fmv_cost */
+   false,					/* slow_unaligned_access */
+   true,						/* vector_unaligned_access */
+   false,					/* use_divmod_expansion */
+   true,						/* overlap_op_by_pieces */
+   true,						/* use_zero_stride_load */
+   false,					/* speculative_sched_vsetvl */
+   RISCV_FUSE_LUI_ADDI | RISCV_FUSE_AUIPC_ADDI,	/* fusible_ops */
+   &generic_vector_cost,				/* vector cost */
+   NULL,						/* function_align */
+   NULL,						/* jump_align */
+   NULL,						/* loop_align */
+   true,						/* prefer-agnostic.  */
+ };
+ 
  /* Costs to use when optimizing for T-HEAD c906.  */
  static const struct riscv_tune_param thead_c906_tune_info = {
    {COSTS_N_INSNS (4), COSTS_N_INSNS (5)}, /* fp_add */
diff -Nrcpad gcc-17-20260823/gcc/config/riscv/riscv.h gcc-17-20260830/gcc/config/riscv/riscv.h
*** gcc-17-20260823/gcc/config/riscv/riscv.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/riscv/riscv.h	Sun Aug 30 22:32:06 2026
*************** extern const char *riscv_default_mtune (
*** 52,63 ****
  extern const char *riscv_multi_lib_check (int argc, const char **argv);
  extern const char *riscv_arch_help (int argc, const char **argv);
  
  # define EXTRA_SPEC_FUNCTIONS						\
    { "riscv_expand_arch", riscv_expand_arch },				\
    { "riscv_expand_arch_from_cpu", riscv_expand_arch_from_cpu },		\
    { "riscv_default_mtune", riscv_default_mtune },			\
    { "riscv_multi_lib_check", riscv_multi_lib_check },			\
!   { "riscv_arch_help", riscv_arch_help },
  
  /* Support for a compile-time default CPU, et cetera.  The rules are:
     --with-cpu is ignored if -mcpu is specified.
--- 52,77 ----
  extern const char *riscv_multi_lib_check (int argc, const char **argv);
  extern const char *riscv_arch_help (int argc, const char **argv);
  
+ #if defined (__riscv) && defined (__linux__)
+ extern const char *host_detect_local_cpu (int argc, const char **argv);
+ #define HAVE_LOCAL_CPU_DETECT
+ # define RISCV_NATIVE_SPEC_FUNCTIONS					\
+   { "local_cpu_detect", host_detect_local_cpu },
+ 
+ # define RISCV_NATIVE_SPECS						\
+   "%{march=native:%<march=native %:local_cpu_detect(arch)} "
+ #else
+ # define RISCV_NATIVE_SPEC_FUNCTIONS
+ # define RISCV_NATIVE_SPECS ""
+ #endif
+ 
  # define EXTRA_SPEC_FUNCTIONS						\
    { "riscv_expand_arch", riscv_expand_arch },				\
    { "riscv_expand_arch_from_cpu", riscv_expand_arch_from_cpu },		\
    { "riscv_default_mtune", riscv_default_mtune },			\
    { "riscv_multi_lib_check", riscv_multi_lib_check },			\
!   { "riscv_arch_help", riscv_arch_help },				\
!   RISCV_NATIVE_SPEC_FUNCTIONS
  
  /* Support for a compile-time default CPU, et cetera.  The rules are:
     --with-cpu is ignored if -mcpu is specified.
*************** ASM_MISA_SPEC
*** 119,126 ****
--- 133,143 ----
  #define ARCH_UNSET_CLEANUP_SPECS  \
    "%{march=unset:%<march=*} "  \
  
+ /* RISCV_NATIVE_SPECS comes first so that the specs below, which expand and
+    validate -march=, see the option it produced.  */
  #undef DRIVER_SELF_SPECS
  #define DRIVER_SELF_SPECS					\
+ RISCV_NATIVE_SPECS,						\
  ARCH_UNSET_CLEANUP_SPECS \
  "%{march=help:%:riscv_arch_help()} "				\
  "%{print-supported-extensions:%:riscv_arch_help()} "		\
diff -Nrcpad gcc-17-20260823/gcc/config/riscv/vector.md gcc-17-20260830/gcc/config/riscv/vector.md
*** gcc-17-20260823/gcc/config/riscv/vector.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/riscv/vector.md	Sun Aug 30 22:32:06 2026
***************
*** 4325,4347 ****
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_widen_mulsu<mode>_scalar"
!   [(set (match_operand:VWEXTI 0 "register_operand"                  "=&vr,&vr")
  	(if_then_else:VWEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"           "vmWc1,vmWc1")
! 	     (match_operand 5 "vector_length_operand"              "  rvl,  rvl")
! 	     (match_operand 6 "const_int_operand"                  "    i,    i")
! 	     (match_operand 7 "const_int_operand"                  "    i,    i")
! 	     (match_operand 8 "const_int_operand"                  "    i,    i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (mult:VWEXTI
  	    (sign_extend:VWEXTI
! 	      (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "   vr,   vr"))
  	    (zero_extend:VWEXTI
  	      (vec_duplicate:<V_DOUBLE_TRUNC>
! 		(match_operand:<VSUBEL> 4 "reg_or_0_operand"       "   rJ,   rJ"))))
! 	  (match_operand:VWEXTI 2 "vector_merge_operand"           "   vu,    0")))]
    "TARGET_VECTOR"
    "vwmulsu.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "viwmul")
--- 4325,4347 ----
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_widen_mulsu<mode>_scalar"
!   [(set (match_operand:VWEXTI 0 "register_operand"                 "=vr, vr, vd, vd")
  	(if_then_else:VWEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"           "Wc1,Wc1, vm, vm")
! 	     (match_operand 5 "vector_length_operand"              "rvl,rvl,rvl,rvl")
! 	     (match_operand 6 "const_int_operand"                  "  i,  i,  i,  i")
! 	     (match_operand 7 "const_int_operand"                  "  i,  i,  i,  i")
! 	     (match_operand 8 "const_int_operand"                  "  i,  i,  i,  i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (mult:VWEXTI
  	    (sign_extend:VWEXTI
! 	      (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "Wvr,Wvr,Wvr,Wvr"))
  	    (zero_extend:VWEXTI
  	      (vec_duplicate:<V_DOUBLE_TRUNC>
! 		(match_operand:<VSUBEL> 4 "reg_or_0_operand"       " rJ, rJ, rJ, rJ"))))
! 	  (match_operand:VWEXTI 2 "vector_merge_operand"           " vu,  0, vu,  0")))]
    "TARGET_VECTOR"
    "vwmulsu.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "viwmul")
***************
*** 6095,6118 ****
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_widen_mul_plus<su><mode>_scalar"
!   [(set (match_operand:VWEXTI 0 "register_operand"                    "=&vr")
  	(if_then_else:VWEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"             "vmWc1")
! 	     (match_operand 5 "vector_length_operand"                "  rvl")
! 	     (match_operand 6 "const_int_operand"                    "    i")
! 	     (match_operand 7 "const_int_operand"                    "    i")
! 	     (match_operand 8 "const_int_operand"                    "    i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (plus:VWEXTI
  	    (mult:VWEXTI
  	      (any_extend:VWEXTI
  	        (vec_duplicate:<V_DOUBLE_TRUNC>
! 	          (match_operand:<VSUBEL> 3 "register_operand"       "    r")))
  	      (any_extend:VWEXTI
! 	        (match_operand:<V_DOUBLE_TRUNC> 4 "register_operand" "   vr")))
! 	    (match_operand:VWEXTI 2 "register_operand"               "    0"))
  	  (match_dup 2)))]
    "TARGET_VECTOR"
    "vwmacc<u>.vx\t%0,%3,%4%p1"
--- 6095,6118 ----
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_widen_mul_plus<su><mode>_scalar"
!   [(set (match_operand:VWEXTI 0 "register_operand"                   "=vr, vd")
  	(if_then_else:VWEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"             "Wc1, vm")
! 	     (match_operand 5 "vector_length_operand"                "rvl,rvl")
! 	     (match_operand 6 "const_int_operand"                    "  i,  i")
! 	     (match_operand 7 "const_int_operand"                    "  i,  i")
! 	     (match_operand 8 "const_int_operand"                    "  i,  i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (plus:VWEXTI
  	    (mult:VWEXTI
  	      (any_extend:VWEXTI
  	        (vec_duplicate:<V_DOUBLE_TRUNC>
! 	          (match_operand:<VSUBEL> 3 "register_operand"       "  r,  r")))
  	      (any_extend:VWEXTI
! 	        (match_operand:<V_DOUBLE_TRUNC> 4 "register_operand" "Wvr,Wvr")))
! 	    (match_operand:VWEXTI 2 "register_operand"               "  0,  0"))
  	  (match_dup 2)))]
    "TARGET_VECTOR"
    "vwmacc<u>.vx\t%0,%3,%4%p1"
diff -Nrcpad gcc-17-20260823/gcc/config/riscv/x-riscv gcc-17-20260830/gcc/config/riscv/x-riscv
*** gcc-17-20260823/gcc/config/riscv/x-riscv	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/config/riscv/x-riscv	Sun Aug 30 22:32:06 2026
***************
*** 0 ****
--- 1,6 ----
+ driver-riscv.o: $(srcdir)/config/riscv/driver-riscv.cc \
+   $(CONFIG_H) $(SYSTEM_H) $(TM_H) $(CORETYPES_H) \
+   $(srcdir)/config/riscv/riscv-subset.h \
+   $(srcdir)/common/config/riscv/riscv-hwprobe.h \
+   $(srcdir)/common/config/riscv/riscv-hwprobe.def
+ 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
diff -Nrcpad gcc-17-20260823/gcc/config/rs6000/rs6000-builtins.def gcc-17-20260830/gcc/config/rs6000/rs6000-builtins.def
*** gcc-17-20260823/gcc/config/rs6000/rs6000-builtins.def	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/rs6000/rs6000-builtins.def	Sun Aug 30 22:32:06 2026
***************
*** 842,853 ****
    const vuc __builtin_altivec_vperm_16qi_uns (vuc, vuc, vuc);
      VPERM_16QI_UNS altivec_vperm_v16qi_uns {}
  
-   const vsq __builtin_altivec_vperm_1ti (vsq, vsq, vuc);
-     VPERM_1TI altivec_vperm_v1ti {}
- 
-   const vuq __builtin_altivec_vperm_1ti_uns (vuq, vuq, vuc);
-     VPERM_1TI_UNS altivec_vperm_v1ti_uns {}
- 
    const vf __builtin_altivec_vperm_4sf (vf, vf, vuc);
      VPERM_4SF altivec_vperm_v4sf {}
  
--- 842,847 ----
***************
*** 941,952 ****
    const vuc __builtin_altivec_vsel_16qi_uns (vuc, vuc, vuc);
      VSEL_16QI_UNS vector_select_v16qi_uns {}
  
-   const vsq __builtin_altivec_vsel_1ti (vsq, vsq, vuq);
-     VSEL_1TI vector_select_v1ti {}
- 
-   const vuq __builtin_altivec_vsel_1ti_uns (vuq, vuq, vuq);
-     VSEL_1TI_UNS vector_select_v1ti_uns {}
- 
    const vf __builtin_altivec_vsel_4sf (vf, vf, vf);
      VSEL_4SF vector_select_v4sf {}
  
--- 935,940 ----
***************
*** 980,988 ****
    const vss __builtin_altivec_vsldoi_8hi (vss, vss, const int<4>);
      VSLDOI_8HI altivec_vsldoi_v8hi {}
  
-   const vsq __builtin_altivec_vsldoi_v1ti (vsq, vsq, const int<4>);
-     VSLDOI_1TI altivec_vsldoi_v1ti {}
- 
    const vss __builtin_altivec_vslh (vss, vus);
      VSLH vashlv8hi3 {}
  
--- 968,973 ----
***************
*** 1234,1239 ****
--- 1219,1230 ----
    const vull __builtin_altivec_vor_v2di_uns (vull, vull);
      VOR_V2DI_UNS iorv2di3 {}
  
+   const vsq __builtin_altivec_vperm_1ti (vsq, vsq, vuc);
+     VPERM_1TI altivec_vperm_v1ti {}
+ 
+   const vuq __builtin_altivec_vperm_1ti_uns (vuq, vuq, vuc);
+     VPERM_1TI_UNS altivec_vperm_v1ti_uns {}
+ 
    const vd __builtin_altivec_vperm_2df (vd, vd, vuc);
      VPERM_2DF altivec_vperm_v2df {}
  
***************
*** 1249,1254 ****
--- 1240,1251 ----
    const vsll __builtin_altivec_vreve_v2di (vsll);
      VREVE_V2DI altivec_vrevev2di2 {}
  
+   const vsq __builtin_altivec_vsel_1ti (vsq, vsq, vuq);
+     VSEL_1TI vector_select_v1ti {}
+ 
+   const vuq __builtin_altivec_vsel_1ti_uns (vuq, vuq, vuq);
+     VSEL_1TI_UNS vector_select_v1ti_uns {}
+ 
    const vd __builtin_altivec_vsel_2df (vd, vd, vd);
      VSEL_2DF vector_select_v2df {}
  
***************
*** 1264,1269 ****
--- 1261,1269 ----
    const vsll __builtin_altivec_vsldoi_2di (vsll, vsll, const int<4>);
      VSLDOI_2DI altivec_vsldoi_v2di {}
  
+   const vsq __builtin_altivec_vsldoi_v1ti (vsq, vsq, const int<4>);
+     VSLDOI_1TI altivec_vsldoi_v1ti {}
+ 
    const vd __builtin_altivec_vxor_v2df (vd, vd);
      VXOR_V2DF xorv2df3 {}
  
diff -Nrcpad gcc-17-20260823/gcc/config/rs6000/rs6000.opt gcc-17-20260830/gcc/config/rs6000/rs6000.opt
*** gcc-17-20260823/gcc/config/rs6000/rs6000.opt	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/rs6000/rs6000.opt	Sun Aug 30 22:32:06 2026
*************** Target Undocumented Mask(POWER11) Var(rs
*** 597,603 ****
  
  ;; Potential future machine
  mfuture
! Target Undocumented Mask(FUTURE) Var(rs6000_isa_flags) Warn(Do not use %<-mfuture>, use %<-mcpu=future>)
  
  mdense-math
  Target Mask(DMF) Var(rs6000_isa_flags)
--- 597,603 ----
  
  ;; Potential future machine
  mfuture
! Target Undocumented Mask(FUTURE) Var(rs6000_isa_flags) Warn(Do not use %<-mfuture%>, use %<-mcpu=future%>)
  
  mdense-math
  Target Mask(DMF) Var(rs6000_isa_flags)
diff -Nrcpad gcc-17-20260823/gcc/config/rs6000/vsx.md gcc-17-20260830/gcc/config/rs6000/vsx.md
*** gcc-17-20260823/gcc/config/rs6000/vsx.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/rs6000/vsx.md	Sun Aug 30 22:32:06 2026
***************
*** 5717,5745 ****
    "TARGET_P9_VECTOR"
  {
    int sh;
-   rtx cmpz1_result = gen_reg_rtx (<MODE>mode);
-   rtx cmpz2_result = gen_reg_rtx (<MODE>mode);
-   rtx cmpz_result = gen_reg_rtx (<MODE>mode);
-   rtx not_cmpz_result = gen_reg_rtx (<MODE>mode);
-   rtx and_result = gen_reg_rtx (<MODE>mode);
    rtx result = gen_reg_rtx (<MODE>mode);
-   rtx vzero = gen_reg_rtx (<MODE>mode);
  
!   /* Vector with zeros in elements that correspond to zeros in operands.  */
!   emit_move_insn (vzero, CONST0_RTX (<MODE>mode));
! 
!   emit_insn (gen_vcmpne<VSX_EXTRACT_WIDTH> (cmpz1_result, operands[1], vzero));
!   emit_insn (gen_vcmpne<VSX_EXTRACT_WIDTH> (cmpz2_result, operands[2], vzero));
!   emit_insn (gen_and<mode>3 (and_result, cmpz1_result, cmpz2_result));
  
!   /* Vector with ones in elements that match.  */
!   emit_insn (gen_vcmpnez<VSX_EXTRACT_WIDTH> (cmpz_result, operands[1],
                                               operands[2]));
-   emit_insn (gen_one_cmpl<mode>2 (not_cmpz_result, cmpz_result));
  
-   /* Create vector with ones in elements where there was a zero in one of
-      the source elements or the elements did not match.  */
-   emit_insn (gen_nand<mode>3 (result, and_result, not_cmpz_result));
    sh = GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) / 2;
  
    if (<MODE>mode == V16QImode)
--- 5717,5730 ----
    "TARGET_P9_VECTOR"
  {
    int sh;
    rtx result = gen_reg_rtx (<MODE>mode);
  
!   /* Vector with ones in elements that do not match or elements corresponding
!      to zeros in operands.  */
  
!   emit_insn (gen_vcmpnez<VSX_EXTRACT_WIDTH> (result, operands[1],
                                               operands[2]));
  
    sh = GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) / 2;
  
    if (<MODE>mode == V16QImode)
***************
*** 6939,6950 ****
  	 of element from 7.  */
        int value = INTVAL (operands[4]);
        rtx vreg = gen_reg_rtx (V16QImode);
  
        emit_insn (gen_xxspltib_v16qi (vreg, GEN_INT (-1)));
!       emit_insn (gen_xorv16qi3 (operands[3], operands[3], vreg));
        value = 7 - value;
        emit_insn (gen_xxpermx_inst (operands[0], operands[2],
! 				   operands[1], operands[3],
  				   GEN_INT (value)));
      }
  
--- 6924,6936 ----
  	 of element from 7.  */
        int value = INTVAL (operands[4]);
        rtx vreg = gen_reg_rtx (V16QImode);
+       rtx tmp = gen_reg_rtx (V16QImode);
  
        emit_insn (gen_xxspltib_v16qi (vreg, GEN_INT (-1)));
!       emit_insn (gen_xorv16qi3 (tmp, operands[3], vreg));
        value = 7 - value;
        emit_insn (gen_xxpermx_inst (operands[0], operands[2],
! 				   operands[1], tmp,
  				   GEN_INT (value)));
      }
  
diff -Nrcpad gcc-17-20260823/gcc/config/s390/9175.md gcc-17-20260830/gcc/config/s390/9175.md
*** gcc-17-20260823/gcc/config/s390/9175.md	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/s390/9175.md	Sun Aug 30 22:32:06 2026
*************** vrlq,vrq,wfddb,wfdsb,wfdxb,wfsqdb,wfsqxb
*** 26,121 ****
  (define_attr "z17_unit_fxa" ""
   (cond [(eq_attr "mnemonic" "a,afi,ag,agf,agfi,agfr,agh,aghi,aghik,agr,agrk,ah,\
  ahi,ahik,ahy,al,alc,alcg,alcgr,alcr,alfi,alg,algf,algfi,algfr,alghsik,algr,\
! algrk,alhsik,alr,alrk,aly,ar,ark,ay,bdepg,bextg,clzg,ctzg,etnd,flogr,ic,icm,\
! icmh,icmy,icy,iihf,iilf,ipm,la,larl,lay,lb,lbr,lcgfr,lcgr,lcr,lgb,lgbr,lgf,\
! lgfi,lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgcr,llgfr,\
! llghr,llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,llxab,llxaf,llxag,llxah,\
! llxaq,lngfr,lngr,lnr,loc,locg,locghi,locgr,lochi,locr,lpgfr,lpgr,lpr,lr,lrv,\
! lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lxab,lxaf,lxag,lxah,lxaq,\
! mg,mgh,mghi,mgrk,mh,mhi,mhy,mlg,mlgr,ms,msc,msfi,msg,msgc,msgf,msgfi,\
! msgfr,msgr,msgrkc,msr,msrkc,msy,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,\
! nilh,nill,nngrk,nnrk,nogrk,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,\
! oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,\
! rnsbg,rosbg,rxsbg,s,selgr,selr,sg,sgf,sgfr,sgh,sgr,sgrk,sh,shy,sl,slb,slbg,\
! slbgr,slbr,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,\
! sly,sr,sra,srag,srak,srk,srl,srlg,srlk,sy,x,xg,xgr,xgrk,xihf,xilf,xr,\
! xrk,xy")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_fxb" ""
!  (cond [(eq_attr "mnemonic" "agsi,algsi,alsi,asi,b,bc,bcr,bi,br,c,cfi,cg,cgf,\
! cgfi,cgfr,cgfrl,cgh,cghi,cghrl,cghsi,cgit,cgr,cgrl,cgrt,ch,chi,chrl,chsi,chy,\
! cit,cl,clfhsi,clfi,clfit,clg,clgf,clgfi,clgfr,clgfrl,clghrl,clghsi,clgit,clgr,\
! clgrl,clgrt,clgt,clhhsi,clhrl,cli,cliy,clm,clmy,clr,clrl,clrt,clt,cly,cr,crl,\
! crt,cy,laa,laag,lan,lang,lao,laog,lat,lax,laxg,lcdfr,ldgr,ldr,lgat,lgdr,lndfr,\
! lpdfr,lxr,lzdr,lzer,lzxr,mvghi,mvhhi,mvhi,mvi,mviy,ni,niy,nop,nopr,ntstg,oi,\
! oiy,ppa,st,stc,stcy,std,stdy,ste,stey,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,\
! strv,strvg,strvh,sty,tend,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlgvb,vlgvf,vlgvg,\
! vlgvh,vlr,vlvgb,vlvgf,vlvgg,vlvgh,vlvgp,vscef,vsceg,vst,vstbrf,vstbrg,vstbrh,\
! vstbrq,vstebrf,vstebrg,vstef,vsteg,vsterf,vsterg,vsterh,vstl,vstrl,vstrlr,xi,\
! xiy")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_fxd" ""
!  (cond [(eq_attr "mnemonic" "dlgr,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_lsu" ""
!  (cond [(eq_attr "mnemonic" "clc,ear,l,lam,lcbb,ld,lde,ldy,lg,lgrl,llc,llgc,\
! llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lmg,lpq,lrl,ly,mvcrl,sar,sfpc,\
! tabort,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,vlbrrepf,vlbrrepg,vlbrreph,vlerf,vlerg,\
! vlerh,vll,vllebrzf,vllebrzg,vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,\
! vlrepb,vlrepf,vlrepg,vlreph,vlrl,vlrlr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_vfu" ""
!  (cond [(eq_attr "mnemonic" "adb,adbr,adtr,aeb,aebr,axbr,axtr,brcl,cdb,cdbr,\
! cdtr,ceb,cebr,cpsdr,cxbr,cxtr,ddtr,dxtr,fidbr,fidbra,fidtr,fiebr,fiebra,fixbr,\
! fixbra,fixtr,j,jg,kdb,kdbr,kdtr,keb,kebr,kxbr,kxtr,lcdbr,lcebr,lcxbr,ldeb,\
! ldebr,ldetr,le,ledbr,ledtr,ler,ley,lndbr,lnebr,lnxbr,lpdbr,lpebr,lpxbr,ltdbr,\
! ltdtr,ltebr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,madbr,maeb,maebr,mdb,\
! mdbr,mdtr,meeb,meebr,msdb,msdbr,mseb,msebr,mxbr,mxtr,sdb,sdbr,sdtr,seb,sebr,\
! sxbr,sxtr,tcdb,tceb,tcxb,tdcdt,tdcet,tdcxt,vab,vaccb,vacccq,vaccf,vaccg,vacch,\
! vaccq,vacq,vaf,vag,vah,vaq,vavgb,vavgf,vavgg,vavgh,vavglb,vavglf,vavglg,vavglh,\
! vavglq,vavgq,vblendb,vblendf,vblendg,vblendh,vblendq,vbperm,vcdgb,vcdlgb,vcefb,\
! vcelfb,vceqb,vceqbs,vceqf,vceqfs,vceqg,vceqgs,vceqh,vceqhs,vceqq,vceqqs,vcfeb,\
! vcfn,vcgdb,vchb,vchbs,vchf,vchfs,vchg,vchgs,vchh,vchhs,vchlb,vchlbs,vchlf,\
! vchlfs,vchlg,vchlgs,vchlh,vchlhs,vchlq,vchlqs,vchq,vchqs,vcksm,vclfeb,vclfnh,\
! vclfnl,vclgdb,vclzb,vclzf,vclzg,vclzh,vclzq,vcnf,vcrnf,vctzb,vctzf,vctzg,vctzh,\
! vctzq,verimb,verimf,verimg,verimh,verllb,verllf,verllg,verllh,verllvb,verllvf,\
! verllvg,verllvh,veslb,veslf,veslg,veslh,veslvb,veslvf,veslvg,veslvh,vesrab,\
! vesraf,vesrag,vesrah,vesravb,vesravf,vesravg,vesravh,vesrlb,vesrlf,vesrlg,\
! vesrlh,vesrlvb,vesrlvf,vesrlvg,vesrlvh,veval,vfadb,vfasb,vfcedb,vfcedbs,vfcesb,\
! vfcesbs,vfchdb,vfchdbs,vfchedb,vfchedbs,vfchesb,vfchesbs,vfchsb,vfchsbs,vfeeb,\
! vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,vfeneh,vfenezb,vfenezf,\
! vfenezh,vfidb,vfisb,vfkedb,vfkesb,vfkhdb,vfkhedb,vfkhesb,vfkhsb,vflcdb,vflcsb,\
! vflndb,vflnsb,vflpdb,vflpsb,vfmadb,vfmasb,vfmaxdb,vfmaxsb,vfmdb,vfmindb,\
! vfminsb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,vfnmssb,vfsdb,vfssb,\
! vftcidb,vftcisb,vgbm,vgemb,vgemf,vgemg,vgemh,vgemq,vgfmab,vgfmaf,vgfmag,vgfmah,\
! vgfmb,vgfmf,vgfmg,vgfmh,vgm,vistrb,vistrbs,vistrf,vistrfs,vistrh,vistrhs,vlcb,\
! vlcf,vlcg,vlch,vldeb,vleb,vlebrf,vlebrg,vlebrh,vledb,vlef,vleg,vleh,vleib,\
! vleif,vleig,vleih,vlpb,vlpf,vlpg,vlph,vlpq,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,\
! vmahg,vmahh,vmahq,vmalb,vmaleb,vmalef,vmaleg,vmaleh,vmalf,vmalg,vmalhb,vmalhf,\
! vmalhg,vmalhh,vmalhq,vmalhw,vmalob,vmalof,vmalog,vmaloh,vmalq,vmaob,vmaof,\
! vmaog,vmaoh,vmeb,vmef,vmeg,vmeh,vmhb,vmhf,vmhg,vmhh,vmhq,vmlb,vmleb,vmlef,\
! vmleg,vmleh,vmlf,vmlg,vmlhb,vmlhf,vmlhg,vmlhh,vmlhq,vmlhw,vmlob,vmlof,vmlog,\
! vmloh,vmlq,vmnb,vmnf,vmng,vmnh,vmnlb,vmnlf,vmnlg,vmnlh,vmnlq,vmnq,vmob,vmof,\
! vmog,vmoh,vmrhb,vmrhf,vmrhg,vmrhh,vmrlb,vmrlf,vmrlg,vmrlh,vmslg,vmxb,vmxf,vmxg,\
! vmxh,vmxlb,vmxlf,vmxlg,vmxlh,vmxlq,vmxq,vn,vnc,vnn,vno,vnot,vnx,vo,voc,vone,\
! vpdi,vperm,vpkf,vpkg,vpkh,vpklsf,vpklsfs,vpklsg,vpklsgs,vpklsh,vpklshs,vpksf,\
! vpksfs,vpksg,vpksgs,vpksh,vpkshs,vpopct,vpopctb,vpopctf,vpopctg,vpopcth,vrepb,\
! vrepf,vrepg,vreph,vrepi,vrepib,vrepif,vrepig,vrepih,vsb,vsbcbiq,vsbiq,vscbib,\
! vscbif,vscbig,vscbih,vscbiq,vsegb,vsegf,vsegh,vsel,vsf,vsg,vsh,vsl,vslb,vsld,\
! vsldb,vsq,vsra,vsrab,vsrd,vsrl,vsrlb,vsumb,vsumgf,vsumgh,vsumh,vsumqf,vsumqg,\
! vtm,vuphb,vuphf,vuphg,vuphh,vuplb,vuplf,vuplg,vuplhb,vuplhf,vuplhg,vuplhh,\
! vuplhw,vupllb,vupllf,vupllg,vupllh,vx,vzero,wcdgb,wcdlgb,wcefb,wcelfb,wcfeb,\
! wcgdb,wclfeb,wclgdb,wfadb,wfasb,wfaxb,wfcdb,wfcedb,wfcesb,wfcexb,wfcexbs,\
! wfchdb,wfchedb,wfchesb,wfchexb,wfchexbs,wfchsb,wfchxb,wfchxbs,wfcsb,wfcxb,\
! wfidb,wfisb,wfixb,wfkdb,wfkedb,wfkesb,wfkexb,wfkhdb,wfkhedb,wfkhesb,wfkhexb,\
! wfkhsb,wfkhxb,wfksb,wfkxb,wflcdb,wflcsb,wflcxb,wflld,wflndb,wflnsb,wflnxb,\
! wflpdb,wflpsb,wflpxb,wflrx,wfmadb,wfmasb,wfmaxb,wfmaxxb,wfmdb,wfminxb,wfmsb,\
! wfmsdb,wfmssb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,wfsdb,wfssb,wfsxb,wftcixb,wldeb,\
! wledb")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_cracked" ""
--- 26,162 ----
  (define_attr "z17_unit_fxa" ""
   (cond [(eq_attr "mnemonic" "a,afi,ag,agf,agfi,agfr,agh,aghi,aghik,agr,agrk,ah,\
  ahi,ahik,ahy,al,alc,alcg,alcgr,alcr,alfi,alg,algf,algfi,algfr,alghsik,algr,\
! algrk,alhsik,alr,alrk,aly,ar,ark,ay,bas,basr,bdepg,bextg,bras,brasl,cdsg,chhsi,\
! clzg,cs,csg,csy,ctzg,efpc,etnd,ex,exrl,flogr,ic,icm,icmh,icmy,icy,iihf,iilf,\
! ipm,la,larl,lay,lb,lbr,lcgfr,lcgr,lcr,lgb,lgbr,lgf,lgfi,lgfr,lgfrl,lgh,lghi,\
! lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgcr,llgfr,llghr,llgtr,llhr,llihf,\
! llihh,llihl,llilf,llilh,llill,llxab,llxaf,llxag,llxah,llxaq,lngfr,lngr,lnr,loc,\
! locg,locghi,locgr,lochi,locr,lpgfr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,\
! ltgf,ltgfr,ltgr,ltr,lxab,lxaf,lxag,lxah,lxaq,mg,mgh,mghi,mgrk,mh,mhi,mhy,mlg,\
! mlgr,ms,msc,msfi,msg,msgc,msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,n,ncgrk,\
! ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nngrk,nnrk,nogrk,nork,nr,nrk,\
! nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,ork,oy,\
! pfpo,popcnt,ppa,risbg,risbgn,rll,rllg,rnsbg,rosbg,rxsbg,s,selgr,selr,sg,sgf,\
! sgfr,sgh,sgr,sgrk,sh,shy,sl,slb,slbg,slbgr,slbr,slfi,slg,slgf,slgfi,slgfr,slgr,\
! slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,srak,srk,srl,srlg,srlk,sy,x,xg,\
! xgr,xgrk,xihf,xilf,xr,xrk,xy")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_fxb" ""
!  (cond [(eq_attr "mnemonic" "agsi,algsi,alsi,asi,b,bas,basr,bc,bcr,bi,br,brasl,\
! brcl,c,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,cdlftr,cdlgbr,cdlgtr,cdsg,cefbr,cegbr,\
! celfbr,celgbr,cfdbr,cfebr,cfi,cfxbr,cg,cgdbr,cgdtr,cgebr,cgf,cgfi,cgfr,cgfrl,\
! cgh,cghi,cghrl,cghsi,cgit,cgr,cgrl,cgrt,cgxbr,cgxtr,ch,chhsi,chi,chrl,chsi,chy,\
! cit,cl,clc,clfdbr,clfdtr,clfebr,clfhsi,clfi,clfit,clfxbr,clfxtr,clg,clgdbr,\
! clgdtr,clgebr,clgf,clgfi,clgfr,clgfrl,clghrl,clghsi,clgit,clgr,clgrl,clgrt,\
! clgt,clgxbr,clgxtr,clhhsi,clhrl,cli,cliy,clm,clmy,clr,clrl,clrt,clt,cly,cr,crl,\
! crt,cs,csg,csy,cxfbr,cxftr,cxgbr,cxgtr,cxlfbr,cxlftr,cxlgbr,cxlgtr,cy,efpc,ex,\
! exrl,j,jg,laa,laag,lan,lang,lao,laog,lat,lax,laxg,lcdfr,ldgr,ldr,lgat,lgdr,\
! lndfr,lpdfr,lxr,lzdr,lzer,lzxr,mvc,mvghi,mvhhi,mvhi,mvi,mviy,nc,ni,niy,nop,\
! nopr,ntstg,oc,oi,oiy,ppa,st,stam,stc,stcy,std,stdy,ste,stey,stg,stgrl,sth,\
! sthrl,sthy,stmg,stoc,stocg,stpq,strl,strv,strvg,strvh,sty,tbegin,tbeginc,tend,\
! tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vgef,vgeg,vlgvb,vlgvf,vlgvg,vlgvh,vlr,vlvgb,\
! vlvgf,vlvgg,vlvgh,vlvgp,vscef,vsceg,vst,vstbrf,vstbrg,vstbrh,vstbrq,vsteb,\
! vstebrf,vstebrg,vstebrh,vstef,vsteg,vsteh,vsterf,vsterg,vsterh,vstl,vstrl,\
! vstrlr,xc,xi,xiy")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_fxd" ""
!  (cond [(eq_attr "mnemonic" "dlg,dlgr,dsg,dsgf,dsgfr,dsgr")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_lsu" ""
!  (cond [(eq_attr "mnemonic" "a,adb,aeb,ag,agf,agh,agsi,ah,ahy,al,alc,alcg,alg,\
! algf,algsi,alsi,aly,asi,ay,c,cdb,cdsg,ceb,cg,cgf,cgh,cghsi,ch,chhsi,chsi,chy,\
! cl,clc,clfhsi,clg,clgf,clghsi,clgt,clhhsi,cli,cliy,clm,clmy,clt,cly,cs,csg,csy,\
! cy,ddb,deb,dlg,dsg,dsgf,ear,efpc,ic,icm,icmh,icmy,icy,kdb,keb,l,laa,laag,lam,\
! lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,ldeb,ldy,le,ley,lg,lgat,lgb,lgf,\
! lgh,lgrl,lh,lhy,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lmg,loc,locg,\
! lpq,lrl,lrv,lrvg,lrvh,lt,ltg,ltgf,lxdb,lxeb,ly,madb,maeb,mdb,meeb,mg,mgh,mh,\
! mhy,mlg,ms,msc,msdb,mseb,msg,msgc,msgf,msy,mvc,mvcrl,mvghi,mvhhi,mvhi,mvi,mviy,\
! n,nc,ng,ni,niy,ntstg,ny,o,oc,og,oi,oiy,oy,ppa,s,sar,sdb,seb,sfpc,sg,sgf,sgh,sh,\
! shy,sl,slb,slbg,slg,slgf,sly,sqdb,sqeb,st,stam,stc,stcy,std,stdy,ste,stey,stg,\
! sth,sthy,stmg,stoc,stocg,stpq,strv,strvg,strvh,sty,sy,tabort,tbegin,tbeginc,tm,\
! tmy,vgef,vgeg,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,vlbrrepf,vlbrrepg,vlbrreph,vleb,\
! vlebrf,vlebrg,vlebrh,vlef,vleg,vleh,vlerf,vlerg,vlerh,vll,vllebrzf,vllebrzg,\
! vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,vlrepb,vlrepf,vlrepg,vlreph,vlrl,\
! vlrlr,vscef,vsceg,vst,vstbrf,vstbrg,vstbrh,vstbrq,vsteb,vstebrf,vstebrg,\
! vstebrh,vstef,vsteg,vsteh,vsterf,vsterg,vsterh,vstrl,vstrlr,x,xc,xg,xi,xiy,xy")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_unit_vfu" ""
!  (cond [(eq_attr "mnemonic" "adb,adbr,adtr,aeb,aebr,axbr,axtr,cdb,cdbr,cdfbr,\
! cdftr,cdgbr,cdgtr,cdlfbr,cdlftr,cdlgbr,cdlgtr,cdtr,ceb,cebr,cefbr,cegbr,celfbr,\
! celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,cgebr,cgxbr,cgxtr,clfdbr,clfdtr,clfebr,\
! clfxbr,clfxtr,clgdbr,clgdtr,clgebr,clgxbr,clgxtr,cpsdr,cxbr,cxfbr,cxftr,cxgbr,\
! cxgtr,cxlfbr,cxlftr,cxlgbr,cxlgtr,cxtr,ddtr,dxtr,fidbr,fidbra,fidtr,fiebr,\
! fiebra,fixbr,fixbra,fixtr,kdb,kdbr,kdtr,keb,kebr,kxbr,kxtr,lcdbr,lcebr,lcxbr,\
! ldeb,ldebr,ldetr,le,ledbr,ledtr,ler,ley,lndbr,lnebr,lnxbr,lpdbr,lpebr,lpxbr,\
! ltdbr,ltdtr,ltebr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,madbr,maeb,\
! maebr,mdb,mdbr,mdtr,meeb,meebr,msdb,msdbr,mseb,msebr,mxbr,mxtr,sdb,sdbr,sdtr,\
! seb,sebr,sxbr,sxtr,tcdb,tceb,tcxb,tdcdt,tdcet,tdcxt,vab,vab,vaccb,vaccb,vacccq,\
! vaccf,vaccf,vaccg,vaccg,vacch,vacch,vaccq,vaccq,vacq,vaf,vaf,vag,vag,vah,vah,\
! vaq,vaq,vavgb,vavgb,vavgf,vavgf,vavgg,vavgg,vavgh,vavgh,vavglb,vavglb,vavglf,\
! vavglf,vavglg,vavglg,vavglh,vavglh,vavglq,vavglq,vavgq,vavgq,vblendb,vblendf,\
! vblendg,vblendh,vblendq,vbperm,vcdgb,vcdlgb,vcefb,vcelfb,vceqb,vceqb,vceqbs,\
! vceqbs,vceqf,vceqf,vceqfs,vceqfs,vceqg,vceqg,vceqgs,vceqgs,vceqh,vceqh,vceqhs,\
! vceqhs,vceqq,vceqq,vceqqs,vceqqs,vcfeb,vcfn,vcgdb,vchb,vchb,vchbs,vchbs,vchf,\
! vchf,vchfs,vchfs,vchg,vchg,vchgs,vchgs,vchh,vchh,vchhs,vchhs,vchlb,vchlb,\
! vchlbs,vchlbs,vchlf,vchlf,vchlfs,vchlfs,vchlg,vchlg,vchlgs,vchlgs,vchlh,vchlh,\
! vchlhs,vchlhs,vchlq,vchlq,vchlqs,vchlqs,vchq,vchq,vchqs,vchqs,vcksm,vclfeb,\
! vclfnh,vclfnl,vclgdb,vclzb,vclzf,vclzg,vclzh,vclzq,vcnf,vcrnf,vctzb,vctzf,\
! vctzg,vctzh,vctzq,vecg,vecg,veclg,veclg,veclq,veclq,vecq,vecq,verimb,verimf,\
! verimg,verimh,verllb,verllf,verllg,verllh,verllvb,verllvf,verllvg,verllvh,\
! veslb,veslf,veslg,veslh,veslvb,veslvf,veslvg,veslvh,vesrab,vesraf,vesrag,\
! vesrah,vesravb,vesravf,vesravg,vesravh,vesrlb,vesrlf,vesrlg,vesrlh,vesrlvb,\
! vesrlvf,vesrlvg,vesrlvh,veval,vfadb,vfadb,vfasb,vfasb,vfcedb,vfcedb,vfcedbs,\
! vfcedbs,vfcesb,vfcesb,vfcesbs,vfcesbs,vfchdb,vfchdb,vfchdbs,vfchdbs,vfchedb,\
! vfchedb,vfchedbs,vfchedbs,vfchesb,vfchesb,vfchesbs,vfchesbs,vfchsb,vfchsb,\
! vfchsbs,vfchsbs,vfeeb,vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,vfeneh,\
! vfenezb,vfenezf,vfenezh,vfidb,vfidb,vfisb,vfisb,vfkedb,vfkedb,vfkesb,vfkesb,\
! vfkhdb,vfkhdb,vfkhedb,vfkhedb,vfkhesb,vfkhesb,vfkhsb,vfkhsb,vflcdb,vflcsb,\
! vflndb,vflnsb,vflpdb,vflpsb,vfmadb,vfmadb,vfmasb,vfmasb,vfmaxdb,vfmaxdb,\
! vfmaxsb,vfmaxsb,vfmdb,vfmdb,vfmindb,vfmindb,vfminsb,vfminsb,vfmsb,vfmsb,vfmsdb,\
! vfmsdb,vfmssb,vfmssb,vfnmadb,vfnmadb,vfnmasb,vfnmasb,vfnmsdb,vfnmsdb,vfnmssb,\
! vfnmssb,vfsdb,vfsdb,vfssb,vfssb,vftcidb,vftcidb,vftcisb,vftcisb,vgbm,vgef,vgeg,\
! vgemb,vgemf,vgemg,vgemh,vgemq,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,\
! vgfmh,vgm,vistrb,vistrbs,vistrf,vistrfs,vistrh,vistrhs,vlcb,vlcb,vlcf,vlcf,\
! vlcg,vlcg,vlch,vlch,vldeb,vleb,vlebrf,vlebrg,vlebrh,vledb,vledb,vlef,vleg,vleh,\
! vleib,vleif,vleig,vleih,vlgvb,vlgvf,vlgvg,vlgvh,vlpb,vlpb,vlpf,vlpf,vlpg,vlpg,\
! vlph,vlph,vlpq,vlpq,vlvgb,vlvgf,vlvgg,vlvgh,vmaeb,vmaeb,vmaef,vmaef,vmaeg,\
! vmaeg,vmaeh,vmaeh,vmahb,vmahb,vmahf,vmahf,vmahg,vmahg,vmahh,vmahh,vmahq,vmahq,\
! vmalb,vmalb,vmaleb,vmaleb,vmalef,vmalef,vmaleg,vmaleg,vmaleh,vmaleh,vmalf,\
! vmalf,vmalg,vmalg,vmalhb,vmalhb,vmalhf,vmalhf,vmalhg,vmalhg,vmalhh,vmalhh,\
! vmalhq,vmalhq,vmalhw,vmalhw,vmalob,vmalob,vmalof,vmalof,vmalog,vmalog,vmaloh,\
! vmaloh,vmalq,vmalq,vmaob,vmaob,vmaof,vmaof,vmaog,vmaog,vmaoh,vmaoh,vmeb,vmeb,\
! vmef,vmef,vmeg,vmeg,vmeh,vmeh,vmhb,vmhb,vmhf,vmhf,vmhg,vmhg,vmhh,vmhh,vmhq,\
! vmhq,vmlb,vmlb,vmleb,vmleb,vmlef,vmlef,vmleg,vmleg,vmleh,vmleh,vmlf,vmlf,vmlg,\
! vmlg,vmlhb,vmlhb,vmlhf,vmlhf,vmlhg,vmlhg,vmlhh,vmlhh,vmlhq,vmlhq,vmlhw,vmlhw,\
! vmlob,vmlob,vmlof,vmlof,vmlog,vmlog,vmloh,vmloh,vmlq,vmlq,vmnb,vmnb,vmnf,vmnf,\
! vmng,vmng,vmnh,vmnh,vmnlb,vmnlb,vmnlf,vmnlf,vmnlg,vmnlg,vmnlh,vmnlh,vmnlq,\
! vmnlq,vmnq,vmnq,vmob,vmob,vmof,vmof,vmog,vmog,vmoh,vmoh,vmrhb,vmrhf,vmrhg,\
! vmrhh,vmrlb,vmrlf,vmrlg,vmrlh,vmslg,vmxb,vmxb,vmxf,vmxf,vmxg,vmxg,vmxh,vmxh,\
! vmxlb,vmxlb,vmxlf,vmxlf,vmxlg,vmxlg,vmxlh,vmxlh,vmxlq,vmxlq,vmxq,vmxq,vn,vnc,\
! vnn,vno,vnot,vnx,vo,voc,vone,vpdi,vperm,vpkf,vpkg,vpkh,vpklsf,vpklsfs,vpklsg,\
! vpklsgs,vpklsh,vpklshs,vpksf,vpksfs,vpksg,vpksgs,vpksh,vpkshs,vpopct,vpopctb,\
! vpopctf,vpopctg,vpopcth,vrepb,vrepf,vrepg,vreph,vrepi,vrepib,vrepif,vrepig,\
! vrepih,vsb,vsb,vsbcbiq,vsbiq,vscbib,vscbib,vscbif,vscbif,vscbig,vscbig,vscbih,\
! vscbih,vscbiq,vscbiq,vsegb,vsegf,vsegh,vsel,vsf,vsf,vsg,vsg,vsh,vsh,vsl,vslb,\
! vsld,vsldb,vsq,vsq,vsra,vsrab,vsrd,vsrl,vsrlb,vsteb,vstebrh,vsteh,vsumb,vsumgf,\
! vsumgh,vsumh,vsumqf,vsumqg,vtm,vuphb,vuphf,vuphg,vuphh,vuplb,vuplf,vuplg,\
! vuplhb,vuplhf,vuplhg,vuplhh,vuplhw,vupllb,vupllf,vupllg,vupllh,vx,vzero,wcdgb,\
! wcdlgb,wcefb,wcelfb,wcfeb,wcgdb,wclfeb,wclgdb,wfadb,wfadb,wfasb,wfasb,wfaxb,\
! wfaxb,wfcdb,wfcdb,wfcedb,wfcedb,wfcesb,wfcesb,wfcexb,wfcexb,wfcexbs,wfcexbs,\
! wfchdb,wfchdb,wfchedb,wfchedb,wfchesb,wfchesb,wfchexb,wfchexb,wfchexbs,\
! wfchexbs,wfchsb,wfchsb,wfchxb,wfchxb,wfchxbs,wfchxbs,wfcsb,wfcsb,wfcxb,wfcxb,\
! wfidb,wfidb,wfisb,wfisb,wfixb,wfixb,wfkdb,wfkdb,wfkedb,wfkedb,wfkesb,wfkesb,\
! wfkexb,wfkexb,wfkhdb,wfkhdb,wfkhedb,wfkhedb,wfkhesb,wfkhesb,wfkhexb,wfkhexb,\
! wfkhsb,wfkhsb,wfkhxb,wfkhxb,wfksb,wfksb,wfkxb,wfkxb,wflcdb,wflcsb,wflcxb,wflld,\
! wflndb,wflnsb,wflnxb,wflpdb,wflpsb,wflpxb,wflrx,wflrx,wfmadb,wfmadb,wfmasb,\
! wfmasb,wfmaxb,wfmaxb,wfmaxdb,wfmaxdb,wfmaxsb,wfmaxsb,wfmaxxb,wfmaxxb,wfmdb,\
! wfmdb,wfmindb,wfmindb,wfminsb,wfminsb,wfminxb,wfminxb,wfmsb,wfmsb,wfmsdb,\
! wfmsdb,wfmssb,wfmssb,wfmsxb,wfmsxb,wfmxb,wfmxb,wfnmaxb,wfnmaxb,wfnmsxb,wfnmsxb,\
! wfsdb,wfsdb,wfssb,wfssb,wfsxb,wfsxb,wftcixb,wftcixb,wldeb,wledb,wledb")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_cracked" ""
*************** mvc,nc,oc,rnsbg,rosbg,rxsbg,stpq,vgef,vg
*** 127,150 ****
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_expanded" ""
!  (cond [(eq_attr "mnemonic" "cdsg,cxfbr,cxftr,cxgbr,cxgtr,cxlfbr,\
! cxlftr,cxlgbr,cxlgtr,dlg,dsg,dsgf,lam,lmg,stam,\
! stmg,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_groupalone" ""
   (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,cxfbr,\
! cxftr,cxgbr,cxgtr,cxlfbr,cxlftr,cxlgbr,cxlgtr,cxtr,dlg,dlgr,dsg,\
! dsgf,dsgfr,dsgr,dxbr,dxtr,ex,exrl,fixbr,fixbra,fixtr,flogr,kxbr,kxtr,lcxbr,\
! lnxbr,lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,maeb,maebr,mg,\
! mgrk,mlg,mlgr,msdb,mseb,msebr,mvc,mvcrl,mxbr,mxtr,nc,oc,ppa,sfpc,slb,\
! slbg,slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tbegin,tbeginc,tcxb,tdcxt,tend,xc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_endgroup" ""
   (cond [(eq_attr "mnemonic" "bas,basr,bcr,br,bras,brasl,cdsg,clfebr,cs,csg,csy,\
! efpc,ex,exrl,ipm,lam,lpq,lxr,nopr,stam,stmg,tbegin,\
! tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_groupoftwo" ""
--- 168,189 ----
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_expanded" ""
!  (cond [(eq_attr "mnemonic" "cdsg,cxfbr,cxftr,cxgbr,cxgtr,cxlfbr,cxlftr,cxlgbr,\
! cxlgtr,dlg,dsg,dsgf,lam,lmg,stam,stmg,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_groupalone" ""
   (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,cxfbr,\
! cxftr,cxgbr,cxgtr,cxlfbr,cxlftr,cxlgbr,cxlgtr,cxtr,dlg,dlgr,dsg,dsgf,dsgfr,\
! dsgr,dxbr,dxtr,ex,exrl,fixbr,fixbra,fixtr,flogr,kxbr,kxtr,lcxbr,lnxbr,lpxbr,\
! ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,madb,maeb,maebr,mg,mgrk,mlg,mlgr,msdb,\
! mseb,msebr,mvc,mvcrl,mxbr,mxtr,nc,oc,ppa,sfpc,slb,slbg,slbgr,slbr,sqxbr,sxbr,\
! sxtr,tabort,tbegin,tbeginc,tcxb,tdcxt,tend,xc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_endgroup" ""
   (cond [(eq_attr "mnemonic" "bas,basr,bcr,br,bras,brasl,cdsg,clfebr,cs,csg,csy,\
! efpc,ex,exrl,ipm,lam,lpq,lxr,nopr,stam,stmg,tbegin,tbeginc")
   (const_int 1)] (const_int 0)))
  
  (define_attr "z17_groupoftwo" ""
*************** llcr,llgcr,llgfr,llghr,llgtr,llhr,llihf,
*** 173,182 ****
  lngr,lnr,lpdfr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,\
  lzdr,lzer,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nngrk,nnrk,\
  nogrk,nop,nopr,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,oihf,oihh,\
! oihl,oilf,oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,s,sg,sgr,sgrk,sl,\
! slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,\
! srak,srk,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,\
! vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
  (define_insn_reservation "z17_1" 1
   (and (eq_attr "cpu" "z17")
--- 212,221 ----
  lngr,lnr,lpdfr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,\
  lzdr,lzer,n,ncgrk,ncrk,ng,ngr,ngrk,nihf,nihh,nihl,nilf,nilh,nill,nngrk,nnrk,\
  nogrk,nop,nopr,nork,nr,nrk,nxgrk,nxrk,ny,o,ocgrk,ocrk,og,ogr,ogrk,oihf,oihh,\
! oihl,oilf,oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,s,sg,sgr,sgrk,sl,slfi,\
! slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,sr,sra,srag,srak,\
! srk,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,\
! vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
  
  (define_insn_reservation "z17_1" 1
   (and (eq_attr "cpu" "z17")
*************** vsq,vsra,vsrab,vsrd,vsrl,vsrlb,vuphb,vup
*** 210,233 ****
  vuplhb,vuplhf,vuplhg,vuplhh,vuplhw,vupllb,vupllf,vupllg,vupllh,vx,vzero,wfcedb,\
  wfcesb,wfcexb,wfcexbs,wfchdb,wfchedb,wfchesb,wfchexb,wfchexbs,wfchsb,wfchxb,\
  wfchxbs,wfkedb,wfkesb,wfkexb,wfkhdb,wfkhedb,wfkhesb,wfkhexb,wfkhsb,wfkhxb,\
! wflcdb,wflcsb,wflcxb,wflndb,wflnsb,wflnxb,wflpdb,wflpsb,wflpxb,wfmaxxb,wfminxb,\
! xi,xiy")) "nothing")
  
  (define_insn_reservation "z17_2" 2
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,clzg,ctzg,ear,ipm,kdb,kdbr,keb,kebr,l,\
  lcbb,lcdbr,lcebr,ld,lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,\
! llh,llhrl,lmg,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,\
! tcdb,tceb,vfeeb,vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,vfeneh,\
! vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrbs,vistrf,vistrfs,vistrh,\
! vistrhs,vlbrrepf,vlbrrepg,vlbrreph,vlgvb,vlgvf,vlgvg,vlgvh,vllebrzf,vllebrzg,\
! vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,vlrepb,vlrepf,vlrepg,vlreph,vlrl,\
! vlvgp,wfcdb,wfcsb,wfcxb,wfkdb,wfksb,wfkxb,wftcixb")) "nothing")
  
  (define_insn_reservation "z17_3" 3
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "bdepg,bextg,mgh,mghi,mh,mhi,mhy,ms,msc,msfi,msg,\
! msgc,msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,std,stdy,ste,stey,vcksm,vgfmab,\
  vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,\
  vlerf,vlerg,vlerh,vll,vlrlr,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,vmahg,vmahh,\
  vmahq,vmalb,vmaleb,vmalef,vmaleg,vmaleh,vmalf,vmalg,vmalhb,vmalhf,vmalhg,\
--- 249,272 ----
  vuplhb,vuplhf,vuplhg,vuplhh,vuplhw,vupllb,vupllf,vupllg,vupllh,vx,vzero,wfcedb,\
  wfcesb,wfcexb,wfcexbs,wfchdb,wfchedb,wfchesb,wfchexb,wfchexbs,wfchsb,wfchxb,\
  wfchxbs,wfkedb,wfkesb,wfkexb,wfkhdb,wfkhedb,wfkhesb,wfkhexb,wfkhsb,wfkhxb,\
! wflcdb,wflcsb,wflcxb,wflndb,wflnsb,wflnxb,wflpdb,wflpsb,wflpxb,wfmaxdb,wfmaxsb,\
! wfmaxxb,wfmindb,wfminsb,wfminxb,xi,xiy")) "nothing")
  
  (define_insn_reservation "z17_2" 2
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,clzg,ctzg,ear,ipm,kdb,kdbr,keb,kebr,l,\
  lcbb,lcdbr,lcebr,ld,lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,\
! llh,llhrl,lmg,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
! vecg,veclg,veclq,vecq,vfeeb,vfeef,vfeeh,vfeezbs,vfeezfs,vfeezhs,vfeneb,vfenef,\
! vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrbs,vistrf,vistrfs,\
! vistrh,vistrhs,vlbrrepf,vlbrrepg,vlbrreph,vlgvb,vlgvf,vlgvg,vlgvh,vllebrzf,\
! vllebrzg,vllebrzh,vllezb,vllezf,vllezg,vllezh,vllezlf,vlrepb,vlrepf,vlrepg,\
! vlreph,vlrl,vlvgp,wfcdb,wfcsb,wfcxb,wfkdb,wfksb,wfkxb,wftcixb")) "nothing")
  
  (define_insn_reservation "z17_3" 3
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "bdepg,bextg,mgh,mghi,mh,mhi,mhy,ms,msc,msfi,msg,msgc,\
! msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,std,stdy,ste,stey,vcksm,vgfmab,\
  vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vl,vlbb,vlbrf,vlbrg,vlbrh,vlbrq,\
  vlerf,vlerg,vlerh,vll,vlrlr,vmaeb,vmaef,vmaeg,vmaeh,vmahb,vmahf,vmahg,vmahh,\
  vmahq,vmalb,vmaleb,vmalef,vmaleg,vmaleh,vmalf,vmalg,vmalhb,vmalhf,vmalhg,\
*************** vstrlr")) "nothing")
*** 247,255 ****
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,csy,fidbr,\
  fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,msdbr,sdb,sdbr,\
! seb,sebr,slb,slbg,slbgr,slbr,stmg,vcdgb,vcdlgb,vcefb,vcelfb,vcfeb,\
! vcgdb,vclfeb,vclgdb,vldeb,vledb,vmslg,wcdgb,wcdlgb,wcefb,wcelfb,wcfeb,wcgdb,\
! wclfeb,wclgdb,wflld,wflrx,wldeb,wledb")) "nothing")
  
  (define_insn_reservation "z17_6" 6
   (and (eq_attr "cpu" "z17")
--- 286,294 ----
   (and (eq_attr "cpu" "z17")
   (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,csy,fidbr,\
  fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,msdbr,sdb,sdbr,\
! seb,sebr,slb,slbg,slbgr,slbr,stmg,vcdgb,vcdlgb,vcefb,vcelfb,vcfeb,vcgdb,vclfeb,\
! vclgdb,vldeb,vledb,vmslg,wcdgb,wcdlgb,wcefb,wcelfb,wcfeb,wcgdb,wclfeb,wclgdb,\
! wflld,wflrx,wldeb,wledb")) "nothing")
  
  (define_insn_reservation "z17_6" 6
   (and (eq_attr "cpu" "z17")
*************** wfsdb,wfssb,wfsxb")) "nothing")
*** 263,270 ****
  
  (define_insn_reservation "z17_8" 8
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cdgtr,cdlgtr,cdsg,cxgtr,cxlgtr,flogr,lpq,mg,mgrk,\
! mlg,mlgr,stpq,vsteb,vstebrh,vsteh")) "nothing")
  
  (define_insn_reservation "z17_9" 9
   (and (eq_attr "cpu" "z17")
--- 302,309 ----
  
  (define_insn_reservation "z17_8" 8
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cdgtr,cdlgtr,cdsg,cxgtr,cxlgtr,flogr,lpq,mg,mgrk,mlg,\
! mlgr,stpq,vsteb,vstebrh,vsteh")) "nothing")
  
  (define_insn_reservation "z17_9" 9
   (and (eq_attr "cpu" "z17")
*************** maeb,maebr,msdb,mseb,msebr,stam")) "noth
*** 273,280 ****
  
  (define_insn_reservation "z17_10" 10
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,clgxtr,dlg,dsg,\
! dsgf,efpc,lxdb,lxdbr,lxeb,lxebr,vscef,vsceg")) "nothing")
  
  (define_insn_reservation "z17_11" 11
   (and (eq_attr "cpu" "z17")
--- 312,319 ----
  
  (define_insn_reservation "z17_10" 10
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,clgxtr,dlg,dsg,dsgf,\
! efpc,lxdb,lxdbr,lxeb,lxebr,vscef,vsceg")) "nothing")
  
  (define_insn_reservation "z17_11" 11
   (and (eq_attr "cpu" "z17")
*************** lcxbr,lnxbr,lpxbr,ltxbr,ltxtr,lxdtr,sxbr
*** 307,316 ****
  
  (define_insn_reservation "z17_20" 20
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "ddb,ddbr,ddtr,deb,debr,dlgr,dsgfr,dsgr,dxbr,dxtr,\
! mdtr,mvc,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vdf,vdg,vdlf,vdlg,vdlq,vdq,\
! vfddb,vfdsb,vfmadb,vfmasb,vfmdb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,\
! vfnmssb,vfsqdb,vfsqsb,vrf,vrg,vrlf,vrlg,vrlq,vrq,wfddb,wfdsb,wfdxb,wfmadb,\
! wfmasb,wfmaxb,wfmdb,wfmsb,wfmsdb,wfmssb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,wfsqdb,\
! wfsqxb")) "nothing")
  
--- 346,354 ----
  
  (define_insn_reservation "z17_20" 20
   (and (eq_attr "cpu" "z17")
!  (eq_attr "mnemonic" "ddb,ddbr,ddtr,deb,debr,dlgr,dsgfr,dsgr,dxbr,dxtr,mdtr,\
! mvc,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vdf,vdg,vdlf,vdlg,vdlq,vdq,vfddb,\
! vfdsb,vfmadb,vfmasb,vfmdb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmasb,vfnmsdb,vfnmssb,\
! vfsqdb,vfsqsb,vrf,vrg,vrlf,vrlg,vrlq,vrq,wfddb,wfdsb,wfdxb,wfmadb,wfmasb,\
! wfmaxb,wfmdb,wfmsb,wfmsdb,wfmssb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,wfsqdb,wfsqxb")) "nothing")
  
diff -Nrcpad gcc-17-20260823/gcc/config/s390/s390.h gcc-17-20260830/gcc/config/s390/s390.h
*** gcc-17-20260823/gcc/config/s390/s390.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/s390/s390.h	Sun Aug 30 22:32:06 2026
*************** extern const enum reg_class regclass_map
*** 586,592 ****
     somewhere into the middle of the local variables since the packed
     stack layout generally does not need all the bytes in the register
     save area.  */
! #define FRAME_ADDR_RTX(FRAME)			\
    DYNAMIC_CHAIN_ADDRESS ((FRAME))
  
  #define RETURN_ADDR_RTX(COUNT, FRAME)					      \
--- 586,592 ----
     somewhere into the middle of the local variables since the packed
     stack layout generally does not need all the bytes in the register
     save area.  */
! #define FRAME_ADDR_RTX(COUNT, FRAME)		\
    DYNAMIC_CHAIN_ADDRESS ((FRAME))
  
  #define RETURN_ADDR_RTX(COUNT, FRAME)					      \
diff -Nrcpad gcc-17-20260823/gcc/config/sparc/sparc.h gcc-17-20260830/gcc/config/sparc/sparc.h
*** gcc-17-20260823/gcc/config/sparc/sparc.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config/sparc/sparc.h	Sun Aug 30 22:32:06 2026
*************** do {									\
*** 1219,1225 ****
  
  /* Given an rtx for the frame pointer,
     return an rtx for the address of the frame.  */
! #define FRAME_ADDR_RTX(frame) plus_constant (Pmode, frame, SPARC_STACK_BIAS)
  
  /* The return address isn't on the stack, it is in a register, so we can't
     access it from the current frame pointer.  We can access it from the
--- 1219,1226 ----
  
  /* Given an rtx for the frame pointer,
     return an rtx for the address of the frame.  */
! #define FRAME_ADDR_RTX(count, frame) \
!   plus_constant (Pmode, frame, SPARC_STACK_BIAS)
  
  /* The return address isn't on the stack, it is in a register, so we can't
     access it from the current frame pointer.  We can access it from the
diff -Nrcpad gcc-17-20260823/gcc/config.gcc gcc-17-20260830/gcc/config.gcc
*** gcc-17-20260823/gcc/config.gcc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config.gcc	Sun Aug 30 22:32:06 2026
*************** i[34567]86-*-darwin1[89]* | i[34567]86-*
*** 1966,1973 ****
  	;;
  i[34567]86-*-darwin*)
  	need_64bit_isa=yes
! 	# Baseline choice for a machine that allows m64 support.
  	with_cpu=${with_cpu:-core2}
  	tmake_file="${tmake_file} ${cpu_type}/t-darwin32-biarch t-slibgcc"
  	tm_file="${cpu_type}/darwin32-biarch.h ${tm_file} "
  	;;
--- 1966,1978 ----
  	;;
  i[34567]86-*-darwin*)
  	need_64bit_isa=yes
! 	# Baseline choice for a machine that allows m64 support. This is the
! 	# minimum arch that supported Darwin.
  	with_cpu=${with_cpu:-core2}
+ 	# Ensure that we actually set the capabilities (not just the tune)
+ 	# Note that 32b is handled specially in darwin.h because there is no
+ 	# GCC arch that matches.
+ 	with_arch_64=${with_arch_64:-core2}
  	tmake_file="${tmake_file} ${cpu_type}/t-darwin32-biarch t-slibgcc"
  	tm_file="${cpu_type}/darwin32-biarch.h ${tm_file} "
  	;;
*************** x86_64-*-darwin1[89]* | x86_64-*-darwin2
*** 1976,1985 ****
--- 1981,1993 ----
  	tm_defines="${tm_defines} TARGET_64BIT_DEFAULT=(OPTION_MASK_ISA_64BIT|OPTION_MASK_ABI_64)"
  	tm_defines="${tm_defines} TARGET_BI_ARCH=0"
  	with_cpu=${with_cpu:-core2}
+ 	# TODO: bump this for OS versions that require haswell.
+ 	with_arch=${with_arch:-core2}
  	tmake_file="${tmake_file} t-slibgcc"
  	;;
  x86_64-*-darwin*)
  	with_cpu=${with_cpu:-core2}
+ 	with_arch_64=${with_arch_64:-core2}
  	tmake_file="${tmake_file} ${cpu_type}/t-darwin64-biarch t-slibgcc"
  	tm_file="${cpu_type}/darwin64-biarch.h ${tm_file} "
  	;;
diff -Nrcpad gcc-17-20260823/gcc/config.host gcc-17-20260830/gcc/config.host
*** gcc-17-20260823/gcc/config.host	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/config.host	Sun Aug 30 22:32:06 2026
*************** case ${host} in
*** 142,147 ****
--- 142,155 ----
        ;;
      esac
      ;;
+   riscv*-*-linux*)
+     case ${target} in
+       riscv*-*-*)
+ 	host_extra_gcc_objs="driver-riscv.o"
+ 	host_xmake_file="${host_xmake_file} riscv/x-riscv"
+ 	;;
+     esac
+     ;;
    rs6000-*-* \
    | powerpc*-*-* )
      case ${target} in
diff -Nrcpad gcc-17-20260823/gcc/config.in gcc-17-20260830/gcc/config.in
*** gcc-17-20260823/gcc/config.in	Sun Aug 23 22:32:24 2026
--- gcc-17-20260830/gcc/config.in	Sun Aug 30 22:32:19 2026
***************
*** 397,402 ****
--- 397,408 ----
  #endif
  
  
+ /* Define if your avr assembler supports .gnu_attribute. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_AS_AVR_GNU_ATTRIBUTE
+ #endif
+ 
+ 
  /* Define if your avr assembler supports -mgcc-isr option. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_AS_AVR_MGCCISR_OPTION
diff -Nrcpad gcc-17-20260823/gcc/configure gcc-17-20260830/gcc/configure
*** gcc-17-20260823/gcc/configure	Sun Aug 23 22:32:24 2026
--- gcc-17-20260830/gcc/configure	Sun Aug 30 22:32:19 2026
*************** $as_echo "#define HAVE_AS_AVR_MGCCISR_OP
*** 29152,29157 ****
--- 29152,29189 ----
  fi
  
  
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .gnu_attribute" >&5
+ $as_echo_n "checking assembler for .gnu_attribute... " >&6; }
+ if ${gcc_cv_as_avr_gnu_attribute+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   gcc_cv_as_avr_gnu_attribute=no
+   if test x"$gcc_cv_as" != x; then
+     $as_echo '.gnu_attribute 4,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_avr_gnu_attribute=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_avr_gnu_attribute" >&5
+ $as_echo "$gcc_cv_as_avr_gnu_attribute" >&6; }
+ if test $gcc_cv_as_avr_gnu_attribute = yes; then
+ 
+ $as_echo "#define HAVE_AS_AVR_GNU_ATTRIBUTE 1" >>confdefs.h
+ 
+ fi
+ 
+ 
      avr_ld_ver="`$gcc_cv_ld -v | sed -e 's:^.* ::'`"
      # Check how default linker description file implements .rodata for
      # avrxmega3 (PR21472).  avr-gcc assumes .rodata is *not* loaded to
diff -Nrcpad gcc-17-20260823/gcc/configure.ac gcc-17-20260830/gcc/configure.ac
*** gcc-17-20260823/gcc/configure.ac	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/configure.ac	Sun Aug 30 22:32:06 2026
*************** AS_HELP_STRING([--disable-fix-cortex-a53
*** 4739,4744 ****
--- 4739,4749 ----
        [AC_DEFINE(HAVE_AS_AVR_MGCCISR_OPTION, 1,
  		[Define if your avr assembler supports -mgcc-isr option.])])
  
+     gcc_GAS_CHECK_FEATURE([.gnu_attribute], gcc_cv_as_avr_gnu_attribute,
+       [], [.gnu_attribute 4,1],,
+       [AC_DEFINE(HAVE_AS_AVR_GNU_ATTRIBUTE, 1,
+ 		[Define if your avr assembler supports .gnu_attribute.])])
+ 
      avr_ld_ver="`$gcc_cv_ld -v | sed -e 's:^.* ::'`"
      # Check how default linker description file implements .rodata for
      # avrxmega3 (PR21472).  avr-gcc assumes .rodata is *not* loaded to
diff -Nrcpad gcc-17-20260823/gcc/cp/ChangeLog gcc-17-20260830/gcc/cp/ChangeLog
*** gcc-17-20260823/gcc/cp/ChangeLog	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/ChangeLog	Sun Aug 30 22:32:06 2026
***************
*** 1,3 ****
--- 1,97 ----
+ 2026-08-29  Vincenzo Calabretta  <vincenzo.cal.main@gmail.com>
+ 
+ 	PR c++/127046
+ 	* constexpr.cc (unshare_constructor): Copy RANGE_EXPR indexes.
+ 
+ 2026-08-28  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125645
+ 	* cp-tree.h (PACK_INDEX_PARENTHESIZED_P): Fix incorrect
+ 	documentation in usage.
+ 	* name-lookup.h (enum scope_kind): Move sk_contract before
+ 	sk_function_parms.
+ 	* pt.cc (make_pack_expansion): Use local_bindings_p.
+ 
+ 2026-08-28  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125011
+ 	* contracts.cc (rebuild_postconditions): Skip if
+ 	processing_template_decl.
+ 
+ 2026-08-28  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	PR c++/125712
+ 	* pt.cc (regenerate_decl_from_template): Regenerate contracts
+ 	from the current code pattern.
+ 
+ 2026-08-27  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	PR c++/125537
+ 	* pt.cc (tsubst_contract): Keep template processing enabled
+ 	only for postconditions with an undeduced result binding.
+ 	* contracts.cc (rebuild_postconditions): Only rebuild
+ 	undeduced result variable.
+ 	* parser.cc (cp_parser_late_contract_condition): Enable
+ 	pseudo-template mode only for result bindings whose return
+ 	type has not yet been deduced.  Do not immediately rebuild
+ 	postconditions that have already completed late parsing.
+ 
+ 2026-08-27  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/126828
+ 	PR c++/112632
+ 	* pt.cc (dependent_implicit_conv_p): Remove.
+ 	(convert_nontype_argument_maybe_dependent): Rewrite
+ 	simple conversion when force_conv.
+ 	(tsubst_expr): Use it.
+ 
+ 2026-08-27  Sammy Al Hashemi  <sammy@salh.xyz>
+ 
+ 	* cp-tree.h (class temp_override): Move to c-common.h.
+ 	(type_identity_t): Likewise.
+ 	(make_temp_override): Likewise.
+ 
+ 2026-08-26  Sebastian Miles  <sebastianmiles20@gmail.com>
+ 
+ 	PR c++/127016
+ 	* call.cc (can_convert_array): Handle a VEC_INIT_EXPR FROM.
+ 
+ 2026-08-26  Odysseas Georgoudis  <odygrd@hotmail.com>
+ 
+ 	PR c++/125343
+ 	* parser.cc (cp_parser_class_specifier): Preserve whether the
+ 	class head opened a lambda scope and use it for cleanup.
+ 
+ 2026-08-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125822
+ 	* cp-tree.def: Implement C++29 P3822R2 - Conditional noexcept
+ 	specifiers in compound requirements.
+ 	(COMPOUND_REQ): Use 3 operands rather than 2, adjust comment.
+ 	* cp-tree.h (COMPOUND_REQ_NOEXCEPT_P): Remove.
+ 	(finish_compound_requirement): Change last argument from bool to
+ 	tree.
+ 	* parser.cc (cp_parser_compound_requirement): Parse C++29
+ 	conditional noexcept in compound requirement.  Pass a tree to
+ 	finish_compound_requirement rather than bool.
+ 	* constraint.cc (tsubst_compound_requirement): Read noexcept from
+ 	TREE_OPERAND (req, 2) rather than COMPOUND_REQ_NOEXCEPT_P (req),
+ 	instantiate, convert, evaluate and pass to
+ 	finish_compound_requirement.
+ 	(finish_compound_requirement): Change last argument from bool to
+ 	tree, store it as third operand of COMPOUND_REQ rather than in
+ 	COMPOUND_REQ_NOEXCEPT_P flag and call
+ 	check_for_bare_parameter_packs on it.
+ 	* cxx-pretty-print.cc (pp_cxx_compound_requirement): Print noexcept
+ 	with argument if TREE_OPERAND (t, 2) is neither true nor false
+ 	constant and check it for printing "noexcept" instead oof
+ 	COMPOUND_REQ_NOEXCEPT_P flag.
+ 	* mangle.cc (write_requirement): Don't use COMPOUND_REQ_NOEXCEPT_P
+ 	flag, instead mangle without N or with N if third operand is false
+ 	or true constant and as C <expression> otherwise.
+ 
  2026-08-22  Jason Merrill  <jason@redhat.com>
  
  	PR c++/124888
diff -Nrcpad gcc-17-20260823/gcc/cp/call.cc gcc-17-20260830/gcc/cp/call.cc
*** gcc-17-20260823/gcc/cp/call.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/call.cc	Sun Aug 30 22:32:06 2026
*************** can_convert_array (tree atype, tree from
*** 1016,1021 ****
--- 1016,1024 ----
        && TREE_CODE (tree_strip_any_location_wrapper (from)) == STRING_CST)
      return array_string_literal_compatible_p (atype, from);
  
+   if (tree vi = (get_vec_init_expr (from)))
+     return can_convert_array (atype, VEC_INIT_EXPR_INIT (vi), flags, complain);
+ 
    /* No other valid way to aggregate initialize an array.  */
    return false;
  }
diff -Nrcpad gcc-17-20260823/gcc/cp/constexpr.cc gcc-17-20260830/gcc/cp/constexpr.cc
*** gcc-17-20260823/gcc/cp/constexpr.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/constexpr.cc	Sun Aug 30 22:32:06 2026
*************** unshare_constructor (tree t MEM_STAT_DEC
*** 2860,2867 ****
        vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (n);
        constructor_elt *ce;
        for (HOST_WIDE_INT i = 0; vec_safe_iterate (v, i, &ce); ++i)
! 	if (ce->value && TREE_CODE (ce->value) == CONSTRUCTOR)
! 	  ptrs.safe_push (&ce->value);
      }
    return t;
  }
--- 2860,2871 ----
        vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (n);
        constructor_elt *ce;
        for (HOST_WIDE_INT i = 0; vec_safe_iterate (v, i, &ce); ++i)
! 	{
! 	  if (ce->index && TREE_CODE (ce->index) == RANGE_EXPR)
! 	    ce->index = copy_node (ce->index PASS_MEM_STAT);
! 	  if (ce->value && TREE_CODE (ce->value) == CONSTRUCTOR)
! 	    ptrs.safe_push (&ce->value);
! 	}
      }
    return t;
  }
diff -Nrcpad gcc-17-20260823/gcc/cp/constraint.cc gcc-17-20260830/gcc/cp/constraint.cc
*** gcc-17-20260823/gcc/cp/constraint.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/constraint.cc	Sun Aug 30 22:32:06 2026
*************** tsubst_compound_requirement (tree t, tre
*** 1507,1512 ****
--- 1507,1513 ----
  {
    tree t0 = TREE_OPERAND (t, 0);
    tree t1 = TREE_OPERAND (t, 1);
+   tree noex = TREE_OPERAND (t, 2);
    tree expr = tsubst_valid_expression_requirement (t0, args, info);
    if (expr == error_mark_node)
      return error_mark_node;
*************** tsubst_compound_requirement (tree t, tre
*** 1516,1523 ****
    subst_info quiet (info.complain & ~tf_warning_or_error, info.in_decl);
  
    /* Check the noexcept condition.  */
!   bool noexcept_p = COMPOUND_REQ_NOEXCEPT_P (t);
!   if (noexcept_p && !processing_template_decl
        && !expr_noexcept_p (expr, quiet.complain))
      {
        if (info.diagnose_unsatisfaction_p ())
--- 1517,1533 ----
    subst_info quiet (info.complain & ~tf_warning_or_error, info.in_decl);
  
    /* Check the noexcept condition.  */
!   noex = tsubst_expr (noex, args, info.complain, info.in_decl);
!   if (!instantiation_dependent_expression_p (noex))
!     {
!       noex = build_converted_constant_bool_expr (noex, info.complain);
!       noex = instantiate_non_dependent_expr (noex, info.complain);
!       noex = cxx_constant_value (noex, info.complain);
!     }
!   if (noex == error_mark_node)
!     return error_mark_node;
!   if (!processing_template_decl
!       && integer_nonzerop (noex)
        && !expr_noexcept_p (expr, quiet.complain))
      {
        if (info.diagnose_unsatisfaction_p ())
*************** tsubst_compound_requirement (tree t, tre
*** 1573,1580 ****
      }
  
    if (processing_template_decl)
!     return finish_compound_requirement (EXPR_LOCATION (t),
! 					expr, type, noexcept_p);
    return boolean_true_node;
  }
  
--- 1583,1589 ----
      }
  
    if (processing_template_decl)
!     return finish_compound_requirement (EXPR_LOCATION (t), expr, type, noex);
    return boolean_true_node;
  }
  
*************** finish_type_requirement (location_t loc,
*** 2984,2997 ****
     its properties.  If TYPE is non-null, then it specifies either
     an implicit conversion or argument deduction constraint,
     depending on whether any placeholders occur in the type name.
!    NOEXCEPT_P is true iff the noexcept keyword was specified.  */
  
  tree
! finish_compound_requirement (location_t loc, tree expr, tree type, bool noexcept_p)
  {
!   tree req = build_nt (COMPOUND_REQ, expr, type);
    SET_EXPR_LOCATION (req, loc);
-   COMPOUND_REQ_NOEXCEPT_P (req) = noexcept_p;
    return req;
  }
  
--- 2993,3009 ----
     its properties.  If TYPE is non-null, then it specifies either
     an implicit conversion or argument deduction constraint,
     depending on whether any placeholders occur in the type name.
!    NOEX is boolean_true_node iff the noexcept keyword was specified
!    or expression if noexcept (expr) was specified.  */
  
  tree
! finish_compound_requirement (location_t loc, tree expr, tree type,
! 			     tree noex)
  {
!   if (check_for_bare_parameter_packs (noex))
!     noex = error_mark_node;
!   tree req = build_nt (COMPOUND_REQ, expr, type, noex);
    SET_EXPR_LOCATION (req, loc);
    return req;
  }
  
diff -Nrcpad gcc-17-20260823/gcc/cp/contracts.cc gcc-17-20260830/gcc/cp/contracts.cc
*** gcc-17-20260823/gcc/cp/contracts.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/contracts.cc	Sun Aug 30 22:32:06 2026
*************** check_postcondition_result (tree fndecl,
*** 1976,1988 ****
  void
  rebuild_postconditions (tree fndecl)
  {
!   if (!fndecl || fndecl == error_mark_node)
      return;
  
    tree type = TREE_TYPE (TREE_TYPE (fndecl));
  
    /* If the return type is undeduced, defer until later.  */
!   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
      return;
  
    tree contract_spec = get_fn_contract_specifiers (fndecl);
--- 1976,1988 ----
  void
  rebuild_postconditions (tree fndecl)
  {
!   if (!fndecl || fndecl == error_mark_node || processing_template_decl)
      return;
  
    tree type = TREE_TYPE (TREE_TYPE (fndecl));
  
    /* If the return type is undeduced, defer until later.  */
!   if (type_uses_auto (type))
      return;
  
    tree contract_spec = get_fn_contract_specifiers (fndecl);
*************** rebuild_postconditions (tree fndecl)
*** 2019,2024 ****
--- 2019,2029 ----
  	  continue;
  	}
  
+       /* A concrete late-parsed result variable still needs validation, but
+ 	 not rebuilding.  Rebuild only one whose type was undeduced.  */
+       if (!type_uses_auto (TREE_TYPE (oldvar)))
+ 	continue;
+ 
        /* "Instantiate" the result variable using the known type.  */
        tree newvar = copy_node (oldvar);
        TREE_TYPE (newvar) = type;
diff -Nrcpad gcc-17-20260823/gcc/cp/cp-tree.def gcc-17-20260830/gcc/cp/cp-tree.def
*** gcc-17-20260823/gcc/cp/cp-tree.def	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/cp-tree.def	Sun Aug 30 22:32:06 2026
*************** DEFTREECODE (SIMPLE_REQ, "simple_req", t
*** 515,524 ****
  DEFTREECODE (TYPE_REQ, "type_req", tcc_expression, 1)
  
  /* A requirement for an expression and its properties. The
!    first operand is the expression, and the 2nd is its type.
!    The accessor COMPOUND_REQ_NOEXCEPT determines whether
!    the noexcept keyword was present. */
! DEFTREECODE (COMPOUND_REQ, "compound_req", tcc_expression, 2)
  
  /* A requires clause within a requires expression. */
  DEFTREECODE (NESTED_REQ, "nested_req", tcc_expression, 1)
--- 515,523 ----
  DEFTREECODE (TYPE_REQ, "type_req", tcc_expression, 1)
  
  /* A requirement for an expression and its properties. The
!    first operand is the expression, the 2nd is its type,
!    the third one is noexcept expression.   */
! DEFTREECODE (COMPOUND_REQ, "compound_req", tcc_expression, 3)
  
  /* A requires clause within a requires expression. */
  DEFTREECODE (NESTED_REQ, "nested_req", tcc_expression, 1)
diff -Nrcpad gcc-17-20260823/gcc/cp/cp-tree.h gcc-17-20260830/gcc/cp/cp-tree.h
*** gcc-17-20260823/gcc/cp/cp-tree.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/cp-tree.h	Sun Aug 30 22:32:06 2026
*************** extern GTY(()) tree cp_global_trees[CPTI
*** 442,448 ****
        PACK_EXPANSION_LOCAL_P (in *_PACK_EXPANSION)
        TINFO_HAS_ACCESS_ERRORS (in TEMPLATE_INFO)
        SIZEOF_EXPR_TYPE_P (in SIZEOF_EXPR)
-       COMPOUND_REQ_NOEXCEPT_P (in COMPOUND_REQ)
        BLOCK_OUTER_CURLY_BRACE_P (in BLOCK)
        FOLD_EXPR_MODIFY_P (*_FOLD_EXPR)
        IF_STMT_CONSTEXPR_P (IF_STMT)
--- 442,447 ----
*************** extern GTY(()) tree cp_global_trees[CPTI
*** 454,460 ****
        INIT_EXPR_NRV_P (in INIT_EXPR)
        ATOMIC_CONSTR_MAP_INSTANTIATED_P (in ATOMIC_CONSTR)
        RETURN_EXPR_LOCAL_ADDR_P (in RETURN_EXPR)
-       PACK_INDEX_PARENTHESIZED_P (in PACK_INDEX_*)
        MUST_NOT_THROW_NOEXCEPT_P (in MUST_NOT_THROW_EXPR)
        CONSTEVAL_BLOCK_P (in STATIC_ASSERT)
        LAMBDA_EXPR_CONSTEVAL_BLOCK_P (in LAMBDA_EXPR)
--- 453,458 ----
*************** extern GTY(()) tree cp_global_trees[CPTI
*** 486,491 ****
--- 484,490 ----
        MUST_NOT_THROW_THROW_P (in MUST_NOT_THROW_EXPR)
        LAMBDA_EXPR_CONST_QUAL_P (in LAMBDA_EXPR)
        SPLICE_EXPR_MEMBER_ACCESS_P (in SPLICE_EXPR)
+       PACK_INDEX_PARENTHESIZED_P (in PACK_INDEX_*)
     2: IDENTIFIER_KIND_BIT_2 (in IDENTIFIER_NODE)
        ICS_THIS_FLAG (in _CONV)
        DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (in VAR_DECL)
*************** check_constraint_info (tree t)
*** 1749,1758 ****
  #define TEMPLATE_PARM_CONSTRAINTS(NODE) \
    TREE_TYPE (TREE_LIST_CHECK (NODE))
  
- /* Non-zero if the noexcept is present in a compound requirement.  */
- #define COMPOUND_REQ_NOEXCEPT_P(NODE) \
-   TREE_LANG_FLAG_0 (TREE_CHECK (NODE, COMPOUND_REQ))
- 
  /* A TREE_LIST whose TREE_VALUE is the constraints on the 'auto' placeholder
     type NODE, used in an argument deduction constraint.  The TREE_PURPOSE
     holds the set of template parameters that were in-scope when this 'auto'
--- 1748,1753 ----
*************** public:
*** 2271,2327 ****
    }
  };
  
- /* Wrapping a template parameter in type_identity_t hides it from template
-    argument deduction.  */
- #if __cpp_lib_type_identity
- using std::type_identity_t;
- #else
- template <typename T>
- struct type_identity { typedef T type; };
- template <typename T>
- using type_identity_t = typename type_identity<T>::type;
- #endif
- 
- /* RAII sentinel that saves the value of a variable, optionally
-    overrides it right away, and restores its value when the sentinel
-    id destructed.  */
- 
- template <typename T>
- class temp_override
- {
-   T& overridden_variable;
-   T saved_value;
- public:
-   temp_override (T& var) : overridden_variable (var), saved_value (var) {}
-   temp_override (T& var, type_identity_t<T> overrider)
-     : overridden_variable (var), saved_value (var)
-   {
-     overridden_variable = overrider;
-   }
-   ~temp_override() { overridden_variable = saved_value; }
- };
- 
- /* Object generator function for temp_override, so you don't need to write the
-    type of the object as a template argument.
- 
-    Use as auto x = make_temp_override (flag); */
- 
- template <typename T>
- inline temp_override<T>
- make_temp_override (T& var)
- {
-   return { var };
- }
- 
- /* Likewise, but use as auto x = make_temp_override (flag, value); */
- 
- template <typename T>
- inline temp_override<T>
- make_temp_override (T& var, type_identity_t<T> overrider)
- {
-   return { var, overrider };
- }
- 
  /* temp_override for in_consteval_if_p, which can't use make_temp_override
     because it is a bitfield.  */
  
--- 2266,2271 ----
*************** extern tree finish_shorthand_constraint
*** 9363,9369 ****
  extern tree finish_requires_expr                (location_t, tree, tree);
  extern tree finish_simple_requirement           (location_t, tree);
  extern tree finish_type_requirement             (location_t, tree);
! extern tree finish_compound_requirement         (location_t, tree, tree, bool);
  extern tree finish_nested_requirement           (location_t, tree);
  extern tree tsubst_requires_expr                (tree, tree, tsubst_flags_t, tree);
  extern tree evaluate_requires_expr		(tree);
--- 9307,9313 ----
  extern tree finish_requires_expr                (location_t, tree, tree);
  extern tree finish_simple_requirement           (location_t, tree);
  extern tree finish_type_requirement             (location_t, tree);
! extern tree finish_compound_requirement         (location_t, tree, tree, tree);
  extern tree finish_nested_requirement           (location_t, tree);
  extern tree tsubst_requires_expr                (tree, tree, tsubst_flags_t, tree);
  extern tree evaluate_requires_expr		(tree);
diff -Nrcpad gcc-17-20260823/gcc/cp/cxx-pretty-print.cc gcc-17-20260830/gcc/cp/cxx-pretty-print.cc
*** gcc-17-20260823/gcc/cp/cxx-pretty-print.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/cxx-pretty-print.cc	Sun Aug 30 22:32:06 2026
*************** pp_cxx_compound_requirement (cxx_pretty_
*** 2860,2867 ****
    pp->expression (TREE_OPERAND (t, 0));
    pp_cxx_right_brace (pp);
  
!   if (COMPOUND_REQ_NOEXCEPT_P (t))
      pp_cxx_ws_string (pp, "noexcept");
  
    if (tree type = TREE_OPERAND (t, 1))
      {
--- 2860,2873 ----
    pp->expression (TREE_OPERAND (t, 0));
    pp_cxx_right_brace (pp);
  
!   if (TREE_OPERAND (t, 2) == boolean_true_node)
      pp_cxx_ws_string (pp, "noexcept");
+   else if (TREE_OPERAND (t, 2) != boolean_false_node)
+     {
+       pp_cxx_ws_string (pp, "noexcept(");
+       pp->expression (TREE_OPERAND (t, 2));
+       pp_cxx_right_paren (pp);
+     }
  
    if (tree type = TREE_OPERAND (t, 1))
      {
diff -Nrcpad gcc-17-20260823/gcc/cp/mangle.cc gcc-17-20260830/gcc/cp/mangle.cc
*** gcc-17-20260823/gcc/cp/mangle.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/mangle.cc	Sun Aug 30 22:32:06 2026
*************** write_requirement (tree req)
*** 3214,3228 ****
    switch (tree_code code = TREE_CODE (req))
      {
        /* # simple-requirement or compound-requirement
! 	 <requirement> ::= X <expression> [ N ] [ R <type-constraint> ] */
      case SIMPLE_REQ:
      case COMPOUND_REQ:
        write_char ('X');
        write_expression (op);
        if (code == SIMPLE_REQ)
  	break;
!       if (COMPOUND_REQ_NOEXCEPT_P (req))
  	write_char ('N');
        if (tree constr = TREE_OPERAND (req, 1))
  	{
  	  write_char ('R');
--- 3214,3236 ----
    switch (tree_code code = TREE_CODE (req))
      {
        /* # simple-requirement or compound-requirement
! 	 <requirement> ::= X <expression> [ N ] [ R <type-constraint> ]
! 			   X <expression> C <expression>
! 			     [ R <type-constraint> ]  */
      case SIMPLE_REQ:
      case COMPOUND_REQ:
        write_char ('X');
        write_expression (op);
        if (code == SIMPLE_REQ)
  	break;
!       if (operand_equal_p (TREE_OPERAND (req, 2), boolean_true_node))
  	write_char ('N');
+       else if (TREE_OPERAND (req, 2) != error_mark_node
+ 	       && !operand_equal_p (TREE_OPERAND (req, 2), boolean_false_node))
+ 	{
+ 	  write_char ('C');
+ 	  write_expression (TREE_OPERAND (req, 2));
+ 	}
        if (tree constr = TREE_OPERAND (req, 1))
  	{
  	  write_char ('R');
diff -Nrcpad gcc-17-20260823/gcc/cp/name-lookup.h gcc-17-20260830/gcc/cp/name-lookup.h
*** gcc-17-20260823/gcc/cp/name-lookup.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/name-lookup.h	Sun Aug 30 22:32:06 2026
*************** enum scope_kind {
*** 239,244 ****
--- 239,246 ----
    sk_cond,	     /* The scope of the variable declared in the condition
  			of an if or switch statement.  */
    sk_stmt_expr,	     /* GNU statement expression block.  */
+   sk_contract,	     /* A C++26 contract-assertion scope.
+ 			[basic.scope.contract] */
    sk_function_parms, /* The scope containing function parameters.  */
    sk_class,	     /* The scope containing the members of a class.  */
    sk_scoped_enum,    /* The scope containing the enumerators of a C++11
*************** enum scope_kind {
*** 253,260 ****
    sk_transaction,    /* A synchronized or atomic statement.  */
    sk_omp,	     /* An OpenMP structured block.  */
    sk_lambda,	     /* A lambda scope.  */
!   sk_contract,	     /* A C++26 contract-assertion scope.
! 			[basic.scope.contract] */
    sk_count	     /* Number of scope_kind enumerations.  */
  };
  
--- 255,262 ----
    sk_transaction,    /* A synchronized or atomic statement.  */
    sk_omp,	     /* An OpenMP structured block.  */
    sk_lambda,	     /* A lambda scope.  */
!   /* Note that scopes for which local_bindings_p should be true must precede
!      sk_function_parms.  */
    sk_count	     /* Number of scope_kind enumerations.  */
  };
  
diff -Nrcpad gcc-17-20260823/gcc/cp/parser.cc gcc-17-20260830/gcc/cp/parser.cc
*** gcc-17-20260823/gcc/cp/parser.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/parser.cc	Sun Aug 30 22:32:06 2026
*************** cp_parser_class_specifier (cp_parser* pa
*** 29860,29865 ****
--- 29860,29869 ----
        return error_mark_node;
      }
  
+   /* Remember whether cp_parser_class_head opened a lambda scope;
+      begin_class_definition can replace TYPE with error_mark_node.  */
+   bool has_lambda_scope = type != error_mark_node;
+ 
    cp_ensure_no_omp_declare_simd (parser);
    cp_ensure_no_oacc_routine (parser);
  
*************** cp_parser_class_specifier (cp_parser* pa
*** 29943,29952 ****
    if (cp_parser_allow_gnu_extensions_p (parser))
      attributes = cp_parser_gnu_attributes_opt (parser);
    if (type != error_mark_node)
!     {
!       type = finish_struct (type, attributes);
!       finish_lambda_scope ();
!     }
    if (nested_name_specifier_p)
      pop_inner_scope (old_scope, scope);
  
--- 29947,29955 ----
    if (cp_parser_allow_gnu_extensions_p (parser))
      attributes = cp_parser_gnu_attributes_opt (parser);
    if (type != error_mark_node)
!     type = finish_struct (type, attributes);
!   if (has_lambda_scope)
!     finish_lambda_scope ();
    if (nested_name_specifier_p)
      pop_inner_scope (old_scope, scope);
  
*************** cp_parser_late_contract_condition (cp_pa
*** 33821,33841 ****
    processing_postcondition = POSTCONDITION_P (contract);
    /* Build a fake variable for the result identifier.  */
    tree result = NULL_TREE;
    if (r_ident)
      {
        cp_expr result_id (r_ident, r_loc);
        result = make_postcondition_variable (result_id, type);
!       ++processing_template_decl;
      }
    cp_expr parsed_condition = cp_parser_conditional_expression (parser);
    /* Commit to changes.  */
    update_late_contract (contract, result, parsed_condition);
!   if (r_ident)
      --processing_template_decl;
  
-   /* Rebuild the postcondition since we didn't do it in grokfndecl. */
-   rebuild_postconditions (fn);
- 
    /* Leave our temporary scope for the postcondition result.  */
    processing_postcondition = old_pc;
    gcc_checking_assert (scope_chain && scope_chain->bindings
--- 33824,33844 ----
    processing_postcondition = POSTCONDITION_P (contract);
    /* Build a fake variable for the result identifier.  */
    tree result = NULL_TREE;
+   const bool undeduced_result_type_p
+     = r_ident && type_uses_auto (type);
    if (r_ident)
      {
        cp_expr result_id (r_ident, r_loc);
        result = make_postcondition_variable (result_id, type);
!       if (undeduced_result_type_p)
! 	++processing_template_decl;
      }
    cp_expr parsed_condition = cp_parser_conditional_expression (parser);
    /* Commit to changes.  */
    update_late_contract (contract, result, parsed_condition);
!   if (undeduced_result_type_p)
      --processing_template_decl;
  
    /* Leave our temporary scope for the postcondition result.  */
    processing_postcondition = old_pc;
    gcc_checking_assert (scope_chain && scope_chain->bindings
*************** cp_parser_type_requirement (cp_parser *p
*** 35274,35281 ****
  
  /* Parse a compound requirement
  
!      compound-requirement:
!          '{' expression '}' 'noexcept' [opt] trailing-return-type [opt] ';' */
  
  static tree
  cp_parser_compound_requirement (cp_parser *parser)
--- 35277,35286 ----
  
  /* Parse a compound requirement
  
!    compound-requirement:
!      '{' expression '}' 'noexcept' [opt] trailing-return-type [opt] ';'
!      '{' expression '}' noexcept-specifier [opt] trailing-return-type [opt]
!        ';' (C++29)  */
  
  static tree
  cp_parser_compound_requirement (cp_parser *parser)
*************** cp_parser_compound_requirement (cp_parse
*** 35307,35317 ****
      }
  
    /* Parse the optional noexcept. */
!   bool noexcept_p = false;
    if (cp_lexer_next_token_is_keyword (parser->lexer, RID_NOEXCEPT))
      {
!       cp_lexer_consume_token (parser->lexer);
!       noexcept_p = true;
      }
  
    /* Parse the optional trailing return type. */
--- 35312,35332 ----
      }
  
    /* Parse the optional noexcept. */
!   tree noex = boolean_false_node;
    if (cp_lexer_next_token_is_keyword (parser->lexer, RID_NOEXCEPT))
      {
!       if (cxx_dialect < cxx29
! 	  && cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_PAREN))
! 	pedwarn (cp_lexer_peek_nth_token (parser->lexer, 2)->location,
! 		 OPT_Wc__29_extensions,
! 		 "conditional %<noexcept%> in compound requirement only "
! 		 "available with %<-std=c++2d%> or %<-std=gnu++2d%>");
! 
!       noex = cp_parser_noexcept_specification_opt (parser,
! 						   CP_PARSER_FLAGS_NONE,
! 						   /*require_constexpr=*/true,
! 						   /*consumed_expr=*/NULL,
! 						   /*return_cond=*/true);
      }
  
    /* Parse the optional trailing return type. */
*************** cp_parser_compound_requirement (cp_parse
*** 35363,35369 ****
    if (expr == error_mark_node || type == error_mark_node)
      return error_mark_node;
  
!   return finish_compound_requirement (loc, expr, type, noexcept_p);
  }
  
  /* Parse a nested requirement. This is the same as a requires clause.
--- 35378,35384 ----
    if (expr == error_mark_node || type == error_mark_node)
      return error_mark_node;
  
!   return finish_compound_requirement (loc, expr, type, noex);
  }
  
  /* Parse a nested requirement. This is the same as a requires clause.
diff -Nrcpad gcc-17-20260823/gcc/cp/pt.cc gcc-17-20260830/gcc/cp/pt.cc
*** gcc-17-20260823/gcc/cp/pt.cc	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/cp/pt.cc	Sun Aug 30 22:32:06 2026
*************** make_pack_expansion (tree arg, tsubst_fl
*** 4402,4408 ****
        purpose = cxx_make_type (TYPE_PACK_EXPANSION);
        PACK_EXPANSION_PATTERN (purpose) = TREE_PURPOSE (arg);
        PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
!       PACK_EXPANSION_LOCAL_P (purpose) = at_function_scope_p ();
  
        /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
  	 they will rarely be compared to anything.  */
--- 4402,4408 ----
        purpose = cxx_make_type (TYPE_PACK_EXPANSION);
        PACK_EXPANSION_PATTERN (purpose) = TREE_PURPOSE (arg);
        PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
!       PACK_EXPANSION_LOCAL_P (purpose) = local_bindings_p ();
  
        /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
  	 they will rarely be compared to anything.  */
*************** make_pack_expansion (tree arg, tsubst_fl
*** 4452,4458 ****
      }
    PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
  
!   PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
    if (ppd.found_extra_args_tree_p)
      /* If the pattern of this pack expansion contains a subtree that has
         the extra args mechanism for avoiding partial instantiation, then
--- 4452,4461 ----
      }
    PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
  
!   /* Contract conditions are parsed outside a function body but function
!      parameter pack expansions in them must use the instantiated parameters
!      rather than dummy declarations.  */
!   PACK_EXPANSION_LOCAL_P (result) = local_bindings_p ();
    if (ppd.found_extra_args_tree_p)
      /* If the pattern of this pack expansion contains a subtree that has
         the extra args mechanism for avoiding partial instantiation, then
*************** maybe_build_nontype_implicit_conv (tree
*** 8881,8899 ****
    return arg;
  }
  
- /* True if we need an IMPLICIT_CONV_EXPR for converting EXPR to TYPE, possibly
-    in a FORCED context (i.e. alias or concept).  */
- 
- static bool
- dependent_implicit_conv_p (tree type, tree expr, bool forced)
- {
-   return (dependent_type_p (type) || type_dependent_expression_p (expr)
- 	  || (forced
- 	      && !(same_type_ignoring_top_level_qualifiers_p
- 		   (TREE_TYPE (expr), type))
- 	      && value_dependent_expression_p (expr)));
- }
- 
  /* Convert the non-type template parameter ARG to the indicated TYPE.
     If one of them is dependent, create an appropriate conversion.
     FORCE_CONV is true in a forced context (i.e. alias or concept).  */
--- 8884,8889 ----
*************** convert_nontype_argument_maybe_dependent
*** 8903,8909 ****
  					  bool force_conv,
  					  tsubst_flags_t complain)
  {
!   if (dependent_implicit_conv_p (type, arg, force_conv))
      {
        tree val = canonicalize_expr_argument (arg, complain);
        return maybe_build_nontype_implicit_conv (type, val, force_conv);
--- 8893,8899 ----
  					  bool force_conv,
  					  tsubst_flags_t complain)
  {
!   if (dependent_type_p (type) || type_dependent_expression_p (arg))
      {
        tree val = canonicalize_expr_argument (arg, complain);
        return maybe_build_nontype_implicit_conv (type, val, force_conv);
*************** convert_nontype_argument_maybe_dependent
*** 8917,8924 ****
       deciding whether or not these conversions can occur is part of
       determining which function template to call, or whether a given
       explicit argument specification is valid.  */
!   return convert_nontype_argument (type, convert_from_reference (arg),
! 				   complain);
  }
  
  /* Convert the indicated template ARG as necessary to match the
--- 8907,8930 ----
       deciding whether or not these conversions can occur is part of
       determining which function template to call, or whether a given
       explicit argument specification is valid.  */
!   tree r = convert_nontype_argument (type, convert_from_reference (arg),
! 				     complain);
! 
!   /* When force_conv, we need to express this conversion with
!      IMPLICIT_CONV_EXPR rather than NOP_EXPR so we go through
!      convert_nontype_argument again at substitution time for
!      e.g. narrowing checks.  */
!   if (force_conv && r && CONVERT_EXPR_P (r)
!       && !same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (arg))
!       && value_dependent_expression_p (arg))
!     {
!       tree op = TREE_OPERAND (r, 0);
!       gcc_assert (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (op),
! 							     TREE_TYPE (arg)));
!       r = maybe_build_nontype_implicit_conv (type, op, force_conv);
!     }
! 
!   return r;
  }
  
  /* Convert the indicated template ARG as necessary to match the
*************** tsubst_contract (tree decl, tree t, tree
*** 12395,12406 ****
  	  return invalidate_contract (r);
      }
  
!   /* Instantiate the condition.  If the return type is undeduced, process
!      the expression as if inside a template to avoid spurious type errors.  */
    begin_scope (sk_contract, decl);
    bool old_pc = processing_postcondition;
    processing_postcondition = POSTCONDITION_P (t);
!   if (auto_p)
      ++processing_template_decl;
    if (newvar)
      /* Make the variable available for lookup.  */
--- 12401,12414 ----
  	  return invalidate_contract (r);
      }
  
!   /* Instantiate the condition.  If the postcondition has a result binding
!      whose type is undeduced, process the expression as if inside a template to
!      avoid spurious type errors.  */
    begin_scope (sk_contract, decl);
    bool old_pc = processing_postcondition;
    processing_postcondition = POSTCONDITION_P (t);
!   const bool undeduced_result_type_p = auto_p && newvar;
!   if (undeduced_result_type_p)
      ++processing_template_decl;
    if (newvar)
      /* Make the variable available for lookup.  */
*************** tsubst_contract (tree decl, tree t, tree
*** 12426,12432 ****
       && !type_dependent_expression_p (CONTRACT_ASSERTION_KIND (r))
       && !type_dependent_expression_p (CONTRACT_COMMENT (r)));
  
!   if (auto_p)
      --processing_template_decl;
    processing_postcondition = old_pc;
    gcc_checking_assert (scope_chain && scope_chain->bindings
--- 12434,12440 ----
       && !type_dependent_expression_p (CONTRACT_ASSERTION_KIND (r))
       && !type_dependent_expression_p (CONTRACT_COMMENT (r)));
  
!   if (undeduced_result_type_p)
      --processing_template_decl;
    processing_postcondition = old_pc;
    gcc_checking_assert (scope_chain && scope_chain->bindings
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 21787,21803 ****
  	if (type == error_mark_node)
  	  RETURN (error_mark_node);
  	tree expr = RECUR (TREE_OPERAND (t, 0));
- 	if (dependent_implicit_conv_p (type, expr,
- 				       IMPLICIT_CONV_EXPR_FORCED (t)))
- 	  {
- 	    retval = copy_node (t);
- 	    TREE_TYPE (retval) = type;
- 	    TREE_OPERAND (retval, 0) = expr;
- 	    RETURN (retval);
- 	  }
  	if (IMPLICIT_CONV_EXPR_NONTYPE_ARG (t))
  	  {
! 	    tree r = convert_nontype_argument (type, expr, complain);
  	    if (r == NULL_TREE)
  	      r = error_mark_node;
  	    RETURN (r);
--- 21795,21804 ----
  	if (type == error_mark_node)
  	  RETURN (error_mark_node);
  	tree expr = RECUR (TREE_OPERAND (t, 0));
  	if (IMPLICIT_CONV_EXPR_NONTYPE_ARG (t))
  	  {
! 	    tree r = (convert_nontype_argument_maybe_dependent
! 		      (type, expr, IMPLICIT_CONV_EXPR_FORCED (t), complain));
  	    if (r == NULL_TREE)
  	      r = error_mark_node;
  	    RETURN (r);
*************** regenerate_decl_from_template (tree decl
*** 28570,28587 ****
  	      OLD_PARM_DECL_P (t) = 1;
  	}
  
!       if (tree attr = get_fn_contract_specifiers (decl))
! 	{
! 	  /* If we're regenerating a specialization, the contracts will have
! 	     been copied from the most general template. Replace those with
! 	     the ones from the actual specialization.  */
! 	  tree tmpl = DECL_TI_TEMPLATE (decl);
! 	  if (DECL_TEMPLATE_SPECIALIZATION (tmpl))
! 	    attr = get_fn_contract_specifiers (code_pattern);
! 
! 	  tsubst_contract_specifiers (attr, decl, args,
! 				      tf_warning_or_error, code_pattern);
! 	}
  
        /* Merge additional specifiers from the CODE_PATTERN.  */
        if (DECL_DECLARED_INLINE_P (code_pattern)
--- 28571,28589 ----
  	      OLD_PARM_DECL_P (t) = 1;
  	}
  
!       /* The contracts on DECL may predate a later redeclaration of the
! 	 template, or have been copied from a more general template.  We should
! 	 use the contracts from the current pattern.  */
!       tree decl_contracts = get_fn_contract_specifiers (decl);
!       tree pattern_contracts = get_fn_contract_specifiers (code_pattern);
!       /* There are four cases:
! 	 neither has contracts, so there is nothing to do;
! 	 only the pattern has contracts, so add them to DECL;
! 	 only DECL has contracts, so remove them;
! 	 or both have contracts, so rebuild DECL's from the pattern.  */
!       if (decl_contracts || pattern_contracts)
! 	tsubst_contract_specifiers (pattern_contracts, decl, args,
! 				    tf_warning_or_error, code_pattern);
  
        /* Merge additional specifiers from the CODE_PATTERN.  */
        if (DECL_DECLARED_INLINE_P (code_pattern)
diff -Nrcpad gcc-17-20260823/gcc/defaults.h gcc-17-20260830/gcc/defaults.h
*** gcc-17-20260823/gcc/defaults.h	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/defaults.h	Sun Aug 30 22:32:07 2026
*************** see the files COPYING3 and COPYING.RUNTI
*** 1259,1265 ****
  #endif
  
  #ifndef FRAME_ADDR_RTX
! #define FRAME_ADDR_RTX(x) (x)
  #endif
  
  #ifndef REVERSE_CONDITION
--- 1259,1265 ----
  #endif
  
  #ifndef FRAME_ADDR_RTX
! #define FRAME_ADDR_RTX(count, x) (x)
  #endif
  
  #ifndef REVERSE_CONDITION
diff -Nrcpad gcc-17-20260823/gcc/doc/extend.texi gcc-17-20260830/gcc/doc/extend.texi
*** gcc-17-20260823/gcc/doc/extend.texi	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/doc/extend.texi	Sun Aug 30 22:32:07 2026
*************** void __builtin_arm_set_fpscr (unsigned i
*** 19487,19493 ****
  GCC implements the ARMv8-M Security Extensions as described in the ARMv8-M
  Security Extensions: Requirements on Development Tools Engineering
  Specification, which can be found at
! @uref{https://developer.arm.com/documentation/ecm0359818/latest/}.
  
  As part of the Security Extensions GCC implements two new function attributes:
  @code{cmse_nonsecure_entry} and @code{cmse_nonsecure_call}.
--- 19487,19493 ----
  GCC implements the ARMv8-M Security Extensions as described in the ARMv8-M
  Security Extensions: Requirements on Development Tools Engineering
  Specification, which can be found at
! @uref{https://support.arm.com/documentation/ecm0359818/latest/}.
  
  As part of the Security Extensions GCC implements two new function attributes:
  @code{cmse_nonsecure_entry} and @code{cmse_nonsecure_call}.
diff -Nrcpad gcc-17-20260823/gcc/doc/install.texi gcc-17-20260830/gcc/doc/install.texi
*** gcc-17-20260823/gcc/doc/install.texi	Sun Aug 23 22:32:07 2026
--- gcc-17-20260830/gcc/doc/install.texi	Sun Aug 30 22:32:07 2026
*************** GCC's diagnostics capabilities via a C A
*** 1269,1278 ****
  This option requires @option{--enable-host-shared} on non-Windows hosts.
  
  This option also enables @code{sarif-replay}, a command-line tool for
! viewing @uref{https://sarif.info/,,SARIF files}.  @code{sarif-replay} takes
! one or more @code{.sarif} files as input and attempts to replay any
! diagnostics within them to stderr (via @code{libgdiagnostics}) in the style
! of GCC's diagnostics.
  
  @item --disable-gcov
  Specify that the run-time library used for coverage analysis
--- 1269,1278 ----
  This option requires @option{--enable-host-shared} on non-Windows hosts.
  
  This option also enables @code{sarif-replay}, a command-line tool for
! viewing @uref{https://sarifweb.azurewebsites.net/,,SARIF files}.
! @code{sarif-replay} takes one or more @code{.sarif} files as input and
! attempts to replay any diagnostics within them to stderr (via
! @code{libgdiagnostics}) in the style of GCC's diagnostics.
  
  @item --disable-gcov
  Specify that the run-time library used for coverage analysis
diff -Nrcpad gcc-17-20260823/gcc/doc/invoke.texi gcc-17-20260830/gcc/doc/invoke.texi
*** gcc-17-20260823/gcc/doc/invoke.texi	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/doc/invoke.texi	Sun Aug 30 22:32:07 2026
*************** Objective-C and Objective-C++ Dialects}.
*** 683,690 ****
  -fthread-jumps  -ftracer  -ftree-bit-ccp
  -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch  -ftree-coalesce-vars
  -ftree-copy-prop  -ftree-cselim  -ftree-dce  -ftree-dominator-opts
! -ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting
! -ftree-loop-if-convert  -ftree-loop-im
  -ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns
  -ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize
  -ftree-loop-vectorize
--- 683,689 ----
  -fthread-jumps  -ftracer  -ftree-bit-ccp
  -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch  -ftree-coalesce-vars
  -ftree-copy-prop  -ftree-cselim  -ftree-dce  -ftree-dominator-opts
! -ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting -ftree-loop-im
  -ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns
  -ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize
  -ftree-loop-vectorize
*************** Objective-C and Objective-C++ Dialects}.
*** 986,993 ****
  
  @emph{AVR Options} (@ref{AVR Options})
  @gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args -masm-len-notes
! -mcvt  -mbranch-cost=@var{cost}  -mfuse-add=@var{level}  -mfuse-move=@var{level}
! -mfuse-move2  -mcall-prologues  -mgas-isr-prologues  -mint8  -mflmap
  -mdouble=@var{bits}  -mlong-double=@var{bits}  -mno-call-main
  -mn_flash=@var{size}  -mfract-convert-truncate  -mno-interrupts
  -mmain-is-OS_task  -mrelax  -mpmem-wrap-around
--- 985,993 ----
  
  @emph{AVR Options} (@ref{AVR Options})
  @gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args -masm-len-notes
! -mcvt  -mbranch-cost=@var{cost}  -mfuse-add=@var{level}  -mfuse-ifelse
! -mfuse-move=@var{level}  -mfuse-move2
! -mcall-prologues  -mgas-isr-prologues  -mint8  -mflmap
  -mdouble=@var{bits}  -mlong-double=@var{bits}  -mno-call-main
  -mn_flash=@var{size}  -mfract-convert-truncate  -mno-interrupts
  -mmain-is-OS_task  -mrelax  -mpmem-wrap-around
*************** the implementation.
*** 8750,8766 ****
  @opindex Wstrict-aliasing
  @opindex Wno-strict-aliasing
  @item -Wstrict-aliasing
! This option is only active when @option{-fstrict-aliasing} is active.
! It warns about code that might break the strict aliasing rules that the
! compiler is using for optimization.  The warning does not catch all
! cases, but does attempt to catch the more common pitfalls.  It is
! included in @option{-Wall}.
  It is equivalent to @option{-Wstrict-aliasing=3}.
  
  @item -Wstrict-aliasing=@var{n}
! This option is only active when @option{-fstrict-aliasing} is active.
! It warns about code that might break the strict aliasing rules that the
! compiler is using for optimization.
  Higher levels correspond to higher accuracy (fewer false positives).
  Higher levels also correspond to more effort, similar to the way @option{-O}
  works.
--- 8750,8774 ----
  @opindex Wstrict-aliasing
  @opindex Wno-strict-aliasing
  @item -Wstrict-aliasing
! This option warns about code that might break the strict aliasing rules
! that the compiler uses for optimization.  The type-based checking done
! in the front end is performed even when @option{-fstrict-aliasing} is
! not active, provided @option{-Wstrict-aliasing} is requested explicitly;
! it is not performed for @option{-fno-strict-aliasing -Wall} alone.  When
! optimization is enabled, the warning also runs in the back end, where it
! handles multiple-statement cases using flow-sensitive points-to
! information.  The warning does not catch all cases, but does attempt to
! catch the more common pitfalls.  It is included in @option{-Wall}.
  It is equivalent to @option{-Wstrict-aliasing=3}.
  
  @item -Wstrict-aliasing=@var{n}
! This option warns about code that might break the strict aliasing rules
! that the compiler uses for optimization.  The type-based checking done
! in the front end is performed even when @option{-fstrict-aliasing} is
! not active, provided @option{-Wstrict-aliasing} is requested explicitly.
! When optimization is enabled, the warning also runs in the back end,
! where it handles multiple-statement cases using flow-sensitive points-to
! information.
  Higher levels correspond to higher accuracy (fewer false positives).
  Higher levels also correspond to more effort, similar to the way @option{-O}
  works.
*************** limit the ability to debug an optimized
*** 15219,15233 ****
  prevents SSA coalescing of user variables.  This option is enabled by
  default if optimization is enabled, and it does very little otherwise.
  
- @opindex ftree-loop-if-convert
- @opindex fno-tree-loop-if-convert
- @item -ftree-loop-if-convert
- Attempt to transform conditional jumps in the innermost loops to
- branch-less equivalents.  The intent is to remove control-flow from
- the innermost loops in order to improve the ability of the
- vectorization pass to handle these loops.  This is enabled by default
- if vectorization is enabled.
- 
  @opindex ftree-loop-distribution
  @opindex fno-tree-loop-distribution
  @item -ftree-loop-distribution
--- 15227,15232 ----
*************** is only available when generating non-pi
*** 24248,24254 ****
  @item -mcmse
  Generate secure code as per the "ARMv8-M Security Extensions: Requirements on
  Development Tools Engineering Specification", which can be found on
! @url{https://developer.arm.com/documentation/ecm0359818/latest/}.
  
  @opindex mfix-cmse-cve-2021-35465
  @opindex mno-fix-cmse-cve-2021-35465
--- 24247,24253 ----
  @item -mcmse
  Generate secure code as per the "ARMv8-M Security Extensions: Requirements on
  Development Tools Engineering Specification", which can be found on
! @url{https://support.arm.com/documentation/ecm0359818/latest/}.
  
  @opindex mfix-cmse-cve-2021-35465
  @opindex mno-fix-cmse-cve-2021-35465
*************** The default uses @code{@var{level}=1} fo
*** 24619,24624 ****
--- 24618,24629 ----
  and @option{-O1}, and @code{@var{level}=2} for higher optimizations.
  Valid values for @var{level} are @code{0}, @code{1} and @code{2}.
  
+ @opindex mfuse-ifelse
+ @item -mfuse-ifelse
+ Optimize compare-branch-compare-branch sequences to compare-branch-branch,
+ which typically occurs in if-else trees generated from dense switch statements.
+ This option is enabled per default if optimization is on.
+ 
  @opindex mfuse-move
  @item -mfuse-move
  @itemx -mno-fuse-move
*************** passed.  This is useful for ensuring tha
*** 31372,31377 ****
--- 31377,31392 ----
  @option{-mcpu} option, and an error results if no @option{-mcpu} option
  is given when @option{-march=unset} is used.
  
+ @option{-march=native} causes the compiler to work out the ISA of the
+ machine it is running on.  It is only available on a native GNU/Linux
+ compiler; anywhere else the value is rejected like any other unknown ISA
+ string.  On a system whose cores are not all alike, such as one pairing
+ fast and efficient cores, which of them the detected ISA describes is
+ unspecified; write the ISA string out in full if it matters.  If the
+ running machine cannot be identified the option is ignored, and the
+ architecture is taken from @option{-mcpu} or from the configured default
+ as usual.
+ 
  The syntax of the ISA string is defined as follows:
  
  @itemize @bullet{}
diff -Nrcpad gcc-17-20260823/gcc/doc/md.texi gcc-17-20260830/gcc/doc/md.texi
*** gcc-17-20260823/gcc/doc/md.texi	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/doc/md.texi	Sun Aug 30 22:32:07 2026
*************** The operation is equivalent to:
*** 7341,7347 ****
  
  @smallexample
  int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
! for (j = 0; j < operand4 + operand5; j++)
    for (i = 0; i < c; i++)
      if (operand2[j])
        operand0[i][j] = operand1[j * c + i];
--- 7341,7347 ----
  
  @smallexample
  int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
! for (j = 0; j < operand4 - operand5; j++)
    for (i = 0; i < c; i++)
      if (operand2[j])
        operand0[i][j] = operand1[j * c + i];
*************** The operation is equivalent to:
*** 7393,7399 ****
  
  @smallexample
  int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
! for (j = 0; j < operand3 + operand4; j++)
    if (operand2[j])
      for (i = 0; i < c; i++)
        operand0[j * c + i] = operand1[i][j];
--- 7393,7399 ----
  
  @smallexample
  int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
! for (j = 0; j < operand3 - operand4; j++)
    if (operand2[j])
      for (i = 0; i < c; i++)
        operand0[j * c + i] = operand1[i][j];
*************** Like @samp{gather_load@var{m}@var{n}}, b
*** 7440,7450 ****
  (operand 7) and a bias operand (operand 8).
  
  Similar to mask_len_load the instruction loads at
! most (operand 7 + operand 8) elements from memory.
  Bit @var{i} of the mask is set if element @var{i} of the result should
  be loaded from memory and clear if element @var{i} of the result should
  be set to element @var{i} of operand 6.
! Mask elements @var{i} with @var{i} > (operand 7 + operand 8) are ignored.
  
  @mdindex mask_len_strided_load@var{m}
  @item @samp{mask_len_strided_load@var{m}}
--- 7440,7450 ----
  (operand 7) and a bias operand (operand 8).
  
  Similar to mask_len_load the instruction loads at
! most (operand 7 - operand 8) elements from memory.
  Bit @var{i} of the mask is set if element @var{i} of the result should
  be loaded from memory and clear if element @var{i} of the result should
  be set to element @var{i} of operand 6.
! Mask elements @var{i} with @var{i} > (operand 7 - operand 8) are ignored.
  
  @mdindex mask_len_strided_load@var{m}
  @item @samp{mask_len_strided_load@var{m}}
*************** operand 3 is mask operand, operand 4 is
*** 7455,7464 ****
  The instruction can be seen as a special case of @code{mask_len_gather_load@var{m}@var{n}}
  with an offset vector that is a @code{vec_series} with zero as base and operand 2 as step.
  For each element the load address is operand 1 + @var{i} * operand 2.
! Similar to mask_len_load, the instruction loads at most (operand 4 + operand 5) elements from memory.
  Element @var{i} of the mask (operand 3) is set if element @var{i} of the result should
  be loaded from memory and clear if element @var{i} of the result should be zero.
! Mask elements @var{i} with @var{i} > (operand 4 + operand 5) are ignored.
  
  @mdindex scatter_store@var{m}@var{n}
  @item @samp{scatter_store@var{m}@var{n}}
--- 7455,7464 ----
  The instruction can be seen as a special case of @code{mask_len_gather_load@var{m}@var{n}}
  with an offset vector that is a @code{vec_series} with zero as base and operand 2 as step.
  For each element the load address is operand 1 + @var{i} * operand 2.
! Similar to mask_len_load, the instruction loads at most (operand 4 - operand 5) elements from memory.
  Element @var{i} of the mask (operand 3) is set if element @var{i} of the result should
  be loaded from memory and clear if element @var{i} of the result should be zero.
! Mask elements @var{i} with @var{i} > (operand 4 - operand 5) are ignored.
  
  @mdindex scatter_store@var{m}@var{n}
  @item @samp{scatter_store@var{m}@var{n}}
*************** of the result should be stored to memory
*** 7497,7505 ****
  @item @samp{mask_len_scatter_store@var{m}@var{n}}
  Like @samp{scatter_store@var{m}@var{n}}, but takes an extra mask operand (operand 5),
  a len operand (operand 6) as well as a bias operand (operand 7).  The instruction stores
! at most (operand 6 + operand 7) elements of (operand 4) to memory.
  Bit @var{i} of the mask is set if element @var{i} of (operand 4) should be stored.
! Mask elements @var{i} with @var{i} > (operand 6 + operand 7) are ignored.
  
  @mdindex mask_len_strided_store@var{m}
  @item @samp{mask_len_strided_store@var{m}}
--- 7497,7505 ----
  @item @samp{mask_len_scatter_store@var{m}@var{n}}
  Like @samp{scatter_store@var{m}@var{n}}, but takes an extra mask operand (operand 5),
  a len operand (operand 6) as well as a bias operand (operand 7).  The instruction stores
! at most (operand 6 - operand 7) elements of (operand 4) to memory.
  Bit @var{i} of the mask is set if element @var{i} of (operand 4) should be stored.
! Mask elements @var{i} with @var{i} > (operand 6 - operand 7) are ignored.
  
  @mdindex mask_len_strided_store@var{m}
  @item @samp{mask_len_strided_store@var{m}}
*************** operand 3 is mask operand, operand 4 is
*** 7510,7518 ****
  The instruction can be seen as a special case of @code{mask_len_scatter_store@var{m}@var{n}}
  with an offset vector that is a @code{vec_series} with zero as base and operand 1 as step.
  For each element the store address is operand 0 + @var{i} * operand 1.
! Similar to mask_len_store, the instruction stores at most (operand 4 + operand 5) elements of
  mask (operand 3) to memory.  Element @var{i} of the mask is set if element @var{i} of (operand 3)
! should be stored.  Mask elements @var{i} with @var{i} > (operand 4 + operand 5) are ignored.
  
  @mdindex while_ult@var{m}@var{n}
  @item @code{while_ult@var{m}@var{n}}
--- 7510,7518 ----
  The instruction can be seen as a special case of @code{mask_len_scatter_store@var{m}@var{n}}
  with an offset vector that is a @code{vec_series} with zero as base and operand 1 as step.
  For each element the store address is operand 0 + @var{i} * operand 1.
! Similar to mask_len_store, the instruction stores at most (operand 4 - operand 5) elements of
  mask (operand 3) to memory.  Element @var{i} of the mask is set if element @var{i} of (operand 3)
! should be stored.  Mask elements @var{i} with @var{i} > (operand 4 - operand 5) are ignored.
  
  @mdindex while_ult@var{m}@var{n}
  @item @code{while_ult@var{m}@var{n}}
*************** This pattern is not allowed to @code{FAI
*** 7725,7731 ****
  
  @mdindex len_load_@var{m}
  @item @samp{len_load_@var{m}}
! Load (operand 3 + operand 4) elements from memory operand 1
  into vector register operand 0.  Operands 0 and 1 have mode @var{m},
  which must be a vector mode.  Operand 3 has whichever integer mode the
  target prefers.  Operand 2 (the ``else value'') is of mode @var{m} and
--- 7725,7731 ----
  
  @mdindex len_load_@var{m}
  @item @samp{len_load_@var{m}}
! Load (operand 3 - operand 4) elements from memory operand 1
  into vector register operand 0.  Operands 0 and 1 have mode @var{m},
  which must be a vector mode.  Operand 3 has whichever integer mode the
  target prefers.  Operand 2 (the ``else value'') is of mode @var{m} and
*************** constant bias: it is either a constant 0
*** 7738,7744 ****
  operand 4 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 3 + operand 4) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes rather than
--- 7738,7744 ----
  operand 4 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 3 - operand 4) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes rather than
*************** This pattern is not allowed to @code{FAI
*** 7749,7755 ****
  
  @mdindex len_store_@var{m}
  @item @samp{len_store_@var{m}}
! Store (operand 2 + operand 3) vector elements from vector register operand 1
  into memory operand 0, leaving the other elements of
  operand 0 unchanged.  Operands 0 and 1 have mode @var{m}, which must be
  a vector mode.  Operand 2 has whichever integer mode the target prefers.
--- 7749,7755 ----
  
  @mdindex len_store_@var{m}
  @item @samp{len_store_@var{m}}
! Store (operand 2 - operand 3) vector elements from vector register operand 1
  into memory operand 0, leaving the other elements of
  operand 0 unchanged.  Operands 0 and 1 have mode @var{m}, which must be
  a vector mode.  Operand 2 has whichever integer mode the target prefers.
*************** constant bias: it is either a constant 0
*** 7760,7766 ****
  operand 3 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 2 + operand 3) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes
--- 7760,7766 ----
  operand 3 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 2 - operand 3) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes
*************** This pattern is not allowed to @code{FAI
*** 7772,7794 ****
  @mdindex mask_len_load@var{m}@var{n}
  @item @samp{mask_len_load@var{m}@var{n}}
  Perform a masked load from the memory location pointed to by operand 1
! into register operand 0.  (operand 3 + operand 4) elements are loaded from
  memory and other elements in operand 0 are set to undefined values.
  This is a combination of len_load and maskload.
  Operands 0 and 1 have mode @var{m}, which must be a vector mode.  Operand 3
  has whichever integer mode the target prefers.  A mask is specified in
  operand 2 which must be of type @var{n}.  The mask has lower precedence than
  the length and is itself subject to length masking,
! i.e. only mask indices < (operand 4 + operand 5) are used.
  Operand 3 is an else operand similar to the one in @code{maskload}.
! Operand 4 conceptually has mode @code{QI}.
  
  Operand 4 can be a variable or a constant amount.  Operand 5 specifies a
  constant bias: it is either a constant 0 or a constant -1.  The predicate on
  operand 5 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 4 + operand 5) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes
--- 7772,7794 ----
  @mdindex mask_len_load@var{m}@var{n}
  @item @samp{mask_len_load@var{m}@var{n}}
  Perform a masked load from the memory location pointed to by operand 1
! into register operand 0.  (operand 4 - operand 5) elements are loaded from
  memory and other elements in operand 0 are set to undefined values.
  This is a combination of len_load and maskload.
  Operands 0 and 1 have mode @var{m}, which must be a vector mode.  Operand 3
  has whichever integer mode the target prefers.  A mask is specified in
  operand 2 which must be of type @var{n}.  The mask has lower precedence than
  the length and is itself subject to length masking,
! i.e. only mask indices < (operand 4 - operand 5) are used.
  Operand 3 is an else operand similar to the one in @code{maskload}.
! Operand 5 conceptually has mode @code{QI}.
  
  Operand 4 can be a variable or a constant amount.  Operand 5 specifies a
  constant bias: it is either a constant 0 or a constant -1.  The predicate on
  operand 5 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 4 - operand 5) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes
*************** This pattern is not allowed to @code{FAI
*** 7800,7812 ****
  @mdindex mask_len_store@var{m}@var{n}
  @item @samp{mask_len_store@var{m}@var{n}}
  Perform a masked store from vector register operand 1 into memory operand 0.
! (operand 3 + operand 4) elements are stored to memory
  and leave the other elements of operand 0 unchanged.
  This is a combination of len_store and maskstore.
  Operands 0 and 1 have mode @var{m}, which must be a vector mode.  Operand 3 has whichever
  integer mode the target prefers.  A mask is specified in operand 2 which must be
  of type @var{n}.  The mask has lower precedence than the length and is itself subject to
! length masking, i.e. only mask indices < (operand 3 + operand 4) are used.
  Operand 4 conceptually has mode @code{QI}.
  
  Operand 2 can be a variable or a constant amount.  Operand 3 specifies a
--- 7800,7812 ----
  @mdindex mask_len_store@var{m}@var{n}
  @item @samp{mask_len_store@var{m}@var{n}}
  Perform a masked store from vector register operand 1 into memory operand 0.
! (operand 3 - operand 4) elements are stored to memory
  and leave the other elements of operand 0 unchanged.
  This is a combination of len_store and maskstore.
  Operands 0 and 1 have mode @var{m}, which must be a vector mode.  Operand 3 has whichever
  integer mode the target prefers.  A mask is specified in operand 2 which must be
  of type @var{n}.  The mask has lower precedence than the length and is itself subject to
! length masking, i.e. only mask indices < (operand 3 - operand 4) are used.
  Operand 4 conceptually has mode @code{QI}.
  
  Operand 2 can be a variable or a constant amount.  Operand 3 specifies a
*************** constant bias: it is either a constant 0
*** 7814,7820 ****
  operand 4 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 2 + operand 4) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes
--- 7814,7820 ----
  operand 4 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 3 - operand 4) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes
*************** for (i = 0; i < GET_MODE_NUNITS (@var{m}
*** 8561,8573 ****
  @itemx @samp{cond_len_floor@var{mode}}
  @itemx @samp{cond_len_round@var{mode}}
  @itemx @samp{cond_len_rint@var{mode}}
! When operand 1 is true and element index < operand 4 + operand 5, perform an operation on operands 1 and
  store the result in operand 0, otherwise store operand 2 in operand 0.
  The operation only works for the operands are vectors.
  
  @smallexample
  for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
!   op0[i] = (i < ops[4] + ops[5] && op1[i]
              ? @var{op} op2[i]
              : op3[i]);
  @end smallexample
--- 8561,8573 ----
  @itemx @samp{cond_len_floor@var{mode}}
  @itemx @samp{cond_len_round@var{mode}}
  @itemx @samp{cond_len_rint@var{mode}}
! When operand 1 is true and element index < operand 4 - operand 5, perform an operation on operands 1 and
  store the result in operand 0, otherwise store operand 2 in operand 0.
  The operation only works for the operands are vectors.
  
  @smallexample
  for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
!   op0[i] = (i < ops[4] - ops[5] && op1[i]
              ? @var{op} op2[i]
              : op3[i]);
  @end smallexample
*************** form of @samp{@var{op}@var{mode}2}.
*** 8627,8639 ****
  @itemx @samp{cond_len_ashl@var{mode}}
  @itemx @samp{cond_len_ashr@var{mode}}
  @itemx @samp{cond_len_lshr@var{mode}}
! When operand 1 is true and element index < operand 5 + operand 6, perform an operation on operands 2 and 3 and
  store the result in operand 0, otherwise store operand 4 in operand 0.
  The operation only works for the operands are vectors.
  
  @smallexample
  for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
!   op0[i] = (i < ops[5] + ops[6] && op1[i]
              ? op2[i] @var{op} op3[i]
              : op4[i]);
  @end smallexample
--- 8627,8639 ----
  @itemx @samp{cond_len_ashl@var{mode}}
  @itemx @samp{cond_len_ashr@var{mode}}
  @itemx @samp{cond_len_lshr@var{mode}}
! When operand 1 is true and element index < operand 5 - operand 6, perform an operation on operands 2 and 3 and
  store the result in operand 0, otherwise store operand 4 in operand 0.
  The operation only works for the operands are vectors.
  
  @smallexample
  for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
!   op0[i] = (i < ops[5] - ops[6] && op1[i]
              ? op2[i] @var{op} op3[i]
              : op4[i]);
  @end smallexample
*************** takes 3 operands rather than two.  For e
*** 8670,8676 ****
  
  @smallexample
  for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
!   op0[i] = (i < ops[6] + ops[7] && op1[i]
              ? fma (op2[i], op3[i], op4[i])
              : op5[i]);
  @end smallexample
--- 8670,8676 ----
  
  @smallexample
  for (i = 0; i < GET_MODE_NUNITS (@var{m}); i++)
!   op0[i] = (i < ops[6] - ops[7] && op1[i]
              ? fma (op2[i], op3[i], op4[i])
              : op5[i]);
  @end smallexample
diff -Nrcpad gcc-17-20260823/gcc/doc/riscv-mcpu.texi gcc-17-20260830/gcc/doc/riscv-mcpu.texi
*** gcc-17-20260823/gcc/doc/riscv-mcpu.texi	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/doc/riscv-mcpu.texi	Sun Aug 30 22:32:07 2026
*************** by particular CPU name.  Permissible val
*** 44,51 ****
--- 44,55 ----
  
  @samp{sifive-p450},
  
+ @samp{sifive-p550},
+ 
  @samp{sifive-p670},
  
+ @samp{sifive-p870-d},
+ 
  @samp{thead-c906},
  
  @samp{xt-c908},
diff -Nrcpad gcc-17-20260823/gcc/doc/riscv-mtune.texi gcc-17-20260830/gcc/doc/riscv-mtune.texi
*** gcc-17-20260823/gcc/doc/riscv-mtune.texi	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/doc/riscv-mtune.texi	Sun Aug 30 22:32:07 2026
*************** particular CPU name.  Permissible values
*** 30,35 ****
--- 30,39 ----
  
  @samp{sifive-p600-series},
  
+ @samp{sifive-p550},
+ 
+ @samp{sifive-p870-d},
+ 
  @samp{tt-ascalon-x},
  
  @samp{tt-ascalon-xg},
diff -Nrcpad gcc-17-20260823/gcc/doc/tm.texi gcc-17-20260830/gcc/doc/tm.texi
*** gcc-17-20260823/gcc/doc/tm.texi	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/doc/tm.texi	Sun Aug 30 22:32:07 2026
*************** machines.  One reason you may need to de
*** 3309,3320 ****
  @code{hard_frame_pointer_rtx} is the appropriate value on your machine.
  @end deftypefn
  
! @defmac FRAME_ADDR_RTX (@var{frameaddr})
  A C expression whose value is RTL representing the value of the frame
! address for the current frame.  @var{frameaddr} is the frame pointer
! of the current frame.  This is used for __builtin_frame_address.
! You need only define this macro if the frame address is not the same
! as the frame pointer.  Most machines do not need to define it.
  @end defmac
  
  @defmac RETURN_ADDR_RTX (@var{count}, @var{frameaddr})
--- 3309,3323 ----
  @code{hard_frame_pointer_rtx} is the appropriate value on your machine.
  @end deftypefn
  
! @defmac FRAME_ADDR_RTX (@var{count}, @var{frameaddr})
  A C expression whose value is RTL representing the value of the frame
! address for the frame @var{count} steps up from the current frame.
! @var{frameaddr} is the frame pointer of that frame.  This is used for
! __builtin_frame_address.  A value of @code{NULL_RTX} means the target
! cannot supply that frame address; @code{__builtin_frame_address} then
! warns and returns zero.  You need only define this macro if the frame
! address is not the same as the frame pointer, or if some frames cannot
! be reached.  Most machines do not need to define it.
  @end defmac
  
  @defmac RETURN_ADDR_RTX (@var{count}, @var{frameaddr})
*************** This function prepares to emit a conditi
*** 12623,12628 ****
--- 12626,12634 ----
   or @code{gen_ccmp_next}.  It may return @code{NULL} if the combination of
   @var{prev} and this comparison is not supported, otherwise the result must
   be appropriate for passing to @code{gen_ccmp_next} or @code{cbranch_optab}.
+  The comparison is not performed when @var{prev} is false, so this function
+  has to return @code{NULL} for a comparison that raises an exception which
+  has to be preserved.
   @var{code} is the @code{rtx_code} of the compare for @var{op0} and @var{op1}.
   @var{bit_code} is @code{AND} or @code{IOR}, which is the op on the compares.
  @end deftypefn
diff -Nrcpad gcc-17-20260823/gcc/doc/tm.texi.in gcc-17-20260830/gcc/doc/tm.texi.in
*** gcc-17-20260823/gcc/doc/tm.texi.in	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/doc/tm.texi.in	Sun Aug 30 22:32:07 2026
*************** define this macro.  The default is to do
*** 2564,2575 ****
  
  @hook TARGET_BUILTIN_SETJMP_FRAME_VALUE
  
! @defmac FRAME_ADDR_RTX (@var{frameaddr})
  A C expression whose value is RTL representing the value of the frame
! address for the current frame.  @var{frameaddr} is the frame pointer
! of the current frame.  This is used for __builtin_frame_address.
! You need only define this macro if the frame address is not the same
! as the frame pointer.  Most machines do not need to define it.
  @end defmac
  
  @defmac RETURN_ADDR_RTX (@var{count}, @var{frameaddr})
--- 2564,2578 ----
  
  @hook TARGET_BUILTIN_SETJMP_FRAME_VALUE
  
! @defmac FRAME_ADDR_RTX (@var{count}, @var{frameaddr})
  A C expression whose value is RTL representing the value of the frame
! address for the frame @var{count} steps up from the current frame.
! @var{frameaddr} is the frame pointer of that frame.  This is used for
! __builtin_frame_address.  A value of @code{NULL_RTX} means the target
! cannot supply that frame address; @code{__builtin_frame_address} then
! warns and returns zero.  You need only define this macro if the frame
! address is not the same as the frame pointer, or if some frames cannot
! be reached.  Most machines do not need to define it.
  @end defmac
  
  @defmac RETURN_ADDR_RTX (@var{count}, @var{frameaddr})
diff -Nrcpad gcc-17-20260823/gcc/expmed.h gcc-17-20260830/gcc/expmed.h
*** gcc-17-20260823/gcc/expmed.h	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/expmed.h	Sun Aug 30 22:32:07 2026
*************** struct algorithm
*** 101,109 ****
       word size, but the worst-case algorithms will be if we have few
       consecutive ones or zeros, i.e., a multiplicand like 10101010101...
       In that case we will generate shift-by-2, add, shift-by-2, add,...,
!      in total wordsize operations.  */
!   enum alg_code op[MAX_BITS_PER_WORD];
!   char log[MAX_BITS_PER_WORD];
  };
  
  /* The entry for our multiplication cache/hash table.  */
--- 101,111 ----
       word size, but the worst-case algorithms will be if we have few
       consecutive ones or zeros, i.e., a multiplicand like 10101010101...
       In that case we will generate shift-by-2, add, shift-by-2, add,...,
!      in total wordsize operations.  One extra slot: synth_mult extends
!      a sub-algorithm of up to MAX_BITS_PER_WORD operations by one
!      before its length check discards the result.  */
!   enum alg_code op[MAX_BITS_PER_WORD + 1];
!   char log[MAX_BITS_PER_WORD + 1];
  };
  
  /* The entry for our multiplication cache/hash table.  */
diff -Nrcpad gcc-17-20260823/gcc/fold-const-call.cc gcc-17-20260830/gcc/fold-const-call.cc
*** gcc-17-20260823/gcc/fold-const-call.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fold-const-call.cc	Sun Aug 30 22:32:07 2026
*************** fold_const_builtin_nan (tree type, tree
*** 622,630 ****
  static tree
  fold_const_reduction (tree type, tree arg, tree_code code)
  {
!   unsigned HOST_WIDE_INT nelts;
!   if (TREE_CODE (arg) != VECTOR_CST
!       || !VECTOR_CST_NELTS (arg).is_constant (&nelts))
      return NULL_TREE;
  
    tree res = VECTOR_CST_ELT (arg, 0);
--- 622,660 ----
  static tree
  fold_const_reduction (tree type, tree arg, tree_code code)
  {
!   if (TREE_CODE (arg) != VECTOR_CST)
!     return NULL_TREE;
! 
!   bool idempotent_p = (code == MAX_EXPR
! 		       || code == MIN_EXPR
! 		       || code == BIT_AND_EXPR
! 		       || code == BIT_IOR_EXPR);
! 
!   unsigned HOST_WIDE_INT nelts = vector_cst_encoded_nelts (arg);
!   bool singleton_snan_p
!     = (nelts == 1
! 	&& tree_expr_maybe_signaling_nan_p (VECTOR_CST_ELT (arg, 0)));
! 
!   if (idempotent_p
!       && !VECTOR_CST_STEPPED_P (arg)
!       && multiple_p (VECTOR_CST_NELTS (arg), nelts)
!       && !singleton_snan_p)
!     /* Operating on the first NELTS elements is enough.  */
!     ;
!   else if (code == BIT_XOR_EXPR
! 	   && !VECTOR_CST_STEPPED_P (arg)
! 	   && multiple_p (VECTOR_CST_NELTS (arg), nelts * 2))
!     {
!       if (VECTOR_CST_DUPLICATE_P (arg))
! 	{
! 	  /* Process two copies of a one-element-per-pattern encoding.  */
! 	  nelts *= 2;
! 	}
!       else
! 	gcc_checking_assert (VECTOR_CST_NELTS_PER_PATTERN (arg) == 2);
!     }
! 
!   else if (!VECTOR_CST_NELTS (arg).is_constant (&nelts))
      return NULL_TREE;
  
    tree res = VECTOR_CST_ELT (arg, 0);
diff -Nrcpad gcc-17-20260823/gcc/fortran/ChangeLog gcc-17-20260830/gcc/fortran/ChangeLog
*** gcc-17-20260823/gcc/fortran/ChangeLog	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/ChangeLog	Sun Aug 30 22:32:07 2026
***************
*** 1,3 ****
--- 1,181 ----
+ 2026-08-28  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-expr.cc (conv_null_actual): Remove dummy symbol intent
+ 	attribute modification.  Move the three times repeated descriptor
+ 	initialization...
+ 	* trans-descriptor.cc (gfc_create_null_actual_descriptor): ...
+ 	here as a new function and inline the call to
+ 	gfc_conv_scalar_to_descriptor.  Remove the inapplicable or
+ 	redundant parts from the inlined code.  Create lower and upper
+ 	bounds arrays and clear them before passing to the type creation
+ 	function.
+ 	* trans-descriptor.h (gfc_create_null_actual_descriptor): New
+ 	declaration.
+ 
+ 2026-08-28  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-expr.cc (fcncall_realloc_result): Move descriptor
+ 	creation and initialization...
+ 	* trans-descriptor.cc
+ 	(gfc_create_unallocated_library_result_descriptor): ... here as a
+ 	new function.
+ 	* trans-descriptor.h
+ 	(gfc_create_unallocated_library_result_descriptor): New declaration.
+ 
+ 2026-08-28  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-array.cc (gfc_trans_deferred_array): Move default descriptor
+ 	initialization...
+ 	* trans-descriptor.cc (gfc_init_descriptor_variable): ... here
+ 	as a new function.
+ 	* trans-descriptor.h (gfc_init_descriptor_variable): New
+ 	declaration.
+ 
+ 2026-08-28  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-expr.cc (gfc_conv_derived_to_class): Move absent array
+ 	descriptor initialization ...
+ 	* trans-descriptor.cc (gfc_init_absent_descriptor): ... here as a
+ 	new function.
+ 	* trans-descriptor.h (gfc_init_absent_descriptor): New declaration.
+ 
+ 2026-08-28  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-decl.cc (gfc_trans_deferred_vars): Move result array
+ 	descriptor default initialization ...
+ 	* trans-descriptor.cc (gfc_init_descriptor_result): ... here as
+ 	a new function.
+ 	* trans-descriptor.h (gfc_init_descriptor_result): New declaration.
+ 
+ 2026-08-28  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-expr.cc (gfc_trans_pointer_assignment): Move pointer
+ 	nullification generation ...
+ 	* trans-descriptor.cc (gfc_nullify_descriptor): ... here as a new
+ 	function.
+ 	* trans-descriptor.h (gfc_nullify_descriptor): New declaration.
+ 
+ 2026-08-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* lang.opt (Wargument-mismatch): Use 2 spaces instead of 1 between
+ 	sentences in the description.
+ 	(fdump-core): Likewise.
+ 
+ 2026-08-27  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans.h (GFC_DTYPE_ELEM_LEN, GFC_DTYPE_VERSION, GFC_DTYPE_RANK,
+ 	GFC_DTYPE_TYPE, GFC_DTYPE_ATTRIBUTE): Move preprocessor constants...
+ 	* trans-descriptor.cc (GFC_DTYPE_ELEM_LEN, GFC_DTYPE_VERSION,
+ 	GFC_DTYPE_RANK, GFC_DTYPE_TYPE, GFC_DTYPE_ATTRIBUTE): ... here.
+ 	Undefine the constants after the last function using them.
+ 
+ 2026-08-27  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-descriptor.cc (gfc_get_descriptor_offsets_for_info): Remove
+ 	the dtype offset argument and add a rank offset argument.  Set the
+ 	value of that offset.  Use a variable to factor repeated accesses to
+ 	TYPE_FIELDS (type).
+ 	* trans-types.cc (gfc_get_array_descr_info): Update caller.  Create
+ 	the rank expression using the just obtained rank offset.
+ 
+ 2026-08-27  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-types.cc (gfc_get_dtype_rank_type): Move constructor
+ 	generation ...
+ 	* trans-descriptor.cc (gfc_build_dtype_constructor): ... here as a
+ 	new function.
+ 	* trans-descriptor.h (gfc_build_dtype_constructor): New declaration.
+ 
+ 2026-08-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/82065
+ 	* trans-decl.cc (gfc_get_symbol_decl): Emit the static
+ 	initializer for intrinsic array parameters regardless of the
+ 	enclosing namespace.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* trans-expr.cc (conv_dummy_value): Suppress the CHARACTER copy
+ 	and pass a null pointer and a zero length when the actual argument
+ 	is an absent optional one.
+ 	(gfc_conv_procedure_call): Give gfc_conv_subref_array_arg the
+ 	symbol of the actual argument, so that an absent optional one
+ 	suppresses the copy.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* trans-expr.cc (has_value_array_dummy): New function.
+ 	(conv_seq_assoc_value_arg): New function.  Copy the element
+ 	sequence declared by a VALUE array dummy when the actual argument
+ 	is a sequence associated scalar.
+ 	(gfc_conv_procedure_call): Request an interface mapping when a
+ 	dummy is an explicit-shape VALUE array, and call
+ 	conv_seq_assoc_value_arg for a scalar actual argument passed to a
+ 	VALUE array dummy.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* resolve.cc (resolve_symbol): Allow VALUE on assumed-shape and
+ 	explicit-shape array dummies under Fortran 2008 (C557); reject it
+ 	on assumed-size arrays, on array dummies of a BIND(C) procedure,
+ 	and, as not yet implemented, on polymorphic array dummies.
+ 	* symbol.cc (gfc_check_conflict): Remove the conflict between
+ 	VALUE and DIMENSION; only VALUE and CODIMENSION remain mutually
+ 	exclusive.
+ 	* trans-expr.cc (gfc_conv_procedure_call): For a VALUE array
+ 	dummy, pass a private deep copy of the actual argument via
+ 	gfc_conv_subref_array_arg with INTENT_IN.
+ 	* trans-types.cc (gfc_sym_type): Use byref=1 for VALUE array
+ 	dummies, so the ABI still passes by reference.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* resolve.cc (resolve_symbol): Allow character(len=*) VALUE and a
+ 	specified but non-constant length under Fortran 2008; consolidate
+ 	the C-interop length checks into a single "must have length one"
+ 	check ordered ahead of the Fortran 2008 allowance.
+ 	* trans-expr.cc (conv_dummy_value): For assumed-length or
+ 	non-constant-length CHARACTER VALUE dummies, make a caller-side
+ 	copy and pass its address; scale the copy size by the size of the
+ 	character kind.
+ 	* trans-types.cc (gfc_sym_type): Use byref=1 for assumed-length or
+ 	non-constant-length VALUE character dummies, so the ABI still
+ 	passes by reference.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* trans.h (gfc_conv_subref_array_arg): Add DEEP_COPY argument.
+ 	* trans-expr.cc (gfc_conv_subref_array_arg): Take DEEP_COPY and
+ 	pass it on to gfc_trans_scalar_assign; deallocate the allocatable
+ 	components of the temporary after the call.  Dereference the
+ 	descriptor when setting the pointer for an optional argument that
+ 	is not also checked for contiguity, and pass the string length
+ 	back to the caller's gfc_se.
+ 
+ 2026-08-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/126909
+ 	* parse.cc (accept_statement): After a contains section, a new
+ 	namespace is started and, without correction, the new statement
+ 	the label, if there is one, would be stored there.Go back to
+ 	the containing namespace and store it there. Likewise add the
+ 	labelled return statement to the previous entry on the state
+ 	stack.
+ 
  2026-08-18  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
  
  	PR fortran/126816
diff -Nrcpad gcc-17-20260823/gcc/fortran/lang.opt gcc-17-20260830/gcc/fortran/lang.opt
*** gcc-17-20260823/gcc/fortran/lang.opt	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/lang.opt	Sun Aug 30 22:32:07 2026
*************** Warn about creation of array temporaries
*** 211,217 ****
  
  Wargument-mismatch
  Fortran WarnRemoved
! Does nothing. Preserved for backward compatibility.
  
  Wc-binding-type
  Fortran Var(warn_c_binding_type) Warning LangEnabledBy(Fortran,Wall)
--- 211,217 ----
  
  Wargument-mismatch
  Fortran WarnRemoved
! Does nothing.  Preserved for backward compatibility.
  
  Wc-binding-type
  Fortran Var(warn_c_binding_type) Warning LangEnabledBy(Fortran,Wall)
*************** Allow dollar signs in entity names.
*** 560,566 ****
  
  fdump-core
  Fortran Ignore
! Does nothing. Preserved for backward compatibility.
  
  fdump-fortran-original
  Fortran Var(flag_dump_fortran_original)
--- 560,566 ----
  
  fdump-core
  Fortran Ignore
! Does nothing.  Preserved for backward compatibility.
  
  fdump-fortran-original
  Fortran Var(flag_dump_fortran_original)
diff -Nrcpad gcc-17-20260823/gcc/fortran/resolve.cc gcc-17-20260830/gcc/fortran/resolve.cc
*** gcc-17-20260823/gcc/fortran/resolve.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/resolve.cc	Sun Aug 30 22:32:07 2026
*************** skip_interfaces:
*** 18861,18866 ****
--- 18861,18902 ----
  		     "CODIMENSION attribute", &sym->declared_at);
  	  return;
  	}
+ 
+       /* F2008, C557 (F2018, C862; F2023, C867).  Assumed-shape and
+ 	 explicit-shape array dummies may have the VALUE attribute, but
+ 	 assumed-size arrays may not.  */
+       if (as->type == AS_ASSUMED_SIZE && sym->attr.value)
+ 	{
+ 	  gfc_error ("Assumed-size array %qs at %L may not have the VALUE "
+ 		     "attribute", sym->name, &sym->declared_at);
+ 	  return;
+ 	}
+       else if (sym->attr.value && sym->attr.dummy
+ 	       && (as->type == AS_EXPLICIT || as->type == AS_ASSUMED_SHAPE))
+ 	{
+ 	  if (!gfc_notify_std (GFC_STD_F2008, "Array dummy argument %qs at "
+ 			       "%L with VALUE attribute", sym->name,
+ 			       &sym->declared_at))
+ 	    return;
+ 
+ 	  /* F2023, 18.3.6 (4): only a scalar VALUE dummy is interoperable
+ 	     with a formal parameter of the C prototype.  */
+ 	  if (sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
+ 	    {
+ 	      gfc_error ("Array dummy argument %qs at %L with VALUE attribute "
+ 			 "not allowed in BIND(C) procedure %qs", sym->name,
+ 			 &sym->declared_at, sym->ns->proc_name->name);
+ 	      return;
+ 	    }
+ 
+ 	  if (sym->ts.type == BT_CLASS)
+ 	    {
+ 	      gfc_error ("Sorry, polymorphic array dummy argument %qs at %L "
+ 			 "with VALUE attribute is not yet implemented",
+ 			 sym->name, &sym->declared_at);
+ 	      return;
+ 	    }
+ 	}
      }
  
    /* Make sure symbols with known intent or optional are really dummy
*************** skip_interfaces:
*** 18884,18905 ****
    if (sym->attr.value && sym->ts.type == BT_CHARACTER)
      {
        gfc_charlen *cl = sym->ts.u.cl;
!       if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
  	{
  	  gfc_error ("Character dummy variable %qs at %L with VALUE "
! 		     "attribute must have constant length",
  		     sym->name, &sym->declared_at);
  	  return;
  	}
  
        if (sym->ts.is_c_interop
! 	  && mpz_cmp_si (cl->length->value.integer, 1) != 0)
  	{
  	  gfc_error ("C interoperable character dummy variable %qs at %L "
  		     "with VALUE attribute must have length one",
  		     sym->name, &sym->declared_at);
  	  return;
  	}
      }
  
    if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
--- 18920,18959 ----
    if (sym->attr.value && sym->ts.type == BT_CHARACTER)
      {
        gfc_charlen *cl = sym->ts.u.cl;
!       if (!cl)
  	{
  	  gfc_error ("Character dummy variable %qs at %L with VALUE "
! 		     "attribute must have a length specification",
  		     sym->name, &sym->declared_at);
  	  return;
  	}
  
+       /* C interoperable character dummies must have length one.  */
        if (sym->ts.is_c_interop
! 	  && (!cl->length
! 	      || cl->length->expr_type != EXPR_CONSTANT
! 	      || mpz_cmp_si (cl->length->value.integer, 1) != 0))
  	{
  	  gfc_error ("C interoperable character dummy variable %qs at %L "
  		     "with VALUE attribute must have length one",
  		     sym->name, &sym->declared_at);
  	  return;
  	}
+ 
+       /* Assumed-length character dummy with VALUE, valid since F2008.  */
+       if (!cl->length
+ 	  && !gfc_notify_std (GFC_STD_F2008, "Assumed-length character "
+ 			      "dummy variable %qs at %L with VALUE attribute",
+ 			      sym->name, &sym->declared_at))
+ 	return;
+ 
+       /* Likewise for a specified but non-constant length.  */
+       if (cl->length && cl->length->expr_type != EXPR_CONSTANT
+ 	  && !gfc_notify_std (GFC_STD_F2008, "Character dummy variable "
+ 			      "%qs at %L with VALUE attribute and "
+ 			      "non-constant length",
+ 			      sym->name, &sym->declared_at))
+ 	return;
      }
  
    if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
diff -Nrcpad gcc-17-20260823/gcc/fortran/symbol.cc gcc-17-20260830/gcc/fortran/symbol.cc
*** gcc-17-20260823/gcc/fortran/symbol.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/symbol.cc	Sun Aug 30 22:32:07 2026
*************** gfc_check_conflict (symbol_attribute *at
*** 694,700 ****
    conf (value, subroutine)
    conf (value, function)
    conf (value, volatile_)
-   conf (value, dimension)
    conf (value, codimension)
    conf (value, external)
  
--- 694,699 ----
diff -Nrcpad gcc-17-20260823/gcc/fortran/trans-array.cc gcc-17-20260830/gcc/fortran/trans-array.cc
*** gcc-17-20260823/gcc/fortran/trans-array.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/trans-array.cc	Sun Aug 30 22:32:07 2026
*************** gfc_trans_deferred_array (gfc_symbol * s
*** 12505,12538 ****
  
    /* NULLIFY the data pointer for non-saved allocatables, or for non-saved
       pointers when -fcheck=pointer is specified.  */
!   if (GFC_DESCRIPTOR_TYPE_P (type) && !sym->attr.save
!       && (sym->attr.allocatable
! 	  || (sym->attr.pointer && (gfc_option.rtcheck & GFC_RTCHECK_POINTER))))
      {
!       gfc_conv_descriptor_data_set (&init, descriptor, null_pointer_node);
!       if (flag_coarray == GFC_FCOARRAY_LIB && sym->attr.codimension)
  	{
  	  /* Declare the variable static so its array descriptor stays present
  	     after leaving the scope.  It may still be accessed through another
  	     image.  This may happen, for example, with the caf_mpi
  	     implementation.  */
  	  TREE_STATIC (descriptor) = 1;
- 	  gfc_conv_descriptor_token_set (&init, descriptor, null_pointer_node);
  	}
      }
  
-   /* Set initial TKR for pointers and allocatables */
-   if (GFC_DESCRIPTOR_TYPE_P (type)
-       && (sym->attr.pointer || sym->attr.allocatable))
-     {
-       tree etype;
- 
-       gcc_assert (sym->as && sym->as->rank>=0);
-       etype = gfc_get_element_type (type);
-       gfc_conv_descriptor_dtype_set (&init, descriptor,
- 				     gfc_get_dtype_rank_type (sym->as->rank,
- 							      etype));
-     }
    input_location = loc;
    gfc_init_block (&cleanup);
  
--- 12505,12526 ----
  
    /* NULLIFY the data pointer for non-saved allocatables, or for non-saved
       pointers when -fcheck=pointer is specified.  */
!   if (GFC_DESCRIPTOR_TYPE_P (type)
!       && (sym->attr.allocatable || sym->attr.pointer))
      {
!       if (flag_coarray == GFC_FCOARRAY_LIB
! 	  && sym->attr.codimension
! 	  && !sym->attr.save)
  	{
  	  /* Declare the variable static so its array descriptor stays present
  	     after leaving the scope.  It may still be accessed through another
  	     image.  This may happen, for example, with the caf_mpi
  	     implementation.  */
  	  TREE_STATIC (descriptor) = 1;
  	}
+       gfc_init_descriptor_variable (&init, sym, descriptor);
      }
  
    input_location = loc;
    gfc_init_block (&cleanup);
  
diff -Nrcpad gcc-17-20260823/gcc/fortran/trans-decl.cc gcc-17-20260830/gcc/fortran/trans-decl.cc
*** gcc-17-20260823/gcc/fortran/trans-decl.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/trans-decl.cc	Sun Aug 30 22:32:07 2026
*************** gfc_get_symbol_decl (gfc_symbol * sym)
*** 2117,2123 ****
        && !(sym->attr.use_assoc && !intrinsic_array_parameter)
        && (sym->attr.save || sym->ns->proc_name->attr.is_main_program
  	  || !gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl))
! 	  || sym->attr.data || sym->ns->proc_name->attr.flavor == FL_MODULE)
        && (flag_coarray != GFC_FCOARRAY_LIB
  	  || !sym->attr.codimension || sym->attr.allocatable)
        && !(IS_PDT (sym) || IS_CLASS_PDT (sym)))
--- 2117,2124 ----
        && !(sym->attr.use_assoc && !intrinsic_array_parameter)
        && (sym->attr.save || sym->ns->proc_name->attr.is_main_program
  	  || !gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl))
! 	  || sym->attr.data || sym->ns->proc_name->attr.flavor == FL_MODULE
! 	  || intrinsic_array_parameter)
        && (flag_coarray != GFC_FCOARRAY_LIB
  	  || !sym->attr.codimension || sym->attr.allocatable)
        && !(IS_PDT (sym) || IS_CLASS_PDT (sym)))
*************** gfc_trans_deferred_vars (gfc_symbol * pr
*** 5021,5034 ****
    else if (proc_sym == proc_sym->result && IS_CLASS_ARRAY (proc_sym))
      {
        /* Nullify explicit return class arrays on entry.  */
-       tree type;
        tmp = get_proc_result (proc_sym);
        if (tmp && GFC_CLASS_TYPE_P (TREE_TYPE (tmp)))
  	{
  	  gfc_start_block (&init);
  	  tmp = gfc_class_data_get (tmp);
! 	  type = TREE_TYPE (gfc_conv_descriptor_data_get (tmp));
! 	  gfc_conv_descriptor_data_set (&init, tmp, build_int_cst (type, 0));
  	  gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
  	}
      }
--- 5022,5033 ----
    else if (proc_sym == proc_sym->result && IS_CLASS_ARRAY (proc_sym))
      {
        /* Nullify explicit return class arrays on entry.  */
        tmp = get_proc_result (proc_sym);
        if (tmp && GFC_CLASS_TYPE_P (TREE_TYPE (tmp)))
  	{
  	  gfc_start_block (&init);
  	  tmp = gfc_class_data_get (tmp);
! 	  gfc_init_result_descriptor (&init, tmp);
  	  gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
  	}
      }
diff -Nrcpad gcc-17-20260823/gcc/fortran/trans-descriptor.cc gcc-17-20260830/gcc/fortran/trans-descriptor.cc
*** gcc-17-20260823/gcc/fortran/trans-descriptor.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/trans-descriptor.cc	Sun Aug 30 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 61,66 ****
--- 61,72 ----
  #define LBOUND_SUBFIELD 1
  #define UBOUND_SUBFIELD 2
  
+ #define GFC_DTYPE_ELEM_LEN 0
+ #define GFC_DTYPE_VERSION 1
+ #define GFC_DTYPE_RANK 2
+ #define GFC_DTYPE_TYPE 3
+ #define GFC_DTYPE_ATTRIBUTE 4
+ 
  
  /* Get FIELD_IDX'th field in struct TYPE.  */
  
*************** gfc_conv_descriptor_ubound_set (stmtbloc
*** 593,599 ****
  
  void
  gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
! 				     tree *dtype_off, tree *span_off,
  				     tree *dim_off, tree *dim_size,
  				     tree *stride_suboff, tree *lower_suboff,
  				     tree *upper_suboff)
--- 599,605 ----
  
  void
  gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
! 				     tree *rank_off, tree *span_off,
  				     tree *dim_off, tree *dim_size,
  				     tree *stride_suboff, tree *lower_suboff,
  				     tree *upper_suboff)
*************** gfc_get_descriptor_offsets_for_info (con
*** 602,614 ****
    tree type;
  
    type = TYPE_MAIN_VARIANT (desc_type);
!   field = gfc_advance_chain (TYPE_FIELDS (type), DATA_FIELD);
    *data_off = byte_position (field);
!   field = gfc_advance_chain (TYPE_FIELDS (type), DTYPE_FIELD);
!   *dtype_off = byte_position (field);
!   field = gfc_advance_chain (TYPE_FIELDS (type), SPAN_FIELD);
    *span_off = byte_position (field);
!   field = gfc_advance_chain (TYPE_FIELDS (type), DIMENSION_FIELD);
    *dim_off = byte_position (field);
    type = TREE_TYPE (TREE_TYPE (field));
    *dim_size = TYPE_SIZE_UNIT (type);
--- 608,626 ----
    tree type;
  
    type = TYPE_MAIN_VARIANT (desc_type);
!   tree fields = TYPE_FIELDS (type);
!   field = gfc_advance_chain (fields, DATA_FIELD);
    *data_off = byte_position (field);
!   field = gfc_advance_chain (fields, DTYPE_FIELD);
!   tree dtype_off = byte_position (field);
!   type = TREE_TYPE (field);
!   field = gfc_advance_chain (TYPE_FIELDS (type), GFC_DTYPE_RANK);
!   tree rank_suboff = byte_position (field);
!   *rank_off = fold_build2 (PLUS_EXPR, TREE_TYPE (dtype_off), dtype_off,
! 			   rank_suboff);
!   field = gfc_advance_chain (fields, SPAN_FIELD);
    *span_off = byte_position (field);
!   field = gfc_advance_chain (fields, DIMENSION_FIELD);
    *dim_off = byte_position (field);
    type = TREE_TYPE (TREE_TYPE (field));
    *dim_size = TYPE_SIZE_UNIT (type);
*************** gfc_get_descriptor_offsets_for_info (con
*** 624,629 ****
--- 636,679 ----
  /* Array descriptor higher level routines.
   ******************************************************************************/
  
+ /* Return a constructor for a descriptor dtype with the caracteristics given by
+    the arguments.  */
+ 
+ tree
+ gfc_build_dtype_constructor (tree size, int type, int rank)
+ {
+   tree field;
+   vec<constructor_elt, va_gc> *v = NULL;
+ 
+   gcc_assert (size);
+ 
+   STRIP_NOPS (size);
+   size = fold_convert (size_type_node, size);
+   tree dtype_type_node = get_dtype_type_node ();
+   field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node),
+ 			     GFC_DTYPE_ELEM_LEN);
+   CONSTRUCTOR_APPEND_ELT (v, field,
+ 			  fold_convert (TREE_TYPE (field), size));
+   field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node),
+ 			     GFC_DTYPE_VERSION);
+   CONSTRUCTOR_APPEND_ELT (v, field,
+ 			  build_zero_cst (TREE_TYPE (field)));
+ 
+   field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node),
+ 			     GFC_DTYPE_RANK);
+   if (rank >= 0)
+     CONSTRUCTOR_APPEND_ELT (v, field,
+ 			    build_int_cst (TREE_TYPE (field), rank));
+ 
+   field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node),
+ 			     GFC_DTYPE_TYPE);
+   CONSTRUCTOR_APPEND_ELT (v, field,
+ 			  build_int_cst (TREE_TYPE (field), type));
+ 
+   return build_constructor (dtype_type_node, v);
+ }
+ 
+ 
  /* Build a null array descriptor constructor.  */
  
  tree
*************** gfc_build_null_descriptor (tree type)
*** 653,662 ****
--- 703,848 ----
  #undef SPAN_FIELD
  #undef DIMENSION_FIELD
  #undef CAF_TOKEN_FIELD
+ 
  #undef STRIDE_SUBFIELD
  #undef LBOUND_SUBFIELD
  #undef UBOUND_SUBFIELD
  
+ #undef GFC_DTYPE_ELEM_LEN
+ #undef GFC_DTYPE_VERSION
+ #undef GFC_DTYPE_RANK
+ #undef GFC_DTYPE_TYPE
+ #undef GFC_DTYPE_ATTRIBUTE
+ 
+ 
+ /* Add code to BLOCK implementing the pointer assigment from NULL() to the
+    pointer represented by the array descriptor DESCR.  */
+ 
+ void
+ gfc_nullify_descriptor (stmtblock_t *block, tree descr)
+ {
+   gfc_conv_descriptor_data_set (block, descr, null_pointer_node);
+ }
+ 
+ 
+ /* Add code to BLOCK default-initializing array function result descriptor
+    DESCR.  This is used for the initialization of polymorphic allocatable
+    function results.  */
+ 
+ void
+ gfc_init_result_descriptor (stmtblock_t *block, tree descr)
+ {
+   gfc_conv_descriptor_data_set (block, descr, null_pointer_node);
+ }
+ 
+ 
+ /* Add code to BLOCK initializing array descriptor DESCR so that it represents
+    an absent actual argument associated with an optional dummy.  */
+ 
+ void
+ gfc_init_absent_descriptor (stmtblock_t *block, tree descr)
+ {
+   gfc_conv_descriptor_data_set (block, descr, null_pointer_node);
+ }
+ 
+ 
+ /* Add code to BLOCK initializing the array descriptor DESCR corresponding to
+    the array variable SYM.  This is only used for variables needing a default
+    initialization of their descriptor.  Typically allocatable (array) variables,
+    that have an initial status of unallocated, are among them; they need their
+    data pointer set to nullptr.  */
+ 
+ void
+ gfc_init_descriptor_variable (stmtblock_t *block, gfc_symbol *sym, tree descr)
+ {
+   /* NULLIFY the data pointer for non-saved allocatables, or for non-saved
+      pointers when -fcheck=pointer is specified.  */
+   if (!sym->attr.save
+       && (sym->attr.allocatable
+ 	  || (sym->attr.pointer && (gfc_option.rtcheck & GFC_RTCHECK_POINTER))))
+     {
+       gfc_conv_descriptor_data_set (block, descr, null_pointer_node);
+       if (flag_coarray == GFC_FCOARRAY_LIB && sym->attr.codimension)
+ 	gfc_conv_descriptor_token_set (block, descr, null_pointer_node);
+     }
+ 
+   gcc_assert (sym->as && sym->as->rank>=0);
+   tree etype = gfc_get_element_type (TREE_TYPE (descr));
+   gfc_conv_descriptor_dtype_set (block, descr,
+ 				 gfc_get_dtype_rank_type (sym->as->rank,
+ 							  etype));
+ }
+ 
+ 
+ /* Create a fresh array descriptor copied from SOURCE_DESCR, with a cleared data
+    pointer and a possibly different dtype value.  Set the dtype field to DTYPE
+    if different from NULL_TREE; otherwise set it with a default value built
+    using SOURCE_DESCR's type.  Add the copying code and any other initialization
+    to BLOCK and return the descriptor declaration.
+ 
+    The descriptor created by this function is used to pass to intrinsic
+    functions from the library, when the result is assigned to a reallocatable
+    variable.  The left hand side variable descriptor is not passed directly to
+    the library, and the unallocated descriptor this function creates is passed
+    instead.  Allocation happens in the library; deallocation of the left hand
+    side variable data, if any, and correct bounds mapping happen outside the
+    library, after the function returns.  */
+ 
+ tree
+ gfc_create_unallocated_library_result_descriptor (stmtblock_t *block,
+ 						  tree source_descr, tree dtype)
+ {
+   /* Unallocated, the descriptor does not have a dtype.  */
+   if (dtype == NULL_TREE)
+     dtype = gfc_get_dtype (TREE_TYPE (source_descr));
+ 
+   gfc_conv_descriptor_dtype_set (block, source_descr, dtype);
+ 
+   tree res_desc = gfc_evaluate_now (source_descr, block);
+   gfc_conv_descriptor_data_set (block, res_desc, null_pointer_node);
+ 
+   return res_desc;
+ }
+ 
+ 
+ /* Create a new descriptor to represent a null actual argument of type TS and
+    rank RANK passed to a dummy argument having attributes ATTR.  Add
+    initialization code to BLOCK and return the descriptor declaration.  */
+ 
+ tree
+ gfc_create_null_actual_descriptor (stmtblock_t *block, gfc_typespec *ts,
+ 				   symbol_attribute attr, int rank)
+ {
+   tree etype = gfc_typenode_for_spec (ts);
+ 
+   enum gfc_array_kind akind;
+ 
+   if (attr.pointer)
+     akind = GFC_ARRAY_POINTER_CONT;
+   else if (attr.allocatable)
+     akind = GFC_ARRAY_ALLOCATABLE;
+   else
+     akind = GFC_ARRAY_ASSUMED_SHAPE_CONT;
+ 
+   tree lower[GFC_MAX_DIMENSIONS];
+   tree upper[GFC_MAX_DIMENSIONS];
+   memset (&lower, 0, rank * sizeof (lower[0]));
+   memset (&upper, 0, rank * sizeof (upper[0]));
+ 
+   tree type = gfc_get_array_type_bounds (etype, rank, 0, lower, upper, 1,
+ 					 akind, !(attr.pointer || attr.target));
+   tree desc = gfc_create_var (type, "desc");
+   DECL_ARTIFICIAL (desc) = 1;
+ 
+   gfc_conv_descriptor_dtype_set (block, desc,
+ 				 gfc_get_dtype_rank_type (rank, etype));
+   gfc_conv_descriptor_data_set (block, desc, null_pointer_node);
+   gfc_conv_descriptor_span_set (block, desc,
+ 				gfc_conv_descriptor_elem_len_get (desc));
+ 
+   return desc;
+ }
+ 
  
  /* For an array descriptor, get the total number of elements.  This is just
     the product of the extents along from_dim to to_dim.  */
diff -Nrcpad gcc-17-20260823/gcc/fortran/trans-descriptor.h gcc-17-20260830/gcc/fortran/trans-descriptor.h
*** gcc-17-20260823/gcc/fortran/trans-descriptor.h	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/trans-descriptor.h	Sun Aug 30 22:32:07 2026
*************** void gfc_conv_descriptor_lbound_set (stm
*** 53,58 ****
--- 53,60 ----
  void gfc_conv_descriptor_ubound_set (stmtblock_t *, tree, tree, tree);
  void gfc_conv_descriptor_token_set (stmtblock_t *block, tree desc, tree value);
  
+ tree gfc_build_dtype_constructor (tree, int, int);
+ 
  /* Build expressions for accessing components of an array descriptor.  */
  void gfc_get_descriptor_offsets_for_info (const_tree, tree *, tree *, tree *,
  					  tree *, tree *, tree *, tree *,
*************** void gfc_get_descriptor_offsets_for_info
*** 61,66 ****
--- 63,78 ----
  /* Build a null array descriptor constructor.  */
  tree gfc_build_null_descriptor (tree type);
  
+ void gfc_nullify_descriptor (stmtblock_t *block, tree);
+ void gfc_init_result_descriptor (stmtblock_t *block, tree descr);
+ void gfc_init_absent_descriptor (stmtblock_t *block, tree descr);
+ void gfc_init_descriptor_variable (stmtblock_t *block, gfc_symbol *sym,
+ 				   tree descr);
+ tree gfc_create_unallocated_library_result_descriptor (stmtblock_t *, tree,
+ 						       tree);
+ tree gfc_create_null_actual_descriptor (stmtblock_t *, gfc_typespec *,
+ 					symbol_attribute, int);
+ 
  tree gfc_conv_descriptor_size (tree, int);
  tree gfc_conv_descriptor_cosize (tree, int, int);
  
diff -Nrcpad gcc-17-20260823/gcc/fortran/trans-expr.cc gcc-17-20260830/gcc/fortran/trans-expr.cc
*** gcc-17-20260823/gcc/fortran/trans-expr.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/trans-expr.cc	Sun Aug 30 22:32:07 2026
*************** gfc_conv_derived_to_class (gfc_se *parms
*** 1071,1080 ****
  	      tmp = gfc_finish_block (&block);
  
  	      gfc_init_block (&block);
! 	      gfc_conv_descriptor_data_set (&block, ctree, null_pointer_node);
  	      if (derived_array && *derived_array != NULL_TREE)
! 		gfc_conv_descriptor_data_set (&block, *derived_array,
! 					      null_pointer_node);
  
  	      tmp = build3_v (COND_EXPR, cond_optional, tmp,
  			      gfc_finish_block (&block));
--- 1071,1079 ----
  	      tmp = gfc_finish_block (&block);
  
  	      gfc_init_block (&block);
! 	      gfc_init_absent_descriptor (&block, ctree);
  	      if (derived_array && *derived_array != NULL_TREE)
! 		gfc_init_absent_descriptor (&block, *derived_array);
  
  	      tmp = build3_v (COND_EXPR, cond_optional, tmp,
  			      gfc_finish_block (&block));
*************** void
*** 5558,5564 ****
  gfc_conv_subref_array_arg (gfc_se *se, gfc_expr * expr, int g77,
  			   sym_intent intent, bool formal_ptr,
  			   const gfc_symbol *fsym, const char *proc_name,
! 			   gfc_symbol *sym, bool check_contiguous)
  {
    gfc_se lse;
    gfc_se rse;
--- 5557,5564 ----
  gfc_conv_subref_array_arg (gfc_se *se, gfc_expr * expr, int g77,
  			   sym_intent intent, bool formal_ptr,
  			   const gfc_symbol *fsym, const char *proc_name,
! 			   gfc_symbol *sym, bool check_contiguous,
! 			   bool deep_copy)
  {
    gfc_se lse;
    gfc_se rse;
*************** gfc_conv_subref_array_arg (gfc_se *se, g
*** 5670,5676 ****
  
    if (intent != INTENT_OUT)
      {
!       tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, false);
        gfc_add_expr_to_block (&body, tmp);
        gcc_assert (rse.ss == gfc_ss_terminator);
        gfc_trans_scalarizing_loops (&loop, &body);
--- 5670,5676 ----
  
    if (intent != INTENT_OUT)
      {
!       tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, deep_copy, false);
        gfc_add_expr_to_block (&body, tmp);
        gcc_assert (rse.ss == gfc_ss_terminator);
        gfc_trans_scalarizing_loops (&loop, &body);
*************** gfc_conv_subref_array_arg (gfc_se *se, g
*** 5802,5807 ****
--- 5802,5820 ----
  
  class_array_fcn:
  
+   /* A deep copy allocated fresh components for the temporary; free them
+      again once the call has returned, before the temporary itself goes.
+      Only INTENT_IN is supported, as writing the temporary back would leave
+      the actual argument holding the freed component pointers.  */
+   gcc_assert (!deep_copy || intent == INTENT_IN);
+   if (deep_copy && expr->ts.type == BT_DERIVED
+       && expr->ts.u.derived->attr.alloc_comp)
+     {
+       tmp = gfc_deallocate_alloc_comp (expr->ts.u.derived, parmse->expr,
+ 				       dimen);
+       gfc_add_expr_to_block (&parmse->post, tmp);
+     }
+ 
    gfc_add_block_to_block (&parmse->post, &loop.post);
  
    gfc_cleanup_loop (&loop);
*************** class_array_fcn:
*** 5967,5974 ****
  	}
        else
  	{
! 	  /* pointer = pramse->expr;  .  */
! 	  gfc_add_modify (&parmse->pre, pointer, parmse->expr);
  	  pre_stmts = gfc_finish_block (&parmse->pre);
  	}
  
--- 5980,5990 ----
  	}
        else
  	{
! 	  /* pointer = parmse->expr;  .  */
! 	  tmp = (GFC_DESCRIPTOR_TYPE_P (type)
! 		 ? build_fold_indirect_ref_loc (input_location, parmse->expr)
! 		 : parmse->expr);
! 	  gfc_add_modify (&parmse->pre, pointer, tmp);
  	  pre_stmts = gfc_finish_block (&parmse->pre);
  	}
  
*************** class_array_fcn:
*** 6050,6055 ****
--- 6066,6072 ----
  	    gcc_assert (!pass_optional);
  	}
        se->expr = pointer;
+       se->string_length = parmse->string_length;
      }
  
    return;
*************** gfc_const_length_character_type_p (gfc_t
*** 6699,6704 ****
--- 6716,6891 ----
  }
  
  
+ /* Returns true if FORMAL contains an explicit-shape array dummy with the
+    VALUE attribute.  The bounds of such a dummy may have to be evaluated
+    on the caller side, which needs an interface mapping.  */
+ 
+ static bool
+ has_value_array_dummy (gfc_formal_arglist *formal)
+ {
+   for (; formal; formal = formal->next)
+     if (formal->sym && formal->sym->attr.value && formal->sym->attr.dimension
+ 	&& formal->sym->as && formal->sym->as->type == AS_EXPLICIT)
+       return true;
+ 
+   return false;
+ }
+ 
+ 
+ /* Sequence association (F2023, 15.5.2.12) of a scalar actual argument E with
+    an explicit-shape array dummy FSYM that has the VALUE attribute.  Copy as
+    many elements as the dummy declares into a temporary and pass that.
+    MAPPING supplies the caller-side values of any dummy arguments appearing
+    in the bounds or the character length of FSYM.  */
+ 
+ static void
+ conv_seq_assoc_value_arg (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym,
+ 			  gfc_interface_mapping *mapping)
+ {
+   tree nelems, elem_type, elem_size, tmpvar, src, tmp;
+   gfc_se se;
+   int n;
+ 
+   gcc_assert (fsym->as && fsym->as->type == AS_EXPLICIT);
+ 
+   /* Address of the first element of the actual argument's sequence.  */
+   gfc_init_se (&se, NULL);
+   if (e->ts.type == BT_CHARACTER)
+     {
+       gfc_conv_expr (&se, e);
+       gfc_conv_string_parameter (&se);
+       /* The hidden length argument is that of the actual argument, as it
+ 	 is for a dummy that does not have the VALUE attribute.  */
+       parmse->string_length = se.string_length;
+     }
+   else
+     gfc_conv_expr_reference (&se, e);
+   gfc_add_block_to_block (&parmse->pre, &se.pre);
+   gfc_add_block_to_block (&parmse->post, &se.post);
+   src = se.expr;
+ 
+   /* Number of elements of the dummy.  */
+   nelems = gfc_index_one_node;
+   for (n = 0; n < fsym->as->rank; n++)
+     {
+       tree lbound, ubound, extent;
+ 
+       gfc_init_se (&se, NULL);
+       gfc_apply_interface_mapping (mapping, &se, fsym->as->upper[n]);
+       gfc_add_block_to_block (&parmse->pre, &se.pre);
+       gfc_add_block_to_block (&parmse->post, &se.post);
+       ubound = fold_convert (gfc_array_index_type, se.expr);
+ 
+       if (fsym->as->lower[n])
+ 	{
+ 	  gfc_init_se (&se, NULL);
+ 	  gfc_apply_interface_mapping (mapping, &se, fsym->as->lower[n]);
+ 	  gfc_add_block_to_block (&parmse->pre, &se.pre);
+ 	  gfc_add_block_to_block (&parmse->post, &se.post);
+ 	  lbound = fold_convert (gfc_array_index_type, se.expr);
+ 	}
+       else
+ 	lbound = gfc_index_one_node;
+ 
+       extent = fold_build2_loc (input_location, MINUS_EXPR,
+ 				gfc_array_index_type, ubound, lbound);
+       extent = fold_build2_loc (input_location, PLUS_EXPR,
+ 				gfc_array_index_type, extent,
+ 				gfc_index_one_node);
+       extent = fold_build2_loc (input_location, MAX_EXPR, gfc_array_index_type,
+ 				extent, gfc_index_zero_node);
+       nelems = fold_build2_loc (input_location, MULT_EXPR,
+ 				gfc_array_index_type, nelems, extent);
+     }
+   nelems = gfc_evaluate_now (nelems, &parmse->pre);
+ 
+   /* Element type and size of the dummy.  For characters the element
+      sequence is grouped by the character length of the dummy.  */
+   if (fsym->ts.type == BT_CHARACTER)
+     {
+       tree len;
+ 
+       if (fsym->ts.u.cl->length)
+ 	{
+ 	  gfc_init_se (&se, NULL);
+ 	  gfc_apply_interface_mapping (mapping, &se, fsym->ts.u.cl->length);
+ 	  gfc_add_block_to_block (&parmse->pre, &se.pre);
+ 	  gfc_add_block_to_block (&parmse->post, &se.post);
+ 	  len = fold_convert (gfc_charlen_type_node, se.expr);
+ 	}
+       else
+ 	len = fold_convert (gfc_charlen_type_node, parmse->string_length);
+ 
+       tree char_size = TYPE_SIZE_UNIT (gfc_get_char_type (fsym->ts.kind));
+ 
+       elem_type = gfc_get_character_type_len (fsym->ts.kind, len);
+       elem_size = fold_build2_loc (input_location, MULT_EXPR, size_type_node,
+ 				   fold_convert (size_type_node, len),
+ 				   fold_convert (size_type_node, char_size));
+     }
+   else
+     {
+       elem_type = gfc_typenode_for_spec (&fsym->ts);
+       elem_size = fold_convert (size_type_node, TYPE_SIZE_UNIT (elem_type));
+     }
+ 
+   /* The temporary holding the copy.  Allocate at least one element so that
+      a zero-sized dummy does not produce a degenerate array type.  */
+   tmp = fold_build2_loc (input_location, MAX_EXPR, gfc_array_index_type,
+ 			 nelems, gfc_index_one_node);
+   tmp = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+ 			 tmp, gfc_index_one_node);
+   tmp = build_array_type (elem_type,
+ 			  build_range_type (gfc_array_index_type,
+ 					    gfc_index_zero_node, tmp));
+   tmpvar = gfc_create_var (tmp, "seq_copy");
+   gfc_add_expr_to_block (&parmse->pre,
+ 			 fold_build1_loc (input_location, DECL_EXPR, tmp,
+ 					  tmpvar));
+ 
+   tmp = fold_build2_loc (input_location, MULT_EXPR, size_type_node,
+ 			 fold_convert (size_type_node, nelems), elem_size);
+   tmp = gfc_build_memcpy_call (fold_convert (pvoid_type_node,
+ 					     gfc_build_addr_expr (NULL_TREE,
+ 								  tmpvar)),
+ 			       fold_convert (pvoid_type_node, src), tmp);
+   gfc_add_expr_to_block (&parmse->pre, tmp);
+ 
+   /* The memcpy also copied the component pointers of a derived type, which
+      would leave the temporary sharing the actual argument's allocatable
+      components.  Give the copy components of its own and free them again
+      once the call has returned.  */
+   if (fsym->ts.type == BT_DERIVED && fsym->ts.u.derived->attr.alloc_comp)
+     {
+       tree src_ptr = fold_convert (build_pointer_type (elem_type), src);
+       tree elem_idx = gfc_create_var (gfc_array_index_type, "elem");
+       tree dest_elem = gfc_build_array_ref (tmpvar, elem_idx, NULL_TREE);
+       tree src_offset = fold_build2_loc (input_location, MULT_EXPR, sizetype,
+ 					 fold_convert (sizetype, elem_idx),
+ 					 elem_size);
+       tree src_elem
+ 	= build_fold_indirect_ref_loc (input_location,
+ 				       fold_build_pointer_plus_loc
+ 				       (input_location, src_ptr, src_offset));
+ 
+       tmp = gfc_copy_alloc_comp (fsym->ts.u.derived, src_elem, dest_elem, 0, 0);
+       gfc_simple_for_loop (&parmse->pre, elem_idx, gfc_index_zero_node, nelems,
+ 			   LT_EXPR, gfc_index_one_node, tmp);
+ 
+       tmp = gfc_deallocate_alloc_comp (fsym->ts.u.derived, dest_elem, 0);
+       gfc_simple_for_loop (&parmse->post, elem_idx, gfc_index_zero_node, nelems,
+ 			   LT_EXPR, gfc_index_one_node, tmp);
+     }
+ 
+   if (fsym->ts.type == BT_CHARACTER)
+     parmse->expr
+       = gfc_build_addr_expr (build_pointer_type (gfc_get_char_type
+ 						 (fsym->ts.kind)), tmpvar);
+   else
+     parmse->expr = gfc_build_addr_expr (build_pointer_type (elem_type), tmpvar);
+ }
+ 
+ 
  /* Helper function for the handling of (currently) scalar dummy variables
     with the VALUE attribute.  Argument parmse should already be set up.  */
  static void
*************** conv_dummy_value (gfc_se * parmse, gfc_e
*** 6754,6759 ****
--- 6941,6999 ----
        return;
      }
  
+   /* Assumed-length or non-constant-length CHARACTER VALUE dummy: copy
+      the actual argument and pass the copy.  */
+   if (fsym->ts.type == BT_CHARACTER
+       && (!fsym->ts.u.cl || !fsym->ts.u.cl->length
+ 	  || fsym->ts.u.cl->length->expr_type != EXPR_CONSTANT))
+     {
+       /* An optional actual argument that is absent has nothing to copy
+ 	 from; pass a null pointer and a length of zero instead.  */
+       tree present = NULL_TREE;
+       if (fsym->attr.optional && e->expr_type == EXPR_VARIABLE
+ 	  && e->symtree->n.sym->attr.optional)
+ 	present = gfc_conv_expr_present (e->symtree->n.sym);
+ 
+       gfc_conv_string_parameter (parmse);
+       tree len = fold_convert (gfc_charlen_type_node, parmse->string_length);
+       if (present)
+ 	{
+ 	  len = fold_build3_loc (input_location, COND_EXPR,
+ 				 gfc_charlen_type_node, present, len,
+ 				 build_zero_cst (gfc_charlen_type_node));
+ 	  len = gfc_evaluate_now (len, &parmse->pre);
+ 	  parmse->string_length = len;
+ 	}
+       tree chartype = gfc_get_character_type_len (fsym->ts.kind, len);
+       tree val_copy = gfc_create_var (chartype, "val_copy");
+       tmp = fold_build1_loc (input_location, DECL_EXPR, chartype, val_copy);
+       gfc_add_expr_to_block (&parmse->pre, tmp);
+       /* The copy size is in bytes, not in characters.  */
+       tree bytes
+ 	= fold_build2_loc (input_location, MULT_EXPR, size_type_node,
+ 			   fold_convert (size_type_node, len),
+ 			   fold_convert (size_type_node,
+ 					 TYPE_SIZE_UNIT (gfc_get_char_type
+ 							 (fsym->ts.kind))));
+       tmp = gfc_build_memcpy_call (
+ 	fold_convert (pvoid_type_node,
+ 		      gfc_build_addr_expr (NULL_TREE, val_copy)),
+ 	fold_convert (pvoid_type_node, parmse->expr), bytes);
+       if (present)
+ 	tmp = build3_v (COND_EXPR, present, tmp,
+ 			build_empty_stmt (input_location));
+       gfc_add_expr_to_block (&parmse->pre, tmp);
+       parmse->expr = fold_convert (
+ 	build_pointer_type (gfc_get_char_type (fsym->ts.kind)),
+ 	gfc_build_addr_expr (NULL_TREE, val_copy));
+       if (present)
+ 	parmse->expr = fold_build3_loc (input_location, COND_EXPR,
+ 					TREE_TYPE (parmse->expr), present,
+ 					parmse->expr,
+ 					fold_convert (TREE_TYPE (parmse->expr),
+ 						      null_pointer_node));
+     }
+ 
    /* Truncate a too long constant character actual argument.  */
    if (gfc_const_length_character_type_p (&fsym->ts)
        && e->expr_type == EXPR_CONSTANT
*************** conv_null_actual (gfc_se * parmse, gfc_e
*** 6874,6882 ****
  	     correct rank.  */
  	  if (fsym->as && fsym->as->type == AS_ASSUMED_RANK)
  	    {
! 	      tree tmp = parmse->expr;
! 	      tmp = gfc_conv_scalar_to_descriptor (parmse, tmp, fsym->attr);
! 	      gfc_conv_descriptor_rank_set (&parmse->pre, tmp, e->rank);
  	      parmse->expr = gfc_build_addr_expr (NULL_TREE, tmp);
  	    }
  	  else
--- 7114,7122 ----
  	     correct rank.  */
  	  if (fsym->as && fsym->as->type == AS_ASSUMED_RANK)
  	    {
! 	      tree tmp;
! 	      tmp = gfc_create_null_actual_descriptor (&parmse->pre, &e->ts,
! 						       fsym->attr, e->rank);
  	      parmse->expr = gfc_build_addr_expr (NULL_TREE, tmp);
  	    }
  	  else
*************** conv_null_actual (gfc_se * parmse, gfc_e
*** 6926,6953 ****
  	   For an assumed-rank dummy we provide a descriptor that passes
  	   the correct rank.  */
  	{
! 	  tree tmp = parmse->expr;
! 
! 	  tmp = gfc_conv_scalar_to_descriptor (parmse, tmp, gfc_expr_attr (e));
! 	  gfc_conv_descriptor_rank_set (&parmse->pre, tmp, e->rank);
! 	  gfc_conv_descriptor_data_set (&parmse->pre, tmp, null_pointer_node);
  	  parmse->expr = gfc_build_addr_expr (NULL_TREE, tmp);
  	}
        else
  	/* MOLD is not present.  Use attributes from dummy argument, which is
  	   not allowed to be assumed-rank.  */
  	{
! 	  int dummy_rank;
! 	  tree tmp = parmse->expr;
! 
! 	  if ((fsym->attr.allocatable || fsym->attr.pointer)
! 	      && fsym->attr.intent == INTENT_UNKNOWN)
! 	    fsym->attr.intent = INTENT_IN;
! 	  tmp = gfc_conv_scalar_to_descriptor (parmse, tmp, fsym->attr);
! 	  dummy_rank = fsym->as ? fsym->as->rank : 0;
! 	  if (dummy_rank > 0)
! 	    gfc_conv_descriptor_rank_set (&parmse->pre, tmp, dummy_rank);
! 	  gfc_conv_descriptor_data_set (&parmse->pre, tmp, null_pointer_node);
  	  parmse->expr = gfc_build_addr_expr (NULL_TREE, tmp);
  	}
      }
--- 7166,7182 ----
  	   For an assumed-rank dummy we provide a descriptor that passes
  	   the correct rank.  */
  	{
! 	  tree tmp = gfc_create_null_actual_descriptor (&parmse->pre, &e->ts,
! 							fsym->attr, e->rank);
  	  parmse->expr = gfc_build_addr_expr (NULL_TREE, tmp);
  	}
        else
  	/* MOLD is not present.  Use attributes from dummy argument, which is
  	   not allowed to be assumed-rank.  */
  	{
! 	  int dummy_rank = fsym->as ? fsym->as->rank : 0;
! 	  tree tmp = gfc_create_null_actual_descriptor (&parmse->pre, &fsym->ts,
! 							fsym->attr, dummy_rank);
  	  parmse->expr = gfc_build_addr_expr (NULL_TREE, tmp);
  	}
      }
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7091,7097 ****
  			       (sym->ts.type == BT_CHARACTER
  				&& sym->ts.u.cl->length
  				&& sym->ts.u.cl->length->expr_type
! 				   != EXPR_CONSTANT);
      }
    else
      {
--- 7320,7327 ----
  			       (sym->ts.type == BT_CHARACTER
  				&& sym->ts.u.cl->length
  				&& sym->ts.u.cl->length->expr_type
! 				   != EXPR_CONSTANT)
! 			       || has_value_array_dummy (formal);
      }
    else
      {
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7100,7106 ****
  			       (comp->ts.type == BT_CHARACTER
  				&& comp->ts.u.cl->length
  				&& comp->ts.u.cl->length->expr_type
! 				   != EXPR_CONSTANT);
      }
  
    base_object = NULL_TREE;
--- 7330,7337 ----
  			       (comp->ts.type == BT_CHARACTER
  				&& comp->ts.u.cl->length
  				&& comp->ts.u.cl->length->expr_type
! 				   != EXPR_CONSTANT)
! 			       || has_value_array_dummy (formal);
      }
  
    base_object = NULL_TREE;
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7426,7431 ****
--- 7657,7667 ----
  		/* Implement F2018, 18.3.6, list item (5), bullet point 2.  */
  		gfc_conv_gfc_desc_to_cfi_desc (&parmse, e, fsym);
  
+ 	      else if (fsym && fsym->attr.value && fsym->attr.dimension)
+ 		/* Scalar actual argument sequence associated with a VALUE
+ 		   array dummy.  */
+ 		conv_seq_assoc_value_arg (&parmse, e, fsym, &mapping);
+ 
  	      else if (fsym && fsym->attr.value)
  		{
  		  if (fsym->ts.type == BT_CHARACTER
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 8025,8030 ****
--- 8261,8280 ----
  		/* Implement F2018, 18.3.6, list item (5), bullet point 2.  */
  		gfc_conv_gfc_desc_to_cfi_desc (&parmse, e, fsym);
  
+ 	      else if (fsym && fsym->attr.value && fsym->attr.dimension
+ 		       && e->rank != -1)
+ 		/* VALUE array dummy: pass a private copy of the actual
+ 		   argument.  Allocatable components are copied deeply, so
+ 		   that the callee cannot reach the actual argument's data.
+ 		   The symbol passed is that of the actual argument, so that
+ 		   the copy is suppressed and a null pointer passed when an
+ 		   optional actual argument is absent.  */
+ 		gfc_conv_subref_array_arg (&parmse, e, nodesc_arg, INTENT_IN,
+ 					   false, fsym, sym->name,
+ 					   e->expr_type == EXPR_VARIABLE
+ 					   ? e->symtree->n.sym : NULL,
+ 					   false, true);
+ 
  	      else if (e->expr_type == EXPR_VARIABLE
  		    && is_subref_array (e)
  		    && !(fsym && fsym->attr.pointer)
*************** gfc_trans_subarray_assign (tree dest, gf
*** 9819,9824 ****
--- 10069,10151 ----
  
  
  static stmtblock_t *final_block;
+ 
+ 
+ /* Get the address of element index of contiguous character array data whose elements
+    are len characters of ksize bytes each.  */
+ 
+ static tree
+ gfc_char_elem_addr (tree char_ptr, tree data, tree idx, tree len, tree ksize)
+ {
+   tree offset = fold_build2_loc (input_location, MULT_EXPR,
+ 				 gfc_array_index_type, len, ksize);
+   offset = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+ 			    idx, offset);
+   return fold_build_pointer_plus_loc (input_location,
+ 				      fold_convert (char_ptr, data), offset);
+ }
+ 
+ 
+ /* Copy a deferred-shape allocatable character array component in a structure
+    constructor when the source element length (SRC_LEN) may differ from the
+    component's declared length.  Like gfc_duplicate_allocatable, a
+    contiguous source layout is assumed.  DEST and SRC are array descriptors;
+    DEST already carries the source's bounds.  */
+ 
+ static tree
+ gfc_trans_alloc_char_subarray_assign (tree dest, gfc_component *cm, tree src,
+ 				      tree src_len, int rank)
+ {
+   stmtblock_t block, body;
+   tree dlen, slen, ksize, nelems, idx, size, tmp, pchar, cond;
+ 
+   gfc_init_block (&block);
+ 
+   pchar = gfc_get_pchar_type (cm->ts.kind);
+   ksize = fold_convert (gfc_array_index_type,
+ 			TYPE_SIZE_UNIT (gfc_get_char_type (cm->ts.kind)));
+   dlen = fold_convert (gfc_array_index_type, cm->ts.u.cl->backend_decl);
+   slen = fold_convert (gfc_array_index_type, src_len);
+   nelems = gfc_full_array_size (&block, src, rank);
+   nelems = gfc_evaluate_now (nelems, &block);
+ 
+   /* Allocate the destination data: nelems elements of the component length.  */
+   size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+ 			  nelems, dlen);
+   size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+ 			  size, ksize);
+   tmp = GFC_TYPE_ARRAY_DATAPTR_TYPE (TREE_TYPE (dest));
+   gfc_conv_descriptor_data_set (&block, dest,
+ 				gfc_call_malloc (&block, tmp, size));
+ 
+   /* Copy element IDX, padding or truncating to the component length.  */
+   idx = gfc_create_var (gfc_array_index_type, "idx");
+   gfc_init_block (&body);
+   gfc_trans_string_copy (&body, cm->ts.u.cl->backend_decl,
+ 			 gfc_char_elem_addr (pchar,
+ 					     gfc_conv_descriptor_data_get (dest),
+ 					     idx, dlen, ksize),
+ 			 cm->ts.kind, src_len,
+ 			 gfc_char_elem_addr (pchar,
+ 					     gfc_conv_descriptor_data_get (src),
+ 					     idx, slen, ksize),
+ 			 cm->ts.kind);
+   gfc_simple_for_loop (&block, idx, gfc_index_zero_node, nelems, LT_EXPR,
+ 		       gfc_index_one_node, gfc_finish_block (&body));
+ 
+   tmp = gfc_finish_block (&block);
+ 
+   /* Null the destination if the source is unallocated.  */
+   gfc_init_block (&body);
+   gfc_conv_descriptor_data_set (&body, dest, null_pointer_node);
+   cond = fold_build2_loc (input_location, NE_EXPR, logical_type_node,
+ 			  fold_convert (pvoid_type_node,
+ 					gfc_conv_descriptor_data_get (src)),
+ 			  null_pointer_node);
+   return build3_v (COND_EXPR, cond, tmp, gfc_finish_block (&body));
+ }
+ 
+ 
  static tree
  gfc_trans_alloc_subarray_assign (tree dest, gfc_component * cm,
  				 gfc_expr * expr)
*************** gfc_trans_alloc_subarray_assign (tree de
*** 9881,9886 ****
--- 10208,10220 ----
      tmp = gfc_duplicate_allocatable (dest, se.expr,
  				     gfc_typenode_for_spec (&cm->ts),
  				     cm->as->rank, NULL_TREE);
+   else if (cm->ts.type == BT_CHARACTER)
+     /* Explicit-length character: the source element length may differ from
+        the component length, so a bitwise duplicate would copy the wrong
+        bytes.  Copy element by element with padding/truncation.  */
+     tmp = gfc_trans_alloc_char_subarray_assign (dest, cm, se.expr,
+ 						se.string_length,
+ 						cm->as->rank);
    else
      tmp = gfc_duplicate_allocatable (dest, se.expr,
  				     TREE_TYPE(cm->backend_decl),
*************** gfc_trans_pointer_assignment (gfc_expr *
*** 11493,11499 ****
        if (expr2->expr_type == EXPR_NULL)
  	{
  	  /* Just set the data pointer to null.  */
! 	  gfc_conv_descriptor_data_set (&lse.pre, lse.expr, null_pointer_node);
  	}
        else if (rank_remap)
  	{
--- 11827,11833 ----
        if (expr2->expr_type == EXPR_NULL)
  	{
  	  /* Just set the data pointer to null.  */
! 	  gfc_nullify_descriptor (&lse.pre, lse.expr);
  	}
        else if (rank_remap)
  	{
*************** fcncall_realloc_result (gfc_se *se, int
*** 12320,12334 ****
    if (POINTER_TYPE_P (TREE_TYPE (desc)))
      desc = build_fold_indirect_ref_loc (input_location, desc);
  
!   /* Unallocated, the descriptor does not have a dtype.  */
!   if (dtype != NULL_TREE)
!     gfc_conv_descriptor_dtype_set (&se->pre, desc, dtype);
!   else
!     gfc_conv_descriptor_dtype_set (&se->pre, desc,
! 				   gfc_get_dtype (TREE_TYPE (desc)));
! 
!   res_desc = gfc_evaluate_now (desc, &se->pre);
!   gfc_conv_descriptor_data_set (&se->pre, res_desc, null_pointer_node);
    se->expr = gfc_build_addr_expr (NULL_TREE, res_desc);
  
    /* Free the lhs after the function call and copy the result data to
--- 12654,12661 ----
    if (POINTER_TYPE_P (TREE_TYPE (desc)))
      desc = build_fold_indirect_ref_loc (input_location, desc);
  
!   res_desc = gfc_create_unallocated_library_result_descriptor (&se->pre, desc,
! 							       dtype);
    se->expr = gfc_build_addr_expr (NULL_TREE, res_desc);
  
    /* Free the lhs after the function call and copy the result data to
diff -Nrcpad gcc-17-20260823/gcc/fortran/trans-types.cc gcc-17-20260830/gcc/fortran/trans-types.cc
*** gcc-17-20260823/gcc/fortran/trans-types.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/trans-types.cc	Sun Aug 30 22:32:07 2026
*************** gfc_get_dtype_rank_type (int rank, tree
*** 1709,1718 ****
    tree ptype;
    tree size;
    int n;
-   tree tmp;
-   tree dtype;
-   tree field;
-   vec<constructor_elt, va_gc> *v = NULL;
  
    ptype = etype;
    while (TREE_CODE (etype) == POINTER_TYPE
--- 1709,1714 ----
*************** gfc_get_dtype_rank_type (int rank, tree
*** 1784,1817 ****
        break;
      }
  
!   gcc_assert (size);
! 
!   STRIP_NOPS (size);
!   size = fold_convert (size_type_node, size);
!   tmp = get_dtype_type_node ();
!   field = gfc_advance_chain (TYPE_FIELDS (tmp),
! 			     GFC_DTYPE_ELEM_LEN);
!   CONSTRUCTOR_APPEND_ELT (v, field,
! 			  fold_convert (TREE_TYPE (field), size));
!   field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node),
! 			     GFC_DTYPE_VERSION);
!   CONSTRUCTOR_APPEND_ELT (v, field,
! 			  build_zero_cst (TREE_TYPE (field)));
! 
!   field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node),
! 			     GFC_DTYPE_RANK);
!   if (rank >= 0)
!     CONSTRUCTOR_APPEND_ELT (v, field,
! 			    build_int_cst (TREE_TYPE (field), rank));
! 
!   field = gfc_advance_chain (TYPE_FIELDS (dtype_type_node),
! 			     GFC_DTYPE_TYPE);
!   CONSTRUCTOR_APPEND_ELT (v, field,
! 			  build_int_cst (TREE_TYPE (field), n));
! 
!   dtype = build_constructor (tmp, v);
! 
!   return dtype;
  }
  
  
--- 1780,1786 ----
        break;
      }
  
!   return gfc_build_dtype_constructor (size, n, rank);
  }
  
  
*************** gfc_sym_type (gfc_symbol * sym, bool is_
*** 2521,2527 ****
    else
      type = gfc_typenode_for_spec (&sym->ts, sym->attr.codimension);
  
!   if (sym->attr.dummy && !sym->attr.function && !sym->attr.value
        && !sym->pass_as_value)
      byref = 1;
    else
--- 2490,2501 ----
    else
      type = gfc_typenode_for_spec (&sym->ts, sym->attr.codimension);
  
!   if (sym->attr.dummy && !sym->attr.function
!       && (!sym->attr.value
! 	  || sym->attr.dimension
! 	  || (sym->ts.type == BT_CHARACTER
! 	      && (!sym->ts.u.cl || !sym->ts.u.cl->length
! 		  || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)))
        && !sym->pass_as_value)
      byref = 1;
    else
*************** gfc_get_array_descr_info (const_tree typ
*** 3740,3748 ****
    int rank, dim;
    bool indirect = false;
    tree etype, ptype, t, base_decl;
!   tree data_off, span_off, dim_off, dtype_off, dim_size, elem_size;
    tree lower_suboff, upper_suboff, stride_suboff;
-   tree dtype, field, rank_off;
  
    if (! GFC_DESCRIPTOR_TYPE_P (type))
      {
--- 3714,3721 ----
    int rank, dim;
    bool indirect = false;
    tree etype, ptype, t, base_decl;
!   tree data_off, span_off, dim_off, rank_off, dim_size, elem_size;
    tree lower_suboff, upper_suboff, stride_suboff;
  
    if (! GFC_DESCRIPTOR_TYPE_P (type))
      {
*************** gfc_get_array_descr_info (const_tree typ
*** 3795,3801 ****
    if (indirect)
      base_decl = build1 (INDIRECT_REF, ptype, base_decl);
  
!   gfc_get_descriptor_offsets_for_info (type, &data_off, &dtype_off, &span_off,
  				       &dim_off, &dim_size, &stride_suboff,
  				       &lower_suboff, &upper_suboff);
  
--- 3768,3774 ----
    if (indirect)
      base_decl = build1 (INDIRECT_REF, ptype, base_decl);
  
!   gfc_get_descriptor_offsets_for_info (type, &data_off, &rank_off, &span_off,
  				       &dim_off, &dim_size, &stride_suboff,
  				       &lower_suboff, &upper_suboff);
  
*************** gfc_get_array_descr_info (const_tree typ
*** 3827,3840 ****
      {
        rank = 1;
        info->ndimensions = 1;
!       t = fold_build_pointer_plus (base_decl, dtype_off);
!       dtype = TYPE_MAIN_VARIANT (get_dtype_type_node ());
!       field = gfc_advance_chain (TYPE_FIELDS (dtype), GFC_DTYPE_RANK);
!       rank_off = byte_position (field);
!       t = fold_build_pointer_plus (t, rank_off);
! 
!       t = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (field)), t);
!       t = build1 (INDIRECT_REF, TREE_TYPE (field), t);
        info->rank = t;
        t = build0 (PLACEHOLDER_EXPR, TREE_TYPE (dim_off));
        t = size_binop (MULT_EXPR, t, dim_size);
--- 3800,3808 ----
      {
        rank = 1;
        info->ndimensions = 1;
!       t = fold_build_pointer_plus (base_decl, rank_off);
!       t = build1 (NOP_EXPR, build_pointer_type (signed_char_type_node), t);
!       t = build1 (INDIRECT_REF, signed_char_type_node, t);
        info->rank = t;
        t = build0 (PLACEHOLDER_EXPR, TREE_TYPE (dim_off));
        t = size_binop (MULT_EXPR, t, dim_size);
diff -Nrcpad gcc-17-20260823/gcc/fortran/trans.h gcc-17-20260830/gcc/fortran/trans.h
*** gcc-17-20260823/gcc/fortran/trans.h	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/fortran/trans.h	Sun Aug 30 22:32:07 2026
*************** void gfc_conv_subref_array_arg (gfc_se *
*** 564,570 ****
  				const gfc_symbol *fsym = NULL,
  				const char *proc_name = NULL,
  				gfc_symbol *sym = NULL,
! 				bool check_contiguous = false);
  
  void gfc_conv_is_contiguous_expr (gfc_se *, gfc_expr *);
  
--- 564,571 ----
  				const gfc_symbol *fsym = NULL,
  				const char *proc_name = NULL,
  				gfc_symbol *sym = NULL,
! 				bool check_contiguous = false,
! 				bool deep_copy = false);
  
  void gfc_conv_is_contiguous_expr (gfc_se *, gfc_expr *);
  
*************** extern GTY(()) tree gfor_fndecl_cfi_deep
*** 1019,1030 ****
  /* gfortran-specific declaration information, the _CONT versions denote
     arrays with CONTIGUOUS attribute.  */
  
- #define GFC_DTYPE_ELEM_LEN 0
- #define GFC_DTYPE_VERSION 1
- #define GFC_DTYPE_RANK 2
- #define GFC_DTYPE_TYPE 3
- #define GFC_DTYPE_ATTRIBUTE 4
- 
  enum gfc_array_kind
  {
    GFC_ARRAY_UNKNOWN,
--- 1020,1025 ----
diff -Nrcpad gcc-17-20260823/gcc/genmatch.cc gcc-17-20260830/gcc/genmatch.cc
*** gcc-17-20260823/gcc/genmatch.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/genmatch.cc	Sun Aug 30 22:32:07 2026
*************** public:
*** 2450,2460 ****
  
    virtual void gen (FILE *, int, bool, int) {}
  
!   void gen_kids (FILE *, int, bool, int);
    void gen_kids_1 (FILE *, int, bool, int,
  		   const vec<dt_operand *> &, const vec<dt_operand *> &,
  		   const vec<dt_operand *> &, const vec<dt_operand *> &,
! 		   const vec<dt_operand *> &, const vec<dt_node *> &);
  
    void analyze (sinfo_map_t &);
  };
--- 2450,2460 ----
  
    virtual void gen (FILE *, int, bool, int) {}
  
!   void gen_kids (FILE *, int, bool, int, bool);
    void gen_kids_1 (FILE *, int, bool, int,
  		   const vec<dt_operand *> &, const vec<dt_operand *> &,
  		   const vec<dt_operand *> &, const vec<dt_operand *> &,
! 		   const vec<dt_operand *> &, const vec<dt_node *> &, bool);
  
    void analyze (sinfo_map_t &);
  };
*************** fns_cmp (const void *p1, const void *p2)
*** 3845,3851 ****
  /* Generate matching code for the children of the decision tree node.  */
  
  void
! dt_node::gen_kids (FILE *f, int indent, bool gimple, int depth)
  {
    auto_vec<dt_operand *> gimple_exprs;
    auto_vec<dt_operand *> generic_exprs;
--- 3845,3851 ----
  /* Generate matching code for the children of the decision tree node.  */
  
  void
! dt_node::gen_kids (FILE *f, int indent, bool gimple, int depth, bool in_gcond)
  {
    auto_vec<dt_operand *> gimple_exprs;
    auto_vec<dt_operand *> generic_exprs;
*************** dt_node::gen_kids (FILE *f, int indent,
*** 3918,3924 ****
  	  fns.qsort (fns_cmp);
  	  generic_fns.qsort (fns_cmp);
  	  gen_kids_1 (f, indent, gimple, depth, gimple_exprs, generic_exprs,
! 		      fns, generic_fns, preds, others);
  	  /* And output the true operand itself.  */
  	  kids[i]->gen (f, indent, gimple, depth);
  	  gimple_exprs.truncate (0);
--- 3918,3924 ----
  	  fns.qsort (fns_cmp);
  	  generic_fns.qsort (fns_cmp);
  	  gen_kids_1 (f, indent, gimple, depth, gimple_exprs, generic_exprs,
! 		      fns, generic_fns, preds, others, in_gcond);
  	  /* And output the true operand itself.  */
  	  kids[i]->gen (f, indent, gimple, depth);
  	  gimple_exprs.truncate (0);
*************** dt_node::gen_kids (FILE *f, int indent,
*** 3936,3942 ****
    fns.qsort (fns_cmp);
    generic_fns.qsort (fns_cmp);
    gen_kids_1 (f, indent, gimple, depth, gimple_exprs, generic_exprs,
! 	      fns, generic_fns, preds, others);
  }
  
  /* Generate matching code for the children of the decision tree node.  */
--- 3936,3942 ----
    fns.qsort (fns_cmp);
    generic_fns.qsort (fns_cmp);
    gen_kids_1 (f, indent, gimple, depth, gimple_exprs, generic_exprs,
! 	      fns, generic_fns, preds, others, in_gcond);
  }
  
  /* Generate matching code for the children of the decision tree node.  */
*************** dt_node::gen_kids_1 (FILE *f, int indent
*** 3948,3954 ****
  		     const vec<dt_operand *> &fns,
  		     const vec<dt_operand *> &generic_fns,
  		     const vec<dt_operand *> &preds,
! 		     const vec<dt_node *> &others)
  {
    char buf[128];
    char *kid_opname = buf;
--- 3948,3955 ----
  		     const vec<dt_operand *> &fns,
  		     const vec<dt_operand *> &generic_fns,
  		     const vec<dt_operand *> &preds,
! 		     const vec<dt_node *> &others,
! 		     bool in_gcond)
  {
    char buf[128];
    char *kid_opname = buf;
*************** dt_node::gen_kids_1 (FILE *f, int indent
*** 3974,3980 ****
        indent += 2;
      }
  
!   if (exprs_len || fns_len)
      {
        depth++;
        fprintf_indent (f, indent,
--- 3975,3983 ----
        indent += 2;
      }
  
!   // Don't emit the SSA name check for gcond case as
!   // it will not match ever.
!   if (!in_gcond && (exprs_len || fns_len))
      {
        depth++;
        fprintf_indent (f, indent,
*************** dt_node::gen_kids_1 (FILE *f, int indent
*** 4194,4200 ****
  	  fprintf_indent (f, indent + 4, "tree %s = %s_pops[%d];\n",
  			  child_opname, kid_opname, j);
  	}
!       preds[i]->gen_kids (f, indent + 4, gimple, depth);
        fprintf_indent (f, indent, "  }\n");
        indent -= 2;
        fprintf_indent (f, indent, "}\n");
--- 4197,4203 ----
  	  fprintf_indent (f, indent + 4, "tree %s = %s_pops[%d];\n",
  			  child_opname, kid_opname, j);
  	}
!       preds[i]->gen_kids (f, indent + 4, gimple, depth, false);
        fprintf_indent (f, indent, "  }\n");
        indent -= 2;
        fprintf_indent (f, indent, "}\n");
*************** dt_operand::gen (FILE *f, int indent, bo
*** 4239,4245 ****
      gcc_unreachable ();
  
    indent += 4 * n_braces;
!   gen_kids (f, indent, gimple, depth);
  
    for (unsigned i = 0; i < n_braces; ++i)
      {
--- 4242,4248 ----
      gcc_unreachable ();
  
    indent += 4 * n_braces;
!   gen_kids (f, indent, gimple, depth, false);
  
    for (unsigned i = 0; i < n_braces; ++i)
      {
*************** dt_operand::gen_phi_on_cond (FILE *f, in
*** 4285,4291 ****
      "boolean_type_node, _cond_lhs_%d, _cond_rhs_%d);\n",
      opname_0, depth, depth, depth);
  
!   gen_kids (f, indent, true, depth);
  
    indent -= 2;
    fprintf_indent (f, indent, "}\n");
--- 4288,4294 ----
      "boolean_type_node, _cond_lhs_%d, _cond_rhs_%d);\n",
      opname_0, depth, depth, depth);
  
!   gen_kids (f, indent, true, depth, true);
  
    indent -= 2;
    fprintf_indent (f, indent, "}\n");
*************** decision_tree::gen (vec <FILE *> &files,
*** 4979,4985 ****
  	  fprintf (f, "{\n");
  	  fprintf_indent (f, 2, "const bool debug_dump = "
  				"dump_file && (dump_flags & TDF_FOLDING);\n");
! 	  dop->gen_kids (f, 2, gimple, 0);
  	  if (gimple)
  	    fprintf (f, "  return false;\n");
  	  else
--- 4982,4988 ----
  	  fprintf (f, "{\n");
  	  fprintf_indent (f, 2, "const bool debug_dump = "
  				"dump_file && (dump_flags & TDF_FOLDING);\n");
! 	  dop->gen_kids (f, 2, gimple, 0, false);
  	  if (gimple)
  	    fprintf (f, "  return false;\n");
  	  else
*************** write_predicate (FILE *f, predicate_id *
*** 5102,5108 ****
  
    if (!gimple)
      fprintf_indent (f, 2, "if (TREE_SIDE_EFFECTS (t)) return false;\n");
!   dt.root->gen_kids (f, 2, gimple, 0);
  
    fprintf_indent (f, 2, "return false;\n"
  	   "}\n");
--- 5105,5111 ----
  
    if (!gimple)
      fprintf_indent (f, 2, "if (TREE_SIDE_EFFECTS (t)) return false;\n");
!   dt.root->gen_kids (f, 2, gimple, 0, false);
  
    fprintf_indent (f, 2, "return false;\n"
  	   "}\n");
diff -Nrcpad gcc-17-20260823/gcc/gimple-fold.cc gcc-17-20260830/gcc/gimple-fold.cc
*** gcc-17-20260823/gcc/gimple-fold.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/gimple-fold.cc	Sun Aug 30 22:32:07 2026
*************** partial_load_store_mask_state (gcall *ca
*** 5984,5990 ****
    if (len && poly_int_tree_p (len))
      {
        gcc_assert (TREE_CODE (bias) == INTEGER_CST);
!       wlen = wi::to_poly_widest (len) + wi::to_widest (bias);
  
        if (known_eq (wlen, 0))
  	return MASK_ALL_INACTIVE;
--- 5984,5990 ----
    if (len && poly_int_tree_p (len))
      {
        gcc_assert (TREE_CODE (bias) == INTEGER_CST);
!       wlen = wi::to_poly_widest (len) - wi::to_widest (bias);
  
        if (known_eq (wlen, 0))
  	return MASK_ALL_INACTIVE;
diff -Nrcpad gcc-17-20260823/gcc/gimple-range-infer.cc gcc-17-20260830/gcc/gimple-range-infer.cc
*** gcc-17-20260823/gcc/gimple-range-infer.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/gimple-range-infer.cc	Sun Aug 30 22:32:07 2026
*************** class exit_range
*** 308,314 ****
  {
  public:
    tree name;
!   gimple *stmt;
    vrange_storage *range;
    exit_range *next;
    exit_range *name_link;
--- 308,314 ----
  {
  public:
    tree name;
!   unsigned bbi;
    vrange_storage *range;
    exit_range *next;
    exit_range *name_link;
*************** infer_range_manager::add_range (tree nam
*** 486,492 ****
  	ptr->range->set_vrange (cur);
        else
  	ptr->range = m_range_allocator->clone (cur);
-       ptr->stmt = s;
        return;
      }
  
--- 486,491 ----
*************** infer_range_manager::add_range (tree nam
*** 495,501 ****
    ptr = (exit_range *)obstack_alloc (&m_list_obstack, sizeof (exit_range));
    ptr->range = m_range_allocator->clone (r);
    ptr->name = name;
!   ptr->stmt = s;
    ptr->next = m_on_exit[bb->index].head;
    ptr->name_link = m_name_info[SSA_NAME_VERSION (name)].name_link;
    m_name_info[SSA_NAME_VERSION (name)].name_link = ptr;
--- 494,500 ----
    ptr = (exit_range *)obstack_alloc (&m_list_obstack, sizeof (exit_range));
    ptr->range = m_range_allocator->clone (r);
    ptr->name = name;
!   ptr->bbi =  bb->index;
    ptr->next = m_on_exit[bb->index].head;
    ptr->name_link = m_name_info[SSA_NAME_VERSION (name)].name_link;
    m_name_info[SSA_NAME_VERSION (name)].name_link = ptr;
*************** infer_range_manager::clear(tree name)
*** 552,560 ****
    exit_range *ptr = m_name_info[v].name_link;
    for ( ; ptr ; ptr = ptr->name_link)
      {
!       basic_block bb = gimple_bb (ptr->stmt);
!       unsigned bbi = bb->index;
!       bitmap_clear_bit (m_on_exit[bbi].m_names, v);
        ptr->name = NULL;
      }
  
--- 551,557 ----
    exit_range *ptr = m_name_info[v].name_link;
    for ( ; ptr ; ptr = ptr->name_link)
      {
!       bitmap_clear_bit (m_on_exit[ptr->bbi].m_names, v);
        ptr->name = NULL;
      }
  
diff -Nrcpad gcc-17-20260823/gcc/gimple-range-phi.cc gcc-17-20260830/gcc/gimple-range-phi.cc
*** gcc-17-20260823/gcc/gimple-range-phi.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/gimple-range-phi.cc	Sun Aug 30 22:32:07 2026
*************** phi_analyzer::process_phi (gphi *phi, ra
*** 394,400 ****
  	  cycle_p = false;
  	  break;
  	}
!       bitmap_set_bit (m_current, SSA_NAME_VERSION (phi_def));
        // Process the args.
        for (x = 0; x < gimple_phi_num_args (phi_stmt); x++)
  	{
--- 394,402 ----
  	  cycle_p = false;
  	  break;
  	}
!       // If the PHI is already processed, no need to scan it again.
!       if (!bitmap_set_bit (m_current, SSA_NAME_VERSION (phi_def)))
! 	continue;
        // Process the args.
        for (x = 0; x < gimple_phi_num_args (phi_stmt); x++)
  	{
diff -Nrcpad gcc-17-20260823/gcc/ipa-cp.cc gcc-17-20260830/gcc/ipa-cp.cc
*** gcc-17-20260823/gcc/ipa-cp.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/ipa-cp.cc	Sun Aug 30 22:32:07 2026
*************** adjust_clone_incoming_counts (cgraph_nod
*** 4620,4644 ****
      if (cs->caller->thunk)
        {
  	adjust_clone_incoming_counts (cs->caller, desc);
! 	profile_count sum = profile_count::zero ();
! 	for (cgraph_edge *e = cs->caller->callers; e; e = e->next_caller)
! 	  if (e->count.initialized_p ())
! 	    sum += e->count.ipa ();
! 	cs->count = cs->count.combine_with_ipa_count (sum);
        }
      else if (!desc->processed_edges->contains (cs)
  	     && cs->caller->clone_of == desc->orig
  	     && cs->count.compatible_p (desc->count))
        {
! 	cs->count += desc->count;
! 	if (dump_file)
  	  {
! 	    fprintf (dump_file, "       Adjusted count of an incoming edge of "
! 		     "a clone %s -> %s to ", cs->caller->dump_name (),
! 		     cs->callee->dump_name ());
! 	    cs->count.dump (dump_file);
! 	    fprintf (dump_file, "\n");
  	  }
        }
  }
  
--- 4620,4662 ----
      if (cs->caller->thunk)
        {
  	adjust_clone_incoming_counts (cs->caller, desc);
! 	/* Same rationale as commit 8c6b6adce45a550c52dc35e3df4e0c477f5404fa
! 	   for scaling recursive edges in update_counts_for_self_gen_clones:
! 	   adjusting non-IPA edge counts here does not update matching gimple
! 	   BB frequencies and breaks verify_cgraph_node.  */
! 	if (cs->count.ipa_p ())
! 	  {
! 	    profile_count sum = profile_count::zero ();
! 	    for (cgraph_edge *e = cs->caller->callers; e; e = e->next_caller)
! 	      if (e->count.initialized_p ())
! 		sum += e->count.ipa ();
! 	    cs->count = cs->count.combine_with_ipa_count (sum);
! 	  }
! 	else if (dump_file)
! 	  fprintf (dump_file, "       Skipping adjustment of the count of an "
! 		   "incoming edge of a clone %s -> %s\n",
! 		   cs->caller->dump_name (), cs->callee->dump_name ());
        }
      else if (!desc->processed_edges->contains (cs)
  	     && cs->caller->clone_of == desc->orig
  	     && cs->count.compatible_p (desc->count))
        {
! 	if (cs->count.ipa_p ())
  	  {
! 	    cs->count += desc->count;
! 	    if (dump_file)
! 	      {
! 		fprintf (dump_file, "       Adjusted count of an incoming edge "
! 			 "of a clone %s -> %s to ", cs->caller->dump_name (),
! 			 cs->callee->dump_name ());
! 		cs->count.dump (dump_file);
! 		fprintf (dump_file, "\n");
! 	      }
  	  }
+ 	else if (dump_file)
+ 	  fprintf (dump_file, "       Skipping adjustment of the count of an "
+ 		   "incoming edge of a clone %s -> %s\n",
+ 		   cs->caller->dump_name (), cs->callee->dump_name ());
        }
  }
  
diff -Nrcpad gcc-17-20260823/gcc/lra-constraints.cc gcc-17-20260830/gcc/lra-constraints.cc
*** gcc-17-20260823/gcc/lra-constraints.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/lra-constraints.cc	Sun Aug 30 22:32:07 2026
*************** process_address_1 (int nop, bool check_o
*** 4418,4424 ****
        addr = *ad.inner;
        new_reg = lra_create_new_reg (Pmode, NULL_RTX, cl, NULL, "addr");
        /* addr => new_base.  */
!       lra_emit_move (new_reg, addr);
        *ad.inner = new_reg;
      }
    *before = end_sequence ();
--- 4418,4424 ----
        addr = *ad.inner;
        new_reg = lra_create_new_reg (Pmode, NULL_RTX, cl, NULL, "addr");
        /* addr => new_base.  */
!       lra_emit_move (new_reg, canonicalize_reload_addr (addr));
        *ad.inner = new_reg;
      }
    *before = end_sequence ();
diff -Nrcpad gcc-17-20260823/gcc/m2/ChangeLog gcc-17-20260830/gcc/m2/ChangeLog
*** gcc-17-20260823/gcc/m2/ChangeLog	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/m2/ChangeLog	Sun Aug 30 22:32:07 2026
***************
*** 1,3 ****
--- 1,12 ----
+ 2026-08-24  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	* Make-lang.in (GM2_FOR_TARGET_ESC): Remove.
+ 	(m2/gm2-libs/Builtins.def): Use "$(GM2_FOR_TARGET)" instead of
+ 	$(GM2_FOR_TARGET_ESC).
+ 	(m2/gm2-libs/Builtins.mod): Ditto.
+ 	(m2/gm2-libs/SYSTEM.def): Ditto.
+ 	(m2/gm2-libs-iso/SYSTEM.def): Ditto.
+ 
  2026-08-19  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/126911
diff -Nrcpad gcc-17-20260823/gcc/m2/Make-lang.in gcc-17-20260830/gcc/m2/Make-lang.in
*** gcc-17-20260823/gcc/m2/Make-lang.in	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/m2/Make-lang.in	Sun Aug 30 22:32:07 2026
*************** GM2_1 = ./gm2 -B./m2/stage1 -g -fm2-g $(
*** 38,50 ****
  
  GM2_FOR_TARGET = $(STAGE_CC_WRAPPER) ./gm2 -B./ -B$(build_tooldir)/bin/ -L$(objdir)/../ld $(TFLAGS)
  
- define escape_path
- $(shell echo "$(1)" | sed 's/ /\\ /g')
- endef
- 
- GM2_FOR_TARGET_ESC := $(call escape_path,$(GM2_FOR_TARGET))
- 
- 
  # FIXME: Get from gcc-plugin.m4 instead of hardcoding.
  ifeq (,$(findstring darwin,$(host)))
    soext=.so
--- 38,43 ----
*************** m2/gm2-libs/Builtins.def: $(GM2_PROG_DEP
*** 1723,1729 ****
               -M=$(srcdir)/m2/gm2-libs-pim-common/Builtins.mod \
               -I=$(srcdir)/m2/gm2-libs \
               -I=$(srcdir)/m2/gm2-libs-pim-common \
!              -C=$(GM2_FOR_TARGET_ESC) -o $@
  else
  m2/gm2-libs/Builtins.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
--- 1716,1722 ----
               -M=$(srcdir)/m2/gm2-libs-pim-common/Builtins.mod \
               -I=$(srcdir)/m2/gm2-libs \
               -I=$(srcdir)/m2/gm2-libs-pim-common \
!              -C="$(GM2_FOR_TARGET)" -o $@
  else
  m2/gm2-libs/Builtins.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
*************** m2/gm2-libs/Builtins.mod: $(GM2_PROG_DEP
*** 1737,1743 ****
               -M=$(srcdir)/m2/gm2-libs-pim-common/Builtins.mod \
               -I=$(srcdir)/m2/gm2-libs \
               -I=$(srcdir)/m2/gm2-libs-pim-common \
!              -C=$(GM2_FOR_TARGET_ESC) -o $@
  else
  m2/gm2-libs/Builtins.mod: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
--- 1730,1736 ----
               -M=$(srcdir)/m2/gm2-libs-pim-common/Builtins.mod \
               -I=$(srcdir)/m2/gm2-libs \
               -I=$(srcdir)/m2/gm2-libs-pim-common \
!              -C="$(GM2_FOR_TARGET)" -o $@
  else
  m2/gm2-libs/Builtins.mod: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
*************** m2/gm2-libs/SYSTEM.def: $(GM2_PROG_DEP)
*** 1752,1758 ****
  	    -M=$(srcdir)/m2/gm2-libs-pim-common/SYSTEM.mod \
  	    -I=$(srcdir)/m2/gm2-libs \
  	    -I=$(srcdir)/m2/gm2-libs-pim-common \
! 	    -C=$(GM2_FOR_TARGET_ESC) -o $@
  else
  m2/gm2-libs/SYSTEM.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
--- 1745,1751 ----
  	    -M=$(srcdir)/m2/gm2-libs-pim-common/SYSTEM.mod \
  	    -I=$(srcdir)/m2/gm2-libs \
  	    -I=$(srcdir)/m2/gm2-libs-pim-common \
! 	    -C="$(GM2_FOR_TARGET)" -o $@
  else
  m2/gm2-libs/SYSTEM.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
*************** m2/gm2-libs-iso/SYSTEM.def: $(GM2_PROG_D
*** 1772,1778 ****
  	    -M=$(srcdir)/m2/gm2-libs-iso-common/SYSTEM.mod \
  	    -I=$(srcdir)/m2/gm2-libs \
              -I=$(srcdir)/m2/gm2-libs-iso-common \
! 	    -C=$(GM2_FOR_TARGET_ESC) -o $@
  else
  m2/gm2-libs-iso/SYSTEM.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
--- 1765,1771 ----
  	    -M=$(srcdir)/m2/gm2-libs-iso-common/SYSTEM.mod \
  	    -I=$(srcdir)/m2/gm2-libs \
              -I=$(srcdir)/m2/gm2-libs-iso-common \
! 	    -C="$(GM2_FOR_TARGET)" -o $@
  else
  m2/gm2-libs-iso/SYSTEM.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
*************** m2/gm2-libs-coroutines/SYSTEM.def: $(GM2
*** 1793,1799 ****
  	    -I=$(srcdir)/m2/gm2-libs \
  	    -I=$(srcdir)/m2/gm2-libs-cor-common \
  	    -I=$(srcdir)/m2/gm2-libs-iso \
! 	    -C=$(GM2_FOR_TARGET_ESC) -o $@
  else
  m2/gm2-libs-coroutines/SYSTEM.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
--- 1786,1792 ----
  	    -I=$(srcdir)/m2/gm2-libs \
  	    -I=$(srcdir)/m2/gm2-libs-cor-common \
  	    -I=$(srcdir)/m2/gm2-libs-iso \
! 	    -C="$(GM2_FOR_TARGET)" -o $@
  else
  m2/gm2-libs-coroutines/SYSTEM.def: $(GM2_PROG_DEP)
  	-test -d $(@D) || $(mkinstalldirs) $(@D)
diff -Nrcpad gcc-17-20260823/gcc/match.pd gcc-17-20260830/gcc/match.pd
*** gcc-17-20260823/gcc/match.pd	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/match.pd	Sun Aug 30 22:32:07 2026
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3561,3574 ****
     (if (ptr_difference_const (@0, @1, &diff))
      (minus { build_int_cst_type (type, diff); } (convert @2)))))
  
! /* Canonicalize (T *)(ptr - ptr-cst) to &MEM[ptr + -ptr-cst].  */
  (simplify
   (convert (pointer_diff @0 INTEGER_CST@1))
   (if (POINTER_TYPE_P (type))
!   { build_fold_addr_expr_with_type
!       (build2 (MEM_REF, char_type_node, @0,
! 	       wide_int_to_tree (ptr_type_node, wi::neg (wi::to_wide (@1)))),
! 	       type); }))
  
  /* If arg0 is derived from the address of an object or function, we may
     be able to fold this expression using the object or function's
--- 3561,3573 ----
     (if (ptr_difference_const (@0, @1, &diff))
      (minus { build_int_cst_type (type, diff); } (convert @2)))))
  
! /* Canonicalize (T *)(ptr - ptr-cst) to (T *)ptr + -ptr-cst.  */
  (simplify
   (convert (pointer_diff @0 INTEGER_CST@1))
   (if (POINTER_TYPE_P (type))
!   (pointer_plus
!    (convert @0) { wide_int_to_tree (sizetype,
! 				    wi::neg (wi::to_wide (@1))); })))
  
  /* If arg0 is derived from the address of an object or function, we may
     be able to fold this expression using the object or function's
*************** and,
*** 12244,12255 ****
  	   && !HONOR_SIGNED_ZEROS (type))
  	{ elt; }))))
  
! /* Fold REDUC (@0 op VECTOR_CST) as REDUC (@0) op REDUC (VECTOR_CST).  */
  (for reduc (IFN_REDUC_PLUS IFN_REDUC_MAX IFN_REDUC_MIN IFN_REDUC_FMAX
  	    IFN_REDUC_FMIN IFN_REDUC_AND IFN_REDUC_IOR IFN_REDUC_XOR)
       op (plus max min IFN_FMAX IFN_FMIN bit_and bit_ior bit_xor)
    (simplify (reduc (op @0 VECTOR_CST@1))
!     (op (reduc:type @0) (reduc:type @1))))
  
  /* Fold REDUC_PLUS (@0) +- REDUC_PLUS (@1) as REDUC_PLUS (@0 +- @1).  This
     trades one lane-crossing reduction for one elementwise operation.  The
--- 12243,12255 ----
  	   && !HONOR_SIGNED_ZEROS (type))
  	{ elt; }))))
  
! /* Fold REDUC (@0 op VECTOR_CST) as REDUC (@0) op REDUC (VECTOR_CST)
!    when the constant reduction simplifies to a scalar operand.  */
  (for reduc (IFN_REDUC_PLUS IFN_REDUC_MAX IFN_REDUC_MIN IFN_REDUC_FMAX
  	    IFN_REDUC_FMIN IFN_REDUC_AND IFN_REDUC_IOR IFN_REDUC_XOR)
       op (plus max min IFN_FMAX IFN_FMIN bit_and bit_ior bit_xor)
    (simplify (reduc (op @0 VECTOR_CST@1))
!     (op (reduc:type @0) (reduc!:type @1))))
  
  /* Fold REDUC_PLUS (@0) +- REDUC_PLUS (@1) as REDUC_PLUS (@0 +- @1).  This
     trades one lane-crossing reduction for one elementwise operation.  The
*************** and,
*** 12536,12541 ****
--- 12536,12555 ----
     (if (elem)
      { build_vector_from_val (type, elem); }))))
  
+ /* A reduction of a duplicate vector with an idempotent operation is the
+    duplicated element.  */
+ (for reduc (IFN_REDUC_MAX IFN_REDUC_MIN IFN_REDUC_AND IFN_REDUC_IOR)
+  (simplify
+   (reduc (vec_duplicate @0))
+   (if (!tree_expr_maybe_signaling_nan_p (@0))
+    @0)))
+ 
+ /* Fold an XOR reduction of an even-length duplicate vector to zero.  */
+ (simplify
+  (IFN_REDUC_XOR (vec_duplicate@1 @0))
+  (if (multiple_p (TYPE_VECTOR_SUBPARTS (TREE_TYPE (@1)), 2))
+   { build_zero_cst (type); }))
+ 
  /* Push VEC_PERM earlier if that may help FMA perception (PR101895).  */
  (simplify
   (plus:c (vec_perm:s (mult:c@0 @1 vec_same_elem_p@2) @0 @3) @4)
diff -Nrcpad gcc-17-20260823/gcc/multiple_target.cc gcc-17-20260830/gcc/multiple_target.cc
*** gcc-17-20260823/gcc/multiple_target.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/multiple_target.cc	Sun Aug 30 22:32:07 2026
*************** create_dispatcher_calls (struct cgraph_n
*** 190,196 ****
  		}
  
  	      symtab_node *source = ref->referring;
! 	      source->create_reference (inode, IPA_REF_ADDR);
  	    }
  	  else if (ref->use == IPA_REF_ALIAS)
  	    {
--- 190,196 ----
  		}
  
  	      symtab_node *source = ref->referring;
! 	      source->create_reference (inode, IPA_REF_ADDR, ref->stmt);
  	    }
  	  else if (ref->use == IPA_REF_ALIAS)
  	    {
diff -Nrcpad gcc-17-20260823/gcc/plugin.cc gcc-17-20260830/gcc/plugin.cc
*** gcc-17-20260823/gcc/plugin.cc	Sun Aug 23 22:32:08 2026
--- gcc-17-20260830/gcc/plugin.cc	Sun Aug 30 22:32:07 2026
*************** static int event_horizon = PLUGIN_EVENT_
*** 100,105 ****
--- 100,106 ----
     parsing.  */
  static htab_t plugin_name_args_tab = NULL;
  
+ namespace {
  /* List node for keeping track of plugin-registered callback.  */
  struct callback_info
  {
*************** struct callback_info
*** 108,113 ****
--- 109,115 ----
    void *user_data;           /* plugin-specified data.  */
    struct callback_info *next;
  };
+ }
  
  /* An array of lists of 'callback_info' objects indexed by the event id.  */
  static struct callback_info *plugin_callbacks_init[PLUGIN_EVENT_FIRST_DYNAMIC];
diff -Nrcpad gcc-17-20260823/gcc/range-op.cc gcc-17-20260830/gcc/range-op.cc
*** gcc-17-20260823/gcc/range-op.cc	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/range-op.cc	Sun Aug 30 22:32:08 2026
*************** operator_div::op1_op2_relation_effect (i
*** 2652,2657 ****
--- 2652,2663 ----
  	return false;
        rel_range.set_zero (type);
        break;
+     case VREL_EQ:
+       {
+ 	wide_int one = wi::one (TYPE_PRECISION (type));
+ 	rel_range.set (type, one, one);
+ 	break;
+       }
      default:
        return false;
      }
*************** class operator_trunc_mod : public range_
*** 4380,4385 ****
--- 4386,4392 ----
    using range_operator::op1_range;
    using range_operator::op2_range;
    using range_operator::update_bitmask;
+   using range_operator::op1_op2_relation_effect;
  public:
    virtual void wi_fold (irange &r, tree type,
  		        const wide_int &lh_lb,
*************** public:
*** 4396,4403 ****
--- 4403,4457 ----
  			  relation_trio) const;
    void update_bitmask (irange &r, const irange &lh, const irange &rh) const
      { update_known_bitmask (r, TRUNC_MOD_EXPR, lh, rh); }
+   bool op1_op2_relation_effect (irange &lhs_range,
+ 				tree type,
+ 				const irange &op1_range,
+ 				const irange &op2_range,
+ 				relation_kind rel) const final override;
+ protected:
+   bool same_quotient (wide_int &lb, wide_int &ub, const wide_int &x_lb,
+ 		      const wide_int &x_ub, const wide_int &y_lb,
+ 		      const wide_int &y_ub, signop sign) const;
  } op_trunc_mod;
  
+ 
+ bool
+ operator_trunc_mod::same_quotient (wide_int &lb, wide_int &ub,
+ 				  const wide_int &x_lb, const wide_int &x_ub,
+ 				  const wide_int &y_lb, const wide_int &y_ub,
+ 				  signop sign) const
+ {
+   // Y must not contain zero.
+   if (wi::ge_p (y_ub, 0, sign) && wi::le_p (y_lb, 0, sign))
+     return false;
+ 
+   // If all endpoints do not have the same quotient, nothing further.
+   wide_int q = wi::div_trunc (x_lb, y_lb, sign);
+   if (q != wi::div_trunc (x_lb, y_ub, sign))
+     return false;
+   if (q != wi::div_trunc (x_ub, y_lb, sign))
+     return false;
+   if (q != wi::div_trunc (x_ub, y_ub, sign))
+     return false;
+ 
+   // Compute the range extremes.
+   wide_int v1 = x_lb - q * y_lb;
+   wide_int v2 = x_lb - q * y_ub;
+   wide_int v3 = x_ub - q * y_lb;
+   wide_int v4 = x_ub - q * y_ub;
+ 
+   // And choose the minimum and maximum
+   lb = wi::min (v1, v2, sign);
+   lb = wi::min (lb, v3, sign);
+   lb = wi::min (lb, v4, sign);
+ 
+   ub = wi::max (v1, v2, sign);
+   ub = wi::max (ub, v3, sign);
+   ub = wi::max (ub, v4, sign);
+ 
+   return true;
+ }
+ 
  void
  operator_trunc_mod::wi_fold (irange &r, tree type,
  			     const wide_int &lh_lb,
*************** operator_trunc_mod::wi_fold (irange &r,
*** 4453,4474 ****
  
    value_range_with_overflow (r, type, new_lb, new_ub);
  
!   // When all positive and all X/Y combinations produce the same quotient
!   // we can refine the result with    X % Y == X - Q * Y.
!   // Ensure that division by 0 is not an option.
!   if (wi::gt_p (rh_lb, 0, sign) && wi::ge_p (lh_lb, 0, sign))
      {
!       wide_int q_lb = wi::div_trunc (lh_lb, rh_ub, sign);
!       wide_int q_ub = wi::div_trunc (lh_ub, rh_lb, sign);
! 
!       if (q_lb == q_ub)
! 	{
! 	  new_lb = lh_lb - q_lb * rh_ub;
! 	  new_ub = lh_ub - q_lb * rh_lb;
! 
! 	  int_range<2> refined (type, new_lb, new_ub);
! 	  r.intersect (refined);
! 	}
      }
  }
  
--- 4507,4518 ----
  
    value_range_with_overflow (r, type, new_lb, new_ub);
  
!   // If all X/Y combinations have the same quotient, refine using
!   // X % Y == X - Q * Y.
!   if (same_quotient (new_lb, new_ub, lh_lb, lh_ub, rh_lb, rh_ub, sign))
      {
!       int_range<2> refined (type, new_lb, new_ub);
!       r.intersect (refined);
      }
  }
  
*************** operator_trunc_mod::op2_range (irange &r
*** 4536,4541 ****
--- 4580,4610 ----
    return false;
  }
  
+ bool
+ operator_trunc_mod::op1_op2_relation_effect (irange &lhs_range,
+ 					     tree type,
+ 					     const irange &,
+ 					     const irange &,
+ 					     relation_kind rel) const
+ {
+   if (rel == VREL_VARYING)
+     return false;
+ 
+   int_range<2> rel_range;
+ 
+   switch (rel)
+     {
+     case VREL_EQ:
+       rel_range.set_zero (type);
+       break;
+     default:
+       return false;
+     }
+ 
+   lhs_range.intersect (rel_range);
+   return true;
+ }
+ 
  
  class operator_logical_not : public range_operator
  {
diff -Nrcpad gcc-17-20260823/gcc/rtl.cc gcc-17-20260830/gcc/rtl.cc
*** gcc-17-20260823/gcc/rtl.cc	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/rtl.cc	Sun Aug 30 22:32:08 2026
*************** rtvec_all_equal_p (const_rtvec vec)
*** 594,605 ****
     { START, START+1, START+2, ... }.  */
  
  bool
! rtvec_series_p (rtvec vec, int start)
  {
    for (int i = 0; i < GET_NUM_ELEM (vec); i++)
      {
!       rtx x = RTVEC_ELT (vec, i);
!       if (!CONST_INT_P (x) || INTVAL (x) != i + start)
  	return false;
      }
    return true;
--- 594,606 ----
     { START, START+1, START+2, ... }.  */
  
  bool
! rtvec_series_p (rtvec vec, poly_int64 start)
  {
    for (int i = 0; i < GET_NUM_ELEM (vec); i++)
      {
!       poly_int64 elt;
!       if (!poly_int_rtx_p (RTVEC_ELT (vec, i), &elt)
! 	   || maybe_ne (elt, i + start))
  	return false;
      }
    return true;
diff -Nrcpad gcc-17-20260823/gcc/rtl.h gcc-17-20260830/gcc/rtl.h
*** gcc-17-20260823/gcc/rtl.h	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/rtl.h	Sun Aug 30 22:32:08 2026
*************** extern bool rtx_equal_p (const_rtx, cons
*** 3092,3098 ****
  			 rtx_equal_p_callback_function = NULL);
  
  extern bool rtvec_all_equal_p (const_rtvec);
! extern bool rtvec_series_p (rtvec, int);
  
  /* Return true if X is a vector constant with a duplicated element value.  */
  
--- 3092,3098 ----
  			 rtx_equal_p_callback_function = NULL);
  
  extern bool rtvec_all_equal_p (const_rtvec);
! extern bool rtvec_series_p (rtvec, poly_int64);
  
  /* Return true if X is a vector constant with a duplicated element value.  */
  
diff -Nrcpad gcc-17-20260823/gcc/rtlanal.cc gcc-17-20260830/gcc/rtlanal.cc
*** gcc-17-20260823/gcc/rtlanal.cc	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/rtlanal.cc	Sun Aug 30 22:32:08 2026
*************** register_asm_p (const_rtx x)
*** 7057,7070 ****
  bool
  vec_series_highpart_p (machine_mode result_mode, machine_mode op_mode, rtx sel)
  {
!   int nunits;
!   if (GET_MODE_NUNITS (op_mode).is_constant (&nunits)
!       && targetm.can_change_mode_class (op_mode, result_mode, ALL_REGS))
!     {
!       int offset = BYTES_BIG_ENDIAN ? 0 : nunits - XVECLEN (sel, 0);
!       return rtvec_series_p (XVEC (sel, 0), offset);
!     }
!   return false;
  }
  
  /* Return true if, for all OP of mode OP_MODE:
--- 7057,7068 ----
  bool
  vec_series_highpart_p (machine_mode result_mode, machine_mode op_mode, rtx sel)
  {
!   if (!targetm.can_change_mode_class (op_mode, result_mode, ALL_REGS))
!     return false;
!   if (BYTES_BIG_ENDIAN)
!     return rtvec_series_p (XVEC (sel, 0), 0);
!   poly_int64 offset = GET_MODE_NUNITS (op_mode) - XVECLEN (sel, 0);
!   return rtvec_series_p (XVEC (sel, 0), offset);
  }
  
  /* Return true if, for all OP of mode OP_MODE:
*************** vec_series_highpart_p (machine_mode resu
*** 7076,7089 ****
  bool
  vec_series_lowpart_p (machine_mode result_mode, machine_mode op_mode, rtx sel)
  {
!   int nunits;
!   if (GET_MODE_NUNITS (op_mode).is_constant (&nunits)
!       && targetm.can_change_mode_class (op_mode, result_mode, ALL_REGS))
!     {
!       int offset = BYTES_BIG_ENDIAN ? nunits - XVECLEN (sel, 0) : 0;
!       return rtvec_series_p (XVEC (sel, 0), offset);
!     }
!   return false;
  }
  
  /* Return true if X contains a paradoxical subreg.  */
--- 7074,7085 ----
  bool
  vec_series_lowpart_p (machine_mode result_mode, machine_mode op_mode, rtx sel)
  {
!   if (!targetm.can_change_mode_class (op_mode, result_mode, ALL_REGS))
!     return false;
!   if (!BYTES_BIG_ENDIAN)
!     return rtvec_series_p (XVEC (sel, 0), 0);
!   poly_int64 offset = GET_MODE_NUNITS (op_mode) - XVECLEN (sel, 0);
!   return rtvec_series_p (XVEC (sel, 0), offset);
  }
  
  /* Return true if X contains a paradoxical subreg.  */
*************** contains_paradoxical_subreg_p (rtx x)
*** 7100,7102 ****
--- 7096,7171 ----
      }
    return false;
  }
+ 
+ /* Analyze X as accessing a consecutive sequence of bytes in some base
+    rtx that is no smaller than X.  Return the base value and set *OFFSET_PTR
+    to the byte offset of X from the start of the base.  Like SUBREG_BYTE,
+    this byte offset follows memory order.  */
+ 
+ rtx
+ get_ref_base_and_offset (rtx x, poly_uint64 *offset_ptr)
+ {
+   poly_uint64 outer_bytes = GET_MODE_SIZE (GET_MODE (x));
+   poly_uint64 offset = 0;
+   for (;;)
+     {
+       switch (GET_CODE (x))
+ 	{
+ 	case SUBREG:
+ 	  if (!paradoxical_subreg_p (x))
+ 	    {
+ 	      offset += SUBREG_BYTE (x);
+ 	      x = SUBREG_REG (x);
+ 	      continue;
+ 	    }
+ 	  break;
+ 
+ 	case ASHIFT:
+ 	case LSHIFTRT:
+ 	case ASHIFTRT:
+ 	  if (SCALAR_INT_MODE_P (GET_MODE (x))
+ 	      && CONST_INT_P (XEXP (x, 1))
+ 	      && UINTVAL (XEXP (x, 1)) % BITS_PER_UNIT == 0)
+ 	    {
+ 	      auto inner_bytes = GET_MODE_SIZE (GET_MODE (x));
+ 	      /* Reanalyze the current extraction as a shift right of X.  */
+ 	      poly_uint64 lsb = subreg_size_lsb (outer_bytes, inner_bytes,
+ 						 offset);
+ 	      /* Convert it to a shift right of XEXP (x, 0).  This might
+ 		 wrap.  */
+ 	      if (GET_CODE (x) == ASHIFT)
+ 		lsb -= UINTVAL (XEXP (x, 1));
+ 	      else
+ 		lsb += UINTVAL (XEXP (x, 1));
+ 	      if (known_le (lsb, (inner_bytes - outer_bytes) * BITS_PER_UNIT))
+ 		{
+ 		  x = XEXP (x, 0);
+ 		  offset = subreg_size_offset_from_lsb (outer_bytes,
+ 							inner_bytes, lsb);
+ 		  continue;
+ 		}
+ 	    }
+ 	  break;
+ 
+ 	case VEC_SELECT:
+ 	  {
+ 	    rtx sel = XEXP (x, 1);
+ 	    poly_int64 start;
+ 	    if (poly_int_rtx_p (XVECEXP (sel, 0, 0), &start)
+ 		&& rtvec_series_p (XVEC (sel, 0), start))
+ 	      {
+ 		x = XEXP (x, 0);
+ 		offset += start * GET_MODE_UNIT_SIZE (GET_MODE (x));
+ 		continue;
+ 	      }
+ 	    break;
+ 	  }
+ 
+ 	default:
+ 	  break;
+       }
+ 
+     *offset_ptr = offset;
+      return x;
+    }
+ }
diff -Nrcpad gcc-17-20260823/gcc/rtlanal.h gcc-17-20260830/gcc/rtlanal.h
*** gcc-17-20260823/gcc/rtlanal.h	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/rtlanal.h	Sun Aug 30 22:32:08 2026
*************** vec_series_highpart_p (machine_mode resu
*** 336,343 ****
  		       rtx sel);
  
  bool
! vec_series_lowpart_p (machine_mode result_mode, machine_mode op_mode, rtx sel);
  
  bool
  contains_paradoxical_subreg_p (rtx x);
  #endif
--- 336,347 ----
  		       rtx sel);
  
  bool
! vec_series_lowpart_p (machine_mode result_mode, machine_mode op_mode,
! 		      rtx sel);
  
  bool
  contains_paradoxical_subreg_p (rtx x);
+ 
+ rtx
+ get_ref_base_and_offset (rtx x, poly_uint64 *offset_ptr);
  #endif
diff -Nrcpad gcc-17-20260823/gcc/simplify-rtx.cc gcc-17-20260830/gcc/simplify-rtx.cc
*** gcc-17-20260823/gcc/simplify-rtx.cc	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/simplify-rtx.cc	Sun Aug 30 22:32:08 2026
*************** simplify_ashift:
*** 5600,5616 ****
  	    return simplify_gen_binary (VEC_SELECT, mode, XEXP (trueop0, 0),
  					gen_rtx_PARALLEL (VOIDmode, vec));
  	  }
! 	/* (vec_concat:
! 	     (subreg_lowpart:N OP)
! 	     (vec_select:N OP P))  -->  OP when P selects the high half
! 	    of the OP.  */
! 	if (GET_CODE (trueop0) == SUBREG
! 	    && subreg_lowpart_p (trueop0)
! 	    && GET_CODE (trueop1) == VEC_SELECT
! 	    && SUBREG_REG (trueop0) == XEXP (trueop1, 0)
! 	    && !side_effects_p (XEXP (trueop1, 0))
! 	    && vec_series_highpart_p (op1_mode, mode, XEXP (trueop1, 1)))
! 	  return XEXP (trueop1, 0);
        }
        return 0;
  
--- 5600,5625 ----
  	    return simplify_gen_binary (VEC_SELECT, mode, XEXP (trueop0, 0),
  					gen_rtx_PARALLEL (VOIDmode, vec));
  	  }
! 	/* (vec_concat:N
! 	     (subreg:N/2 OP 0)
! 	     (subreg:N/2 OP N/2)) --> OP
! 	   i.e. where concatenating the first and second halves of the
! 	   same object OP.  */
! 	{
! 	  poly_uint64 offset = 0u;
! 	  rtx base0 = get_ref_base_and_offset (trueop0, &offset);
! 	  if (known_eq (offset, 0u)
! 	      && known_eq (GET_MODE_SIZE (GET_MODE (base0)),
! 			   GET_MODE_SIZE (mode)))
! 	    {
! 	      rtx base1 = get_ref_base_and_offset (trueop1, &offset);
! 	      if (rtx_equal_p (base0, base1)
! 		  && known_eq (offset, GET_MODE_SIZE (op0_mode))
! 		  && !side_effects_p (trueop0)
! 		  && !side_effects_p (trueop1))
! 		return gen_lowpart (mode, base0);
! 	    }
! 	}
        }
        return 0;
  
diff -Nrcpad gcc-17-20260823/gcc/target.def gcc-17-20260830/gcc/target.def
*** gcc-17-20260823/gcc/target.def	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/target.def	Sun Aug 30 22:32:08 2026
*************** DEFHOOK
*** 2843,2848 ****
--- 2843,2851 ----
   or @code{gen_ccmp_next}.  It may return @code{NULL} if the combination of\n\
   @var{prev} and this comparison is not supported, otherwise the result must\n\
   be appropriate for passing to @code{gen_ccmp_next} or @code{cbranch_optab}.\n\
+  The comparison is not performed when @var{prev} is false, so this function\n\
+  has to return @code{NULL} for a comparison that raises an exception which\n\
+  has to be preserved.\n\
   @var{code} is the @code{rtx_code} of the compare for @var{op0} and @var{op1}.\n\
   @var{bit_code} is @code{AND} or @code{IOR}, which is the op on the compares.",
   rtx, (rtx_insn **prep_seq, rtx_insn **gen_seq, rtx prev, rtx_code cmp_code, tree op0, tree op1, rtx_code bit_code),
diff -Nrcpad gcc-17-20260823/gcc/testsuite/ChangeLog gcc-17-20260830/gcc/testsuite/ChangeLog
*** gcc-17-20260823/gcc/testsuite/ChangeLog	Sun Aug 23 22:32:09 2026
--- gcc-17-20260830/gcc/testsuite/ChangeLog	Sun Aug 30 22:32:08 2026
***************
*** 1,3 ****
--- 1,1114 ----
+ 2026-08-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* gcc.target/i386/apx-ndd-adc.c (dg-do): Replace
+ 	"target { int128 && { ! ia32 } }" with "target int128".
+ 	* gcc.target/i386/apx-ndd-sbb.c (dg-do): Likewise.
+ 	* gcc.target/i386/apx-ndd-ti-shift.c (dg-do): Likewise.
+ 
+ 2026-08-29  Vincenzo Calabretta  <vincenzo.cal.main@gmail.com>
+ 
+ 	PR c++/127046
+ 	* g++.dg/cpp2a/constexpr-dtor20.C: New test.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* gcc.target/alpha/stack-protector-1.c: New test.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* gcc.dg/fstack-protector-strong.c: Run on alpha*-*-*.  Expect
+ 	twice as many stack_chk_fail matches there, since Alpha names the
+ 	callee once for !literal and once for !lituse_jsr.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* gcc.target/alpha/unaligned-big-frame.c: New test.
+ 
+ 2026-08-29  Matt Turner  <mattst88@gmail.com>
+ 
+ 	* gcc.dg/Wno-frame-address.c: Skip on alpha*-*-*.
+ 	* gcc.target/alpha/frame-address-1.c: New test.
+ 
+ 2026-08-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/117728
+ 	* gcc.dg/tree-ssa/satd-hadamard.c: Require int32plus.
+ 
+ 2026-08-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/123967
+ 	* gcc.dg/tree-ssa/pr123967.c: Require int32plus.
+ 
+ 2026-08-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/121264
+ 	* gcc.dg/tree-ssa/pr121264.c: Require size32plus.
+ 
+ 2026-08-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/112104
+ 	* gcc.dg/tree-ssa/pr112104-2.c: Require int32plus.
+ 
+ 2026-08-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/121103
+ 	* gcc.dg/torture/pr121103-1.c (B.n): Use __INT32_TYPE__
+ 	instead of int.
+ 
+ 2026-08-29  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/sh/pr51244-20.c: Merge a few sh2a and !sh2a expectations.
+ 
+ 2026-08-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gfortran.dg/guality/arg1.f90: Put a breakpoint on volatile
+ 	variable increment instead of on the write statement.
+ 
+ 2026-08-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR middle-end/127098
+ 	* gcc.target/avr/torture/pr127098.c: New test.
+ 
+ 2026-08-29  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/126896
+ 	* gcc.dg/tree-ssa/dom-jump-threading-1.c: Disable phiopt1.
+ 	* gcc.dg/tree-ssa/dom-jump-threading-2.c: Likewise.
+ 	* gcc.dg/tree-ssa/phi_on_compare-1.c: Scan the phiopt1 dump.
+ 
+ 2026-08-29  Luke Zhuang  <luke.zhuang@linux.alibaba.com>
+ 
+ 	* gcc.target/riscv/slliw-shifted-bitfield-rtl.c: New test.
+ 
+ 2026-08-29  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/reduc/pr123501.c: Adjust expected
+ 	output.
+ 
+ 2026-08-28  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* c-c++-common/analyzer/flex-with-call-summaries.c: Specify
+ 	_DARWIN_C_SOURCE.
+ 	* c-c++-common/analyzer/flex-without-call-summaries.c: Likewise.
+ 	* c-c++-common/analyzer/strndup-1.c: Likewise.
+ 
+ 2026-08-28  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127039
+ 	* gcc.target/aarch64/sve/vec-reduc-dup-1.c: New test.
+ 	* gcc.target/aarch64/sve/vec-reduc-pattern-1.c: New test.
+ 	* gcc.target/aarch64/sve/vec-reduc-snan-1.c: New test.
+ 	* gcc.target/aarch64/sve/vec-reduc-uniform-1.c: New test.
+ 	* gcc.target/riscv/rvv/base/reduc-xor-uniform-1.c: New test.
+ 
+ 2026-08-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127105
+ 	* gcc.dg/vect/vect-pr127105.c: New testcase.
+ 
+ 2026-08-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gcc.dg/vect/bb-slp-pattern-2.c: Adjust.
+ 	* gcc.target/i386/pr45685.c: Likewise.
+ 
+ 2026-08-28  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/127082
+ 	* gcc.dg/pr127082.c: New.
+ 
+ 2026-08-28  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/base/pr112431-53.c: New test.
+ 	* gcc.target/riscv/rvv/base/pr112431-54.c: New test.
+ 
+ 2026-08-28  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf8.c: New test.
+ 
+ 2026-08-28  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h:
+ 	Add test helper macros.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf8.c: New test.
+ 
+ 2026-08-28  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125645
+ 	* g++.dg/contracts/cpp26/fold-pr125645.C: New test.
+ 
+ 2026-08-28  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125011
+ 	* g++.dg/contracts/cpp26/template-post-pr125011.C: New test.
+ 	* g++.dg/contracts/cpp26/dcl.contract.func.p7-t1.C: Expect
+ 	additional error.
+ 	* g++.dg/contracts/cpp26/dcl.contract.func.p7-t2.C: Likewise.
+ 
+ 2026-08-28  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	PR c++/125712
+ 	* g++.dg/contracts/cpp26/specialization-pr125712.C: New test.
+ 
+ 2026-08-27  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/contracts/cpp26/contracts-class1.C: Fix test.
+ 
+ 2026-08-27  Pengxuan Zheng  <pengxuan.zheng@oss.qualcomm.com>
+ 
+ 	PR target/102055
+ 	* gcc.target/aarch64/pr102055-loop.c: New test.
+ 	* gcc.target/aarch64/pr102055.c: New test.
+ 
+ 2026-08-27  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	PR c++/125537
+ 	* g++.dg/contracts/cpp26/template-post1.C: New test.
+ 	* g++.dg/contracts/cpp26/contracts-class1.C: New test.
+ 
+ 2026-08-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/127100
+ 	* gfortran.dg/pr127100.f90: New test.
+ 
+ 2026-08-27  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/126828
+ 	PR c++/112632
+ 	* g++.dg/cpp0x/alias-decl-nontype2.C: New test.
+ 
+ 2026-08-27  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
+ 
+ 	PR target/120192
+ 	* gcc.target/i386/pr120192.c: New test.
+ 
+ 2026-08-27  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/127085
+ 	* gcc.dg/torture/pr127085.c: New test.
+ 
+ 2026-08-27  Manjunath Matti  <mmatti@linux.ibm.com>
+ 
+ 	PR target/126512
+ 	* gcc.target/powerpc/pr126512.c: New test.
+ 
+ 2026-08-27  Vijay Shankar  <vijay@linux.ibm.com>
+ 
+ 	PR target/116004
+ 	* gcc.target/powerpc/pr116004.c: New Test.
+ 
+ 2026-08-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/123778
+ 	* gcc.dg/torture/pr123778-1.c (f): Return __PTRDIFF_TYPE__
+ 	instead of long.
+ 
+ 2026-08-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126998
+ 	* gcc.dg/vect/vect-reduc-dot-pr126998.c: New testcase.
+ 
+ 2026-08-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125842
+ 	* g++.dg/cpp/line-1.C: New test.
+ 	* g++.dg/cpp/line-2.C: New test.
+ 	* g++.dg/cpp/line-3.C: New test.
+ 
+ 2026-08-27  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127069
+ 	* gcc.dg/tree-ssa/vec-mask-zero-1.c: Restrict to AArch64 and x86 with
+ 	SSE2.  Scan forwprop1.
+ 
+ 2026-08-27  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127064
+ 	* g++.dg/tree-ssa/vec-narrow-1.C: Use the x86 effective target.
+ 	* g++.dg/tree-ssa/vec-narrow-minmax-2.C: Likewise.
+ 
+ 2026-08-27  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* gcc.target/cris/swapnw_v3.c: New test case.
+ 	* gcc.target/cris/swapnw_v8.c: Likewise.
+ 	* gcc.target/cris/swapnwb_v3.c: Likewise.
+ 	* gcc.target/cris/swapnwb_v8.c: Likewise.
+ 	* gcc.target/cris/swapnwbr_v3.c: Likewise.
+ 	* gcc.target/cris/swapnwbr_v8.c: Likewise.
+ 	* gcc.target/cris/swapw_v3.c: Likewise.
+ 	* gcc.target/cris/swapw_v8.c: Likewise.
+ 	* gcc.target/cris/swapwbr_v3.c: Likewise.
+ 	* gcc.target/cris/swapwbr_v8.c: Likewise.
+ 
+ 2026-08-27  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* gcc.target/cris/btst-scc-1.c: New test.
+ 
+ 2026-08-27  Sammy Al Hashemi  <sammy@salh.xyz>
+ 
+ 	* c-c++-common/Wstrict-aliasing2-with-fno.c: New test.
+ 	* c-c++-common/Wstrict-aliasing3-with-fno.c: New test.
+ 
+ 2026-08-27  Shreesh Adiga  <16567adigashreesh@gmail.com>
+ 
+ 	* gcc.target/aarch64/crc32-zero.c: New test.
+ 
+ 2026-08-26  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* g++.dg/gcov/gcov-12.C: Require effective target fpic.
+ 	* g++.old-deja/g++.mike/eh30.C: Ditto.
+ 	* g++.old-deja/g++.mike/p4750.C: Ditto.
+ 	* g++.old-deja/g++.robertl/eb106.C: Ditto.
+ 
+ 2026-08-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/82065
+ 	* gfortran.dg/iso_fortran_env_10.f90: New test.
+ 
+ 2026-08-26  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/126415
+ 	PR testsuite/52641
+ 	* gcc.dg/torture/pr126415.c: Require int32plus.
+ 
+ 2026-08-26  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/49330
+ 	PR testsuite/52641
+ 	* gcc.dg/torture/pr49330-2.c (foo): Use __UINTPTR_TYPE__
+ 	instead of unsigned long.
+ 
+ 2026-08-26  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.target/aarch64/fccmp-trap-1.c: New test.
+ 	* gcc.target/aarch64/fccmp-trap-2.c: Likewise.
+ 	* gcc.target/aarch64/fccmp-trap-3.c: Likewise.
+ 
+ 2026-08-26  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.target/aarch64/ccmp_1.c: Update and anchor the FP scans.
+ 	* gcc.target/aarch64/fccmp_1.c: Update the expected mode.
+ 	* gcc.target/aarch64/fccmp_3.c: New test.
+ 
+ 2026-08-26  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127039
+ 	* gcc.target/aarch64/vec-reduc-fmax-const-1.c: New test.
+ 
+ 2026-08-26  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/52641
+ 	* gcc.dg/torture/inline-mem-set-1.c: Require size20plus.
+ 
+ 2026-08-26  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/111036
+ 	* gcc.dg/torture/pr111036.c (foo): Use __UINTPTR_TYPE__
+ 	instead of unsigned long int.
+ 
+ 2026-08-26  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/116353
+ 	* gcc.dg/torture/pr116353.c: Require int32plus.
+ 
+ 2026-08-26  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* gcc.dg/vect/pr122797.c: Remove explict "dg-do run".
+ 	* gcc.dg/vect/pr123731.c: Likewise.
+ 
+ 2026-08-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR testsuite/125238
+ 	* gcc.target/i386/pr125238.c: Remove scan for
+ 	mpvabsq.
+ 
+ 2026-08-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR testsuite/127048
+ 	* gcc.target/i386/pr89523-1a.c: Remove scan for addr32 vgather.
+ 	* gcc.target/i386/pr89523-1b.c: Likewise.
+ 
+ 2026-08-26  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
+ 
+ 	PR target/125138
+ 	* gcc.target/powerpc/pr125138.c: New test.
+ 
+ 2026-08-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.dg/pr126538.c: Require bitint.
+ 
+ 2026-08-26  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR tree-optimization/126650
+ 	* gcc.dg/torture/pr126650.c: Be explicit about endianness
+ 	expectations.
+ 
+ 2026-08-26  Sebastian Miles  <sebastianmiles20@gmail.com>
+ 
+ 	PR c++/127016
+ 	* g++.dg/cpp0x/initlist-array26.C: New test.
+ 
+ 2026-08-26  Odysseas Georgoudis  <odygrd@hotmail.com>
+ 
+ 	PR c++/125343
+ 	* g++.dg/cpp2a/pr125343.C: New test.
+ 
+ 2026-08-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/opt110.adb: New test.
+ 
+ 2026-08-25  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR libstdc++/127005
+ 	* g++.dg/warn/Wuninitialized-36.C: New test.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR rtl-optimization/127056
+ 	* gcc.target/aarch64/pr127056.c: New test.
+ 
+ 2026-08-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR testsuite/52641
+ 	* c-c++-common/analyzer/taint-index-pr106229.c: Require size20plus.
+ 	* c-c++-common/analyzer/stdarg-pr111289-int.c [int16]: One
+ 	warning won't show up.
+ 	* c-c++-common/analyzer/pr96653.c: Use correct types to
+ 	define u16, u32, s64, size_t, etc.
+ 	* c-c++-common/analyzer/allocation-size-pr113654-1.c: Same.
+ 	* c-c++-common/analyzer/out-of-bounds-pr112792.c: Same.
+ 	* c-c++-common/analyzer/realloc-pr110014.c: Same.
+ 	* c-c++-common/analyzer/uninit-pr108704.c: Same.
+ 	* gcc.dg/analyzer/CWE-131-examples.c: Same.
+ 	* gcc.dg/analyzer/deref-before-check-pr113253.c: Same.
+ 	* gcc.dg/analyzer/torture/switch-3.c: Same.
+ 	* gcc.dg/analyzer/torture/switch-4.c: Same.
+ 	* gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_floor.c: Same.
+ 	* gcc.dg/analyzer/atoi-1.c [avr]: Hide one function.
+ 	* c-c++-common/analyzer/coreutils-sum-pr108666.c [avr-*-*]: Skip.
+ 	* c-c++-common/analyzer/flex-without-call-summaries.c: Same.
+ 	* c-c++-common/analyzer/out-of-bounds-1.c: Same.
+ 	* c-c++-common/analyzer/out-of-bounds-2.c: Same.
+ 	* c-c++-common/analyzer/out-of-bounds-3.c: Same.
+ 	* c-c++-common/analyzer/out-of-bounds-diagram-strcat-2.c: Same.
+ 	* c-c++-common/analyzer/out-of-bounds-diagram-strcat.c: Same.
+ 	* c-c++-common/analyzer/overlapping-buffers.c: Same.
+ 	* gcc.dg/analyzer/SARD-tc293-basic-00045-min.c: Same.
+ 	* gcc.dg/analyzer/data-model-1.c: Same.
+ 	* gcc.dg/analyzer/fd-mktemp-family.c: Same.
+ 	* gcc.dg/analyzer/mkdtemp-1.c: Same.
+ 	* gcc.dg/analyzer/mkostemp-1.c: Same.
+ 	* gcc.dg/analyzer/mkostemps-1.c: Same.
+ 	* gcc.dg/analyzer/mkstemp-1.c: Same.
+ 	* gcc.dg/analyzer/mkstemps-1.c: Same.
+ 	* gcc.dg/analyzer/mktemp-1.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-4.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-13.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-15.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-16.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-17.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-18.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-19.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-4.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-5-ascii.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-5-unicode.c: Same.
+ 	* gcc.dg/analyzer/out-of-bounds-diagram-7.c: Same.
+ 	* gcc.dg/analyzer/strcmp-1.c: Same.
+ 	* gcc.dg/analyzer/strcpy-1.c: Same.
+ 	* gcc.dg/analyzer/strcpy-3.c: Same.
+ 	* gcc.dg/analyzer/strcpy-4.c: Same.
+ 	* gcc.dg/analyzer/taint-read-offset-1.c: Same.
+ 	* gcc.dg/analyzer/taint-write-offset-1.c: Same.
+ 
+ 2026-08-25  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* lib/target-supports.exp: Provide aarch64_mcmodel_large/tiny.
+ 	* gcc.target/aarch64/pr70120-2.c: Require mcmodel support.
+ 	* gcc.target/aarch64/pr78255.c: Likewise.
+ 	* gcc.target/aarch64/pr78561.c: Likewise.
+ 	* gcc.target/aarch64/pr78733.c: Likewise.
+ 	* gcc.target/aarch64/pr79041-2.c: Likewise.
+ 	* gcc.target/aarch64/pr94530.c: Likewise.
+ 	* gcc.target/aarch64/reload-valid-spoff.c: Likewise.
+ 	* gcc.target/aarch64/symbol-range-tiny.c: Likewise.
+ 
+ 2026-08-25  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* g++.target/i386/ssp-global-hidden-1.C: Port to Mach-O.
+ 	* g++.target/i386/ssp-global-hidden-2.C: Likewise.
+ 	* g++.target/i386/ssp-global-hidden-3.C: Likewise.
+ 	* gcc.target/i386/ssp-global-hidden-1.c: Likewise.
+ 	* gcc.target/i386/ssp-global-hidden-2.c: Likewise.
+ 	* gcc.target/i386/ssp-global-hidden-3.c: Likewise.
+ 
+ 2026-08-25  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	PR target/125746
+ 	* gcc.target/i386/pr125746.c: New test.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* gfortran.dg/value_18.f90: New test.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* gfortran.dg/value_15.f90: New test.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* gfortran.dg/value_3.f90: Compile under -std=f2003 and replace the
+ 	now-invalid expectation that an explicit-shape array dummy with
+ 	VALUE conflicts with DIMENSION; this combination is permitted
+ 	(F2008, C557).
+ 	* gfortran.dg/assumed_rank_11.f90: Update expected diagnostic for
+ 	VALUE on an assumed-rank dummy.
+ 	* gfortran.dg/c-interop/c535a-2.f90: Likewise.
+ 	* gfortran.dg/value_12.f90: New test.
+ 	* gfortran.dg/value_13.f90: New test.
+ 	* gfortran.dg/value_16.f90: New test.
+ 	* gfortran.dg/value_17.f90: New test.
+ 
+ 2026-08-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/49802
+ 	* gfortran.dg/value_5.f90: Compile under -std=f2003 so the Fortran
+ 	2008 assumed-length VALUE relaxation is exercised as a rejection,
+ 	and update the C-interop error expectation to match the
+ 	consolidated diagnostic.
+ 	* gfortran.dg/value_6.f90: New test.
+ 	* gfortran.dg/value_7.f90: New test.
+ 	* gfortran.dg/value_11.f90: New test.
+ 	* gfortran.dg/value_14.f90: New test.
+ 
+ 2026-08-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/126999
+ 	* gcc.dg/pr126999.c: New.
+ 
+ 2026-08-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/127027
+ 	* gcc.dg/pr127027.c: New.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127069
+ 	* gcc.dg/tree-ssa/vec-mask-zero-1.c: Also require vect128.
+ 
+ 2026-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127049
+ 	* g++.dg/torture/pr127049.C: New testcase.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* g++.dg/tree-ssa/vec-narrow-1.C: Restrict the test to AArch64 and
+ 	x86 targets.
+ 	* g++.dg/tree-ssa/vec-narrow-minmax-2.C: Scan before target lowering.
+ 
+ 2026-08-25  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR target/48609
+ 	* gcc.target/i386/pr48609.c: New test case.
+ 
+ 2026-08-25  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	PR target/126619
+ 	* gcc.target/i386/avx-init-v4sf-1.c: Update test case.
+ 	* gcc.target/i386/avx-init-v4sf-2.c: Likewise.
+ 	* gcc.target/i386/avx2-init-v4sf-1.c: Likewise.
+ 	* gcc.target/i386/sse-init-v4sf-2.c: Likewise.
+ 	* gcc.target/i386/sse-init-v4sf-3.c: Likewise.
+ 	* gcc.target/i386/sse2-init-v4sf-1.c: Likewise.
+ 	* gcc.target/i386/sse2-init-v4sf-2.c: Likewise.
+ 	* gcc.target/i386/sse4_1-init-v4sf-2.c: Likewise.
+ 	* gcc.target/i386/sse4_1-init-v4sf-3.c: Likewise.
+ 
+ 2026-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127058
+ 	PR tree-optimization/127051
+ 	* gcc.dg/vect/bb-slp-pr127051.c: New testcase.
+ 	* gfortran.dg/vect/pr127058.f90: Likewise.
+ 
+ 2026-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126995
+ 	* gcc.dg/vect/bb-slp-pr126995-2.c: New testcase.
+ 
+ 2026-08-25  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR middle-end/127031
+ 	* gcc.target/avr/pr127031.c: New test.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.dg/widening-mul-conv-1.c: New test.
+ 
+ 2026-08-25  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.target/aarch64/fccmp_1.c: New test.
+ 	* gcc.target/aarch64/fccmp_2.c: Likewise.
+ 
+ 2026-08-25  Dipesh Sharma  <Dipesh.Sharma@amd.com>
+ 
+ 	* gcc.target/i386/avx512bmm-check-1.c: New test.
+ 	* gcc.target/i386/avx512bmm-check-2.c: New test.
+ 	* gcc.target/i386/avx512bmm-check-3.c: New test.
+ 
+ 2026-08-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/126933
+ 	* gcc.target/i386/truncsfbf-2.c: Require sse2_runtime.
+ 	Include "truncsfbf-check.h".
+ 	* gcc.target/i386/truncsfbf-5.c (dg-options): Add -save-temps.
+ 	(CHECK_CPU_SUPPORTS): New.
+ 	(ATTRIBUTE): Likewise.
+ 	Include "truncsfbf-check.h".
+ 	Scan "\t{vex} vcvtneps2bf16".
+ 	* gcc.target/i386/truncsfbf-6.c (dg-options): Add -save-temps.
+ 	Include "truncsfbf-check.h".
+ 	(CHECK_CPU_SUPPORTS): New.
+ 	(ATTRIBUTE): Likewise.
+ 	Scan "\tvcvtneps2bf16".
+ 	* gcc.target/i386/truncsfbf-check.h: New file.
+ 
+ 2026-08-25  Josef Melcr  <josef.melcr@suse.com>
+ 
+ 	PR ipa/127023
+ 	* gcc.target/i386/pr127023.c: New test.
+ 
+ 2026-08-25  Aldy Hernandez  <aldy@quesejoda.com>
+ 
+ 	PR tree-optimization/126896
+ 	* gcc.dg/tree-ssa/phi_on_compare-1.c: Scan the phiopt2 dump.
+ 	* gcc.dg/tree-ssa/phi_on_compare-2.c: Scan the optimized dump.
+ 	* gcc.dg/tree-ssa/phi_on_compare-3.c: Likewise.
+ 	* gcc.dg/tree-ssa/dom-jump-threading-1.c: Disable phiopt.
+ 	* gcc.dg/tree-ssa/dom-jump-threading-2.c: Likewise.
+ 	* gcc.dg/tree-ssa/phi_on_compare-5.c: New test.
+ 
+ 2026-08-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/127045
+ 	* gcc.target/i386/pr127045.c: New test.
+ 	* gcc.target/i386/zext-sse-1.c (func1): Adjust expected codegen.
+ 	(func2): Likewise.
+ 	* gcc.target/i386/zext-sse-2.c (func1): Likewise.
+ 	(func2): Likewise.
+ 
+ 2026-08-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/127020
+ 	* gcc.target/i386/sse4_1-stv-14.c: New test.
+ 
+ 2026-08-25  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/base/pr112431-22.c: Remove xfail for
+ 	csrr asm check.
+ 	* gcc.target/riscv/rvv/base/pr112431-23.c: Ditto.
+ 	* gcc.target/riscv/rvv/base/pr112431-24.c: Ditto.
+ 
+ 2026-08-25  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/base/pr112431-52.c: New test.
+ 
+ 2026-08-25  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf8.c: New test.
+ 
+ 2026-08-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gcc.dg/builtin-stdc-bit-1.c (main): Fix two pastos.
+ 
+ 2026-08-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125822
+ 	* g++.dg/cpp29/complex-req-noexcept1.C: New test.
+ 	* g++.dg/cpp29/complex-req-noexcept2.C: New test.
+ 	* g++.dg/cpp29/complex-req-noexcept3.C: New test.
+ 	* g++.dg/cpp29/complex-req-noexcept4.C: New test.
+ 	* g++.dg/cpp29/complex-req-noexcept5.C: New test.
+ 	* g++.dg/cpp29/feat-cxx29.C: Expect __cpp_concepts 202606L rather
+ 	than 202002L for C++29.
+ 
+ 2026-08-24  Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/126745
+ 	* gcc.dg/tree-ssa/pr126745.c: New test.
+ 
+ 2026-08-24  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/127039
+ 	* gcc.dg/pr127039.c: New test.
+ 
+ 2026-08-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob:
+ 	Use numeric type because numeric-edited is disallowed.
+ 	* cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob:
+ 	expressions are now permitted as BY CONTENT parameters.
+ 
+ 2026-08-24  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/array43.adb: New test.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127018
+ 	* gcc.dg/vect/bb-slp-pr127018.c: New testcase.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/127000
+ 	* gcc.dg/torture/pr127000.c: New testcase.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126984
+ 	* gcc.dg/vect/vect-pr126984.c: New testcase.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126995
+ 	* gcc.dg/vect/bb-slp-pr126995.c: New testcase.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/126933
+ 	* gcc.target/i386/truncsfbf-5.c (CALC): Flush input denormal to
+ 	zero.
+ 	(main): Add tests for float denormal inputs.
+ 	* gcc.target/i386/truncsfbf-6.c (CALC): Flush input denormal to
+ 	zero.
+ 	(main): Add tests for float denormal inputs.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/126933
+ 	* gcc.target/i386/truncsfbf-1.c (dg-options): Add
+ 	-mno-avxneconvert -mno-avx512bf16.  Use check-function-bodies to
+ 	check updated codegen.
+ 	* gcc.target/i386/truncsfbf-2.c (dg-options): Add
+ 	-mno-avxneconvert -mno-avx512bf16.
+ 	(foo): Make it static with __attribute__ ((noipa, noinline)).
+ 	(CALC): Add __attribute__ ((noipa, noinline)).  Flush input
+ 	denormal to zero.
+ 	(main): Add tests for float denormal inputs.
+ 	* gcc.target/i386/truncsfbf-3.c: New test.
+ 	* gcc.target/i386/truncsfbf-4.c: Likewise.
+ 	* gcc.target/i386/truncsfbf-5.c: Likewise.
+ 	* gcc.target/i386/truncsfbf-6.c: Likewise.
+ 
+ 2026-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126997
+ 	* gcc.dg/torture/pr126997.c: New testcase.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* gcc.target/riscv/mcpu-sifive-p550.c: New test.
+ 	* gcc.target/riscv/mcpu-sifive-p870-d.c: New test.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* gcc.target/riscv/cpunative/riscv-cpunative.exp: New file.
+ 	* gcc.target/riscv/cpunative/info_0: New file.
+ 	* gcc.target/riscv/cpunative/info_1: New file.
+ 	* gcc.target/riscv/cpunative/info_2: New file.
+ 	* gcc.target/riscv/cpunative/info_3: New file.
+ 	* gcc.target/riscv/cpunative/info_4: New file.
+ 	* gcc.target/riscv/cpunative/native_cpu_0.c: New test.
+ 	* gcc.target/riscv/cpunative/native_cpu_1.c: New test.
+ 	* gcc.target/riscv/cpunative/native_cpu_2.c: New test.
+ 	* gcc.target/riscv/cpunative/native_cpu_3.c: New test.
+ 	* gcc.target/riscv/cpunative/native_cpu_4.c: New test.
+ 	* gcc.target/riscv/cpunative/native_cpu_5.c: New test.
+ 	* gcc.target/riscv/cpunative/native_cpu_6.c: New test.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* lib/target-supports.exp
+ 	(check_effective_target_riscv_native_cpu_detect): New.
+ 	* gcc.target/riscv/march-native-1.c: New test.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR testsuite/126923
+ 	* gcc.target/i386/pr106910-1.c: Scan both roundps and vrndscaleps.
+ 	* gcc.target/i386/pr85950.c: Scan both roundsd and vrndscalesd.
+ 	* gcc.target/i386/sse4_1-round-roundeven-1.c: Scan both rounds[ds]
+ 	and vrndscales[ds].
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR testsuite/126923
+ 	* gcc.target/i386/vect-cbranch-cond-any-128.c (dg-options): Add
+ 	-mtune=generic.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR testsuite/126923
+ 	* g++.target/i386/vect-pragma-target-2.C (dg-options): Add
+ 	-march=x86-64.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR testsuite/126923
+ 	* g++.target/i386/vect-pragma-target-1.C (dg-options): Add
+ 	-march=x86-64.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR testsuite/126923
+ 	* gcc.target/i386/sse4_1-stv-10.c: Scan both movaps and vmovdqa.
+ 	* gcc.target/i386/sse4_1-stv-11.c: Likewise.
+ 	* gcc.target/i386/sse4_1-stv-12.c: Likewise.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR testsuite/126923
+ 	* g++.target/i386/pr82625.C (dg-options): Add -march=x86-64.
+ 
+ 2026-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR testsuite/126923
+ 	* gcc.target/i386/avx-loadu2-m128-1.c (dg-options): Add
+ 	-mno-avx512f.
+ 	* gcc.target/i386/avx-loadu2-m128d-1.c (dg-options): Likewise.
+ 	* gcc.target/i386/avx-loadu2-m128i-1.c (dg-options): Likewise.
+ 	* gcc.target/i386/avx-storeu2-m128-1.c (dg-options): Likewise.
+ 	* gcc.target/i386/avx-storeu2-m128d-1.c (dg-options): Likewise.
+ 	* gcc.target/i386/avx-storeu2-m128i-1.c (dg-options): Likewise.
+ 
+ 2026-08-23  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/127004
+ 	* gcc.target/avr/torture/pr127004.c: New test.
+ 
+ 2026-08-23  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/rvv/base/float-point-cvt-f.c: Adjust expected output.
+ 	* gcc.target/riscv/rvv/base/float-point-cvt-x.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-cvt-xu.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-10.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-11.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-12.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-13.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-14.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-15.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-16.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-17.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-18.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-19.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-2.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-20.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-21.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-22.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-23.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-24.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-25.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-26.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-27.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-28.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-29.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-30.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-31.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-32.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-33.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-34.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-35.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-36.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-37.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-38.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-39.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-40.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-41.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-42.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-43.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-44.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-45.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-46.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-47.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-48.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-49.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-5.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-50.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-51.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-52.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-53.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-54.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-55.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-56.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-57.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-58.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-59.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-6.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-60.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-61.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-62.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-63.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-64.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-65.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-66.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-67.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-68.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-7.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-72.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-73.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-74.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-75.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-76.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-77.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-9.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-10.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-2.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-3.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-4.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-5.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-7.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-8.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-frm-insert-9.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-fwmacc.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-macc.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-madd.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-msac.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-msub.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-ncvt-f.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-ncvt-x.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-ncvt-xu.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-nmacc.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-nmadd.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-nmsac.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-nmsub.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-rec7.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-redosum.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-redusum.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-single-div.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-single-mul.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-single-rdiv.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-single-rsub.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-single-sub.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-sqrt.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-wcvt-x.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-wcvt-xu.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-widening-add.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-widening-mul.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-widening-sub.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-wmsac.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-wnmacc.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-wnmsac.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-wredosum.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/float-point-wredusum.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/no-honor-frm-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/pr118103-1.c: Likewise.
+ 	* gcc.target/riscv/rvv/base/pr119164.c: Likewise.
+ 
+ 2026-08-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/126909
+ 	* gfortran.dg/pr126909.f90: New test.
+ 
+ 2026-08-23  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.target/aarch64/prefetch-extend-1.c: New test.
+ 
+ 2026-08-23  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR rtl-optimization/126501
+ 	PR rtl-optimization/126747
+ 	* gcc.c-torture/execute/pr126501.c: New test.
+ 	* gcc.c-torture/execute/pr126747.c: New test.
+ 
+ 2026-08-23  Bohan Lei  <garthlei@linux.alibaba.com>
+ 
+ 	* gcc.target/riscv/autopref-xt-c9501fdvt.c: New test.
+ 
+ 2026-08-23  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/126827
+ 	* gcc.dg/sinhatanh-3.c: Turn off jump threading.
+ 	* gcc.dg/tree-ssa/ceil-1.c: New test.
+ 
+ 2026-08-23  Dominic P  <gcc@gcc.dp11.uk>
+ 
+ 	PR target/71048
+ 	* gcc.target/arm/pr71048.c: New test.
+ 
+ 2026-08-23  Dominic P  <gcc@gcc.dp11.uk>
+ 
+ 	* gcc.target/arm/divmod-order-1.c: New test.
+ 
+ 2026-08-23  Dominic P  <gcc@gcc.dp11.uk>
+ 
+ 	PR tree-optimization/111000
+ 	* gcc.dg/tree-ssa/loop-im-shift-1.c: New test.
+ 
+ 2026-08-23  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmulu_vx-u8-mf8.c: New test.
+ 
+ 2026-08-23  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwmul_vx-i8-mf8.c: New test.
+ 
+ 2026-08-23  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsubu_vx-u8-mf8.c: New test.
+ 
+ 2026-08-23  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwsub_vx-i8-mf8.c: New test.
+ 
+ 2026-08-23  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwaddu_vx-u8-mf8.c: New test.
+ 
+ 2026-08-23  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h:
+ 	Add test helper macros.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i16-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i16-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i16-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i16-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i16-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i32-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i32-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i32-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i32-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i8-m1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i8-m2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i8-m4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i8-mf2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i8-mf4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/group_overlap/vwadd_vx-i8-mf8.c: New test.
+ 
  2026-08-22  Jason Merrill  <jason@redhat.com>
  
  	PR c++/124888
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c gcc-17-20260830/gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/c-c++-common/Wstrict-aliasing2-with-fno.c	Sun Aug 30 22:32:08 2026
***************
*** 0 ****
--- 1,12 ----
+ /* Test the usage of option -Wstrict-aliasing.  */
+ /* Make sure it's enabled even when -fno-strict-aliasing.  */
+ /* Set -Wstrict-aliasing=2 so it warns on casts */
+ /* { dg-do compile } */
+ /* { dg-options "-Wstrict-aliasing=2 -fno-strict-aliasing" } */
+ 
+ int main(int argc, char *argv[])
+ {
+     int x;
+     float *q = (float*) &x; /* { dg-warning "strict-aliasing" } */
+     return x;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c gcc-17-20260830/gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/c-c++-common/Wstrict-aliasing3-with-fno.c	Sun Aug 30 22:32:08 2026
***************
*** 0 ****
--- 1,12 ----
+ /* Test the usage of option -Wstrict-aliasing.  */
+ /* Make sure it's enabled even when -fno-strict-aliasing.  */
+ /* Set -Wstrict-aliasing=3 so that it only warns on dereference */
+ /* { dg-do compile } */
+ /* { dg-options "-Wstrict-aliasing=3 -fno-strict-aliasing" } */
+ 
+ int main(int argc, char *argv[])
+ {
+     int x;
+     *(float*) &x = 42; /* { dg-warning "strict-aliasing" } */
+     return x;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c	Sun Aug 30 22:32:08 2026
***************
*** 3,10 ****
  #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
  
  /* Reduced from Linux kernel's drivers/gpu/drm/i915/display/intel_bios.c  */
! typedef unsigned short u16;
! typedef unsigned int u32;
  typedef unsigned long __kernel_size_t;
  typedef __kernel_size_t size_t;
  
--- 3,10 ----
  #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
  
  /* Reduced from Linux kernel's drivers/gpu/drm/i915/display/intel_bios.c  */
! typedef __UINT16_TYPE__ u16;
! typedef __UINT32_TYPE__ u32;
  typedef unsigned long __kernel_size_t;
  typedef __kernel_size_t size_t;
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c	Sun Aug 30 22:32:08 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* Reduced from coreutils's sum.c: bsd_sum_stream */
  
  /* { dg-additional-options "-fno-exceptions" } */
+ /* { dg-skip-if "" { avr-*-* } } */
  
  typedef __SIZE_TYPE__ size_t;
  typedef unsigned char __uint8_t;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c	Sun Aug 30 22:32:08 2026
***************
*** 7,12 ****
--- 7,13 ----
  /* { dg-additional-options "-Wno-analyzer-too-complex" } */
  /* { dg-additional-options "-Wno-analyzer-symbol-too-complex" } */
  /* { dg-additional-options "-D_POSIX_SOURCE" } */
+ /* { dg-additional-options "-D_DARWIN_C_SOURCE" { target *-*-darwin* } } */
  /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } } */
  
  /* A lexical scanner generated by flex */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c	Sun Aug 30 22:32:08 2026
***************
*** 5,13 ****
  
  /* { dg-additional-options "-Wno-analyzer-too-complex -Wno-analyzer-symbol-too-complex" } */
  /* { dg-additional-options "-D_POSIX_SOURCE" } */
! 
  /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } } */
  /* { dg-skip-if "C++98 builds hit different limits exploring egraph" { c++98_only } } */
  
  /* A lexical scanner generated by flex */
  
--- 5,14 ----
  
  /* { dg-additional-options "-Wno-analyzer-too-complex -Wno-analyzer-symbol-too-complex" } */
  /* { dg-additional-options "-D_POSIX_SOURCE" } */
! /* { dg-additional-options "-D_DARWIN_C_SOURCE" { target *-*-darwin* } } */
  /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } } */
  /* { dg-skip-if "C++98 builds hit different limits exploring egraph" { c++98_only } } */
+ /* { dg-skip-if "isatty" { avr-*-* } } */
  
  /* A lexical scanner generated by flex */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-1.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-1.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-1.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-1.c	Sun Aug 30 22:32:08 2026
***************
*** 1,4 ****
! /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } } */
  
  #include <stdlib.h>
  #include <string.h>
--- 1,4 ----
! /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { { ! hostedlib } || { avr-*-* } } } */
  
  #include <stdlib.h>
  #include <string.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-2.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-2.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-2.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-2.c	Sun Aug 30 22:32:08 2026
***************
*** 1,4 ****
! /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } } */
  
  #include <stdlib.h>
  #include <string.h>
--- 1,4 ----
! /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { { ! hostedlib } || { avr-*-* } } } */
  
  #include <stdlib.h>
  #include <string.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c	Sun Aug 30 22:32:08 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  #include <stdlib.h>
  #include <string.h>
  #include <stdint.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat-2.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat-2.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat-2.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat-2.c	Sun Aug 30 22:32:08 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-strcat.c	Sun Aug 30 22:32:08 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode -Wno-stringop-overflow" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode -Wno-stringop-overflow" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr112792.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr112792.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr112792.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr112792.c	Sun Aug 30 22:32:08 2026
***************
*** 1,7 ****
  /* PR analyzer/112792 ("-Wanalyzer-out-of-bounds false positives seen on
     Linux kernel with certain unions").  */
  
! typedef unsigned int u32;
  
  union msix_perm {
    struct {
--- 1,7 ----
  /* PR analyzer/112792 ("-Wanalyzer-out-of-bounds false positives seen on
     Linux kernel with certain unions").  */
  
! typedef __UINT32_TYPE__ u32;
  
  union msix_perm {
    struct {
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/overlapping-buffers.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/overlapping-buffers.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/overlapping-buffers.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/overlapping-buffers.c	Sun Aug 30 22:32:08 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  /* Test of -Wanalyzer-overlapping-buffers.  */
  
  #include <string.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/pr96653.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/pr96653.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/pr96653.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/pr96653.c	Sun Aug 30 22:32:08 2026
***************
*** 3,11 ****
  
  /* { dg-additional-options "-O1" } */
  
! typedef unsigned int u32;
! typedef long long s64;
! typedef unsigned long long u64;
  
  enum v4l2_ctrl_type {
    V4L2_CTRL_TYPE_INTEGER = 1,
--- 3,11 ----
  
  /* { dg-additional-options "-O1" } */
  
! typedef __UINT32_TYPE__ u32;
! typedef __INT64_TYPE__ s64;
! typedef __UINT64_TYPE__ u64;
  
  enum v4l2_ctrl_type {
    V4L2_CTRL_TYPE_INTEGER = 1,
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/realloc-pr110014.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/realloc-pr110014.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/realloc-pr110014.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/realloc-pr110014.c	Sun Aug 30 22:32:08 2026
***************
*** 1,9 ****
! void *realloc (void *, unsigned long)
    __attribute__((__nothrow__, __leaf__))
    __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__ (2)));
  
  long *
! slurp (long *buffer, unsigned long file_size)
  {
    unsigned long cc;
    if (!__builtin_add_overflow (file_size - file_size % sizeof (long),
--- 1,9 ----
! void *realloc (void *, __SIZE_TYPE__)
    __attribute__((__nothrow__, __leaf__))
    __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__ (2)));
  
  long *
! slurp (long *buffer, __SIZE_TYPE__ file_size)
  {
    unsigned long cc;
    if (!__builtin_add_overflow (file_size - file_size % sizeof (long),
*************** slurp (long *buffer, unsigned long file_
*** 13,25 ****
  }
  
  long *
! slurp1 (long *buffer, unsigned long file_size)
  {
    return (long *) realloc (buffer, file_size - file_size % sizeof (long));
  }
  
  long *
! slurp2 (long *buffer, unsigned long file_size)
  {
    return (long *) realloc (buffer, (file_size / sizeof (long)) * sizeof (long));
  }
--- 13,25 ----
  }
  
  long *
! slurp1 (long *buffer, __SIZE_TYPE__ file_size)
  {
    return (long *) realloc (buffer, file_size - file_size % sizeof (long));
  }
  
  long *
! slurp2 (long *buffer, __SIZE_TYPE__ file_size)
  {
    return (long *) realloc (buffer, (file_size / sizeof (long)) * sizeof (long));
  }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c	Sun Aug 30 22:32:08 2026
*************** test_2 (char const *name, ...)
*** 35,41 ****
    va_list arg;
    va_start (arg, name);
  
!   global_2 = va_arg (arg, int16_t); /* { dg-warning "promoted to 'int'" } */
  
    va_end (arg);
  }
--- 35,41 ----
    va_list arg;
    va_start (arg, name);
  
!   global_2 = va_arg (arg, int16_t); /* { dg-warning "promoted to 'int'" "" { target { ! int16 } } } */
  
    va_end (arg);
  }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/strndup-1.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/strndup-1.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/strndup-1.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/strndup-1.c	Sun Aug 30 22:32:08 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-skip-if "no strndup in libc" { *-*-darwin[789]* *-*-darwin10* hppa*-*-hpux* *-*-mingw* *-*-vxworks* } } */
  /* { dg-additional-options "-D_POSIX_C_SOURCE=200809L" } */
+ /* { dg-additional-options "-D_DARWIN_C_SOURCE" { target *-*-darwin* } } */
  /* { dg-skip-if "requires hosted libstdc++ for stdlib free" { ! hostedlib } } */
  /* { dg-additional-options "-fno-exceptions" } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/taint-index-pr106229.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/taint-index-pr106229.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/taint-index-pr106229.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/taint-index-pr106229.c	Sun Aug 30 22:32:08 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-require-effective-target size20plus } */
+ 
  #include <stdint.h>
  
  /* Attacker-controlled 8 bit values where the array isn't
diff -Nrcpad gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/uninit-pr108704.c gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/uninit-pr108704.c
*** gcc-17-20260823/gcc/testsuite/c-c++-common/analyzer/uninit-pr108704.c	Sun Aug 23 22:32:10 2026
--- gcc-17-20260830/gcc/testsuite/c-c++-common/analyzer/uninit-pr108704.c	Sun Aug 30 22:32:08 2026
***************
*** 1,6 ****
! typedef unsigned short int __uint16_t;
! typedef unsigned int __uint32_t;
! typedef unsigned long int __uint64_t;
  typedef __uint16_t uint16_t;
  typedef __uint32_t uint32_t;
  typedef __uint64_t uint64_t;
--- 1,6 ----
! typedef __UINT16_TYPE__ __uint16_t;
! typedef __UINT32_TYPE__ __uint32_t;
! typedef __UINT64_TYPE__ __uint64_t;
  typedef __uint16_t uint16_t;
  typedef __uint32_t uint32_t;
  typedef __uint64_t uint64_t;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob gcc-17-20260830/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
*** gcc-17-20260823/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob	Sun Aug 23 22:32:11 2026
--- gcc-17-20260830/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob	Sun Aug 30 22:32:08 2026
***************
*** 3,9 ****
         *> { dg-output-file "group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out" }
  
         PROGRAM-ID.   prog.
- 
         ENVIRONMENT DIVISION.
         CONFIGURATION SECTION.
         SPECIAL-NAMES.
--- 3,8 ----
***************
*** 14,32 ****
  
         DATA DIVISION.
         WORKING-STORAGE SECTION.
         77  EUROS    PIC U99v99.
         77  cents    PIC 9,999c.
         77  DOLLARS  Pic $$,$$9.99.
  
         PROCEDURE DIVISION.
!            MOVE 12.34 TO EUROS
!            MULTIPLY euros BY 100 GIVING cents.
             DISPLAY "#" EUROS "# equal #" cents '#'.
             Move 1500 to DOLLARS
             Display "Invoice amount #1 is " DOLLARS '.'.
             Move 12.34 to DOLLARS
             Display "Invoice amount #2 is " DOLLARS '.'.
- 
             GOBACK
             .
         END PROGRAM prog.
--- 13,31 ----
  
         DATA DIVISION.
         WORKING-STORAGE SECTION.
+        77  val      pic 99v99 value 12.34.
         77  EUROS    PIC U99v99.
         77  cents    PIC 9,999c.
         77  DOLLARS  Pic $$,$$9.99.
  
         PROCEDURE DIVISION.
!            MOVE val TO EUROS
!            MULTIPLY val BY 100 GIVING cents.
             DISPLAY "#" EUROS "# equal #" cents '#'.
             Move 1500 to DOLLARS
             Display "Invoice amount #1 is " DOLLARS '.'.
             Move 12.34 to DOLLARS
             Display "Invoice amount #2 is " DOLLARS '.'.
             GOBACK
             .
         END PROGRAM prog.
diff -Nrcpad gcc-17-20260823/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.cob gcc-17-20260830/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.cob
*** gcc-17-20260823/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.cob	Sun Aug 30 22:32:08 2026
***************
*** 0 ****
--- 1,1335 ----
+       *> Do not edit this generated file.  See README.txt
+       *> { dg-do run }
+        *> { dg-output-file "group2/Comprehensive_packed-decimal.out" }
+        identification division.
+        program-id. packed-decimal-move-test.
+        data division.
+        working-storage section.
+        01 var11       pic    9  packed-decimal value     4.
+        01 var12       pic   99  packed-decimal value    34.
+        01 var13       pic  999  packed-decimal value   234.
+        01 var14       pic 9999  packed-decimal value  1234.
+        01 var21       pic    s9 packed-decimal value     4.
+        01 var22       pic   s99 packed-decimal value    34.
+        01 var23       pic  s999 packed-decimal value   234.
+        01 var24       pic s9999 packed-decimal value  1234.
+        01 var21n      pic    s9 packed-decimal value    -4.
+        01 var22n      pic   s99 packed-decimal value   -34.
+        01 var23n      pic  s999 packed-decimal value  -234.
+        01 var24n      pic s9999 packed-decimal value -1234.
+        01 var31       pic    9  packed-decimal with no sign
+                                                        value    4.
+        01 var32       pic   99  packed-decimal with no sign
+                                                        value   34.
+        01 var33       pic  999  packed-decimal with no sign
+                                                        value  234.
+        01 var34       pic 9999  packed-decimal with no sign
+                                                        value 1234.
+        01 var11d      pic    9  packed-decimal.
+        01 var12d      pic   99  packed-decimal.
+        01 var13d      pic  999  packed-decimal.
+        01 var14d      pic 9999  packed-decimal.
+        01 var21d      pic    s9 packed-decimal.
+        01 var22d      pic   s99 packed-decimal.
+        01 var23d      pic  s999 packed-decimal.
+        01 var24d      pic s9999 packed-decimal.
+        01 var21nd     pic    s9 packed-decimal.
+        01 var22nd     pic   s99 packed-decimal.
+        01 var23nd     pic  s999 packed-decimal.
+        01 var24nd     pic s9999 packed-decimal.
+        01 var31d      pic    9  packed-decimal with no sign.
+        01 var32d      pic   99  packed-decimal with no sign.
+        01 var33d      pic  999  packed-decimal with no sign.
+        01 var34d      pic 9999  packed-decimal with no sign.
+        01 failure-count pic 9(3) comp-5 value 0.
+        procedure division.
+        test-packed-decimal.
+            move var11 to var11d
+            if var11d <> 4
+                display "test1 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var11 to var12d
+            if var12d <> 4
+                display "test2 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var11 to var13d
+            if var13d <> 4
+                display "test3 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var11 to var14d
+            if var14d <> 4
+                display "test4 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var12 to var11d
+            if var11d <> 4
+                display "test5 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var12 to var12d
+            if var12d <> 34
+                display "test6 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var12 to var13d
+            if var13d <> 34
+                display "test7 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var12 to var14d
+            if var14d <> 34
+                display "test8 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var13 to var11d
+            if var11d <> 4
+                display "test9 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var13 to var12d
+            if var12d <> 34
+                display "test10 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var13 to var13d
+            if var13d <> 234
+                display "test11 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var13 to var14d
+            if var14d <> 234
+                display "test12 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var14 to var11d
+            if var11d <> 4
+                display "test13 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var14 to var12d
+            if var12d <> 34
+                display "test14 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var14 to var13d
+            if var13d <> 234
+                display "test15 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var14 to var14d
+            if var14d <> 1234
+                display "test16 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var11 to var21d
+            if var21d <> 4
+                display "test17 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var11 to var22d
+            if var22d <> 4
+                display "test18 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var11 to var23d
+            if var23d <> 4
+                display "test19 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var11 to var24d
+            if var24d <> 4
+                display "test20 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var12 to var21d
+            if var21d <> 4
+                display "test21 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var12 to var22d
+            if var22d <> 34
+                display "test22 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var12 to var23d
+            if var23d <> 34
+                display "test23 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var12 to var24d
+            if var24d <> 34
+                display "test24 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var13 to var21d
+            if var21d <> 4
+                display "test25 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var13 to var22d
+            if var22d <> 34
+                display "test26 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var13 to var23d
+            if var23d <> 234
+                display "test27 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var13 to var24d
+            if var24d <> 234
+                display "test28 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var14 to var21d
+            if var21d <> 4
+                display "test29 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var14 to var22d
+            if var22d <> 34
+                display "test30 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var14 to var23d
+            if var23d <> 234
+                display "test31 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var14 to var24d
+            if var24d <> 1234
+                display "test32 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var11 to var21nd
+            if var21nd <> 4
+                display "test33 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var11 to var22nd
+            if var22nd <> 4
+                display "test34 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var11 to var23nd
+            if var23nd <> 4
+                display "test35 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var11 to var24nd
+            if var24nd <> 4
+                display "test36 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var12 to var21nd
+            if var21nd <> 4
+                display "test37 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var12 to var22nd
+            if var22nd <> 34
+                display "test38 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var12 to var23nd
+            if var23nd <> 34
+                display "test39 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var12 to var24nd
+            if var24nd <> 34
+                display "test40 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var13 to var21nd
+            if var21nd <> 4
+                display "test41 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var13 to var22nd
+            if var22nd <> 34
+                display "test42 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var13 to var23nd
+            if var23nd <> 234
+                display "test43 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var13 to var24nd
+            if var24nd <> 234
+                display "test44 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var14 to var21nd
+            if var21nd <> 4
+                display "test45 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var14 to var22nd
+            if var22nd <> 34
+                display "test46 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var14 to var23nd
+            if var23nd <> 234
+                display "test47 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var14 to var24nd
+            if var24nd <> 1234
+                display "test48 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var11 to var31d
+            if var31d <> 4
+                display "test49 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var11 to var32d
+            if var32d <> 4
+                display "test50 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var11 to var33d
+            if var33d <> 4
+                display "test51 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var11 to var34d
+            if var34d <> 4
+                display "test52 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var12 to var31d
+            if var31d <> 4
+                display "test53 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var12 to var32d
+            if var32d <> 34
+                display "test54 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var12 to var33d
+            if var33d <> 34
+                display "test55 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var12 to var34d
+            if var34d <> 34
+                display "test56 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var13 to var31d
+            if var31d <> 4
+                display "test57 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var13 to var32d
+            if var32d <> 34
+                display "test58 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var13 to var33d
+            if var33d <> 234
+                display "test59 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var13 to var34d
+            if var34d <> 234
+                display "test60 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var14 to var31d
+            if var31d <> 4
+                display "test61 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var14 to var32d
+            if var32d <> 34
+                display "test62 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var14 to var33d
+            if var33d <> 234
+                display "test63 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var14 to var34d
+            if var34d <> 1234
+                display "test64 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var21 to var11d
+            if var11d <> 4
+                display "test65 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var21 to var12d
+            if var12d <> 4
+                display "test66 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var21 to var13d
+            if var13d <> 4
+                display "test67 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var21 to var14d
+            if var14d <> 4
+                display "test68 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var22 to var11d
+            if var11d <> 4
+                display "test69 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var22 to var12d
+            if var12d <> 34
+                display "test70 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var22 to var13d
+            if var13d <> 34
+                display "test71 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var22 to var14d
+            if var14d <> 34
+                display "test72 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var23 to var11d
+            if var11d <> 4
+                display "test73 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var23 to var12d
+            if var12d <> 34
+                display "test74 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var23 to var13d
+            if var13d <> 234
+                display "test75 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var23 to var14d
+            if var14d <> 234
+                display "test76 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var24 to var11d
+            if var11d <> 4
+                display "test77 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var24 to var12d
+            if var12d <> 34
+                display "test78 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var24 to var13d
+            if var13d <> 234
+                display "test79 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var24 to var14d
+            if var14d <> 1234
+                display "test80 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var21 to var21d
+            if var21d <> 4
+                display "test81 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var21 to var22d
+            if var22d <> 4
+                display "test82 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var21 to var23d
+            if var23d <> 4
+                display "test83 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var21 to var24d
+            if var24d <> 4
+                display "test84 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var22 to var21d
+            if var21d <> 4
+                display "test85 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var22 to var22d
+            if var22d <> 34
+                display "test86 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var22 to var23d
+            if var23d <> 34
+                display "test87 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var22 to var24d
+            if var24d <> 34
+                display "test88 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var23 to var21d
+            if var21d <> 4
+                display "test89 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var23 to var22d
+            if var22d <> 34
+                display "test90 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var23 to var23d
+            if var23d <> 234
+                display "test91 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var23 to var24d
+            if var24d <> 234
+                display "test92 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var24 to var21d
+            if var21d <> 4
+                display "test93 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var24 to var22d
+            if var22d <> 34
+                display "test94 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var24 to var23d
+            if var23d <> 234
+                display "test95 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var24 to var24d
+            if var24d <> 1234
+                display "test96 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var21 to var21nd
+            if var21nd <> 4
+                display "test97 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var21 to var22nd
+            if var22nd <> 4
+                display "test98 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var21 to var23nd
+            if var23nd <> 4
+                display "test99 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var21 to var24nd
+            if var24nd <> 4
+                display "test100 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var22 to var21nd
+            if var21nd <> 4
+                display "test101 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var22 to var22nd
+            if var22nd <> 34
+                display "test102 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var22 to var23nd
+            if var23nd <> 34
+                display "test103 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var22 to var24nd
+            if var24nd <> 34
+                display "test104 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var23 to var21nd
+            if var21nd <> 4
+                display "test105 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var23 to var22nd
+            if var22nd <> 34
+                display "test106 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var23 to var23nd
+            if var23nd <> 234
+                display "test107 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var23 to var24nd
+            if var24nd <> 234
+                display "test108 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var24 to var21nd
+            if var21nd <> 4
+                display "test109 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var24 to var22nd
+            if var22nd <> 34
+                display "test110 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var24 to var23nd
+            if var23nd <> 234
+                display "test111 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var24 to var24nd
+            if var24nd <> 1234
+                display "test112 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var21 to var31d
+            if var31d <> 4
+                display "test113 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var21 to var32d
+            if var32d <> 4
+                display "test114 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var21 to var33d
+            if var33d <> 4
+                display "test115 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var21 to var34d
+            if var34d <> 4
+                display "test116 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var22 to var31d
+            if var31d <> 4
+                display "test117 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var22 to var32d
+            if var32d <> 34
+                display "test118 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var22 to var33d
+            if var33d <> 34
+                display "test119 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var22 to var34d
+            if var34d <> 34
+                display "test120 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var23 to var31d
+            if var31d <> 4
+                display "test121 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var23 to var32d
+            if var32d <> 34
+                display "test122 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var23 to var33d
+            if var33d <> 234
+                display "test123 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var23 to var34d
+            if var34d <> 234
+                display "test124 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var24 to var31d
+            if var31d <> 4
+                display "test125 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var24 to var32d
+            if var32d <> 34
+                display "test126 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var24 to var33d
+            if var33d <> 234
+                display "test127 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var24 to var34d
+            if var34d <> 1234
+                display "test128 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var21n to var11d
+            if var11d <> 4
+                display "test129 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var21n to var12d
+            if var12d <> 4
+                display "test130 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var21n to var13d
+            if var13d <> 4
+                display "test131 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var21n to var14d
+            if var14d <> 4
+                display "test132 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var22n to var11d
+            if var11d <> 4
+                display "test133 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var22n to var12d
+            if var12d <> 34
+                display "test134 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var22n to var13d
+            if var13d <> 34
+                display "test135 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var22n to var14d
+            if var14d <> 34
+                display "test136 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var23n to var11d
+            if var11d <> 4
+                display "test137 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var23n to var12d
+            if var12d <> 34
+                display "test138 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var23n to var13d
+            if var13d <> 234
+                display "test139 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var23n to var14d
+            if var14d <> 234
+                display "test140 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var24n to var11d
+            if var11d <> 4
+                display "test141 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var24n to var12d
+            if var12d <> 34
+                display "test142 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var24n to var13d
+            if var13d <> 234
+                display "test143 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var24n to var14d
+            if var14d <> 1234
+                display "test144 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var21n to var21d
+            if var21d <> -4
+                display "test145 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var21n to var22d
+            if var22d <> -4
+                display "test146 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var21n to var23d
+            if var23d <> -4
+                display "test147 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var21n to var24d
+            if var24d <> -4
+                display "test148 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var22n to var21d
+            if var21d <> -4
+                display "test149 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var22n to var22d
+            if var22d <> -34
+                display "test150 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var22n to var23d
+            if var23d <> -34
+                display "test151 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var22n to var24d
+            if var24d <> -34
+                display "test152 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var23n to var21d
+            if var21d <> -4
+                display "test153 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var23n to var22d
+            if var22d <> -34
+                display "test154 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var23n to var23d
+            if var23d <> -234
+                display "test155 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var23n to var24d
+            if var24d <> -234
+                display "test156 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var24n to var21d
+            if var21d <> -4
+                display "test157 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var24n to var22d
+            if var22d <> -34
+                display "test158 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var24n to var23d
+            if var23d <> -234
+                display "test159 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var24n to var24d
+            if var24d <> -1234
+                display "test160 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var21n to var21nd
+            if var21nd <> -4
+                display "test161 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var21n to var22nd
+            if var22nd <> -4
+                display "test162 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var21n to var23nd
+            if var23nd <> -4
+                display "test163 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var21n to var24nd
+            if var24nd <> -4
+                display "test164 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var22n to var21nd
+            if var21nd <> -4
+                display "test165 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var22n to var22nd
+            if var22nd <> -34
+                display "test166 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var22n to var23nd
+            if var23nd <> -34
+                display "test167 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var22n to var24nd
+            if var24nd <> -34
+                display "test168 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var23n to var21nd
+            if var21nd <> -4
+                display "test169 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var23n to var22nd
+            if var22nd <> -34
+                display "test170 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var23n to var23nd
+            if var23nd <> -234
+                display "test171 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var23n to var24nd
+            if var24nd <> -234
+                display "test172 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var24n to var21nd
+            if var21nd <> -4
+                display "test173 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var24n to var22nd
+            if var22nd <> -34
+                display "test174 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var24n to var23nd
+            if var23nd <> -234
+                display "test175 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var24n to var24nd
+            if var24nd <> -1234
+                display "test176 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var21n to var31d
+            if var31d <> 4
+                display "test177 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var21n to var32d
+            if var32d <> 4
+                display "test178 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var21n to var33d
+            if var33d <> 4
+                display "test179 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var21n to var34d
+            if var34d <> 4
+                display "test180 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var22n to var31d
+            if var31d <> 4
+                display "test181 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var22n to var32d
+            if var32d <> 34
+                display "test182 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var22n to var33d
+            if var33d <> 34
+                display "test183 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var22n to var34d
+            if var34d <> 34
+                display "test184 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var23n to var31d
+            if var31d <> 4
+                display "test185 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var23n to var32d
+            if var32d <> 34
+                display "test186 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var23n to var33d
+            if var33d <> 234
+                display "test187 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var23n to var34d
+            if var34d <> 234
+                display "test188 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var24n to var31d
+            if var31d <> 4
+                display "test189 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var24n to var32d
+            if var32d <> 34
+                display "test190 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var24n to var33d
+            if var33d <> 234
+                display "test191 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var24n to var34d
+            if var34d <> 1234
+                display "test192 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var31 to var11d
+            if var11d <> 4
+                display "test193 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var31 to var12d
+            if var12d <> 4
+                display "test194 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var31 to var13d
+            if var13d <> 4
+                display "test195 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var31 to var14d
+            if var14d <> 4
+                display "test196 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var32 to var11d
+            if var11d <> 4
+                display "test197 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var32 to var12d
+            if var12d <> 34
+                display "test198 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var32 to var13d
+            if var13d <> 34
+                display "test199 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var32 to var14d
+            if var14d <> 34
+                display "test200 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var33 to var11d
+            if var11d <> 4
+                display "test201 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var33 to var12d
+            if var12d <> 34
+                display "test202 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var33 to var13d
+            if var13d <> 234
+                display "test203 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var33 to var14d
+            if var14d <> 234
+                display "test204 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var34 to var11d
+            if var11d <> 4
+                display "test205 no good " var11d
+                add 1 to failure-count
+            end-if
+            move var34 to var12d
+            if var12d <> 34
+                display "test206 no good " var12d
+                add 1 to failure-count
+            end-if
+            move var34 to var13d
+            if var13d <> 234
+                display "test207 no good " var13d
+                add 1 to failure-count
+            end-if
+            move var34 to var14d
+            if var14d <> 1234
+                display "test208 no good " var14d
+                add 1 to failure-count
+            end-if
+            move var31 to var21d
+            if var21d <> 4
+                display "test209 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var31 to var22d
+            if var22d <> 4
+                display "test210 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var31 to var23d
+            if var23d <> 4
+                display "test211 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var31 to var24d
+            if var24d <> 4
+                display "test212 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var32 to var21d
+            if var21d <> 4
+                display "test213 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var32 to var22d
+            if var22d <> 34
+                display "test214 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var32 to var23d
+            if var23d <> 34
+                display "test215 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var32 to var24d
+            if var24d <> 34
+                display "test216 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var33 to var21d
+            if var21d <> 4
+                display "test217 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var33 to var22d
+            if var22d <> 34
+                display "test218 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var33 to var23d
+            if var23d <> 234
+                display "test219 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var33 to var24d
+            if var24d <> 234
+                display "test220 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var34 to var21d
+            if var21d <> 4
+                display "test221 no good " var21d
+                add 1 to failure-count
+            end-if
+            move var34 to var22d
+            if var22d <> 34
+                display "test222 no good " var22d
+                add 1 to failure-count
+            end-if
+            move var34 to var23d
+            if var23d <> 234
+                display "test223 no good " var23d
+                add 1 to failure-count
+            end-if
+            move var34 to var24d
+            if var24d <> 1234
+                display "test224 no good " var24d
+                add 1 to failure-count
+            end-if
+            move var31 to var21nd
+            if var21nd <> 4
+                display "test225 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var31 to var22nd
+            if var22nd <> 4
+                display "test226 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var31 to var23nd
+            if var23nd <> 4
+                display "test227 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var31 to var24nd
+            if var24nd <> 4
+                display "test228 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var32 to var21nd
+            if var21nd <> 4
+                display "test229 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var32 to var22nd
+            if var22nd <> 34
+                display "test230 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var32 to var23nd
+            if var23nd <> 34
+                display "test231 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var32 to var24nd
+            if var24nd <> 34
+                display "test232 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var33 to var21nd
+            if var21nd <> 4
+                display "test233 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var33 to var22nd
+            if var22nd <> 34
+                display "test234 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var33 to var23nd
+            if var23nd <> 234
+                display "test235 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var33 to var24nd
+            if var24nd <> 234
+                display "test236 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var34 to var21nd
+            if var21nd <> 4
+                display "test237 no good " var21nd
+                add 1 to failure-count
+            end-if
+            move var34 to var22nd
+            if var22nd <> 34
+                display "test238 no good " var22nd
+                add 1 to failure-count
+            end-if
+            move var34 to var23nd
+            if var23nd <> 234
+                display "test239 no good " var23nd
+                add 1 to failure-count
+            end-if
+            move var34 to var24nd
+            if var24nd <> 1234
+                display "test240 no good " var24nd
+                add 1 to failure-count
+            end-if
+            move var31 to var31d
+            if var31d <> 4
+                display "test241 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var31 to var32d
+            if var32d <> 4
+                display "test242 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var31 to var33d
+            if var33d <> 4
+                display "test243 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var31 to var34d
+            if var34d <> 4
+                display "test244 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var32 to var31d
+            if var31d <> 4
+                display "test245 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var32 to var32d
+            if var32d <> 34
+                display "test246 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var32 to var33d
+            if var33d <> 34
+                display "test247 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var32 to var34d
+            if var34d <> 34
+                display "test248 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var33 to var31d
+            if var31d <> 4
+                display "test249 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var33 to var32d
+            if var32d <> 34
+                display "test250 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var33 to var33d
+            if var33d <> 234
+                display "test251 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var33 to var34d
+            if var34d <> 234
+                display "test252 no good " var34d
+                add 1 to failure-count
+            end-if
+            move var34 to var31d
+            if var31d <> 4
+                display "test253 no good " var31d
+                add 1 to failure-count
+            end-if
+            move var34 to var32d
+            if var32d <> 34
+                display "test254 no good " var32d
+                add 1 to failure-count
+            end-if
+            move var34 to var33d
+            if var33d <> 234
+                display "test255 no good " var33d
+                add 1 to failure-count
+            end-if
+            move var34 to var34d
+            if var34d <> 1234
+                display "test256 no good " var34d
+                add 1 to failure-count
+            end-if
+            if failure-count = 0
+                display "All 256 packed-decimal MOVE tests passed"
+            else
+                display failure-count
+                    " packed-decimal MOVE tests failed"
+            end-if
+            move failure-count to return-code
+            goback.
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.out gcc-17-20260830/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.out
*** gcc-17-20260823/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/cobol.dg/group2/Comprehensive_packed-decimal.out	Sun Aug 30 22:32:08 2026
***************
*** 0 ****
--- 1,2 ----
+ All 256 packed-decimal MOVE tests passed
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob gcc-17-20260830/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob
*** gcc-17-20260823/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob	Sun Aug 23 22:32:11 2026
--- gcc-17-20260830/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.cob	Sun Aug 30 22:32:08 2026
***************
*** 4,14 ****
          program-id. sqbug.
          procedure division.
          if function sqrt (0) = 0    *>    if4034.2
!             display 'ok' else display 'bad'.
          display "sqrt(0) " """" function trim (function exception-status) """"
          set last exception to off
          if function sqrt (-0.1) = 0    *>    if4034.2
!             display 'ok' else display 'bad'.
          display "sqrt(-0.1) " """" function trim (function exception-status) """"
          goback.
  
--- 4,14 ----
          program-id. sqbug.
          procedure division.
          if function sqrt (0) = 0    *>    if4034.2
!             display 'ok' else display 'IMPROPER bad'.
          display "sqrt(0) " """" function trim (function exception-status) """"
          set last exception to off
          if function sqrt (-0.1) = 0    *>    if4034.2
!             display 'IMPROPER ok' else display 'properly bad'.
          display "sqrt(-0.1) " """" function trim (function exception-status) """"
          goback.
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out gcc-17-20260830/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out
*** gcc-17-20260823/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out	Sun Aug 23 22:32:11 2026
--- gcc-17-20260830/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT__2_.out	Sun Aug 30 22:32:08 2026
***************
*** 1,5 ****
  ok
  sqrt(0) ""
! bad
  sqrt(-0.1) "EC-ARGUMENT-FUNCTION"
  
--- 1,5 ----
  ok
  sqrt(0) ""
! properly bad
  sqrt(-0.1) "EC-ARGUMENT-FUNCTION"
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob gcc-17-20260830/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob
*** gcc-17-20260823/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob	Sun Aug 23 22:32:11 2026
--- gcc-17-20260830/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob	Sun Aug 30 22:32:08 2026
***************
*** 1,11 ****
        *> Do not edit this generated file.  See README.txt
        *> { dg-do run }
!        *> { dg-options "-Wno-any-length" }
         *> { dg-output-file "group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out" }
  
         IDENTIFICATION DIVISION.
         PROGRAM-ID. prog.
- 
         PROCEDURE DIVISION.
         PROG-MAIN.
             CALL "subprog" USING BY CONTENT
--- 1,10 ----
        *> Do not edit this generated file.  See README.txt
        *> { dg-do run }
!        *> { dg-options "-dialect ibm" }
         *> { dg-output-file "group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out" }
  
         IDENTIFICATION DIVISION.
         PROGRAM-ID. prog.
         PROCEDURE DIVISION.
         PROG-MAIN.
             CALL "subprog" USING BY CONTENT
***************
*** 15,29 ****
         *> *****************************
         IDENTIFICATION DIVISION.
         PROGRAM-ID. subprog.
- 
         DATA DIVISION.
         LINKAGE SECTION.
         01 TESTING PIC X ANY LENGTH.
- 
         PROCEDURE DIVISION USING TESTING.
         SUBPROG-MAIN.
             DISPLAY TESTING
             GOBACK.
         END PROGRAM subprog.
!        END PROGRAM prog. *> bzzt
  
--- 14,26 ----
         *> *****************************
         IDENTIFICATION DIVISION.
         PROGRAM-ID. subprog.
         DATA DIVISION.
         LINKAGE SECTION.
         01 TESTING PIC X ANY LENGTH.
         PROCEDURE DIVISION USING TESTING.
         SUBPROG-MAIN.
             DISPLAY TESTING
             GOBACK.
         END PROGRAM subprog.
!        END PROGRAM prog.
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/contracts-class1.C gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/contracts-class1.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/contracts-class1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/contracts-class1.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,16 ----
+ // Check whether deferred deduction works correctly when post conditions
+ // are used in member functions.
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-fcontracts" }
+ 
+ bool check (bool b) { return b; }
+ 
+ bool e;
+ 
+ class S
+ {
+   auto f ()
+     post (r: check (r))
+     post (r: r)
+   { return e; }
+ };
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t1.C gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t1.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t1.C	Sun Aug 23 22:32:11 2026
--- gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t1.C	Sun Aug 30 22:32:09 2026
*************** void PostCondT<int>::f<NTClass>(NTClass,
*** 99,109 ****
  
  template <typename T>
  int f2(const T i[10])
! post(r : r == i[0]){ return 1;};
  
  template
  int f2<int>(const int i[10]);
! // { dg-error "used in a postcondition must be const" "" { target *-*-* } 101  }
  
  // P3520
  template <typename T>
--- 99,109 ----
  
  template <typename T>
  int f2(const T i[10])
! post(r : r == i[0]){ return 1;}; // { dg-error "used in a postcondition must be const" } on use
  
  template
  int f2<int>(const int i[10]);
! // { dg-error "used in a postcondition must be const" "" { target *-*-* } 101  } on decl
  
  // P3520
  template <typename T>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t2.C gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t2.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t2.C	Sun Aug 23 22:32:11 2026
--- gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/dcl.contract.func.p7-t2.C	Sun Aug 30 22:32:09 2026
*************** void PostCondT<const int>::f<const NTCla
*** 94,104 ****
  
  template <typename T>
  int f2(const T i[10])
! post(r : r == i[0]){ return 1;};
  
  template
  int f2<const int>(const int i[10]);
! // { dg-error "used in a postcondition must be const" "" { target *-*-* } 96  }
  
  // P3520
  template <typename T>
--- 94,104 ----
  
  template <typename T>
  int f2(const T i[10])
! post(r : r == i[0]){ return 1;}; // { dg-error "used in a postcondition must be const" } on use
  
  template
  int f2<const int>(const int i[10]);
! // { dg-error "used in a postcondition must be const" "" { target *-*-* } 96  } on decl
  
  // P3520
  template <typename T>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/fold-pr125645.C gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/fold-pr125645.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/fold-pr125645.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/fold-pr125645.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/125645
+ // { dg-do run { target c++26 } }
+ // { dg-additional-options "-fcontracts -fcontract-evaluation-semantic=enforce" }
+ // { dg-skip-if "requires hosted libstdc++ for stdc++exp" { ! hostedlib } }
+ 
+ template<typename... Args>
+   void f (Args... args)
+     pre (((args) && ...))
+     post (((args) && ...)) {}
+ 
+ int main () {
+   f<const bool> (true);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/specialization-pr125712.C gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/specialization-pr125712.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/specialization-pr125712.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/specialization-pr125712.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,48 ----
+ // PR c++/125712
+ // { dg-do run { target c++26 } }
+ // { dg-additional-options "-fcontracts -fcontract-evaluation-semantic=observe" }
+ // { dg-skip-if "requires hosted libstdc++ for stdc++exp" { ! hostedlib } }
+ 
+ template<typename>
+   void f (bool p) pre (p);
+ template void f<int> (bool);
+ template<typename>
+   void f (bool) {}
+ 
+ template<typename T>
+   struct Add
+   {
+     template<typename U> void f (U) {}
+   };
+ template<> template<typename U>
+   void Add<int>::f (U u) pre (u) {}
+ 
+ template<typename T>
+   struct Remove
+   {
+     template<typename U> void f (U u) pre (u) {}
+   };
+ template<> template<typename U>
+   void Remove<int>::f (U) {}
+ 
+ template<typename T>
+   struct Replace
+   {
+     template<typename U> void f (U u) pre (u) {}
+   };
+ template<> template<typename U>
+   void Replace<int>::f (U u) pre (u) {}
+ 
+ int
+ main ()
+ {
+   f<int> (true);
+   Add<int>{}.f (false);
+   Remove<int>{}.f (false);
+   Replace<int>{}.f (false);
+ }
+ 
+ // { dg-output {contract violation in function void Add<T>::f\(U\) \[with U = bool; T = int\] at .*:18: u(\n|\r\n|\r)} }
+ // { dg-output {\[assertion_kind: pre, semantic: observe, mode: predicate_false, terminating: no\](\n|\r\n|\r)} }
+ // { dg-output {contract violation in function void Replace<T>::f\(U\) \[with U = bool; T = int\] at .*:34: u(\n|\r\n|\r)} }
+ // { dg-output {\[assertion_kind: pre, semantic: observe, mode: predicate_false, terminating: no\](\n|\r\n|\r)} }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/template-post-pr125011.C gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/template-post-pr125011.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/template-post-pr125011.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/template-post-pr125011.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/125011
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-fcontracts" }
+ 
+ template<bool x>
+   bool f()
+     post(r: r == x)
+   {
+     return x;
+   }
+ 
+ template bool f<true> ();
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/template-post1.C gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/template-post1.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/contracts/cpp26/template-post1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/contracts/cpp26/template-post1.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/125537
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-fcontracts" }
+ 
+ template<typename>
+   auto f (const bool b)
+     pre (b)
+     post (b)
+     post (r: r)
+   {
+     return b;
+   }
+ 
+ 
+ int main ()
+ {
+   f<bool> (true);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp/line-1.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp/line-1.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp/line-1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp/line-1.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,18 ----
+ // C++26 P4136R2 - #line is not in line with existing implementation
+ // { dg-do compile }
+ // { dg-options "-Wpedantic" }
+ 
+ #line 6
+ #line 0				// { dg-warning "line number out of range" }
+ #line 8
+ #line 2147483647		// { dg-warning "line number out of range" "" { target c++98_only } }
+ #line 10
+ #line 2147483648		// { dg-warning "line number out of range" }
+ #line 12
+ #line 4294967295		// { dg-warning "line number out of range" }
+ #line 14
+ #line 4294967296		// { dg-warning "line number out of range" }
+ #line 16
+ #line 9223372036854775807	// { dg-warning "line number out of range" }
+ #line 18
+ #line 9223372036854775808	// { dg-warning "line number out of range" }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp/line-2.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp/line-2.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp/line-2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp/line-2.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,18 ----
+ // C++26 P4136R2 - #line is not in line with existing implementation
+ // { dg-do compile }
+ // { dg-options "" }
+ 
+ #line 6
+ #line 0
+ #line 8
+ #line 2147483647
+ #line 10
+ #line 2147483648
+ #line 12
+ #line 4294967295
+ #line 14
+ #line 4294967296		// { dg-warning "line number out of range" }
+ #line 16
+ #line 9223372036854775807	// { dg-warning "line number out of range" }
+ #line 18
+ #line 9223372036854775808	// { dg-warning "line number out of range" }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp/line-3.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp/line-3.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp/line-3.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp/line-3.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,18 ----
+ // C++26 P4136R2 - #line is not in line with existing implementation
+ // { dg-do compile }
+ // { dg-options "-pedantic-errors" }
+ 
+ #line 6
+ #line 0				// { dg-error "line number out of range" }
+ #line 8
+ #line 2147483647		// { dg-error "line number out of range" "" { target c++98_only } }
+ #line 10
+ #line 2147483648		// { dg-error "line number out of range" }
+ #line 12
+ #line 4294967295		// { dg-error "line number out of range" }
+ #line 14
+ #line 4294967296		// { dg-error "line number out of range" }
+ #line 16
+ #line 9223372036854775807	// { dg-error "line number out of range" }
+ #line 18
+ #line 9223372036854775808	// { dg-error "line number out of range" }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp0x/alias-decl-nontype2.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp0x/alias-decl-nontype2.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp0x/alias-decl-nontype2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp0x/alias-decl-nontype2.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,11 ----
+ // PR c++/126828
+ // { dg-do compile { target c++11 } }
+ 
+ template <int> class a{};
+ template <int b> using c = a<b>;
+ template <int> void d() {
+   constexpr unsigned blocksize = 8;
+   [&] {
+     c<blocksize> g;
+   };
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp0x/initlist-array26.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp0x/initlist-array26.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp0x/initlist-array26.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp0x/initlist-array26.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,39 ----
+ // PR c++/127016
+ // { dg-do compile { target c++14 } }
+ // Assigning {} to an aggregate with an array member that has a default
+ // member initializer, where the element type needs a loop to initialize.
+ 
+ struct NonTrivial {
+   NonTrivial () {}
+   int v = 0;
+ };
+ 
+ struct Elem {
+   NonTrivial n;
+   int x{};
+ };
+ 
+ struct Bug {
+   bool flag{true};
+   Elem arr[2]{};
+ };
+ 
+ void
+ f (Bug *p)
+ {
+   *p = {};
+ }
+ 
+ void g (Bug);
+ 
+ void
+ h ()
+ {
+   g ({});
+ }
+ 
+ Bug
+ i ()
+ {
+   return {};
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept1.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept1.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept1.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,73 ----
+ // C++29 P3822R2 - Conditional noexcept specifiers in compound requirements
+ // { dg-do compile { target c++20 } }
+ // { dg-options "" }
+ 
+ int foo ();
+ int bar () noexcept;
+ struct A { int foo (); };
+ struct B { int foo () noexcept; };
+ struct C { int foo (); char c[42]; };
+ struct D { int foo () noexcept; char c[42]; };
+ struct E { long foo (); };
+ struct F { long foo () noexcept; };
+ struct G { long foo (); char c[42]; };
+ struct H { long foo () noexcept; char c[42]; };
+ template <bool B>
+ struct J { constexpr operator bool () { return B; }; };
+ template <typename T, typename U>
+ constexpr bool s = false;
+ template <typename T>
+ constexpr bool s <T, T> = true;
+ template <typename T, typename U>
+ concept S = s <T, U>;
+ 
+ static_assert (!requires { { foo () } noexcept; });
+ static_assert (!requires { { foo () } noexcept (true); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { foo () } noexcept (false); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (!requires { { foo () } noexcept (42 == 42); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { foo () } noexcept (42 != 42); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (!requires { { foo () } noexcept (J <true> {}); });// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { foo () } noexcept (J <false> {}); });// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept; });
+ static_assert (requires { { bar () } noexcept (true); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept (false); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept (42 == 42); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept (42 != 42); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept (J <true> {}); });// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept (J <false> {}); });// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ 
+ template <typename T, bool B>
+ concept V = requires (T t) { { t.foo () } noexcept (B); };	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ 
+ static_assert (V <A, false>);
+ static_assert (!V <A, true>);
+ static_assert (V <B, false>);
+ static_assert (V <B, true>);
+ 
+ template <typename T>
+ concept W = requires (T t) {
+   { t.foo () } noexcept (sizeof (T) > sizeof (A)) -> S <int>;	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ };
+ 
+ static_assert (W <A>);
+ static_assert (W <B>);
+ static_assert (!W <C>);
+ static_assert (W <D>);
+ static_assert (!W <E>);
+ static_assert (!W <F>);
+ static_assert (!W <G>);
+ static_assert (!W <H>);
+ 
+ template <typename T>
+ struct I { static constexpr bool i = sizeof (T) > sizeof (A); };
+ template <typename T>
+ concept Z = requires (T t) { { t.foo () } noexcept (I <T>::i); }; // { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ 
+ static_assert (Z <A>);
+ static_assert (Z <B>);
+ static_assert (!Z <C>);
+ static_assert (Z <D>);
+ static_assert (Z <E>);
+ static_assert (Z <F>);
+ static_assert (!Z <G>);
+ static_assert (Z <H>);
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept2.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept2.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept2.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,39 ----
+ // C++29 P3822R2 - Conditional noexcept specifiers in compound requirements
+ // { dg-do compile { target c++20 } }
+ // { dg-options "" }
+ 
+ template <typename T, int N>
+ concept A = sizeof (T) < N;
+ template <typename T>
+ concept B = A <T, 1000>;
+ template <typename T>
+ struct C { using type = T; };
+ 
+ template <typename T>
+ void foo (int n)
+ requires requires {
+   T ();
+   n;
+   n == T ();
+   { T () + 1 } -> B;
+   { T () - 1 } noexcept;
+   { T () * 1 } noexcept -> A <1234>;
+   { T () + 2 } noexcept (true);				// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+   { T () - 2 } noexcept (true) -> A <1234>;		// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+   { T () * 2 } noexcept (false);			// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+   { T () + 3 } noexcept (false) -> A <1234>;		// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+   { T () - 3 } noexcept (sizeof (T) > 100);		// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+   { T () * 3 } noexcept (sizeof (T) > 100) -> A <1234>;	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+   typename T;
+   typename C <T>;
+   typename C <T>::type;
+   typename C <decltype (n)>;
+   requires A <T, 256>;
+ }
+ {
+ }
+ 
+ template
+ void foo <int> (int);
+ 
+ // { dg-final { scan-assembler "_Z3fooIiEviQrqXcvT__EXfL0p_XeqfL0p_cvS0__EXplcvS0__ELi1ER1BXmicvS0__ELi1ENXmlcvS0__ELi1ENR1AILi1234EEXplcvS0__ELi2ENXmicvS0__ELi2ENR1AILi1234EEXmlcvS0__ELi2EXplcvS0__ELi3ER1AILi1234EEXmicvS0__ELi3ECgtstS0_Li100EXmlcvS0__ELi3ECgtstS0_Li100ER1AILi1234EETS0_T1CIS0_ETNS2_4typeETS1_IiEQ1AIS0_Li256EEE" } }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept3.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept3.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept3.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept3.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,46 ----
+ // C++29 P3822R2 - Conditional noexcept specifiers in compound requirements
+ // { dg-do compile { target c++29 } }
+ 
+ #include <concepts>
+ #include <memory>
+ #include <type_traits>
+ #include <utility>
+ 
+ template <typename R, typename... Args>
+ struct vtbl { virtual auto call (Args &&...) -> R = 0; virtual ~vtbl () noexcept {}; };
+ 
+ template <typename T, typename R, typename... Args>
+ struct impl : vtbl <R, Args...> {
+   impl (auto &&y) : x { std::forward <decltype (y)> (y) } {}
+   auto call (Args &&...xs) -> R override { return x (static_cast <Args &&> (xs)...); }
+   T x;
+ };
+ 
+ template <typename F>
+ struct any_f;
+ 
+ template <typename X, bool noexc, typename R, typename...Args>
+ concept invocable_r = requires (X x, Args...xs) {
+   { x (static_cast <Args> (xs)...) } noexcept (noexc) -> std::convertible_to <R>;
+ };
+ 
+ template <typename X, typename T>
+ concept not_same = !std::same_as <std::decay_t <X>, T>;
+ 
+ template <typename R, typename... Args, bool noexc>
+ struct any_f <R (Args...) noexcept (noexc)> {
+   template <not_same <any_f> T>
+   any_f (T &&x)
+     requires invocable_r <T &, noexc, R, Args...>
+     : f (new impl <std::decay_t <T>, R, Args...> (std::forward <T> (x))) {}
+   auto operator () (std::convertible_to <Args> auto &&...xs) noexcept (noexc) -> R {
+     return f->call (std::forward <decltype (xs)> (xs)...);
+   }
+   std::unique_ptr <vtbl <R, Args...>> f;
+ };
+ 
+ int
+ main ()
+ {
+   any_f <int (long, long) noexcept> x ([] (long, long) noexcept -> int { return 2; });
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept4.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept4.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept4.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept4.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,29 ----
+ // C++29 P3822R2 - Conditional noexcept specifiers in compound requirements
+ // { dg-do compile { target c++20 } }
+ // { dg-options "" }
+ 
+ int foo ();
+ int bar () noexcept;
+ template <bool N>
+ struct A {};
+ template <bool N>
+ struct B { constexpr operator bool () { return N; }; };
+ struct C { int foo (); };
+ struct D { int foo () noexcept (true); };
+ 
+ static_assert (requires { { foo () } noexcept (B <false> {}); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (!requires { { foo () } noexcept (B <true> {}); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept (B <false> {}); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ static_assert (requires { { bar () } noexcept (B <true> {}); });	// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ 
+ template <typename T, typename U>
+ concept V = requires (T t) { { t.foo () } noexcept (U {}); };		// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ 
+ static_assert (!V <C, A <false>>);
+ static_assert (!V <C, A <true>>);
+ static_assert (!V <D, A <false>>);
+ static_assert (!V <D, A <true>>);
+ static_assert (V <C, B <false>>);
+ static_assert (!V <C, B <true>>);
+ static_assert (V <D, B <false>>);
+ static_assert (V <D, B <true>>);
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept5.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept5.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept5.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/complex-req-noexcept5.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,27 ----
+ // C++29 P3822R2 - Conditional noexcept specifiers in compound requirements
+ // { dg-do compile { target c++20 } }
+ // { dg-options "" }
+ 
+ int foo ();
+ int bar () noexcept;
+ template <bool N>
+ struct A {};
+ template <bool N>
+ struct B { constexpr operator bool () { return N; }; };
+ struct C { int foo (); };
+ struct D { int foo () noexcept (true); };
+ 
+ bool a = requires { { foo () } noexcept (A <false> {}); };		// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ // { dg-error "could not convert 'A<false>\\\(\\\)' from 'A<false>' to 'bool'" "" { target *-*-* } .-1 }
+ bool b = requires { { foo () } noexcept (A <true> {}); };		// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ // { dg-error "could not convert 'A<true>\\\(\\\)' from 'A<true>' to 'bool'" "" { target *-*-* } .-1 }
+ 
+ template <typename T, typename U>
+ concept V = requires (T t) { { t.foo () } noexcept (U {}); };		// { dg-warning "conditional 'noexcept' in compound requirement only available with" "" { target c++26_down } }
+ // { dg-error "could not convert 'A<false>\\\(\\\)' from 'A<false>' to 'bool'" "" { target *-*-* } .-1 }
+ // { dg-error "could not convert 'A<true>\\\(\\\)' from 'A<true>' to 'bool'" "" { target *-*-* } .-2 }
+ 
+ static_assert (V <C, A <false>>);					// { dg-error "static assertion failed" }
+ static_assert (V <C, A <true>>);					// { dg-error "static assertion failed" }
+ static_assert (V <D, A <false>>);					// { dg-error "static assertion failed" }
+ static_assert (V <D, A <true>>);					// { dg-error "static assertion failed" }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C	Sun Aug 23 22:32:12 2026
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C	Sun Aug 30 22:32:09 2026
***************
*** 487,494 ****
  
  #ifndef __cpp_concepts
  #  error "__cpp_concepts"
! #elif __cpp_concepts != 202002
! #  error "__cpp_concepts != 202002"
  #endif
  
  #ifndef __cpp_using_enum
--- 487,494 ----
  
  #ifndef __cpp_concepts
  #  error "__cpp_concepts"
! #elif __cpp_concepts != 202606
! #  error "__cpp_concepts != 202606"
  #endif
  
  #ifndef __cpp_using_enum
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor20.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor20.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor20.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor20.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,27 ----
+ // PR c++/127046
+ // { dg-do run { target c++20 } }
+ 
+ struct T {
+   char padding[4] = { 'x' };
+   constexpr ~T () {}
+ };
+ 
+ constexpr bool
+ test ()
+ {
+   T array[3] = {};
+   return (array[0].padding[0] == 'x'
+ 	  && array[1].padding[0] == 'x'
+ 	  && array[2].padding[0] == 'x');
+ }
+ 
+ static_assert (test ());
+ 
+ bool (*volatile fp) () = test;
+ 
+ int
+ main ()
+ {
+   if (!fp ())
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/cpp2a/pr125343.C gcc-17-20260830/gcc/testsuite/g++.dg/cpp2a/pr125343.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/cpp2a/pr125343.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/cpp2a/pr125343.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,35 ----
+ // PR c++/125343
+ // { dg-do compile { target c++20 } }
+ 
+ void f1()
+ {
+   []<struct S {}>() {}; // { dg-error "types may not be defined in parameter types" }
+   // { dg-error "definition of .struct f1..::<lambda>::S. inside template parameter list" "" { target *-*-* } .-1 }
+   [] {};
+ }
+ 
+ void f2()
+ {
+   []<struct {}>() {}; // { dg-error "types may not be defined in parameter types" }
+   // { dg-error "definition of .struct f2..::<lambda>::<unnamed>. inside template parameter list" "" { target *-*-* } .-1 }
+ }
+ 
+ void f3()
+ {
+   []<class T = struct S {}>() {};
+   // { dg-error "definition of .struct f3..::<lambda>::S. inside template parameter list" "" { target *-*-* } .-1 }
+ }
+ 
+ void f4()
+ {
+   []<template <union U {}> class T>() {}; // { dg-error "types may not be defined in parameter types" }
+   // { dg-error "definition of .union f4..::<lambda>::U. inside template parameter list" "" { target *-*-* } .-1 }
+ }
+ 
+ void f5()
+ {
+   []<struct S {}; // { dg-error "types may not be defined in parameter types" }
+   // { dg-error "definition of .struct f5..::<lambda>::S. inside template parameter list" "" { target *-*-* } .-1 }
+   // { dg-error "expected .>. before .;. token" "" { target *-*-* } .-2 }
+   // { dg-error "expected '\\\{' before ';' token" "" { target *-*-* } .-3 }
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/gcov/gcov-12.C gcc-17-20260830/gcc/testsuite/g++.dg/gcov/gcov-12.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/gcov/gcov-12.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.dg/gcov/gcov-12.C	Sun Aug 30 22:32:09 2026
***************
*** 2,7 ****
--- 2,8 ----
  /* { dg-options "-fprofile-arcs -ftest-coverage -fpic -fno-implicit-constexpr" } */
  /* { dg-do run } */
  /* { dg-additional-sources "gcovpart-12b.C" } */
+ /* { dg-require-effective-target fpic } */
  
  struct Foo {
    Foo ()
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/torture/pr127049.C gcc-17-20260830/gcc/testsuite/g++.dg/torture/pr127049.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/torture/pr127049.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/torture/pr127049.C	Sun Aug 30 22:32:09 2026
***************
*** 0 ****
--- 1,74 ----
+ // { dg-do run }
+ // { dg-additional-options "-std=c++23" }
+ 
+ #include <cstddef>
+ #include <cstdint>
+ #include <cstdio>
+ #include <cstdlib>
+ #include <span>
+ #include <vector>
+ #include <algorithm>
+ 
+ static constexpr std::size_t D = 3;
+ static constexpr std::size_t LEAF = 32;
+ static constexpr float INF = 1e15f;
+ 
+ struct LeafBucket {
+      alignas(64) float coords[D][LEAF];
+      uint32_t ids[LEAF];
+ };
+ 
+ struct FatPoint {
+      float coords[D];
+      unsigned payload_id;
+ };
+ 
+ struct Builder {
+      std::span<FatPoint> temp_pts;
+      std::span<float> vals;
+      std::span<std::uint64_t> dims;
+      std::span<LeafBucket> buckets;
+      std::size_t B;
+ 
+      void build(std::size_t start, std::size_t end, std::size_t 
+ node_idx, std::size_t current_buckets) {
+          const std::size_t size = end - start;
+          if (size == 0) return;
+          if (node_idx >= B - 1) {
+              const std::size_t bucket_idx = node_idx - (B - 1);
+              for (std::size_t i = 0; i < size; ++i) {
+                  for (std::size_t d = 0; d < D; ++d)
+                      buckets[bucket_idx].coords[d][i] = temp_pts[start + 
+ i].coords[d];
+                  buckets[bucket_idx].ids[i] = temp_pts[start + 
+ i].payload_id;
+              }
+              // Padding-fill loop below is the faulting loop.
+              for (std::size_t i = size; i < LEAF; ++i) {
+                  for (std::size_t d = 0; d < D; ++d)
+                      buckets[bucket_idx].coords[d][i] = INF;
+                  buckets[bucket_idx].ids[i] = 0xFFFFFFFFu;
+              }
+              return;
+          }
+          const std::size_t mid = start + current_buckets;
+          std::nth_element(temp_pts.begin() + start, temp_pts.begin() + 
+ mid, temp_pts.begin() + end,
+              [](const FatPoint& a, const FatPoint& b){ return 
+ a.coords[0] < b.coords[0]; });
+          build(start, mid, 2 * node_idx + 1, 0);
+          build(mid, end, 2 * node_idx + 2, 0);
+      }
+ };
+ 
+ int main() {
+      std::vector<LeafBucket> buckets(1);
+      std::vector<FatPoint> pts(3);
+      std::vector<float> vals(0);
+      std::vector<std::uint64_t> dims(0);
+      for (std::size_t i = 0; i < 3; ++i)
+          for (std::size_t d = 0; d < D; ++d) pts[i].coords[d] = (float)i;
+      Builder b{pts, vals, dims, buckets, 1};
+      b.build(0, 3, 0, 1);
+      return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-1.C gcc-17-20260830/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-1.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-1.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-1.C	Sun Aug 30 22:32:09 2026
***************
*** 1,7 ****
! // { dg-do compile }
  // { dg-options "-O2 -fdump-tree-optimized" }
! // { dg-additional-options "-msse4" { target { i?86-*-* x86_64-*-* } } }
! // { dg-require-effective-target int128 { target { i?86-*-* x86_64-*-* } } }
  // Extension is monotone, so it commutes with the comparison and the outer
  // truncation is exact.  The argument is lanewise, so a widened vector
  // MIN/MAX feeding a truncating conversion narrows.
--- 1,7 ----
! // { dg-do compile { target { x86 || aarch64*-*-* } } }
  // { dg-options "-O2 -fdump-tree-optimized" }
! // { dg-additional-options "-msse4" { target x86 } }
! // { dg-require-effective-target int128 { target x86 } }
  // Extension is monotone, so it commutes with the comparison and the outer
  // truncation is exact.  The argument is lanewise, so a widened vector
  // MIN/MAX feeding a truncating conversion narrows.
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-minmax-2.C gcc-17-20260830/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-minmax-2.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-minmax-2.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.dg/tree-ssa/vec-narrow-minmax-2.C	Sun Aug 30 22:32:09 2026
***************
*** 1,7 ****
  // { dg-do compile }
! // { dg-options "-O2 -fdump-tree-optimized" }
! // { dg-additional-options "-msse4" { target { i?86-*-* x86_64-*-* } } }
! // { dg-require-effective-target int128 { target { i?86-*-* x86_64-*-* } } }
  
  typedef int v2si __attribute__((vector_size (8)));
  typedef long long v2di __attribute__((vector_size (16)));
--- 1,7 ----
  // { dg-do compile }
! // { dg-options "-O2 -fdump-tree-forwprop1" }
! // { dg-additional-options "-msse4" { target x86 } }
! // { dg-require-effective-target int128 { target x86 } }
  
  typedef int v2si __attribute__((vector_size (8)));
  typedef long long v2di __attribute__((vector_size (16)));
*************** f (v2si a, v2si b, v2di *p)
*** 17,20 ****
  }
  
  // A shared wide MIN must not gain a second narrow MIN.
! // { dg-final { scan-tree-dump-times "MIN_EXPR" 1 "optimized" } }
--- 17,20 ----
  }
  
  // A shared wide MIN must not gain a second narrow MIN.
! // { dg-final { scan-tree-dump-times "MIN_EXPR" 1 "forwprop1" } }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.dg/warn/Wuninitialized-36.C gcc-17-20260830/gcc/testsuite/g++.dg/warn/Wuninitialized-36.C
*** gcc-17-20260823/gcc/testsuite/g++.dg/warn/Wuninitialized-36.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/g++.dg/warn/Wuninitialized-36.C	Sun Aug 30 22:32:10 2026
***************
*** 0 ****
--- 1,26 ----
+ // PR tree-optimization/127005
+ // { dg-do compile { target c++17 } }
+ // { dg-options "-O2 -W -Wall" }
+ 
+ #include <optional>
+ 
+ void f(int *);
+ struct s1
+ {
+   int *a;
+   ~s1()
+   {
+      f(a); // { dg-bogus "uninitialized" }
+   }
+ };
+ 
+ struct conn {
+         void close() { guard.reset(); }
+         std::optional<s1> guard;
+ };
+ extern conn make_conn();
+ int main()
+ {
+         conn c = make_conn();
+         c.close();
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.old-deja/g++.mike/eh30.C gcc-17-20260830/gcc/testsuite/g++.old-deja/g++.mike/eh30.C
*** gcc-17-20260823/gcc/testsuite/g++.old-deja/g++.mike/eh30.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.old-deja/g++.mike/eh30.C	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
--- 1,7 ----
  // { dg-do assemble }
  // { dg-options "-fexceptions -fPIC -S" }
+ // { dg-require-effective-target fpic }
+ 
  
  int
  main() { throw 1; }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.old-deja/g++.mike/p4750.C gcc-17-20260830/gcc/testsuite/g++.old-deja/g++.mike/p4750.C
*** gcc-17-20260823/gcc/testsuite/g++.old-deja/g++.mike/p4750.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.old-deja/g++.mike/p4750.C	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do assemble }
  // { dg-options "-fpic -pedantic-errors -S" }
+ // { dg-require-effective-target fpic }
  // prms-id: 4750
  
  extern const int FRAME_VEC_MAX;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C gcc-17-20260830/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C
*** gcc-17-20260823/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.old-deja/g++.robertl/eb106.C	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do assemble }
  // { dg-options "-O2 -fPIC " }
+ // { dg-require-effective-target fpic }
  struct T
  {
  	const char*	f1;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/pr107563-a.C gcc-17-20260830/gcc/testsuite/g++.target/i386/pr107563-a.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/pr107563-a.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/pr107563-a.C	Sun Aug 30 22:32:10 2026
***************
*** 3,9 ****
  /* { dg-options "-std=c++2b -O3 -msse2 -mno-sse3" } */
  /* { dg-final { scan-assembler-times "psllw" 1 } } */
  /* { dg-final { scan-assembler-times "psrlw" 1 } } */
! /* { dg-final { scan-assembler-times "por" 1 } } */
  
  using temp_vec_type2 [[__gnu__::__vector_size__(8)]] = char;
  
--- 3,9 ----
  /* { dg-options "-std=c++2b -O3 -msse2 -mno-sse3" } */
  /* { dg-final { scan-assembler-times "psllw" 1 } } */
  /* { dg-final { scan-assembler-times "psrlw" 1 } } */
! /* { dg-final { scan-assembler-times "por\[ \t\]" 1 } } */
  
  using temp_vec_type2 [[__gnu__::__vector_size__(8)]] = char;
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/pr107563-b.C gcc-17-20260830/gcc/testsuite/g++.target/i386/pr107563-b.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/pr107563-b.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/pr107563-b.C	Sun Aug 30 22:32:10 2026
***************
*** 2,8 ****
  /* { dg-options "-std=c++2b -O3 -msse2 -mno-sse3" } */
  /* { dg-final { scan-assembler-times "psllw" 1 } } */
  /* { dg-final { scan-assembler-times "psrlw" 1 } } */
! /* { dg-final { scan-assembler-times "por" 1 } } */
  
  using temp_vec_type [[__gnu__::__vector_size__(16)]] = char;
  
--- 2,8 ----
  /* { dg-options "-std=c++2b -O3 -msse2 -mno-sse3" } */
  /* { dg-final { scan-assembler-times "psllw" 1 } } */
  /* { dg-final { scan-assembler-times "psrlw" 1 } } */
! /* { dg-final { scan-assembler-times "por\[ \t\]" 1 } } */
  
  using temp_vec_type [[__gnu__::__vector_size__(16)]] = char;
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/pr82625.C gcc-17-20260830/gcc/testsuite/g++.target/i386/pr82625.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/pr82625.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/pr82625.C	Sun Aug 30 22:32:10 2026
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-require-ifunc "" } */
! /* { dg-options "-O2 -fdump-tree-optimized" } */
  
  __attribute__ ((target ("default")))
  static unsigned foo(const char *buf, unsigned size) {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-require-ifunc "" } */
! /* { dg-options "-O2 -march=x86-64 -fdump-tree-optimized" } */
  
  __attribute__ ((target ("default")))
  static unsigned foo(const char *buf, unsigned size) {
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/ssp-global-hidden-1.C gcc-17-20260830/gcc/testsuite/g++.target/i386/ssp-global-hidden-1.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/ssp-global-hidden-1.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/ssp-global-hidden-1.C	Sun Aug 30 22:32:10 2026
*************** main (void)
*** 39,45 ****
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
!   /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
!   /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
--- 39,47 ----
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target { ia32 && { ! *-*-darwin* } } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
! /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler {___stack_chk_guard-L.\$pb} { target { ia32 && *-*-darwin* } } } } */
! 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/ssp-global-hidden-2.C gcc-17-20260830/gcc/testsuite/g++.target/i386/ssp-global-hidden-2.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/ssp-global-hidden-2.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/ssp-global-hidden-2.C	Sun Aug 30 22:32:10 2026
*************** smash (char *p, int i)
*** 13,20 ****
    p[i] = 42;
  }
  
! /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
--- 13,22 ----
    p[i] = 42;
  }
  
! /* { dg-final { scan-hidden "__stack_chk_guard" { target { ! *-*-darwin* } } } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target { ia32 && { ! *-*-darwin* } } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
+ /* { dg-final { scan-assembler {L___stack_chk_guard\$non_lazy_ptr-L.\$pb} { target { ia32 && *-*-darwin* } } } } */
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/ssp-global-hidden-3.C gcc-17-20260830/gcc/testsuite/g++.target/i386/ssp-global-hidden-3.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/ssp-global-hidden-3.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/ssp-global-hidden-3.C	Sun Aug 30 22:32:10 2026
*************** main (void)
*** 40,46 ****
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
!   /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
!   /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
--- 40,48 ----
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target { ia32 && { ! *-*-darwin* } } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
! /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler {___stack_chk_guard-L.\$pb} { target { ia32 && *-*-darwin* } } } } */
! 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/vect-pragma-target-1.C gcc-17-20260830/gcc/testsuite/g++.target/i386/vect-pragma-target-1.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/vect-pragma-target-1.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/vect-pragma-target-1.C	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do compile { target { i?86-*-* x86_64-*-* } } }                 */
! /* { dg-options "-O0" }                                                 */
  /* { dg-final { scan-assembler-times "paddd.+xmm\[0-9]+"        1 } }   */
  /* { dg-final { scan-assembler-times "vfmadd132ps.+ymm\[0-9]+"  1 } }   */
  /* { dg-final { scan-assembler-times "vpaddw.+zmm\[0-9]+"       1 } }   */
--- 1,5 ----
  /* { dg-do compile { target { i?86-*-* x86_64-*-* } } }                 */
! /* { dg-options "-O0 -march=x86-64" }                                   */
  /* { dg-final { scan-assembler-times "paddd.+xmm\[0-9]+"        1 } }   */
  /* { dg-final { scan-assembler-times "vfmadd132ps.+ymm\[0-9]+"  1 } }   */
  /* { dg-final { scan-assembler-times "vpaddw.+zmm\[0-9]+"       1 } }   */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/g++.target/i386/vect-pragma-target-2.C gcc-17-20260830/gcc/testsuite/g++.target/i386/vect-pragma-target-2.C
*** gcc-17-20260823/gcc/testsuite/g++.target/i386/vect-pragma-target-2.C	Sun Aug 23 22:32:13 2026
--- gcc-17-20260830/gcc/testsuite/g++.target/i386/vect-pragma-target-2.C	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do compile { target { i?86-*-* x86_64-*-* } } }                 */
! /* { dg-options "-O0" }                                                 */
  /* { dg-final { scan-assembler-times "paddd.+xmm\[0-9]+"        1 } }   */
  /* { dg-final { scan-assembler-times "vfmadd132ps.+ymm\[0-9]+"  1 } }   */
  /* { dg-final { scan-assembler-times "vpaddw.+zmm\[0-9]+"       1 } }   */
--- 1,5 ----
  /* { dg-do compile { target { i?86-*-* x86_64-*-* } } }                 */
! /* { dg-options "-O0 -march=x86-64" }                                   */
  /* { dg-final { scan-assembler-times "paddd.+xmm\[0-9]+"        1 } }   */
  /* { dg-final { scan-assembler-times "vfmadd132ps.+ymm\[0-9]+"  1 } }   */
  /* { dg-final { scan-assembler-times "vpaddw.+zmm\[0-9]+"       1 } }   */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/Wno-frame-address.c gcc-17-20260830/gcc/testsuite/gcc.dg/Wno-frame-address.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/Wno-frame-address.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/Wno-frame-address.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-skip-if "Cannot access arbitrary stack frames" { arm*-*-* amdgpu-*-* avr-*-* hppa*-*-* ia64-*-* visium-*-* csky-*-* msp430-*-* cris-*-* mmix-*-* pru-*-* } } */
  /* { dg-options "-Werror" } */
  /* { dg-additional-options "-mbackchain" { target { s390*-*-* } } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-skip-if "Cannot access arbitrary stack frames" { alpha*-*-* arm*-*-* amdgpu-*-* avr-*-* hppa*-*-* ia64-*-* visium-*-* csky-*-* msp430-*-* cris-*-* mmix-*-* pru-*-* } } */
  /* { dg-options "-Werror" } */
  /* { dg-additional-options "-mbackchain" { target { s390*-*-* } } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c	Sun Aug 30 22:32:10 2026
*************** void example_4 (DataPacket *packet)
*** 133,142 ****
  
  void example_5 (void)
  {
!   int *id_sequence;
  
    /* Allocate space for an array of three ids. */
!   id_sequence = (int*) malloc(3); /* { dg-warning "allocated buffer size is not a multiple of the pointee's size" } */
    if (id_sequence == NULL) exit(1);
  
    /* Populate the id array. */
--- 133,142 ----
  
  void example_5 (void)
  {
!   __INT32_TYPE__ *id_sequence;
  
    /* Allocate space for an array of three ids. */
!   id_sequence = (__INT32_TYPE__*) malloc(3); /* { dg-warning "allocated buffer size is not a multiple of the pointee's size" } */
    if (id_sequence == NULL) exit(1);
  
    /* Populate the id array. */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c	Sun Aug 30 22:32:10 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  /* Adapted from https://samate.nist.gov/SARD/test-cases/293/versions/1.0.0
     Part of https://samate.nist.gov/SARD/test-suites/81
     See:
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/atoi-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/atoi-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/atoi-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/atoi-1.c	Sun Aug 30 22:32:10 2026
*************** void test_valid_atol(void) {
*** 22,27 ****
--- 22,29 ----
      long val = atol("123"); /* Should be fine. */
  }
  
+ #ifndef __AVR__
  void test_valid_atoll(void) {
      long long val = atoll("123"); /* Should be fine. */
  }
+ #endif
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/data-model-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/data-model-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/data-model-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/data-model-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-additional-options "-fno-ipa-modref" } */
+ /* { dg-skip-if "" { avr-*-* } } */
  
  #include <stdlib.h>
  #include <string.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c	Sun Aug 30 22:32:10 2026
*************** enum More_Lisp_Bits
*** 45,54 ****
    PSEUDOVECTOR_SIZE_BITS = 12,
    PSEUDOVECTOR_REST_BITS = 12,
    PSEUDOVECTOR_AREA_BITS = PSEUDOVECTOR_SIZE_BITS + PSEUDOVECTOR_REST_BITS,
!   PVEC_TYPE_MASK = 0x3f << PSEUDOVECTOR_AREA_BITS
  };
  static inline _Bool
! PSEUDOVECTORP(Lisp_Object a, int code)
  {
    return (
      ((((union vectorlike_header*)((uintptr_t)XLP((a)) -
--- 45,54 ----
    PSEUDOVECTOR_SIZE_BITS = 12,
    PSEUDOVECTOR_REST_BITS = 12,
    PSEUDOVECTOR_AREA_BITS = PSEUDOVECTOR_SIZE_BITS + PSEUDOVECTOR_REST_BITS,
!   PVEC_TYPE_MASK = (__UINT32_TYPE__) 0x3f << PSEUDOVECTOR_AREA_BITS
  };
  static inline _Bool
! PSEUDOVECTORP(Lisp_Object a, __INT32_TYPE__ code)
  {
    return (
      ((((union vectorlike_header*)((uintptr_t)XLP((a)) -
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/fd-mktemp-family.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/fd-mktemp-family.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/fd-mktemp-family.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/fd-mktemp-family.c	Sun Aug 30 22:32:10 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "fcntl,unistd" { avr-*-* } } */
+ 
  /* Tests for fd leak and errno handling of mktemp-family functions.  */
  /* { dg-additional-options "-Wno-analyzer-null-argument" } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-additional-options "-Wno-analyzer-null-argument" } */
+ /* { dg-skip-if "incomplete stdio" { avr-*-* } } */
  
  #include <stdio.h>
  #include <stdlib.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkostemp-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkostemp-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkostemp-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkostemp-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-additional-options "-Wno-analyzer-null-argument" } */
  /* { dg-prune-output "leak of file descriptor" } */
+ /* { dg-skip-if "incomplete stdio" { avr-*-* } } */
  
  #include <stdio.h>
  #include <stdlib.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkostemps-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkostemps-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkostemps-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkostemps-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-additional-options "-Wno-analyzer-null-argument" } */
  /* { dg-prune-output "leak of file descriptor" } */
+ /* { dg-skip-if "incomplete stdio" { avr-*-* } } */
  
  #include <stdio.h>
  #include <stdlib.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkstemp-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkstemp-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkstemp-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkstemp-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-additional-options "-Wno-analyzer-null-argument" } */
  /* { dg-prune-output "leak of file descriptor" } */
+ /* { dg-skip-if "incomplete stdio" { avr-*-* } } */
  
  #include <stdio.h>
  #include <stdlib.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mkstemps-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-additional-options "-Wno-analyzer-null-argument" } */
  /* { dg-prune-output "leak of file descriptor" } */
+ /* { dg-skip-if "incomplete stdio" { avr-*-* } } */
  
  #include <stdio.h>
  #include <stdlib.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/mktemp-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-additional-options "-Wno-analyzer-null-argument" } */
+ /* { dg-skip-if "incomplete stdio" { avr-*-* } } */
  
  /* TODO: mktemp is deprecated per MSC24-C
     (https://wiki.sei.cmu.edu/confluence/x/hNYxBQ).
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c	Sun Aug 30 22:32:10 2026
***************
*** 1,4 ****
--- 1,6 ----
  /* { dg-additional-options "-Wno-stringop-overflow -Wno-stringop-truncation" } */
+ /* { dg-skip-if "strcpy is asm" { avr-*-* } } */
+ 
  #include <string.h>
  
  /* Wanalyzer-out-of-bounds tests for strpy-related overflows.
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-13.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-13.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-13.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-13.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-15.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-15.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-15.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-15.c	Sun Aug 30 22:32:10 2026
***************
*** 1,7 ****
  /* Regression test for ICE with short values of
     --param=analyzer-text-art-string-ellipsis-threshold=.  */
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode --param=analyzer-text-art-string-ellipsis-threshold=0" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,7 ----
  /* Regression test for ICE with short values of
     --param=analyzer-text-art-string-ellipsis-threshold=.  */
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode --param=analyzer-text-art-string-ellipsis-threshold=0" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c	Sun Aug 30 22:32:10 2026
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
+ /* { dg-skip-if "" { avr-*-* } } */
  
  #include <string.h>
  #include "analyzer-decls.h"
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode -Wno-stringop-overflow" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode -Wno-stringop-overflow" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-4.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-4.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-4.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-4.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-ascii.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-ascii.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-ascii.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-ascii.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=ascii" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=ascii" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-unicode.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-unicode.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-unicode.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-5-unicode.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-7.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-7.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-7.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-7.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { powerpc-ibm-aix* } } */
  
  #include <string.h>
  
--- 1,5 ----
  /* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */
! /* { dg-skip-if "" { avr-*-* powerpc-ibm-aix* } } */
  
  #include <string.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  /* Verify that we clarify the sense of paths involving strcmp.  */
  
  #include <string.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  #include <string.h>
  #include "analyzer-decls.h"
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcpy-3.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcpy-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcpy-3.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcpy-3.c	Sun Aug 30 22:32:10 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  #include <string.h>
  #include "analyzer-decls.h"
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcpy-4.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcpy-4.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/strcpy-4.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/strcpy-4.c	Sun Aug 30 22:32:10 2026
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-additional-options "-Wno-stringop-overflow" } */
+ /* { dg-skip-if "" { avr-*-* } } */
  
  #include <string.h>
  #include "analyzer-decls.h"
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c	Sun Aug 30 22:32:10 2026
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-skip-if "" { avr-*-* } } */
+ 
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c	Sun Aug 30 22:32:10 2026
***************
*** 1,5 ****
! typedef unsigned int __u32;
! __extension__ typedef unsigned long long __u64;
  
  extern unsigned long
  copy_from_user(void *to, const void *from, unsigned long n);
--- 1,7 ----
! /* { dg-require-effective-target int32plus } */
! 
! typedef __UINT32_TYPE__ __u32;
! __extension__ typedef __UINT64_TYPE__ __u64;
  
  extern unsigned long
  copy_from_user(void *to, const void *from, unsigned long n);
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c	Sun Aug 30 22:32:10 2026
***************
*** 1,6 ****
  struct snd_ac97 {
    // snip
!   unsigned int id;
    // snip
  };
  
--- 1,6 ----
  struct snd_ac97 {
    // snip
!   __UINT32_TYPE__ id;
    // snip
  };
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_floor.c gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_floor.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_floor.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/analyzer/torture/switch-enum-pr105273-doom-p_floor.c	Sun Aug 30 22:32:10 2026
***************
*** 1,11 ****
  /* Reduced from linuxdoom-1.10's p_floor.c (GPLv2).  */
  
  #define FRACBITS		16
! #define FRACUNIT		(1<<FRACBITS)
  #define PU_LEVSPEC		51
  #define FLOORSPEED		FRACUNIT
  
! typedef int fixed_t;
  typedef struct line_s line_t;
  
  typedef struct
--- 1,11 ----
  /* Reduced from linuxdoom-1.10's p_floor.c (GPLv2).  */
  
  #define FRACBITS		16
! #define FRACUNIT		((__INT32_TYPE__)1<<FRACBITS)
  #define PU_LEVSPEC		51
  #define FLOORSPEED		FRACUNIT
  
! typedef __INT32_TYPE__ fixed_t;
  typedef struct line_s line_t;
  
  typedef struct
*************** typedef struct
*** 30,36 ****
  
  extern sector_t* sectors;
  
! void* Z_Malloc (int size, int tag, void *ptr);
  
  int
  P_FindSectorFromLineTag
--- 30,36 ----
  
  extern sector_t* sectors;
  
! void* Z_Malloc (__SIZE_TYPE__ size, int tag, void *ptr);
  
  int
  P_FindSectorFromLineTag
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c	Sun Aug 30 22:32:10 2026
*************** main ()
*** 891,897 ****
        || __builtin_stdc_bit_floor (~(unsigned _BitInt(373)) 0) != ((unsigned _BitInt(373)) 1) << (373 - 1))
      __builtin_abort ();
    if (__builtin_stdc_bit_floor (((unsigned _BitInt(512)) 511) << 405) != (((unsigned _BitInt(512)) 256) << 405)
!       || __builtin_stdc_bit_floor (((unsigned _BitInt(373)) 512) << 242) != (((unsigned _BitInt(512)) 512) << 242))
      __builtin_abort ();
    if (__builtin_stdc_bit_ceil ((unsigned _BitInt(512)) 0) != 1
        || !expr_has_type (__builtin_stdc_bit_ceil ((unsigned _BitInt(512)) 0), unsigned _BitInt(512))
--- 891,897 ----
        || __builtin_stdc_bit_floor (~(unsigned _BitInt(373)) 0) != ((unsigned _BitInt(373)) 1) << (373 - 1))
      __builtin_abort ();
    if (__builtin_stdc_bit_floor (((unsigned _BitInt(512)) 511) << 405) != (((unsigned _BitInt(512)) 256) << 405)
!       || __builtin_stdc_bit_floor (((unsigned _BitInt(373)) 512) << 242) != (((unsigned _BitInt(373)) 512) << 242))
      __builtin_abort ();
    if (__builtin_stdc_bit_ceil ((unsigned _BitInt(512)) 0) != 1
        || !expr_has_type (__builtin_stdc_bit_ceil ((unsigned _BitInt(512)) 0), unsigned _BitInt(512))
*************** main ()
*** 905,911 ****
        || __builtin_stdc_bit_ceil ((~(unsigned _BitInt(373)) 0) >> 1) != ((unsigned _BitInt(373)) 1) << (373 - 1))
      __builtin_abort ();
    if (__builtin_stdc_bit_ceil (((unsigned _BitInt(512)) 512) << 405) != (((unsigned _BitInt(512)) 512) << 405)
!       || __builtin_stdc_bit_ceil (((unsigned _BitInt(373)) 513) << 242) != (((unsigned _BitInt(512)) 1024) << 242))
      __builtin_abort ();
    if (__builtin_stdc_bit_floor ((unsigned _BitInt(__BITINT_MAXWIDTH__)) 0) != 0)
      __builtin_abort ();
--- 905,911 ----
        || __builtin_stdc_bit_ceil ((~(unsigned _BitInt(373)) 0) >> 1) != ((unsigned _BitInt(373)) 1) << (373 - 1))
      __builtin_abort ();
    if (__builtin_stdc_bit_ceil (((unsigned _BitInt(512)) 512) << 405) != (((unsigned _BitInt(512)) 512) << 405)
!       || __builtin_stdc_bit_ceil (((unsigned _BitInt(373)) 513) << 242) != (((unsigned _BitInt(373)) 1024) << 242))
      __builtin_abort ();
    if (__builtin_stdc_bit_floor ((unsigned _BitInt(__BITINT_MAXWIDTH__)) 0) != 0)
      __builtin_abort ();
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/fstack-protector-strong.c gcc-17-20260830/gcc/testsuite/gcc.dg/fstack-protector-strong.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/fstack-protector-strong.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/fstack-protector-strong.c	Sun Aug 30 22:32:10 2026
***************
*** 1,6 ****
  /* Test that stack protection is done on chosen functions. */
  
! /* { dg-do compile { target i?86-*-* x86_64-*-* rs6000-*-* s390x-*-* } } */
  /* { dg-options "-O2 -fstack-protector-strong" } */
  
  /* This test checks the presence of __stack_chk_fail function in assembler.
--- 1,6 ----
  /* Test that stack protection is done on chosen functions. */
  
! /* { dg-do compile { target alpha*-*-* i?86-*-* x86_64-*-* rs6000-*-* s390x-*-* } } */
  /* { dg-options "-O2 -fstack-protector-strong" } */
  
  /* This test checks the presence of __stack_chk_fail function in assembler.
*************** void foo12 ()
*** 156,159 ****
    global3 ();
  }
  
! /* { dg-final { scan-assembler-times "stack_chk_fail" 12 } } */
--- 156,162 ----
    global3 ();
  }
  
! /* { dg-final { scan-assembler-times "stack_chk_fail" 12 { target { ! alpha*-*-* } } } } */
! /* Alpha names the callee twice per call, once for !literal and once for
!    !lituse_jsr.  */
! /* { dg-final { scan-assembler-times "stack_chk_fail" 24 { target alpha*-*-* } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pr126538.c gcc-17-20260830/gcc/testsuite/gcc.dg/pr126538.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pr126538.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pr126538.c	Sun Aug 30 22:32:10 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-options "-O2" } */
  
  typedef _BitInt(65535) T;
--- 1,4 ----
! /* { dg-do compile { target bitint } } */
  /* { dg-options "-O2" } */
  
  typedef _BitInt(65535) T;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pr126999.c gcc-17-20260830/gcc/testsuite/gcc.dg/pr126999.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pr126999.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pr126999.c	Sun Aug 30 22:32:10 2026
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3" } */
+ 
+ #include <stdint.h>
+ typedef void (*fp_t_2)();
+ void *g12;
+ uint16_t g22;
+ _Bool f19_c11;
+ void f3()
+ {
+ lbl_dead2:
+     goto lbl_dead2;
+ }
+ void f19()
+ {
+     _Bool c0;
+     fp_t_2 fp5;
+     uint16_t v7;
+     _Bool c10 = fp5 = f19;
+ lbl_sw1:
+     if (c0) goto lbl_br5;
+     if (f19_c11) goto lbl_br53;
+     if (c10) __builtin_unreachable();
+     return;
+ lbl_br5:
+     c0 = 1 == g22;
+     if (c0) goto lbl_sw_def26;
+     if (c10) goto lbl_sw1;
+ lbl_bf10:
+     c0 = 0 >= g22;
+     c10 = g12;
+     goto lbl_sw1;
+ lbl_sw_def26:
+     fp5 = f3;
+     g22 = v7;
+     goto lbl_bf10;
+ lbl_br53:
+     fp5();
+     if (c10) __builtin_unreachable();
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pr127027.c gcc-17-20260830/gcc/testsuite/gcc.dg/pr127027.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pr127027.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pr127027.c	Sun Aug 30 22:32:10 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ struct extent_hooks_s {
+   _Bool dalloc;
+ };
+ typedef struct {
+   void *repr;
+ } atomic_p_t;
+ atomic_p_t atomic_load_p_a;
+ enum { extent_state_muzzy } ehooks_are_default() {
+   _Bool __trans_tmp_3;
+   struct extent_hooks_s *__trans_tmp_2;
+   if (ehooks_are_default()) {
+     void *result;
+     __atomic_load(&atomic_load_p_a, &result, 0);
+     __trans_tmp_2 = result;
+     __trans_tmp_3 = __trans_tmp_2->dalloc;
+   }
+   if (__trans_tmp_3)
+     __builtin_unreachable();
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pr127039.c gcc-17-20260830/gcc/testsuite/gcc.dg/pr127039.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pr127039.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pr127039.c	Sun Aug 30 22:32:10 2026
***************
*** 0 ****
--- 1,23 ----
+ /* PR tree-optimization/127039 */
+ /* { dg-do compile { target { aarch64*-*-* || riscv64*-*-* } } } */
+ /* { dg-options "-O3 -fdump-tree-vect-details" } */
+ /* { dg-additional-options "-march=armv8.2-a+sve --param=vect-partial-vector-usage=0" { target aarch64*-*-* } } */
+ /* { dg-additional-options "-march=rv64im_zve64f -mabi=lp64" { target riscv64*-*-* } } */
+ /* { dg-timeout 10 } */
+ 
+ char a;
+ int b;
+ unsigned c;
+ short d;
+ 
+ void
+ foo (void)
+ {
+   for (short f = 0; f < c; f += 3)
+     {
+       a ^= d;
+       b = b < 0 ? b : 0;
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pr127082.c gcc-17-20260830/gcc/testsuite/gcc.dg/pr127082.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pr127082.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pr127082.c	Sun Aug 30 22:32:10 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-evrp" } */
+ 
+ int src(int v0_i8) {
+   if (!((-96 <= v0_i8) && (v0_i8 <= -65))) __builtin_unreachable();
+   int i0_i8 = (int)96 % v0_i8;
+   int i1_i8 = i0_i8 | -96;
+   return i1_i8;
+ }
+ 
+ /* { dg-final { scan-tree-dump "0, 31" "evrp" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pubtypes-2.c gcc-17-20260830/gcc/testsuite/gcc.dg/pubtypes-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pubtypes-2.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pubtypes-2.c	Sun Aug 30 22:32:11 2026
***************
*** 2,8 ****
  /* { dg-options "-O0 -gdwarf-2 -dA" } */
  /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */
  /* { dg-final { scan-assembler "__debug_pubtypes" } } */
! /* { dg-final { scan-assembler {long+[ \t]+0x14d+[ \t]+[#;]+[ \t]+Pub Info Length} } } */
  /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  
--- 2,8 ----
  /* { dg-options "-O0 -gdwarf-2 -dA" } */
  /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */
  /* { dg-final { scan-assembler "__debug_pubtypes" } } */
! /* { dg-final { scan-assembler {long+[ \t]+0x[0-9a-f]+[ \t]+[#;]+[ \t]+Pub Info Length} } } */
  /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pubtypes-3.c gcc-17-20260830/gcc/testsuite/gcc.dg/pubtypes-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pubtypes-3.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pubtypes-3.c	Sun Aug 30 22:32:11 2026
***************
*** 2,8 ****
  /* { dg-options "-O0 -gdwarf-2 -dA" } */
  /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */
  /* { dg-final { scan-assembler "__debug_pubtypes" } } */
! /* { dg-final { scan-assembler {long+[ \t]+0x14d+[ \t]+[#;]+[ \t]+Pub Info Length} } } */
  /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "\"list_name_type\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
--- 2,8 ----
  /* { dg-options "-O0 -gdwarf-2 -dA" } */
  /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */
  /* { dg-final { scan-assembler "__debug_pubtypes" } } */
! /* { dg-final { scan-assembler {long+[ \t]+0x[0-9a-f]+[ \t]+[#;]+[ \t]+Pub Info Length} } } */
  /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "\"list_name_type\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/pubtypes-4.c gcc-17-20260830/gcc/testsuite/gcc.dg/pubtypes-4.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/pubtypes-4.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/pubtypes-4.c	Sun Aug 30 22:32:11 2026
***************
*** 2,8 ****
  /* { dg-options "-O0 -gdwarf-2 -dA" } */
  /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */
  /* { dg-final { scan-assembler "__debug_pubtypes" } } */
! /* { dg-final { scan-assembler {long+[ \t]+0x184+[ \t]+[#;]+[ \t]+Pub Info Length} } } */
  /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler "\"list_name_type\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
--- 2,8 ----
  /* { dg-options "-O0 -gdwarf-2 -dA" } */
  /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */
  /* { dg-final { scan-assembler "__debug_pubtypes" } } */
! /* { dg-final { scan-assembler {long+[ \t]+0x[0-9a-f]+[ \t]+[#;]+[ \t]+Pub Info Length} } } */
  /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
  /* { dg-final { scan-assembler "\"list_name_type\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/inline-mem-set-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/inline-mem-set-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/inline-mem-set-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/inline-mem-set-1.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-finline-stringops -fno-lto" } */
+ /* { dg-require-effective-target size20plus } */
  
  void *zero (unsigned long long (*p)[32], int n)
  {
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr111036.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr111036.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr111036.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr111036.c	Sun Aug 30 22:32:11 2026
*************** __attribute__((aligned(32))) static stru
*** 10,16 ****
  static inline void __attribute__((always_inline))
  foo (void *base, size_t length)
  {
!   unsigned long int p = (unsigned long int) base;
    if (__builtin_constant_p(p) && (p & 31) == 0) { exit (0); } 
    else if (__builtin_constant_p(length)) { exit (0); } 
    else { exit (0); }
--- 10,16 ----
  static inline void __attribute__((always_inline))
  foo (void *base, size_t length)
  {
!   __UINTPTR_TYPE__ p = (__UINTPTR_TYPE__) base;
    if (__builtin_constant_p(p) && (p & 31) == 0) { exit (0); } 
    else if (__builtin_constant_p(length)) { exit (0); } 
    else { exit (0); }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr116353.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr116353.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr116353.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr116353.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* PR tree-optimization/116353 */
  /* { dg-do compile } */
+ /* { dg-require-effective-target int32plus } */
  
  enum desmode { C };
  struct {
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr121103-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr121103-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr121103-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr121103-1.c	Sun Aug 30 22:32:11 2026
*************** void f(void *);
*** 12,18 ****
  
  struct B {
    char d[5];
!   int n;
  };
  
  __attribute__((always_inline)) inline void g(struct B *p, struct A a) {
--- 12,18 ----
  
  struct B {
    char d[5];
! __INT32_TYPE__ n;
  };
  
  __attribute__((always_inline)) inline void g(struct B *p, struct A a) {
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr123778-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr123778-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr123778-1.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr123778-1.c	Sun Aug 30 22:32:11 2026
***************
*** 4,10 ****
  /* PR tree-optimization/123778 */
  
  typedef char (*t)[3];
! long __GIMPLE(ssa) f(char a, int d)
  {
    _Bool _107;
    __PTRDIFF_TYPE__ _14;
--- 4,10 ----
  /* PR tree-optimization/123778 */
  
  typedef char (*t)[3];
! __PTRDIFF_TYPE__ __GIMPLE(ssa) f(char a, int d)
  {
    _Bool _107;
    __PTRDIFF_TYPE__ _14;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr126415.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr126415.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr126415.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr126415.c	Sun Aug 30 22:32:11 2026
***************
*** 4,9 ****
--- 4,10 ----
     original widened operation is fully defined.  The narrow op then collapses
     through defined-wrap identities (mod 2^narrow-prec), changing the value.  */
  /* { dg-do run } */
+ /* { dg-require-effective-target int32plus } */
  
  int printf(const char *, ...);
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr126650.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr126650.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr126650.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr126650.c	Sun Aug 30 22:32:11 2026
***************
*** 1,4 ****
! /* { dg-do run } */
  
  #include <stdarg.h>
  #include <stdlib.h>
--- 1,4 ----
! /* { dg-do run { target { le || be } } } */
  
  #include <stdarg.h>
  #include <stdlib.h>
*************** void __attribute__((noipa)) foo (int n,
*** 17,30 ****
  
  int main()
  {
!   struct b {
      int : 7;
      int : 2;
      int : 6;
      int : 3;
      int c : 7;
    };
!   union {
      int d;
      struct b bf;
      char e[4];
--- 17,30 ----
  
  int main()
  {
!   struct __attribute__ ((scalar_storage_order ("little-endian"))) b {
      int : 7;
      int : 2;
      int : 6;
      int : 3;
      int c : 7;
    };
!   union __attribute__ ((scalar_storage_order ("little-endian"))) {
      int d;
      struct b bf;
      char e[4];
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr126997.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr126997.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr126997.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr126997.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ 
+ unsigned short
+ f (unsigned int hl, unsigned int scheme, unsigned int n)
+ {
+   unsigned short tot = 0;
+   for (unsigned short i = 0; i < n; i++)
+     tot += hl == 1 ? (scheme != 0) : (i == 0);
+   return tot;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr127000.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr127000.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr127000.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr127000.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ 
+ #include <stdint.h>
+ 
+ typedef void *fp_t_2;
+ void *g8, *g11, *g19;
+ fp_t_2 f18f31_fp3;
+ void f18f31(uint64_t a0)
+ {
+     g8 = 0;
+     a0 = (char *)g11 - (char *)g8;
+     *(uint64_t *)g19 = a0;
+     f18f31_fp3 = *(fp_t_2 *)g19;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr127085.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr127085.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr127085.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr127085.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,22 ----
+ /* PR tree-optimization/127085 */
+ /* { dg-do compile } */
+ 
+ typedef unsigned char uint8_t;
+ typedef unsigned long long uint64_t;
+ uint8_t g26;
+ _Bool f19_c7, f19_c15;
+ void f19(uint64_t a0)
+ {
+     _Bool c4;
+ lbl_sw3:
+     if (f19_c7) goto lbl_bf30;
+     goto lbl_cont19;
+ lbl_sw14:
+     if (c4)
+     lbl_cont19:
+         if (f19_c15) goto lbl_sw14;
+     goto lbl_sw3;
+ lbl_bf30:
+     c4 = g26;
+     if (a0 == 80504447930037642) goto lbl_sw14;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr49330-2.c gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr49330-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/torture/pr49330-2.c	Sun Aug 23 22:32:14 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/torture/pr49330-2.c	Sun Aug 30 22:32:11 2026
*************** int a;
*** 7,14 ****
  void __attribute__((noipa))
  foo()
  {
!   unsigned long b = (unsigned long) &a - 134518548;
!   volatile unsigned long c = b;
    if (c == 0) {
      if (b != 0) __builtin_abort ();
    }
--- 7,14 ----
  void __attribute__((noipa))
  foo()
  {
!   __UINTPTR_TYPE__ b = (__UINTPTR_TYPE__) &a - 134518548;
!   volatile __UINTPTR_TYPE__ c = b;
    if (c == 0) {
      if (b != 0) __builtin_abort ();
    }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-1.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 --param=dom-jump-threading=0 -fdump-tree-dom2-details -fdump-tree-optimized" } */
  
  /* Verify that --param=dom-jump-threading=0 keeps DOM from threading
     jumps.  Only DOM can thread a PHI of compares (the backward
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 --param=dom-jump-threading=0 -fdisable-tree-phiopt1 -fdisable-tree-phiopt2 -fdisable-tree-phiopt3 -fdisable-tree-phiopt4 -fdump-tree-dom2-details -fdump-tree-optimized" } */
  
  /* Verify that --param=dom-jump-threading=0 keeps DOM from threading
     jumps.  Only DOM can thread a PHI of compares (the backward
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/dom-jump-threading-2.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -fdump-tree-dom2-details" } */
  
  /* Same test as dom-jump-threading-1.c but with DOM jump threading at
     its default (enabled): DOM must thread the PHI of compares, which
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -fdisable-tree-phiopt1 -fdisable-tree-phiopt2 -fdisable-tree-phiopt3 -fdisable-tree-phiopt4 -fdump-tree-dom2-details" } */
  
  /* Same test as dom-jump-threading-1.c but with DOM jump threading at
     its default (enabled): DOM must thread the PHI of compares, which
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-Ofast -fdump-tree-dom2 -fdump-tree-optimized-details-blocks" } */
  
  void g (int);
  void g1 (int);
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-Ofast -fdump-tree-phiopt1-details -fdump-tree-optimized-details-blocks" } */
  
  void g (int);
  void g1 (int);
*************** f (long a, long b, long c, long d, long
*** 27,36 ****
    g (a);
  }
  
! /* This is actually a regression.  The backward threader cannot thread
!    the above scenario, but it is being caught by the DOM threader
!    which still uses the forward threader.  We should implement this
!    optimization in the backward threader before killing the forward
!    threader.  Similarly for the other phi_on_compare-*.c tests.  */
! /* { dg-final { scan-tree-dump-times "Removing basic block" 1 "dom2" } } */
  /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
--- 27,31 ----
    g (a);
  }
  
! /* { dg-final { scan-tree-dump-times "replicating conditional" 2 "phiopt1" } } */
  /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-Ofast -fdump-tree-dom2" } */
  
  void g (void);
  void g1 (void);
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-Ofast -fdump-tree-optimized" } */
  
  void g (void);
  void g1 (void);
*************** f (long a, long b, long c, long d, int x
*** 20,23 ****
      }
  }
  
! /* { dg-final { scan-tree-dump-times "Removing basic block" 1 "dom2" } } */
--- 20,23 ----
      }
  }
  
! /* { dg-final { scan-tree-dump-not "PHI <" "optimized" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-Ofast -fdump-tree-dom2" } */
  
  void g (void);
  void g1 (void);
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-Ofast -fdump-tree-optimized" } */
  
  void g (void);
  void g1 (void);
*************** f (long a, long b, long c, long d, int x
*** 22,25 ****
      }
  }
  
! /* { dg-final { scan-tree-dump-times "Removing basic block" 1 "dom2" } } */
--- 22,25 ----
      }
  }
  
! /* { dg-final { scan-tree-dump-not "PHI <" "optimized" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-5.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-5.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-5.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,22 ----
+ /* PR tree-optimization/126896 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 --param=dom-jump-threading=0 -fdump-tree-optimized" } */
+ 
+ /* Even with DOM jump threading disabled, phiopt replicates the
+    conditional into both predecessors and the boolean PHI dies.  */
+ 
+ void g (void);
+ 
+ void
+ f (int x, int a, int b, int c, int d)
+ {
+   _Bool t;
+   if (x)
+     t = a < b;
+   else
+     t = c < d;
+   if (t)
+     g ();
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "PHI" "optimized" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr112104-2.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr112104-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr112104-2.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr112104-2.c	Sun Aug 30 22:32:11 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* PR tree-optimization/112104 */
  /* { dg-do run } */
  /* { dg-options "-O1" } */
+ /* { dg-require-effective-target int32plus } */
  
  #include "pr112104-1.c"
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr121264.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr121264.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr121264.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr121264.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* PR tree-optimization/121264 */
  /* { dg-do compile } */
+ /* { dg-require-effective-target int32plus } */
  /* { dg-options "-O2 -fdump-tree-optimized" } */
  /* { dg-final { scan-tree-dump " \\\| " "optimized" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr123967.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr123967.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr123967.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr123967.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-additional-options -O2 } */
  /* { dg-additional-options -fdump-tree-optimized } */
+ /* { dg-require-effective-target int32plus } */
  
  /* Code taken from Perlbench */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr126745.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr126745.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/pr126745.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/pr126745.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-evrp" } */
+ 
+ int f (int a, int b)
+ {
+     if (a != b) __builtin_unreachable ();
+     return a / b;
+ }
+ /* { dg-final { scan-tree-dump-times "return 1;" 1 "evrp" } } */
+ 
+ int f2 (int a, int b)
+ {
+     if (a != b) __builtin_unreachable ();
+     return a % b;
+ }
+ /* { dg-final { scan-tree-dump-times "return 0;" 1 "evrp" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/satd-hadamard.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/satd-hadamard.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/satd-hadamard.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/satd-hadamard.c	Sun Aug 30 22:32:11 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O3 -fdump-tree-forwprop4-details" } */
  /* { dg-additional-options "-msse2" { target i?86-*-* x86_64-*-* } } */
+ /* { dg-require-effective-target int32plus } */
  
  #include <stdint.h>
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/vec-mask-zero-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/vec-mask-zero-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/tree-ssa/vec-mask-zero-1.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/tree-ssa/vec-mask-zero-1.c	Sun Aug 30 22:32:11 2026
***************
*** 1,6 ****
! /* { dg-do compile { target vect_int } } */
! /* { dg-options "-O2 -fdump-tree-optimized -Wno-psabi" } */
! /* { dg-additional-options "-msse2" { target ia32 } } */
  /* Combine pairs of vector comparisons against zero or all-ones.  Use
     different signedness for the operands to exercise the view conversion.  */
  typedef int v4si __attribute__((vector_size (16)));
--- 1,6 ----
! /* { dg-do compile { target { x86 || aarch64*-*-* } } } */
! /* { dg-options "-O2 -fdump-tree-forwprop1 -Wno-psabi" } */
! /* { dg-additional-options "-msse2" { target x86 } } */
  /* Combine pairs of vector comparisons against zero or all-ones.  Use
     different signedness for the operands to exercise the view conversion.  */
  typedef int v4si __attribute__((vector_size (16)));
*************** v4si f2 (v4si a, v4ui b) { return (a !=
*** 11,18 ****
  v4si f3 (v4si a, v4ui b) { return (a == -1) & (b == -1u); }
  v4si f4 (v4si a, v4ui b) { return (a != -1) | (b != -1u); }
  
! /* Each function keeps one bitwise operation and one comparison.  */
! /* { dg-final { scan-tree-dump-times " == " 2 "optimized" } } */
! /* { dg-final { scan-tree-dump-times " != " 2 "optimized" } } */
! /* { dg-final { scan-tree-dump-times " \\| " 2 "optimized" } } */
! /* { dg-final { scan-tree-dump-times " & " 2 "optimized" } } */
--- 11,19 ----
  v4si f3 (v4si a, v4ui b) { return (a == -1) & (b == -1u); }
  v4si f4 (v4si a, v4ui b) { return (a != -1) | (b != -1u); }
  
! /* Each function keeps one bitwise operation and one comparison before
!    target-specific vector lowering.  */
! /* { dg-final { scan-tree-dump-times " == " 2 "forwprop1" } } */
! /* { dg-final { scan-tree-dump-times " != " 2 "forwprop1" } } */
! /* { dg-final { scan-tree-dump-times " \\| " 2 "forwprop1" } } */
! /* { dg-final { scan-tree-dump-times " & " 2 "forwprop1" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
  /* { dg-require-effective-target vect_condition } */
! /* { dg-additional-options "-fno-tree-vectorize -ftree-slp-vectorize -ftree-loop-if-convert" } */
  
  #include "tree-vect.h"
  
--- 1,5 ----
  /* { dg-require-effective-target vect_condition } */
! /* { dg-additional-options "-fno-tree-vectorize -ftree-slp-vectorize" } */
  
  #include "tree-vect.h"
  
*************** int main ()
*** 50,53 ****
    return 0;
  }
  
! /* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp1" { target { vect_element_align && vect_pack_trunc } } } } */
--- 50,53 ----
    return 0;
  }
  
! /* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp1" { xfail { vect_element_align && vect_pack_trunc } } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995-2.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995-2.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,75 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3" } */
+ /* { dg-additional-options "-mavx2" { target avx2 } } */
+ 
+ typedef enum
+ {
+   CAIRO_STATUS_LAST_STATUS
+ } cairo_status_t;
+ typedef struct
+ {
+   int x;
+   int y;
+ } cairo_point_t;
+ 
+ typedef struct
+ {
+   cairo_point_t a, b, c, d;
+ } cairo_spline_knots_t;
+ 
+ double _cairo_spline_decompose_into_tolerance_squared;
+ 
+ static void
+ _lerp_half (cairo_point_t *a, cairo_point_t *b, cairo_point_t *result)
+ {
+   result->x = a->x + (b->x - a->x >> 1);
+   result->y = a->y + (b->y - a->y >> 1);
+ }
+ 
+ static void
+ _de_casteljau (cairo_spline_knots_t *s1, cairo_spline_knots_t *s2)
+ {
+   cairo_point_t ab, bc, cd, abbc, bccd, final;
+   _lerp_half (&s1->a, &s1->b, &ab);
+   _lerp_half (&s1->b, &s1->c, &bc);
+   _lerp_half (&ab, &bc, &abbc);
+   _lerp_half (&bc, &cd, &bccd);
+   _lerp_half (&abbc, &bccd, &final);
+   s2->a = final;
+   s2->b = s2->c = cd;
+   s1->c = abbc;
+   s1->d = final;
+ }
+ 
+ static double
+ _cairo_spline_error_squared (cairo_spline_knots_t *knots)
+ {
+   double cdy = knots->a.y;
+   cdy = 0;
+   if (knots->a.x != knots->d.x || knots->d.y)
+     {
+       double dx, dy, u, v;
+       dx = (double)(knots->d.x - knots->a.x);
+       dy = (double)(knots->d.y - knots->a.y);
+       v = dx * dx + dy * dy;
+       u = 0 * dx * dy;
+       if (u <= 0)
+         cdy -= v * dy;
+     }
+   if (knots->a.y > cdy)
+     return knots->a.y;
+   return 0;
+ }
+ 
+ cairo_status_t
+ _cairo_spline_decompose_into (cairo_spline_knots_t *s1)
+ {
+   cairo_spline_knots_t s2;
+   if (_cairo_spline_error_squared (s1)
+       < _cairo_spline_decompose_into_tolerance_squared)
+     return 0;
+   _de_casteljau (s1, &s2);
+   _cairo_spline_decompose_into (s1);
+   _cairo_spline_decompose_into (&s2);
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr126995.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,56 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3" } */
+ 
+ typedef struct
+ {
+   int x;
+   int y;
+ } cairo_point_t;
+ 
+ typedef struct
+ {
+   cairo_point_t a, b;
+ } cairo_spline_knots_t;
+ 
+ int _lerp_half_b_1, fallback;
+ cairo_point_t _de_casteljau_ab, _de_casteljau_abbc;
+ cairo_spline_knots_t _de_casteljau_s1;
+ double sq_berr, sq_cdx, sq_cdy;
+ 
+ void
+ _lerp_half (cairo_point_t *a, cairo_point_t *result)
+ {
+   result->x = a->x + (a->x >> 1);
+   result->y = a->y + (_lerp_half_b_1 >> 1);
+ }
+ 
+ void
+ _de_casteljau (cairo_spline_knots_t *s2)
+ {
+   cairo_point_t bc, bccd, final;
+ 
+   _lerp_half (&_de_casteljau_s1.b, &bc);
+   _lerp_half (&_de_casteljau_ab, &_de_casteljau_abbc);
+   _lerp_half (&bc, &bccd);
+   _lerp_half (&_de_casteljau_abbc, &final);
+ 
+   s2->a = final;
+   s2->b = bccd;
+ }
+ 
+ int
+ _cairo_spline_decompose_into (cairo_spline_knots_t *s1)
+ {
+   cairo_spline_knots_t s2, knots = *s1;
+   sq_cdx = knots.a.x;
+   sq_cdy = knots.a.y;
+   sq_berr = sq_cdx * sq_cdx + sq_cdy * sq_cdy;
+ 
+   if (sq_berr)
+     return fallback;
+ 
+   _de_casteljau (&s2);
+   _cairo_spline_decompose_into (&s2);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr127018.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr127018.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr127018.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr127018.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,80 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fgimple" } */
+ /* { dg-additional-options "-msse4" { target sse4 } } */
+ 
+ char* mm;
+ char m;
+ 
+ void __GIMPLE (ssa,guessed_local(1073741822),startwith("slp"))
+ decode_endpoint (int * pEndpoints, int index)
+ {
+   int tt;
+   int t;
+   int y1;
+   int v3;
+   int v1;
+   int v0;
+   char _1;
+   char * _2;
+   char _3;
+   char _4;
+ 
+   __BB(2,guessed_local(1073741822)):
+   if (index_8(D) == 0)
+     goto __BB9(guessed(45634028));
+   else
+     goto __BB3(guessed(88583700));
+ 
+   __BB(9,guessed_local(365072223)):
+   goto __BB8(precise(134217728));
+ 
+   __BB(3,guessed_local(708669599)):
+   _1 = m;
+   v0_10 = (int) _1;
+   _2 = mm;
+   _3 = __MEM <char> (_2 + _Literal (char *) 1);
+   v1_11 = (int) _3;
+   if (index_8(D) == 3)
+     goto __BB4(guessed(45634028));
+   else
+     goto __BB5(guessed(88583700));
+ 
+   __BB(4,guessed_local(240947666)):
+   _4 = __MEM <char> (_2 + _Literal (char *) 3);
+   v3_20 = (int) _4;
+   __MEM <int[2]> (pEndpoints_15(D) + _Literal (int *) 16)[0] = v0_10;
+   __MEM <int[2]> (pEndpoints_15(D) + _Literal (int *) 16)[1] = v1_11;
+   __MEM <int[2]> (pEndpoints_15(D) + _Literal (int *) 24)[1] = v3_20;
+   __MEM <int[2]> (pEndpoints_15(D) + _Literal (int *) 24)[0] = v3_20;
+   goto __BB8(precise(134217728));
+ 
+   __BB(5,guessed_local(467721933)):
+   t_12 = v0_10 << 4;
+   tt_13 = v1_11 << 4;
+   if (v0_10 <= v1_11)
+     goto __BB10(guessed(67108864));
+   else
+     goto __BB6(guessed(67108864));
+ 
+   __BB(10,guessed_local(233860967)):
+   goto __BB7(precise(134217728));
+ 
+   __BB(6,guessed_local(233860966)):
+   t_14 = t_12 + tt_13;
+   goto __BB7(precise(134217728));
+ 
+   __BB(7,guessed_local(467721933)):
+   y1_5 = __PHI (__BB10: tt_13, __BB6: 0);
+   t_6 = __PHI (__BB10: t_12, __BB6: t_14);
+   __MEM <int[2]> (pEndpoints_15(D))[0] = t_6;
+   __MEM <int[2]> (pEndpoints_15(D))[1] = y1_5;
+   __MEM <int[2]> (pEndpoints_15(D) + _Literal (int *) 16)[0] = t_6;
+   __MEM <int[2]> (pEndpoints_15(D) + _Literal (int *) 16)[1] = y1_5;
+   goto __BB8(precise(134217728));
+ 
+   __BB(8,guessed_local(1073741824)):
+   return;
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr127051.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr127051.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/bb-slp-pr127051.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/bb-slp-pr127051.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-mno-avx" { target { x86_64-*-* i?86-*-* } } } */
+ 
+ int b(int c, int d, int e, int f, int g, int h)
+ {
+   long long a = c;
+   a += d;
+   a += e;
+   a += f;
+   a += g;
+   a += h;
+   return a;
+ }
+ 
+ /* With SSE we should be able to reduce all 6 lanes with V2DI, two
+    vec_unpack_lo_expr and one vec_unpack_hi_expr (dumped twice).  */
+ /* { dg-final { scan-tree-dump-times "vec_unpack" 6 "slp2" { target { x86_64-*-* i?86-*-* } } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/pr122797.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/pr122797.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/pr122797.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/pr122797.c	Sun Aug 30 22:32:11 2026
***************
*** 1,4 ****
- /* { dg-do run } */
  /* { dg-additional-options "-O3" } */
  
  int src_stride = 0;
--- 1,3 ----
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/pr123731.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/pr123731.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/pr123731.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/pr123731.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
- /* { dg-do run } */
- 
  typedef unsigned short A __attribute__ ((vector_size (4 * sizeof (short))));
  typedef short B __attribute__ ((vector_size (8 * sizeof (short))));
  typedef unsigned C __attribute__ ((vector_size (4 * sizeof (int))));
--- 1,3 ----
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/vect-pr126984.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/vect-pr126984.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/vect-pr126984.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/vect-pr126984.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-ffast-math" } */
+ /* { dg-additional-options "-march=armv9-a" { target { aarch64-*-* } } } */
+ 
+ double *a;
+ double b, c, d, e, f;
+ int g, h;
+ void l() {
+   double i, j, k;
+   for (; g; g++, h += 2) {
+     k = a[h];
+     j = a[h + 1];
+     a[h] = b * f - c * e + d * k - i * j;
+     a[h + 1] = b * e + c * f + d * j + i * k;
+   }
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/vect-pr127105.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/vect-pr127105.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/vect-pr127105.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/vect-pr127105.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3 -fno-tree-pre" } */
+ 
+ int a;
+ char c_0;
+ void main() {
+   int f;
+   for (int d = 0; d < 3; d++) {
+     f = a ? c_0 : 0;
+     c_0 = f;
+   }
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-pr126998.c gcc-17-20260830/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-pr126998.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-pr126998.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-pr126998.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-additional-options "-O3" } */
+ 
+ #include "tree-vect.h"
+ 
+ unsigned a, c;
+ int b, d;
+ signed char e;
+   
+ void __attribute__((noipa))
+ f (void)
+ { 
+   for (; b; ++b)
+     {
+       c = 0;
+       for (; c < 10; c++)
+         {
+           d = 0;
+           for (; d < c; d++)
+             a += e;
+         }
+     }
+ }
+ 
+ int
+ main ()
+ {
+   check_vect ();
+ 
+   b = -3;
+   e = 2;
+   f ();
+   if (a != 3 * 45 * 2)
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.dg/widening-mul-conv-1.c gcc-17-20260830/gcc/testsuite/gcc.dg/widening-mul-conv-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.dg/widening-mul-conv-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.dg/widening-mul-conv-1.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-widening_mul" } */
+ 
+ /* convert_plusminus_to_widen must not build a WIDEN_MULT_PLUS_EXPR when the
+    multiply reaches the addition through a conversion whose result has more
+    than one use.  The multiply is then duplicated into every addition instead
+    of being replaced by one, and the original stays live.  Here that turns one
+    shift and three adds into three widening multiply-accumulates plus the
+    constants they need in registers.  */
+ 
+ void
+ f (const signed char *base, int i, const signed char **out)
+ {
+   unsigned long o = (unsigned long) ((long) i * 128);
+   out[0] = base + o;
+   out[1] = base + o + 16;
+   out[2] = base + o + 32;
+   out[3] = base + o + 48;
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "WIDEN_MULT_PLUS_EXPR" "widening_mul" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/ccmp_1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/ccmp_1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/ccmp_1.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/ccmp_1.c	Sun Aug 30 22:32:11 2026
*************** f13 (int a, int b)
*** 86,95 ****
  /* { dg-final { scan-assembler "cmp\t(.)+35" } } */
  
  /* { dg-final { scan-assembler-times "\tcmp\tw\[0-9\]+, 0" 4 } } */
! /* { dg-final { scan-assembler-times "fcmpe\t(?:.)+0\\.0" 1 } } */
! /* { dg-final { scan-assembler-times "fcmp\t(?:.)+0\\.0" 1 } } */
  
  /* { dg-final { scan-assembler "adds\t" } } */
  /* { dg-final { scan-assembler-times "\tccmp\t" 11 } } */
! /* { dg-final { scan-assembler-times "fccmp\t.*0\\.0" 1 } } */
! /* { dg-final { scan-assembler-times "fccmpe\t.*0\\.0" 1 } } */
--- 86,97 ----
  /* { dg-final { scan-assembler "cmp\t(.)+35" } } */
  
  /* { dg-final { scan-assembler-times "\tcmp\tw\[0-9\]+, 0" 4 } } */
! /* With -ffinite-math-only the signalling compares are not needed.  */
! /* { dg-final { scan-assembler-times {\tfcmp\t[sd][0-9]+, #0\.0} 4 } } */
! /* { dg-final { scan-assembler-not {\tfcmpe\t} } } */
  
  /* { dg-final { scan-assembler "adds\t" } } */
  /* { dg-final { scan-assembler-times "\tccmp\t" 11 } } */
! /* FCCMP has no zero-immediate form, so both operands are registers.  */
! /* { dg-final { scan-assembler-times {\tfccmp\t[sd][0-9]+, [sd][0-9]+,} 2 } } */
! /* { dg-final { scan-assembler-not {\tfccmpe\t} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/crc32-zero.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/crc32-zero.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/crc32-zero.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/crc32-zero.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,182 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=armv8-a+crc" } */
+ 
+ typedef unsigned int uint32_t;
+ typedef unsigned long long uint64_t;
+ typedef unsigned short uint16_t;
+ typedef unsigned char uint8_t;
+ 
+ uint32_t
+ crc32cb_init_zero(uint16_t x)
+ {
+   return __builtin_aarch64_crc32cb(0, x);
+ }
+ 
+ uint32_t
+ crc32cb_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32cb(x, 0);
+ }
+ 
+ uint32_t
+ crc32cb_both_zero(void)
+ {
+   return __builtin_aarch64_crc32cb(0, 0);
+ }
+ 
+ uint32_t
+ crc32ch_init_zero(uint16_t x)
+ {
+   return __builtin_aarch64_crc32ch(0, x);
+ }
+ 
+ uint32_t
+ crc32ch_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32ch(x, 0);
+ }
+ 
+ uint32_t
+ crc32ch_both_zero(void)
+ {
+   return __builtin_aarch64_crc32ch(0, 0);
+ }
+ 
+ uint32_t
+ crc32cw_init_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32cw(0, x);
+ }
+ 
+ uint32_t
+ crc32cw_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32cw(x, 0);
+ }
+ 
+ uint32_t
+ crc32cw_both_zero(void)
+ {
+   return __builtin_aarch64_crc32cw(0, 0);
+ }
+ 
+ uint32_t
+ crc32cx_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32cx(x, 0);
+ }
+ 
+ uint32_t
+ crc32cx_init_zero64(uint64_t x)
+ {
+   return __builtin_aarch64_crc32cx(0, x);
+ }
+ 
+ uint32_t
+ crc32cx_both_zero64(void)
+ {
+   return __builtin_aarch64_crc32cx(0, 0);
+ }
+ 
+ uint32_t
+ crc32b_init_zero(uint16_t x)
+ {
+   return __builtin_aarch64_crc32b(0, x);
+ }
+ 
+ uint32_t
+ crc32b_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32b(x, 0);
+ }
+ 
+ uint32_t
+ crc32b_both_zero(void)
+ {
+   return __builtin_aarch64_crc32b(0, 0);
+ }
+ 
+ uint32_t
+ crc32h_init_zero(uint16_t x)
+ {
+   return __builtin_aarch64_crc32h(0, x);
+ }
+ 
+ uint32_t
+ crc32h_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32h(x, 0);
+ }
+ 
+ uint32_t
+ crc32h_both_zero(void)
+ {
+   return __builtin_aarch64_crc32h(0, 0);
+ }
+ 
+ uint32_t
+ crc32w_init_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32w(0, x);
+ }
+ 
+ uint32_t
+ crc32w_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32w(x, 0);
+ }
+ 
+ uint32_t
+ crc32w_both_zero(void)
+ {
+   return __builtin_aarch64_crc32w(0, 0);
+ }
+ 
+ uint32_t
+ crc32x_data_zero(uint32_t x)
+ {
+   return __builtin_aarch64_crc32x(x, 0);
+ }
+ 
+ uint32_t
+ crc32x_init_zero64(uint64_t x)
+ {
+   return __builtin_aarch64_crc32x(0, x);
+ }
+ 
+ uint32_t
+ crc32x_both_zero64(void)
+ {
+   return __builtin_aarch64_crc32x(0, 0);
+ }
+ 
+ /* { dg-final { scan-assembler-times "crc32b\tw\[0-9\]+, wzr, w\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32h\tw\[0-9\]+, wzr, w\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32w\tw\[0-9\]+, wzr, w\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32x\tw\[0-9\]+, wzr, x\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32b\tw\[0-9\]+, w\[0-9\]+, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32h\tw\[0-9\]+, w\[0-9\]+, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32w\tw\[0-9\]+, w\[0-9\]+, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32x\tw\[0-9\]+, w\[0-9\]+, xzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32b\tw\[0-9\]+, wzr, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32h\tw\[0-9\]+, wzr, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32w\tw\[0-9\]+, wzr, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32x\tw\[0-9\]+, wzr, xzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cb\tw\[0-9\]+, wzr, w\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32ch\tw\[0-9\]+, wzr, w\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cw\tw\[0-9\]+, wzr, w\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cx\tw\[0-9\]+, wzr, x\[0-9\]+" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cb\tw\[0-9\]+, w\[0-9\]+, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32ch\tw\[0-9\]+, w\[0-9\]+, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cw\tw\[0-9\]+, w\[0-9\]+, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cx\tw\[0-9\]+, w\[0-9\]+, xzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cb\tw\[0-9\]+, wzr, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32ch\tw\[0-9\]+, wzr, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cw\tw\[0-9\]+, wzr, wzr" 1 } } */
+ /* { dg-final { scan-assembler-times "crc32cx\tw\[0-9\]+, wzr, xzr" 1 } } */
+ 
+ /* There should be no moves to a register for zero as it is part of the
+  * crc instruction now.
+  */
+ /* { dg-final { scan-assembler-not "mov\t\[wx\]\[0-9\]+, \[wx\]zr" } } */
+ /* { dg-final { scan-assembler-not "mov\t\[wx\]\[0-9\]+, 0" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp-trap-1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp-trap-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp-trap-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp-trap-1.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ enum { FPSR_IOC = 1 << 0 };
+ 
+ __attribute__ ((noipa))
+ static int
+ and_lt (double a, double b, double c, double d)
+ {
+   return (a < b) & (c < d);
+ }
+ 
+ int
+ main (void)
+ {
+   double qnan = __builtin_nan ("");
+ 
+   __builtin_aarch64_set_fpsr (0);
+   if (and_lt (1.0, 0.0, qnan, 0.0) != 0)
+     __builtin_abort ();
+   if ((__builtin_aarch64_get_fpsr () & FPSR_IOC) == 0)
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp-trap-2.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp-trap-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp-trap-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp-trap-2.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /* A bitwise operation evaluates both comparisons, so a conditional
+    comparison would hide the Invalid exception that the second ordered
+    comparison raises for a quiet NaN.  */
+ 
+ /*
+ ** and_lt:
+ **	fcmpe	d0, d1
+ **	cset	w[0-9]+, mi
+ **	fcmpe	d2, d3
+ **	cset	w[0-9]+, mi
+ **	and	w0, w[0-9]+, w[0-9]+
+ **	ret
+ */
+ int
+ and_lt (double a, double b, double c, double d)
+ {
+   return (a < b) & (c < d);
+ }
+ 
+ /* An equality comparison only raises Invalid for a signalling NaN, which
+    this test does not honour, so it can still be made conditional.  */
+ 
+ /*
+ ** and_eq:
+ **	fcmp	d0, d1
+ **	fccmp	d2, d3, 0, eq
+ **	cset	w0, eq
+ **	ret
+ */
+ int
+ and_eq (double a, double b, double c, double d)
+ {
+   return (a == b) & (c == d);
+ }
+ 
+ /* Only the floating-point comparison has to stay unconditional.  The target
+    rejects it in the conditional position, and the expander leads with it.  */
+ 
+ /*
+ ** and_int:
+ **	fcmpe	d0, d1
+ **	ccmp	w0, w1, 0, mi
+ **	cset	w0, lt
+ **	ret
+ */
+ int
+ and_int (double a, double b, int i, int j)
+ {
+   return (a < b) & (i < j);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp-trap-3.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp-trap-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp-trap-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp-trap-3.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fsignaling-nans" } */
+ 
+ /* Every comparison raises Invalid for a signalling NaN, so none of them can
+    become conditional.  */
+ 
+ int
+ and_eq (double a, double b, double c, double d)
+ {
+   return (a == b) & (c == d);
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tfcmp\td[0-9]+, d[0-9]+} 2 } } */
+ /* { dg-final { scan-assembler-not {\tfccmpe?\t} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp_1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp_1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp_1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp_1.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-trapping-math -march=armv8.2-a+fp16" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /* FCCMP and FCCMPE have half precision forms when FEAT_FP16 is available.
+    Trapping behaviour is disabled so each conditional comparison is safe.  */
+ 
+ /*
+ ** hf_lt:
+ **	fcmp	h0, h1
+ **	fccmp	h2, h3, 0, mi
+ **	cset	w0, mi
+ **	ret
+ */
+ int
+ hf_lt (_Float16 a, _Float16 b, _Float16 c, _Float16 d)
+ {
+   return (a < b) && (c < d);
+ }
+ 
+ /*
+ ** hf_eq:
+ **	fcmp	h0, h1
+ **	fccmp	h2, h3, 0, eq
+ **	cset	w0, eq
+ **	ret
+ */
+ int
+ hf_eq (_Float16 a, _Float16 b, _Float16 c, _Float16 d)
+ {
+   return (a == b) && (c == d);
+ }
+ 
+ /* Exercise the reverse conditional-compare pattern.  */
+ 
+ /*
+ ** hf_ior:
+ **	fcmp	h0, h1
+ **	fccmp	h2, h3, 8, pl
+ **	cset	w0, mi
+ **	ret
+ */
+ int
+ hf_ior (_Float16 a, _Float16 b, _Float16 c, _Float16 d)
+ {
+   return (a < b) || (c < d);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp_2.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp_2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp_2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp_2.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=armv8.2-a+nofp16" } */
+ 
+ int
+ hf_and (_Float16 a, _Float16 b, _Float16 c, _Float16 d)
+ {
+   return (a == b) && (c == d);
+ }
+ 
+ /* FEAT_FP16 is required for half precision compare instructions.  */
+ /* { dg-final { scan-assembler-not {\tfcmpe?\th} } } */
+ /* { dg-final { scan-assembler-not {\tfccmpe?\th} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp_3.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp_3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/fccmp_3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/fccmp_3.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffinite-math-only" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /* One condition code mode lets GCC reuse a compare of the same operands.  */
+ 
+ /*
+ ** cse:
+ **	fcmp	d0, d1
+ **	cset	w0, eq
+ **	cinc	w0, w0, mi
+ **	ret
+ */
+ int
+ cse (double a, double b)
+ {
+   return (a < b) + (a == b);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr102055-loop.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr102055-loop.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr102055-loop.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr102055-loop.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ /* Check that the shuffle is NOT optimized to rev64+ext inside a loop.  */
+ /* { dg-final { scan-assembler-not "rev64" } } */
+ 
+ #define vector __attribute__ ((vector_size (16)))
+ 
+ void
+ f (vector char *dst, vector char *src, int n)
+ {
+   for (int i = 0; i < n; i++)
+     dst[i]
+       = __builtin_shuffle (src[i], (vector char) {15, 14, 13, 12, 11, 10, 9, 8,
+ 						  7, 6, 5, 4, 3, 2, 1, 0});
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr102055.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr102055.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr102055.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr102055.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #define vector __attribute__ ((vector_size (16)))
+ 
+ /*
+ ** f:
+ **	rev64	v([0-9]+).16b, v0.16b
+ **	ext	v0.16b, v\1.16b, v\1.16b, #8
+ **	ret
+ */
+ vector char
+ f (vector char a)
+ {
+   return __builtin_shuffle (a, (vector char){ 15, 14, 13, 12, 11, 10, 9, 8,
+ 					      7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+ 
+ /*
+ ** f1:
+ **	rev64	v([0-9]+).8h, v0.8h
+ **	ext	v0.16b, v\1.16b, v\1.16b, #8
+ **	ret
+ */
+ vector short
+ f1 (vector short a)
+ {
+   return __builtin_shuffle (a, (vector short){ 7, 6, 5, 4, 3, 2, 1, 0 });
+ }
+ 
+ /*
+ ** f2:
+ **	rev64	v([0-9]+).4s, v0.4s
+ **	ext	v0.16b, v\1.16b, v\1.16b, #8
+ **	ret
+ */
+ vector int
+ f2 (vector int a)
+ {
+   return __builtin_shuffle (a, (vector int){ 3, 2, 1, 0 });
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr127056.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr127056.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr127056.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr127056.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,19 ----
+ /* PR rtl-optimization/127056 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ char (*a)[8];
+ int b;
+ 
+ void
+ c (void)
+ {
+   if (b >= 0)
+     __builtin_prefetch (a[b]);
+ }
+ 
+ void
+ d (char (*p)[8], unsigned int i)
+ {
+   __builtin_prefetch (p[i]);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr70120-2.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr70120-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr70120-2.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr70120-2.c	Sun Aug 30 22:32:11 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target lp64 } */
  /* { dg-options "-Og -freorder-functions -g3 -mcmodel=large -fno-pie" } */
+ /* { dg-require-effective-target aarch64_mcmodel_large } */
  
  typedef short v32u16 __attribute__ ((vector_size (32)));
  typedef int v32u32 __attribute__ ((vector_size (32)));
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr78255.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr78255.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr78255.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr78255.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -mcmodel=tiny" } */
+ /* { dg-require-effective-target aarch64_mcmodel_tiny } */
  
  extern int bar (void *);
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr78561.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr78561.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr78561.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr78561.c	Sun Aug 30 22:32:11 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-Og -O3 -mcmodel=tiny" } */
+ /* { dg-require-effective-target aarch64_mcmodel_tiny } */
  
  int
  main (__fp16 x)
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr78733.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr78733.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr78733.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr78733.c	Sun Aug 30 22:32:11 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -mcmodel=large" } */
  /* { dg-require-effective-target lp64 } */
+ /* { dg-require-effective-target aarch64_mcmodel_large } */
  
  __int128
  t (void)
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr79041-2.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr79041-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr79041-2.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr79041-2.c	Sun Aug 30 22:32:11 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -mcmodel=large" } */
  /* { dg-require-effective-target lp64 } */
+ /* { dg-require-effective-target aarch64_mcmodel_large } */
  
  __int128
  t (void)
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr94530.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr94530.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/pr94530.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/pr94530.c	Sun Aug 30 22:32:11 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target lp64 } */
  /* { dg-options "-Os -mcpu=falkor -mpc-relative-literal-loads -mcmodel=large -fno-pie -Wno-deprecated" } */
+ /* { dg-require-effective-target aarch64_mcmodel_large } */
  
  extern void bar(const char *);
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c	Sun Aug 30 22:32:11 2026
***************
*** 2,7 ****
--- 2,8 ----
  /* { dg-require-effective-target lp64 } */
  /* { dg-options "-O2 -mcmodel=large -fno-builtin -fno-pie" }  */
  /* { dg-skip-if "-mcmodel=large -fPIC not currently supported" { aarch64-*-* }  { "-fPIC" } { "" } } */
+ /* { dg-require-effective-target aarch64_mcmodel_large } */
  
  typedef long unsigned int size_t;
  typedef unsigned short int sa_family_t;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-dup-1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-dup-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-dup-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-dup-1.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,63 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fgimple -fdump-tree-forwprop1" } */
+ 
+ #include <arm_sve.h>
+ 
+ int __GIMPLE ()
+ reduc_max (int x)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdup_s32 (x);
+   res = .REDUC_MAX (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_min (int x)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdup_s32 (x);
+   res = .REDUC_MIN (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_and (int x)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdup_s32 (x);
+   res = .REDUC_AND (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_ior (int x)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdup_s32 (x);
+   res = .REDUC_IOR (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_xor (int x)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdup_s32 (x);
+   res = .REDUC_XOR (v);
+   return res;
+ }
+ 
+ /* { dg-final { scan-tree-dump-not {\.REDUC_} "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return x_} 4 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return 0;} 1 "forwprop1" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-pattern-1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-pattern-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-pattern-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-pattern-1.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,156 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fgimple -fdump-tree-forwprop1" } */
+ 
+ #include <arm_sve.h>
+ 
+ /* Check reductions for which the encoded elements and lane count determine
+    the result.  Keep reductions whose result can vary with the vector length.  */
+ 
+ int __GIMPLE ()
+ reduc_max_repeat (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdupq_s32 (3, 5, 3, 5);
+   res = .REDUC_MAX (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_min_repeat (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdupq_s32 (3, 5, 3, 5);
+   res = .REDUC_MIN (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_and_repeat (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdupq_s32 (3, 5, 3, 5);
+   res = .REDUC_AND (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_ior_repeat (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdupq_s32 (3, 5, 3, 5);
+   res = .REDUC_IOR (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_max_series (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svindex_s32 (1, 1);
+   res = .REDUC_MAX (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_plus_repeat (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdupq_s32 (3, 5, 3, 5);
+   res = .REDUC_PLUS (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_xor_unknown (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdupq_s32 (1, 2, 4, 8);
+   res = .REDUC_XOR (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_xor_repeat_even (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = svdupq_s32 (1, 2, 1, 2);
+   res = .REDUC_XOR (v);
+   return res;
+ }
+ 
+ /* Form non-stepped constants with foreground and background elements.  */
+ 
+ static inline __attribute__ ((always_inline)) svint32_t
+ initial_one (void)
+ {
+   svint32_t v = { 3 };
+   return v;
+ }
+ 
+ static inline __attribute__ ((always_inline)) svint32_t
+ initial_four (void)
+ {
+   svint32_t v = { -3, -5, -6, -7 };
+   return v;
+ }
+ 
+ int __GIMPLE ()
+ reduc_max_initial_repeat (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = initial_one ();
+   res = .REDUC_MAX (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_xor_initial_repeat (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = initial_one ();
+   res = .REDUC_XOR (v);
+   return res;
+ }
+ 
+ int __GIMPLE ()
+ reduc_max_incomplete_pattern (void)
+ {
+   svint32_t v;
+   int res;
+ 
+   v = initial_four ();
+   res = .REDUC_MAX (v);
+   return res;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times {\.REDUC_} 4 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MAX \(\{ 1, 2, 3, \.\.\. \}\)} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MAX \(\{ -3, -5, -6, -7, 0, 0, 0, 0, \.\.\. \}\)} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_PLUS \(\{ 3, 5, \.\.\. \}\)} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_XOR \(\{ 1, 2, 4, 8, \.\.\. \}\)} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return 5;} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return 3;} 3 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return 1;} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return 7;} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return 0;} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-not {return 6;} "forwprop1" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-snan-1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-snan-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-snan-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-snan-1.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,65 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fgimple -fsignaling-nans -fdump-tree-forwprop1" } */
+ 
+ #include <arm_sve.h>
+ 
+ #define SNAN_F32_BITS 0x7f800001U
+ 
+ float __GIMPLE ()
+ reduc_max_dup (float x)
+ {
+   svfloat32_t v;
+   float res;
+ 
+   v = svdup_f32 (x);
+   res = .REDUC_MAX (v);
+   return res;
+ }
+ 
+ float __GIMPLE ()
+ reduc_min_dup (float x)
+ {
+   svfloat32_t v;
+   float res;
+ 
+   v = svdup_f32 (x);
+   res = .REDUC_MIN (v);
+   return res;
+ }
+ 
+ typedef float v4sf __attribute__ ((vector_size (16)));
+ typedef unsigned int v4su __attribute__ ((vector_size (16)));
+ 
+ float __GIMPLE ()
+ reduc_max_cst (void)
+ {
+   v4su u;
+   v4sf v;
+   float res;
+ 
+   u = _Literal (v4su) { SNAN_F32_BITS, SNAN_F32_BITS,
+ 			 SNAN_F32_BITS, SNAN_F32_BITS };
+   v = __VIEW_CONVERT <v4sf> (u);
+   res = .REDUC_MAX (v);
+   return res;
+ }
+ 
+ float __GIMPLE ()
+ reduc_min_cst (void)
+ {
+   v4su u;
+   v4sf v;
+   float res;
+ 
+   u = _Literal (v4su) { SNAN_F32_BITS, SNAN_F32_BITS,
+ 			 SNAN_F32_BITS, SNAN_F32_BITS };
+   v = __VIEW_CONVERT <v4sf> (u);
+   res = .REDUC_MIN (v);
+   return res;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times {vec_duplicate_expr} 2 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MAX} 2 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MIN} 2 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MAX \(.*Nan} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MIN \(.*Nan} 1 "forwprop1" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-uniform-1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-uniform-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-uniform-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/sve/vec-reduc-uniform-1.c	Sun Aug 30 22:32:11 2026
***************
*** 0 ****
--- 1,71 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -msve-vector-bits=scalable -mautovec-preference=sve-only -fvect-cost-model=unlimited --param=vect-partial-vector-usage=0 -fdump-tree-vect-details -fdump-tree-forwprop4" } */
+ 
+ /* Check reductions of scalable uniform vector constants.  */
+ 
+ char c1, c2, c3, c4, c5;
+ short d1, d2, d3, d4, d5;
+ int rmax, rmin, r_and, r_ior, r_xor;
+ unsigned n;
+ 
+ __attribute__ ((noipa)) void
+ max_uniform (void)
+ {
+   for (short i = 0; i < n; i += 3)
+     {
+       c1 ^= d1;
+       rmax = rmax > 17 ? rmax : 17;
+     }
+ }
+ 
+ __attribute__ ((noipa)) void
+ min_uniform (void)
+ {
+   for (short i = 0; i < n; i += 3)
+     {
+       c2 ^= d2;
+       rmin = rmin < -19 ? rmin : -19;
+     }
+ }
+ 
+ __attribute__ ((noipa)) void
+ and_uniform (void)
+ {
+   for (short i = 0; i < n; i += 3)
+     {
+       c3 ^= d3;
+       r_and &= 1431655765;
+     }
+ }
+ 
+ __attribute__ ((noipa)) void
+ ior_uniform (void)
+ {
+   for (short i = 0; i < n; i += 3)
+     {
+       c4 ^= d4;
+       r_ior |= 572662306;
+     }
+ }
+ 
+ __attribute__ ((noipa)) void
+ xor_uniform (void)
+ {
+   for (short i = 0; i < n; i += 3)
+     {
+       c5 ^= d5;
+       r_xor ^= 858993459;
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump-times {LOOP VECTORIZED} 5 "vect" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MAX} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MIN} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_AND} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_IOR} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MAX \(vect_rmax_lsm} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_MIN \(vect_rmin_lsm} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_AND \(vect_r_and_lsm} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_IOR \(vect_r_ior_lsm} 1 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_XOR} 5 "forwprop4" } } */
+ /* { dg-final { scan-tree-dump-not {\.REDUC_XOR \(\{ 0, \.\.\. \}\)} "forwprop4" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c	Sun Aug 23 22:32:15 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do link } */
  /* { dg-options "-O3 -save-temps -mcmodel=tiny" } */
+ /* { dg-require-effective-target aarch64_mcmodel_tiny } */
  
  char fixed_regs[0x00080000];
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/vec-reduc-fmax-const-1.c gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/vec-reduc-fmax-const-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/aarch64/vec-reduc-fmax-const-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/aarch64/vec-reduc-fmax-const-1.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,62 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fgimple -fdump-tree-forwprop1" } */
+ /* { dg-additional-options "-march=armv8.2-a+sve -msve-vector-bits=scalable" } */
+ 
+ typedef float v4sf __attribute__ ((vector_size (16)));
+ 
+ float __GIMPLE ()
+ reduc_fmax (v4sf x)
+ {
+   v4sf c;
+   v4sf v;
+   float res;
+ 
+   c = _Literal (v4sf) { 1.0f, 1.0f, 1.0f, 1.0f };
+   v = .FMAX (x, c);
+   res = .REDUC_FMAX (v);
+   return res;
+ }
+ 
+ float __GIMPLE ()
+ reduc_fmin (v4sf x)
+ {
+   v4sf c;
+   v4sf v;
+   float res;
+ 
+   c = _Literal (v4sf) { 1.0f, 1.0f, 1.0f, 1.0f };
+   v = .FMIN (x, c);
+   res = .REDUC_FMIN (v);
+   return res;
+ }
+ 
+ float __GIMPLE ()
+ reduc_fmax_scalable (__SVFloat32_t x)
+ {
+   __SVFloat32_t c;
+   __SVFloat32_t v;
+   float res;
+ 
+   c = _Literal (__SVFloat32_t) 0;
+   v = .FMAX (x, c);
+   res = .REDUC_FMAX (v);
+   return res;
+ }
+ 
+ float __GIMPLE ()
+ reduc_fmin_scalable (__SVFloat32_t x)
+ {
+   __SVFloat32_t c;
+   __SVFloat32_t v;
+   float res;
+ 
+   c = _Literal (__SVFloat32_t) 0;
+   v = .FMIN (x, c);
+   res = .REDUC_FMIN (v);
+   return res;
+ }
+ 
+ /* Do not introduce a second reduction when the constant reduction cannot
+    fold.  */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_FMAX} 2 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {\.REDUC_FMIN} 2 "forwprop1" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/alpha/frame-address-1.c gcc-17-20260830/gcc/testsuite/gcc.target/alpha/frame-address-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/alpha/frame-address-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/alpha/frame-address-1.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,18 ----
+ /* An Alpha frame carries no link to its caller, so __builtin_frame_address
+    must decline a nonzero count rather than return the saved return address,
+    which is what offset 0 of a frame actually holds.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-skip-if "builtins are not expanded at compile time" { *-*-* } { "-flto" } { "" } } */
+ 
+ void *
+ fa0 (void)
+ {
+   return __builtin_frame_address (0);
+ }
+ 
+ void *
+ fa1 (void)
+ {
+   return __builtin_frame_address (1); /* { dg-warning "unsupported argument to '__builtin_frame_address'" } */
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/alpha/stack-protector-1.c gcc-17-20260830/gcc/testsuite/gcc.target/alpha/stack-protector-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/alpha/stack-protector-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/alpha/stack-protector-1.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,25 ----
+ /* Check that -fstack-protector is accepted and that the canary is set from
+    __stack_chk_guard and tested before returning.  The scratch registers used
+    to carry the canary must be cleared afterwards, so that its value is not
+    left recoverable in a register or in a spill slot.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fstack-protector-all" } */
+ 
+ extern void g (char *);
+ 
+ int
+ f (void)
+ {
+   char buf[64];
+   g (buf);
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler "__stack_chk_guard" } } */
+ /* { dg-final { scan-assembler "__stack_chk_fail" } } */
+ /* { dg-final { scan-assembler "\\sxor\\s\\\$\[0-9\]+,\\\$\[0-9\]+,\\\$\[0-9\]+\\s" } } */
+ /* One scratch cleared by stack_protect_setdi, one by stack_protect_testdi.
+    The pattern deliberately does not match "bis $31,$31,$31", which is a nop
+    the scheduler may insert anywhere.  */
+ /* { dg-final { scan-assembler-times "\\sbis\\s\\\$31,\\\$31,\\\$(\[0-9\]|1\[0-9\]|2\[0-9\]|30)\\n" 2 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/alpha/unaligned-big-frame.c gcc-17-20260830/gcc/testsuite/gcc.target/alpha/unaligned-big-frame.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/alpha/unaligned-big-frame.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/alpha/unaligned-big-frame.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,48 ----
+ /* Unaligned accesses to a stack object whose byte address does not fit
+    add_operand used to produce an unrecognizable insn.  A stack protector
+    canary pushes the offsets of a 65529-byte array past the -65536 boundary
+    that constraint L still accepts.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fstack-protector-strong -msafe-partial" } */
+ /* { dg-require-effective-target fstack_protector } */
+ 
+ struct __attribute__((packed)) S2 { short x; };
+ struct __attribute__((packed)) U2 { unsigned short x; };
+ struct __attribute__((packed)) U8 { unsigned long x; };
+ 
+ void g (long);
+ void sink (char *);
+ 
+ /* alpha_expand_unaligned_load, sign && size == 2.  */
+ void
+ load_signed_hi (void)
+ {
+   char a[65529];
+   g (((struct S2 *) a)->x);
+ }
+ 
+ /* alpha_expand_unaligned_load, general case.  */
+ void
+ load_unsigned_hi (void)
+ {
+   char a[65529];
+   g (((struct U2 *) a)->x);
+ }
+ 
+ void
+ load_di (void)
+ {
+   char a[65529];
+   g (((struct U8 *) a)->x);
+ }
+ 
+ /* alpha_expand_unaligned_store_safe_partial, both the high and the low
+    address.  */
+ void
+ store_di (unsigned long v)
+ {
+   char a[65529];
+   ((struct U8 *) a)->x = v;
+   sink (a);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/avr/pr127031.c gcc-17-20260830/gcc/testsuite/gcc.target/avr/pr127031.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/avr/pr127031.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/avr/pr127031.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,12 ----
+ /* PR middle-end/127031: synthesizing a wide multiply by a dense
+    constant overflowed struct algorithm's operation arrays (sized
+    MAX_BITS_PER_WORD = 8 on AVR) and crashed in synth_mult.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ typedef __UINT32_TYPE__ uint32_t;
+ 
+ uint32_t f (uint32_t x)
+ {
+   return x * 0xaaab;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/avr/torture/pr127098.c gcc-17-20260830/gcc/testsuite/gcc.target/avr/torture/pr127098.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/avr/torture/pr127098.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/avr/torture/pr127098.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run } */
+ 
+ #define NI __attribute((noipa))
+ 
+ typedef char U __attribute__ ((vector_size (16)));
+ 
+ NI void fun (long i, U u)
+ {
+   (void) i;
+   if (u[0] != 1)
+     __builtin_abort ();
+ }
+ 
+ U u = { 1 };
+ 
+ int main (void)
+ {
+   fun (0, u);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/btst-scc-1.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/btst-scc-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/btst-scc-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/btst-scc-1.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,31 ----
+ /* Check that for a field that starts at bit 0, feeding a sCC insn,
+    btst/btstq is used. */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler-not "\tand" } } */
+ /* { dg-final { scan-assembler-not "\tmov" } } */
+ /* { dg-final { scan-assembler-not "\tcmp|\ttest" } } */
+ /* { dg-final { scan-assembler-times "\tbtstq" 6 } } */
+ bool b7(int a) {
+   return (a & 127) == 0;
+ }
+ 
+ int i7n(int a) {
+   return (a & 127) != 0;
+ }
+ 
+ bool b4(int a) {
+   return (a & 15) == 0;
+ }
+ 
+ int i4n(int a) {
+   return (a & 15) != 0;
+ }
+ 
+ bool b4n(int a) {
+   return (a & 15) != 0;
+ }
+ 
+ int i4(int a) {
+   return (a & 15) == 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnw_v3.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnw_v3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnw_v3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnw_v3.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,20 ----
+ /* Check that we don't use the swap insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v3" } */
+ /* { dg-final { scan-assembler-not "\[ \t\]swapnw\[ \t\]" } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   unsigned int t = ~x;
+   t = (t >> 16) | (t << 16);
+   return t;
+ }
+ 
+ unsigned int bar(unsigned int x)
+ {
+   unsigned int t = x;
+   t = (t >> 16) | (t << 16);
+   return ~t;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnw_v8.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnw_v8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnw_v8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnw_v8.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,20 ----
+ /* Check that we use the swapnw insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v8" } */
+ /* { dg-final { scan-assembler-times "\[ \t\]swapnw\[ \t\]" 2 } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   unsigned int t = ~x;
+   t = (t >> 16) | (t << 16);
+   return t;
+ }
+ 
+ unsigned int bar(unsigned int x)
+ {
+   unsigned int t = x;
+   t = (t >> 16) | (t << 16);
+   return ~t;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwb_v3.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwb_v3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwb_v3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwb_v3.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* Check that we don't use the swap insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v3" } */
+ /* { dg-final { scan-assembler-not "\[ \t\]swapnwb\[ \t\]" } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   return __builtin_bswap32(~x);
+ }
+ 
+ unsigned int bar(unsigned int x)
+ {
+   return ~__builtin_bswap32(x);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwb_v8.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwb_v8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwb_v8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwb_v8.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* Check that we use the swapnwb insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v8" } */
+ /* { dg-final { scan-assembler-times "\[ \t\]swapnwb\[ \t\]" 2 } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   return __builtin_bswap32(~x);
+ }
+ 
+ unsigned int bar(unsigned int x)
+ {
+   return ~__builtin_bswap32(x);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwbr_v3.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwbr_v3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwbr_v3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwbr_v3.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* Check that we don't use the swap insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v3" } */
+ /* { dg-final { scan-assembler-not "\[ \t\]swapnwbr\[ \t\]" } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   return __builtin_bitreverse32(~x);
+ }
+ 
+ unsigned int bar(unsigned int x)
+ {
+   return ~__builtin_bitreverse32(x);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwbr_v8.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwbr_v8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapnwbr_v8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapnwbr_v8.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* Check that we use the swapnwbr insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v8" } */
+ /* { dg-final { scan-assembler-times "\[ \t\]swapnwbr\[ \t\]" 2 } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   return __builtin_bitreverse32(~x);
+ }
+ 
+ unsigned int bar(unsigned int x)
+ {
+   return ~__builtin_bitreverse32(x);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapw_v3.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapw_v3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapw_v3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapw_v3.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,10 ----
+ /* Check that we don't use the swap insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v3" } */
+ /* { dg-final { scan-assembler-not "\[ \t\]swapw\[ \t\]" } } */
+ 
+ unsigned int rot16_ior(unsigned int x) { return (x >> 16) | (x << 16); }
+ unsigned int rot16_xor(unsigned int x) { return (x >> 16) ^ (x << 16); }
+ unsigned int rot16_add(unsigned int x) { return (x >> 16) + (x << 16); }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapw_v8.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapw_v8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapw_v8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapw_v8.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,10 ----
+ /* Check that we use the swapw insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v8" } */
+ /* { dg-final { scan-assembler-times "\[ \t\]swapw\[ \t\]" 3 } } */
+ 
+ unsigned int rot16_ior(unsigned int x) { return (x >> 16) | (x << 16); }
+ unsigned int rot16_xor(unsigned int x) { return (x >> 16) ^ (x << 16); }
+ unsigned int rot16_add(unsigned int x) { return (x >> 16) + (x << 16); }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapwbr_v3.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapwbr_v3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapwbr_v3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapwbr_v3.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,12 ----
+ /* Check that we don't use the swap insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v3" } */
+ /* { dg-final { scan-assembler-not "\[ \t\]swapwbr\[ \t\]" } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   return __builtin_bitreverse32(x);
+ }
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapwbr_v8.c gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapwbr_v8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/cris/swapwbr_v8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/cris/swapwbr_v8.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,12 ----
+ /* Check that we use the swapwbr insn by checking assembler output.
+    The swap instruction was added in v8.  */
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { "cris*-*-elf" } { "-march*" } { "" } } */
+ /* { dg-options "-O2 -march=v8" } */
+ /* { dg-final { scan-assembler "\[ \t\]swapwbr\[ \t\]" } } */
+ 
+ unsigned int foo(unsigned int x)
+ {
+   return __builtin_bitreverse32(x);
+ }
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/apx-ndd-adc.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/apx-ndd-adc.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/apx-ndd-adc.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/apx-ndd-adc.c	Sun Aug 30 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-do compile { target { int128 && { ! ia32 } } } } */
  /* { dg-options "-mapxf -mtune-ctrl=enable_ndd_mem -O2" } */
  
  #include "pr91681-1.c"
--- 1,4 ----
! /* { dg-do compile { target int128 } } */
  /* { dg-options "-mapxf -mtune-ctrl=enable_ndd_mem -O2" } */
  
  #include "pr91681-1.c"
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/apx-ndd-sbb.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/apx-ndd-sbb.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/apx-ndd-sbb.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/apx-ndd-sbb.c	Sun Aug 30 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-do compile { target { int128 && { ! ia32 } } } } */
  /* { dg-options "-mapxf -mtune-ctrl=enable_ndd_mem -O2" } */
  
  #include "pr91681-2.c"
--- 1,4 ----
! /* { dg-do compile { target int128 } } */
  /* { dg-options "-mapxf -mtune-ctrl=enable_ndd_mem -O2" } */
  
  #include "pr91681-2.c"
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/apx-ndd-ti-shift.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/apx-ndd-ti-shift.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/apx-ndd-ti-shift.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/apx-ndd-ti-shift.c	Sun Aug 30 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-do run { target { int128 && { ! ia32 } } } } */
  /* { dg-require-effective-target apxf } */
  /* { dg-options "-O2" } */
  
--- 1,4 ----
! /* { dg-do compile { target int128 } } */
  /* { dg-require-effective-target apxf } */
  /* { dg-options "-O2" } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-init-v4sf-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-init-v4sf-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-init-v4sf-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-init-v4sf-1.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,33 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "vinsertps" 16 } } */
! /* { dg-final { scan-assembler-times "vpslldq" 3 } } */
! /* { dg-final { scan-assembler-times "vshufps" 3 } } */
  /* { dg-final { scan-assembler-times "vmovlhps" 4 } } */
- /* { dg-final { scan-assembler-times "vunpcklps" 5 } } */
  /* { dg-final { scan-assembler-times "vmovss" 2 } } */
! /* { dg-final { scan-assembler-times "vbroadcastss" 1 } } */
--- 24,32 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "vbroadcastss" 1 } } */
! /* { dg-final { scan-assembler-times "vinsertps" 12 } } */
  /* { dg-final { scan-assembler-times "vmovlhps" 4 } } */
  /* { dg-final { scan-assembler-times "vmovss" 2 } } */
! /* { dg-final { scan-assembler-times "vshufps" 3 } } */
! /* { dg-final { scan-assembler-times "vunpcklps" 2 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-init-v4sf-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-init-v4sf-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-init-v4sf-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-init-v4sf-2.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,32 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
- /* { dg-final { scan-assembler-times "vmovss" 18 } } */
- /* { dg-final { scan-assembler-times "vpslldq" 3 } } */
- /* { dg-final { scan-assembler-times "vshufps" 2 } } */
- /* { dg-final { scan-assembler-times "vmovlhps" 4 } } */
  /* { dg-final { scan-assembler-times "vbroadcastss" 2 } } */
! /* { dg-final { scan-assembler-times "vunpcklps" 5 } } */
--- 24,31 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
  /* { dg-final { scan-assembler-times "vbroadcastss" 2 } } */
! /* { dg-final { scan-assembler-times "vinsertps" 8 } } */
! /* { dg-final { scan-assembler-times "vmovlhps" 4 } } */
! /* { dg-final { scan-assembler-times "vmovss" 13 } } */
! /* { dg-final { scan-assembler-times "vshufps" 2 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-loadu2-m128-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-loadu2-m128-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-loadu2-m128-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-loadu2-m128-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx" } */
  /* { dg-final { scan-assembler "\tvmovups\t" } } */
  /* { dg-final { scan-assembler "\tvinsertf128\t" } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx -mno-avx512f" } */
  /* { dg-final { scan-assembler "\tvmovups\t" } } */
  /* { dg-final { scan-assembler "\tvinsertf128\t" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx" } */
  /* { dg-final { scan-assembler "\tvmovupd\t" } } */
  /* { dg-final { scan-assembler "\tvinsertf128\t" } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx -mno-avx512f" } */
  /* { dg-final { scan-assembler "\tvmovupd\t" } } */
  /* { dg-final { scan-assembler "\tvinsertf128\t" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-loadu2-m128i-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx" } */
  /* { dg-final { scan-assembler "\tvmovdqu\t" } } */
  /* { dg-final { scan-assembler "\tvinsert\[fi]128\t" } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx -mno-avx512f" } */
  /* { dg-final { scan-assembler "\tvmovdqu\t" } } */
  /* { dg-final { scan-assembler "\tvinsert\[fi]128\t" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-storeu2-m128-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-storeu2-m128-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-storeu2-m128-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-storeu2-m128-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx" } */
  /* { dg-final { scan-assembler "\tvmovups\t" } } */
  /* { dg-final { scan-assembler "\tvextractf128\t" } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx -mno-avx512f" } */
  /* { dg-final { scan-assembler "\tvmovups\t" } } */
  /* { dg-final { scan-assembler "\tvextractf128\t" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-storeu2-m128d-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx" } */
  /* { dg-final { scan-assembler "\tvmovup\[sd]\t" } } */
  /* { dg-final { scan-assembler "\tvextractf128\t" } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx -mno-avx512f" } */
  /* { dg-final { scan-assembler "\tvmovup\[sd]\t" } } */
  /* { dg-final { scan-assembler "\tvextractf128\t" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx-storeu2-m128i-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx" } */
  /* { dg-final { scan-assembler "\tvmov(dqu|ups)\t" } } */
  /* { dg-final { scan-assembler "\tvextract\[if]128\t" } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mavx -mno-avx512f" } */
  /* { dg-final { scan-assembler "\tvmov(dqu|ups)\t" } } */
  /* { dg-final { scan-assembler "\tvextract\[if]128\t" } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx2-init-v4sf-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx2-init-v4sf-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx2-init-v4sf-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx2-init-v4sf-1.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,33 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "vinsertps" 16 } } */
! /* { dg-final { scan-assembler-times "vpslldq" 3 } } */
! /* { dg-final { scan-assembler-times "vshufps" 2 } } */
  /* { dg-final { scan-assembler-times "vmovlhps" 4 } } */
- /* { dg-final { scan-assembler-times "vunpcklps" 5 } } */
  /* { dg-final { scan-assembler-times "vmovss" 2 } } */
! /* { dg-final { scan-assembler-times "vbroadcastss" 2 } } */
--- 24,32 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "vbroadcastss" 2 } } */
! /* { dg-final { scan-assembler-times "vinsertps" 12 } } */
  /* { dg-final { scan-assembler-times "vmovlhps" 4 } } */
  /* { dg-final { scan-assembler-times "vmovss" 2 } } */
! /* { dg-final { scan-assembler-times "vshufps" 2 } } */
! /* { dg-final { scan-assembler-times "vunpcklps" 2 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx512bmm-check-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx512bmm-check-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx512bmm-check-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx512bmm-check-1.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=znver6" } */
+ 
+ #ifndef __AVX512BMM__
+ # error AVX512BMM should be enabled for target znver6.
+ #endif
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx512bmm-check-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx512bmm-check-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx512bmm-check-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx512bmm-check-2.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -march=native" } */
+ 
+ int
+ main ()
+ {
+   if (__builtin_cpu_supports ("avx512bmm"))
+     {
+ #ifndef __AVX512BMM__
+       __builtin_abort ();
+ #endif
+     }
+   else
+     {
+ #ifdef __AVX512BMM__
+       __builtin_abort ();
+ #endif
+     }
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx512bmm-check-3.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx512bmm-check-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/avx512bmm-check-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/avx512bmm-check-3.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=native -mno-avx512bmm" } */
+ 
+ #if defined(__ZNVER6__) && defined(__AVX512BMM__)
+ # error AVX512BMM should be disabled for native detection of target znver6 with -mno-avx512bmm.
+ #endif
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr106910-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr106910-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr106910-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr106910-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,7 ****
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-skip-if "newlib libc math causes different codegen" { newlib } } */
  /* { dg-options "-msse4.1 -O2 -Ofast" } */
! /* { dg-final { scan-assembler-times "roundps" 9 } } */
  /* { dg-final { scan-assembler-times "cvtps2dq" 1 } } */
  /* { dg-final { scan-assembler-times "cvttps2dq" 3 } } */
  
--- 1,7 ----
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-skip-if "newlib libc math causes different codegen" { newlib } } */
  /* { dg-options "-msse4.1 -O2 -Ofast" } */
! /* { dg-final { scan-assembler-times "(roundps|vrndscaleps)" 9 } } */
  /* { dg-final { scan-assembler-times "cvtps2dq" 1 } } */
  /* { dg-final { scan-assembler-times "cvttps2dq" 3 } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr11877-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr11877-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr11877-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr11877-2.c	Sun Aug 30 22:32:12 2026
*************** foo (int *p)
*** 23,26 ****
  }
  
  /* { dg-final { scan-assembler-times "xorl\[ \t\]" 1 } } */
! /* { dg-final { scan-assembler-not "\\\$0," } } */
--- 23,26 ----
  }
  
  /* { dg-final { scan-assembler-times "xorl\[ \t\]" 1 } } */
! /* { dg-final { scan-assembler-not "\[ \t\]\\\$0," } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr11877.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr11877.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr11877.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr11877.c	Sun Aug 30 22:32:12 2026
*************** void bar (int *p)
*** 13,16 ****
  }
  
  /* { dg-final { scan-assembler-times "xorl\[ \t\]" 2 } } */
! /* { dg-final { scan-assembler-not "\\\$0," } } */
--- 13,16 ----
  }
  
  /* { dg-final { scan-assembler-times "xorl\[ \t\]" 2 } } */
! /* { dg-final { scan-assembler-not "\[ \t\]\\\$0," } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr120192.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr120192.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr120192.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr120192.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,9 ----
+ /* PR target/120192 */
+ /* { dg-do compile { target x86_64-*-mingw* } } */
+ /* { dg-options "-O0 -mavx" } */
+ 
+ typedef char a;
+ void b() {
+   typedef a c __attribute__((vector_size(32), aligned));
+   c d = {};
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr125238.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr125238.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr125238.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr125238.c	Sun Aug 30 22:32:12 2026
*************** foo (void)
*** 22,26 ****
      }
    }
  }
- 
- /* { dg-final { scan-assembler "movabsq\[ \\t\]+\\\$8589934594, %r\[a-z0-9\]+" { target { ! ia32 } } } } */
--- 22,24 ----
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr125746.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr125746.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr125746.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr125746.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-msse -mno-sse2" } */
+ 
+ void
+ foo()
+ {
+   register short b __asm("%xmm1") = 0; /* { dg-error "register specified for 'b' isn't suitable for data type" } */
+ 
+   asm("" : "+v"(b));
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr127023.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr127023.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr127023.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr127023.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* PR ipa/127023 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fopenmp" } */
+ /* { dg-require-ifunc "" } */
+ 
+ __attribute__((target_clones("default", "fma4"), noinline))
+ static void e(int f) {
+   if (!f)
+ #pragma omp parallel
+     for (;;)
+       ;
+ }
+ __attribute__((target_clones("default", "fma4")))
+ void g(void) {
+   e(1);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr127045.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr127045.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr127045.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr127045.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,53 ----
+ /* { dg-do run { target { ! ia32 } } } */
+ /* { dg-options "-O1" } */
+ 
+ float a;
+ long b, c;
+ int d, e, f, *g, *h, **i, **l, **m;
+ short n, o, p, q;
+ void
+ r (short s, short t)
+ {
+   while (-32429 - (-28412 | t) > s)
+     ;
+ }
+ void
+ u (short s, int t, long v)
+ {
+   h = &e;
+   i = &g;
+   l = &h;
+   m = &g;
+   if (v == 1073741824)
+     {
+       *i = &d;
+       *l = *m;
+     }
+   d = -1610809352 / t;
+   f = *h;
+   n = f;
+   o = n % 181 + 181;
+   p = 83;
+   q = 25 * o % 181;
+   p = p + q;
+   r (s - 16044, p + 28236);
+ }
+ void
+ w (float s)
+ {
+   long j, k;
+   a = 8.0f * s;
+   b = 2.0f;
+   j = a;
+   j = j ^ b;
+   c = -4294967294 ^ j;
+   k = 2 ^ j;
+   c = c & k;
+   u (-16384, 24, 1073741824 ^ c);
+ }
+ int
+ main ()
+ {
+   w (536870912.0f);
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr45685.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr45685.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr45685.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr45685.c	Sun Aug 30 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O3 -mno-sse4 -ftree-loop-if-convert" } */
  
  typedef unsigned long long int uint64_t;
  typedef long long int int64_t;
--- 1,5 ----
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O3 -mno-sse4" } */
  
  typedef unsigned long long int uint64_t;
  typedef long long int int64_t;
*************** int summation_helper_2(int64_t* products
*** 36,39 ****
  	return s;
  }
  
! /* { dg-final { scan-assembler-times "cmov" 6 } } */
--- 36,39 ----
  	return s;
  }
  
! /* { dg-final { scan-assembler-times "cmov" 6 { xfail *-*-* } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr48609.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr48609.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr48609.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr48609.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,13 ----
+ /* PR target/48609 */
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2 -msse2" } */
+ typedef _Complex float SCtype;
+ extern SCtype bar;
+ void foo (SCtype x)
+ {
+   bar = x;
+ }
+ 
+ /* { dg-final { scan-assembler-not "movdqa" } } */
+ /* { dg-final { scan-assembler-not "shufps" } } */
+ /* { dg-final { scan-assembler-not "unpcklps" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr85950.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr85950.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr85950.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr85950.c	Sun Aug 30 22:32:12 2026
*************** long long llfloor (double x) { return fl
*** 12,16 ****
  long long llceil (double x) { return ceil (x); }
  #endif
    
! /* { dg-final { scan-assembler-times "roundsd" 2 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "roundsd" 4 { target { ! ia32 } } } } */
--- 12,16 ----
  long long llceil (double x) { return ceil (x); }
  #endif
    
! /* { dg-final { scan-assembler-times "(roundsd|vrndscalesd)" 2 { target ia32 } } } */
! /* { dg-final { scan-assembler-times "(roundsd|vrndscalesd)" 4 { target { ! ia32 } } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr89523-1a.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr89523-1a.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr89523-1a.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr89523-1a.c	Sun Aug 30 22:32:12 2026
***************
*** 2,8 ****
  /* { dg-require-effective-target maybe_x32 } */
  /* { dg-options "-maddress-mode=short -mx32 -Ofast -funroll-loops -march=haswell" } */
  /* { dg-final { scan-assembler-not "\tvgather" } } */
- /* { dg-final { scan-assembler "addr32 vgather" } } */
  
  void foo (void);
  
--- 2,7 ----
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr89523-1b.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr89523-1b.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr89523-1b.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr89523-1b.c	Sun Aug 30 22:32:12 2026
***************
*** 2,7 ****
  /* { dg-require-effective-target maybe_x32 } */
  /* { dg-options "-maddress-mode=long -mx32 -Ofast -funroll-loops -march=haswell" } */
  /* { dg-final { scan-assembler-not "\tvgather" } } */
- /* { dg-final { scan-assembler "addr32 vgather" } } */
  
  #include "pr89523-1a.c"
--- 2,6 ----
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr92651.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr92651.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr92651.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr92651.c	Sun Aug 30 22:32:12 2026
*************** int foo(unsigned char a, unsigned char b
*** 12,16 ****
  /* { dg-final { scan-assembler-not "cmov*" } } */
  /* { dg-final { scan-assembler "(cltd|cdq|shr)" } } */
  /* { dg-final { scan-assembler-times "xor" 1 } } */
! /* { dg-final { scan-assembler-times "sub" 2 } } */
  
--- 12,16 ----
  /* { dg-final { scan-assembler-not "cmov*" } } */
  /* { dg-final { scan-assembler "(cltd|cdq|shr)" } } */
  /* { dg-final { scan-assembler-times "xor" 1 } } */
! /* { dg-final { scan-assembler-times "\tsub" 2 } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr98060.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr98060.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/pr98060.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/pr98060.c	Sun Aug 30 22:32:12 2026
***************
*** 2,8 ****
  /* { dg-do compile } */
  /* { dg-options "-O2" } */
  
! /* { dg-final { scan-assembler-not "set" } } */
  /* { dg-final { scan-assembler-times "adc"  4 } } */
  /* { dg-final { scan-assembler-times "sbb"  4 } } */
  
--- 2,8 ----
  /* { dg-do compile } */
  /* { dg-options "-O2" } */
  
! /* { dg-final { scan-assembler-not "set\[abceglnops\]" } } */
  /* { dg-final { scan-assembler-times "adc"  4 } } */
  /* { dg-final { scan-assembler-times "sbb"  4 } } */
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse-init-v4sf-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse-init-v4sf-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse-init-v4sf-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse-init-v4sf-2.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,32 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "xorps" 16 } } */
! /* { dg-final { scan-assembler-times "movss" 19 } } */
! /* { dg-final { scan-assembler-times "movaps" 10 } } */
  /* { dg-final { scan-assembler-times "shufps" 7 } } */
! /* { dg-final { scan-assembler-times "movlhps" 4 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
--- 24,32 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "xorps" 9 } } */
! /* { dg-final { scan-assembler-times "movss" 9 } } */
! /* { dg-final { scan-assembler-times "movaps" 6 } } */
  /* { dg-final { scan-assembler-times "shufps" 7 } } */
! /* { dg-final { scan-assembler-times "movlhps" 7 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse-init-v4sf-3.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse-init-v4sf-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse-init-v4sf-3.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse-init-v4sf-3.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,30 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
  /* { dg-final { scan-assembler-times "movss" 20 } } */
  /* { dg-final { scan-assembler-times "shufps" 7 } } */
- /* { dg-final { scan-assembler-times "movlhps" 4 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
--- 24,31 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
+ /* { dg-final { scan-assembler-times "movlhps" 7 } } */
  /* { dg-final { scan-assembler-times "movss" 20 } } */
  /* { dg-final { scan-assembler-times "shufps" 7 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
+ /* { dg-final { scan-assembler-times "xorps" 3 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-1.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,32 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "movd" 32 } } */
! /* { dg-final { scan-assembler-times "pslldq" 3 } } */
! /* { dg-final { scan-assembler-times "shufps" 4 } } */
! /* { dg-final { scan-assembler-times "movlhps" 4 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
  /* { dg-final { scan-assembler-times "movss" 3 } } */
--- 24,33 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "pslldq" 7 } } */
! /* { dg-final { scan-assembler-times "psrldq" 3 } } */
! /* { dg-final { scan-assembler-times "shufps" 6 } } */
! /* { dg-final { scan-assembler-times "movlhps" 2 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
+ /* { dg-final { scan-assembler-times "movq" 3 } } */
  /* { dg-final { scan-assembler-times "movss" 3 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse2-init-v4sf-2.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,31 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "movss" 20 } } */
! /* { dg-final { scan-assembler-times "pslldq" 3 } } */
! /* { dg-final { scan-assembler-times "shufps" 4 } } */
! /* { dg-final { scan-assembler-times "movlhps" 4 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
--- 24,33 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "pslldq" 7 } } */
! /* { dg-final { scan-assembler-times "psrldq" 3 } } */
! /* { dg-final { scan-assembler-times "shufps" 6 } } */
! /* { dg-final { scan-assembler-times "movlhps" 2 } } */
  /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
+ /* { dg-final { scan-assembler-times "movq" 3 } } */
+ /* { dg-final { scan-assembler-times "movss" 20 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse2-v1ti-logic-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse2-v1ti-logic-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse2-v1ti-logic-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse2-v1ti-logic-2.c	Sun Aug 30 22:32:12 2026
*************** void not2()
*** 49,53 ****
  }
  
  /* { dg-final { scan-assembler-times "pand" 2 } } */
! /* { dg-final { scan-assembler-times "por" 2 } } */
  /* { dg-final { scan-assembler-times "pxor" 4 } } */
--- 49,53 ----
  }
  
  /* { dg-final { scan-assembler-times "pand" 2 } } */
! /* { dg-final { scan-assembler-times "por\[ \t\]" 2 } } */
  /* { dg-final { scan-assembler-times "pxor" 4 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-2.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,32 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "insertps" 16 } } */
! /* { dg-final { scan-assembler-times "pslldq" 3 } } */
! /* { dg-final { scan-assembler-times "shufps" 4 } } */
  /* { dg-final { scan-assembler-times "movlhps" 4 } } */
- /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
  /* { dg-final { scan-assembler-times "movss" 3 } } */
--- 24,32 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "insertps" 12 } } */
  /* { dg-final { scan-assembler-times "movlhps" 4 } } */
  /* { dg-final { scan-assembler-times "movss" 3 } } */
+ /* { dg-final { scan-assembler-not "pslldq" } } */
+ /* { dg-final { scan-assembler-times "shufps" 4 } } */
+ /* { dg-final { scan-assembler-times "unpcklps" 2 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-3.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-3.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-init-v4sf-3.c	Sun Aug 30 22:32:12 2026
*************** v4sf fm000() { return (v4sf){m,0.0f,0.0f
*** 24,31 ****
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "movss" 20 } } */
! /* { dg-final { scan-assembler-times "pslldq" 3 } } */
! /* { dg-final { scan-assembler-times "shufps" 4 } } */
  /* { dg-final { scan-assembler-times "movlhps" 4 } } */
! /* { dg-final { scan-assembler-times "unpcklps" 5 } } */
--- 24,32 ----
  v4sf fm0m0() { return (v4sf){m,0.0f,m,0.0f}; }
  v4sf fmmmm() { return (v4sf){m,m,m,m}; }
  
! /* { dg-final { scan-assembler-times "insertps" 8 } } */
! /* { dg-final { scan-assembler-times "movss" 12 } } */
  /* { dg-final { scan-assembler-times "movlhps" 4 } } */
! /* { dg-final { scan-assembler-not "pslldq" } } */
! /* { dg-final { scan-assembler-times "shufps" 4 } } */
! /* { dg-final { scan-assembler-not "unpcklps" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-round-roundeven-1.c	Sun Aug 30 22:32:12 2026
*************** f2 (float x)
*** 13,17 ****
    return __builtin_roundevenf (x);
  }
  
! /* { dg-final { scan-assembler-times "roundsd\[^\n\r\]*xmm" 1 } } */
! /* { dg-final { scan-assembler-times "roundss\[^\n\r\]*xmm" 1 } } */
--- 13,17 ----
    return __builtin_roundevenf (x);
  }
  
! /* { dg-final { scan-assembler-times "(roundsd|vrndscalesd)\[^\n\r\]*xmm" 1 } } */
! /* { dg-final { scan-assembler-times "(roundss|vrndscaless)\[^\n\r\]*xmm" 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-10.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-10.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-10.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-10.c	Sun Aug 30 22:32:12 2026
*************** void foo(__int128 m)
*** 10,13 ****
      m3 = m;
  }
  
! /* { dg-final { scan-assembler-times "movaps" 4 } } */
--- 10,13 ----
      m3 = m;
  }
  
! /* { dg-final { scan-assembler-times "(movaps|vmovdqa)" 4 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-11.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-11.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-11.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-11.c	Sun Aug 30 22:32:12 2026
*************** void foo(unsigned long x)
*** 11,14 ****
      m3 = m;
  }
  
! /* { dg-final { scan-assembler-times "movaps" 4 } } */
--- 11,14 ----
      m3 = m;
  }
  
! /* { dg-final { scan-assembler-times "(movaps|vmovdqa)" 4 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-12.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-12.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-12.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-12.c	Sun Aug 30 22:32:12 2026
*************** void foo(unsigned int x)
*** 11,14 ****
      m3 = m;
  }
  
! /* { dg-final { scan-assembler-times "movaps" 4 } } */
--- 11,14 ----
      m3 = m;
  }
  
! /* { dg-final { scan-assembler-times "(movaps|vmovdqa)" 4 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-14.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-14.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/sse4_1-stv-14.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/sse4_1-stv-14.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* PR target/127020.  */
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -march=x86-64-v2" } */
+ 
+ extern __int128 a, b, c, z;
+ 
+ __int128
+ func (__int128 x)
+ {
+   return (x ^ a ^ b ^ c ^ z);
+ }
+ 
+ /* { dg-final { scan-assembler-times "pxor" 4 } } */
+ /* { dg-final { scan-assembler-times "pinsrq" 1 } } */
+ /* { dg-final { scan-assembler-times "pextrq" 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/ssp-global-hidden-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/ssp-global-hidden-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/ssp-global-hidden-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/ssp-global-hidden-1.c	Sun Aug 30 22:32:12 2026
*************** main (void)
*** 39,45 ****
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
!   /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
!   /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
--- 39,46 ----
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target { ia32 && { ! *-*-darwin* } } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
! /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler {___stack_chk_guard-L.\$pb} { target { ia32 && *-*-darwin* } } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/ssp-global-hidden-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/ssp-global-hidden-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/ssp-global-hidden-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/ssp-global-hidden-2.c	Sun Aug 30 22:32:12 2026
*************** smash (char *p, int i)
*** 13,20 ****
    p[i] = 42;
  }
  
! /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
--- 13,21 ----
    p[i] = 42;
  }
  
! /* { dg-final { scan-hidden "__stack_chk_guard" { target { ! *-*-darwin* } } } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target { ia32 && { ! *-*-darwin* } } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
+ /* { dg-final { scan-assembler {L___stack_chk_guard\$non_lazy_ptr-L.\$pb} { target { ia32 && *-*-darwin* } } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/ssp-global-hidden-3.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/ssp-global-hidden-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/ssp-global-hidden-3.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/ssp-global-hidden-3.c	Sun Aug 30 22:32:12 2026
*************** main (void)
*** 40,46 ****
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
!   /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target ia32 } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
!   /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
--- 40,47 ----
  /* { dg-final { scan-hidden "__stack_chk_guard" } } */
  /* { dg-final { scan-assembler "__stack_chk_guard\\(%rip\\)" { target { ! ia32 } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOTPCREL" { target { ! ia32 } } } } */
! /* { dg-final { scan-assembler ".quad	3280087301477736604" { target { lp64 } } } } */
! /* { dg-final { scan-assembler "__stack_chk_guard@GOTOFF" { target { ia32 && { ! *-*-darwin* } } } } } */
  /* { dg-final { scan-assembler-not "__stack_chk_guard@GOT\\(" { target ia32 } } } */
! /* { dg-final { scan-assembler ".long	-584267481" { target { ! lp64 } } } } */
! /* { dg-final { scan-assembler {___stack_chk_guard-L.\$pb} { target { ia32 && *-*-darwin* } } } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-1.c	Sun Aug 30 22:32:12 2026
***************
*** 1,6 ****
  /* { dg-do compile } */
! /* { dg-options "-msse2 -O2 -ffast-math" } */
! /* { dg-final { scan-assembler-times "psrld" 1 } } */
  
  __bf16
  foo (float a)
--- 1,46 ----
  /* { dg-do compile } */
! /* { dg-options "-msse2 -O2 -ffast-math -mno-avxneconvert -mno-avx512bf16" } */
! /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
! /* { dg-final { check-function-bodies "ia32" "*ia32" "" { target ia32 } {^\t?\.} } } */
! /* { dg-final { check-function-bodies "x64" "*x64" "" { target { ! ia32 } } {^\t?\.} } } */
! 
! /*
! ia32foo:
! ia32.LFB0:
! ia32	.cfi_startproc
! ia32	movl	4\(%esp\), %edx
! ia32	movl	%edx, %eax
! ia32	shrl	\$16, %eax
! ia32	movl	%eax, %ecx
! ia32	andl	\$1, %eax
! ia32	leal	32767\(%edx,%eax\), %eax
! ia32	andl	\$32768, %ecx
! ia32	shrl	\$16, %eax
! ia32	andl	\$2139095040, %edx
! ia32	cmove	%ecx, %eax
! ia32	(v|)movd	%eax, %xmm0
! ia32	ret
! ia32...
! *ia32
! 
! x64foo:
! x64.LFB0:
! x64	.cfi_startproc
! x64	(v|)movd	%xmm0, %edx
! x64	movl	%edx, %eax
! x64	shrl	\$16, %eax
! x64	movl	%eax, %ecx
! x64	andl	\$1, %eax
! x64	leal	32767\(%rdx,%rax\), %eax
! x64	andl	\$32768, %ecx
! x64	shrl	\$16, %eax
! x64	andl	\$2139095040, %edx
! x64	cmove	%ecx, %eax
! x64	(v|)movd	%eax, %xmm0
! x64	ret
! x64...
! *x64
! */
  
  __bf16
  foo (float a)
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-2.c	Sun Aug 30 22:32:12 2026
***************
*** 1,65 ****
! /* { dg-do run } */
! /* { dg-options "-msse2 -O2 -ffast-math" } */
! 
! #include <stdlib.h>
! #include <stdint.h>
! #include <string.h>
! #include <math.h>
! 
! __bf16
! foo (float a)
! {
!   return a;
! }
! 
! static __bf16
! CALC (float *a)
! {
!   uint32_t bits;
!   memcpy (&bits, a, sizeof (bits));
!   bits >>= 16;
!   uint16_t bfloat16_bits = (uint16_t) bits;
!   __bf16 bf16;
!   memcpy (&bf16, &bfloat16_bits, sizeof (bf16));
!   return bf16;
! }
! 
! int
! main (void)
! {
!   float test_values[] = { 0.0f, -0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1000.0f, -1000.0f,
!                           3.1415926f, -3.1415926f, 1e-8f, -1e-8f,
!                           1.0e+38f, -1.0e+38f, 1.0e-38f, -1.0e-38f };
!   size_t num_values = sizeof (test_values) / sizeof (test_values[0]);
! 
!   for (size_t i = 0; i < num_values; ++i)
!     {
!       float original = test_values[i];
!       __bf16 hw_bf16 = foo (original);
!       __bf16 sw_bf16 = CALC (&original);
! 
!       /* Verify psrld $16, %0 == %0 >> 16 */
!       if (memcmp (&hw_bf16, &sw_bf16, sizeof (__bf16)) != 0)
!         abort ();
! 
!       /* Reconstruct the float value from the __bf16 bits */
!       uint16_t bf16_bits;
!       memcpy (&bf16_bits, &hw_bf16, sizeof (bf16_bits));
!       uint32_t reconstructed_bits = ((uint32_t) bf16_bits) << 16;
!       float converted;
!       memcpy (&converted, &reconstructed_bits, sizeof (converted));
! 
!       float diff = fabsf (original - converted);
  
!       /* Expected Maximum Precision Loss */
!       uint32_t orig_bits;
!       memcpy (&orig_bits, &original, sizeof (orig_bits));
!       int exponent = ((orig_bits >> 23) & 0xFF) - 127;
!       float expected_loss = (exponent == -127)
!                             ? ldexpf (1.0f, -126 - 7)
!                             : ldexpf (1.0f, exponent - 7);
!       if (diff > expected_loss)
!         abort ();
!     }
!   return 0;
! }
--- 1,4 ----
! /* { dg-do run { target sse2_runtime } } */
! /* { dg-options "-msse2 -O2 -ffast-math -mno-avxneconvert -mno-avx512bf16" } */
  
! #include "truncsfbf-check.h"
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-3.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-3.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-msse2 -O2 -ffast-math -mavxneconvert -mno-avx512bf16 -fno-asynchronous-unwind-tables" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "ia32" "*ia32" "" { target ia32 } {^\t?\.} } } */
+ /* { dg-final { check-function-bodies "x64" "*x64" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ ia32foo:
+ ia32	vmovss	4\(%esp\), %xmm0
+ ia32	{vex} vcvtneps2bf16	%xmm0, %xmm0
+ ia32	ret
+ ia32...
+ *ia32
+ 
+ x64foo:
+ x64	{vex} vcvtneps2bf16	%xmm0, %xmm0
+ x64	ret
+ x64...
+ *x64
+ */
+ 
+ __bf16
+ foo (float a)
+ {
+   return a;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-4.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-4.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-msse2 -O2 -ffast-math -mno-avxneconvert -mavx512vl -mavx512bf16 -fno-asynchronous-unwind-tables" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "ia32" "*ia32" "" { target ia32 } {^\t?\.} } } */
+ /* { dg-final { check-function-bodies "x64" "*x64" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ ia32foo:
+ ia32	vmovss	4\(%esp\), %xmm0
+ ia32	vcvtneps2bf16	%xmm0, %xmm0
+ ia32	ret
+ ia32...
+ *ia32
+ 
+ x64foo:
+ x64	vcvtneps2bf16	%xmm0, %xmm0
+ x64	ret
+ x64...
+ *x64
+ */
+ 
+ __bf16
+ foo (float a)
+ {
+   return a;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-5.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-5.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-5.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ffast-math -march=x86-64 -save-temps" } */
+ 
+ #define CHECK_CPU_SUPPORTS __builtin_cpu_supports ("avxneconvert")
+ #define ATTRIBUTE __attribute__ ((target("avxneconvert")))
+ 
+ #include "truncsfbf-check.h"
+ 
+ /* { dg-final { scan-assembler-times "\t{vex} vcvtneps2bf16" 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-6.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-6.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-6.c	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -ffast-math -march=x86-64 -save-temps" } */
+ 
+ #define CHECK_CPU_SUPPORTS (__builtin_cpu_supports ("avx512vl") \
+ 			    && __builtin_cpu_supports ("avx512bf16"))
+ #define ATTRIBUTE __attribute__ ((target("avx512vl,avx512bf16")))
+ 
+ #include "truncsfbf-check.h"
+ 
+ /* { dg-final { scan-assembler-times "\tvcvtneps2bf16" 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-check.h gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-check.h
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/truncsfbf-check.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/truncsfbf-check.h	Sun Aug 30 22:32:12 2026
***************
*** 0 ****
--- 1,107 ----
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <stdint.h>
+ #include <string.h>
+ #include <math.h>
+ 
+ #ifndef CHECK_CPU_SUPPORTS
+ #define CHECK_CPU_SUPPORTS true
+ #endif
+ 
+ #ifndef ATTRIBUTE
+ #define ATTRIBUTE
+ #endif
+ 
+ ATTRIBUTE
+ __attribute__ ((noipa, noinline))
+ static __bf16
+ foo (float a)
+ {
+   return a;
+ }
+ 
+ __attribute__ ((noipa, noinline))
+ static __bf16
+ CALC (float *a)
+ {
+   uint32_t bits;
+   memcpy (&bits, a, sizeof (bits));
+   /* Flush input denormal to zero like vcvtneps2bf16.  */
+   if ((bits & 0x7f800000) == 0)
+     {
+       bits >>= 16;
+       bits &= 0x8000;
+     }
+   else
+     {
+       uint32_t rounding_bias = 0x7FFF + ((bits >> 16) & 1);
+       bits += rounding_bias;
+       bits >>= 16;
+     }
+   __bf16 bf16;
+   uint16_t bfloat16_bits = (uint16_t) bits;
+   memcpy (&bf16, &bfloat16_bits, sizeof (bf16));
+   return bf16;
+ }
+ 
+ __attribute__ ((noipa, noinline))
+ void
+ do_test (void)
+ {
+   float test_values[] =
+     {
+       0.0f, -0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1000.0f, -1000.0f,
+       3.1415926f, -3.1415926f, 1e-8f, -1e-8f, 1.0e+38f, -1.0e+38f,
+       1.0e-38f, -1.0e-38f, 1.170903e-38, -1.170903e-38, 1.175494e-38,
+       -1.175494e-38, 1.170902e-38, 4.999295e-39, 1.175494e-38
+     };
+   size_t num_values = sizeof (test_values) / sizeof (test_values[0]);
+   bool failed = false;
+ 
+   for (size_t i = 0; i < num_values; ++i)
+     {
+       float original = test_values[i];
+       __bf16 hw_bf16 = foo (original);
+       __bf16 sw_bf16 = CALC (&original);
+ 
+       /* Verify psrld $16, %0 == %0 >> 16 */
+       if (memcmp (&hw_bf16, &sw_bf16, sizeof (__bf16)) != 0)
+ 	{
+ 	  fprintf (stderr, "float -> bf16 failed: %d, %e\n", i, original);
+ 	  failed = true;
+ 	}
+ 
+       /* Reconstruct the float value from the __bf16 bits */
+       uint16_t bf16_bits;
+       memcpy (&bf16_bits, &hw_bf16, sizeof (bf16_bits));
+       uint32_t reconstructed_bits = ((uint32_t) bf16_bits) << 16;
+       float converted;
+       memcpy (&converted, &reconstructed_bits, sizeof (converted));
+ 
+       float diff = fabsf (original - converted);
+ 
+       /* Expected Maximum Precision Loss */
+       uint32_t orig_bits;
+       memcpy (&orig_bits, &original, sizeof (orig_bits));
+       int exponent = ((orig_bits >> 23) & 0xFF) - 127;
+       float expected_loss = (exponent == -127)
+                             ? ldexpf (1.0f, -126 - 7)
+                             : ldexpf (1.0f, exponent - 7);
+       if (diff > expected_loss)
+ 	{
+ 	  fprintf (stderr, "bf16 -> float failed: %d, %e\n", i, original);
+ 	  failed = true;
+ 	}
+     }
+ 
+   if (failed)
+     abort ();
+ }
+ 
+ int
+ main (void)
+ {
+   if (CHECK_CPU_SUPPORTS)
+     do_test ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c	Sun Aug 30 22:32:12 2026
***************
*** 1,7 ****
  /* Test cond_vec_cbranch_any<mode> for the 128-bit V_ANY_CBRANCH modes
     (V4SI, V2DI, V4SF, V2DF).  */
  /* { dg-do compile } */
! /* { dg-options "-Ofast -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=128 -fno-schedule-insns -fno-reorder-blocks -fno-schedule-insns2" } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  int       a_int[5],    b_int[5],    c_int[5];
--- 1,7 ----
  /* Test cond_vec_cbranch_any<mode> for the 128-bit V_ANY_CBRANCH modes
     (V4SI, V2DI, V4SF, V2DF).  */
  /* { dg-do compile } */
! /* { dg-options "-Ofast -mtune=generic -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=128 -fno-schedule-insns -fno-reorder-blocks -fno-schedule-insns2" } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  int       a_int[5],    b_int[5],    c_int[5];
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/zext-sse-1.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/zext-sse-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/zext-sse-1.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/zext-sse-1.c	Sun Aug 30 22:32:12 2026
***************
*** 10,16 ****
  **func1:
  **.LFB[0-9]+:
  **	.cfi_startproc
! **	cvttss2sil	%xmm0, %eax
  **	ret
  **	.cfi_endproc
  **...
--- 10,17 ----
  **func1:
  **.LFB[0-9]+:
  **	.cfi_startproc
! **	cvttss2siq	%xmm0, %rax
! **	movl	%eax, %eax
  **	ret
  **	.cfi_endproc
  **...
*************** func1 (float x)
*** 26,32 ****
  **func2:
  **.LFB[0-9]+:
  **	.cfi_startproc
! **	cvttsd2sil	%xmm0, %eax
  **	ret
  **	.cfi_endproc
  **...
--- 27,34 ----
  **func2:
  **.LFB[0-9]+:
  **	.cfi_startproc
! **	cvttsd2siq	%xmm0, %rax
! **	movl	%eax, %eax
  **	ret
  **	.cfi_endproc
  **...
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/i386/zext-sse-2.c gcc-17-20260830/gcc/testsuite/gcc.target/i386/zext-sse-2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/i386/zext-sse-2.c	Sun Aug 23 22:32:16 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/i386/zext-sse-2.c	Sun Aug 30 22:32:12 2026
*************** struct bar2
*** 30,38 ****
  **.LFB[0-9]+:
  **	.cfi_startproc
  **	cvttsd2sil	16\(%rdi\), %ecx
! **	movupd	\(%rdi\), %xmm1
! **	cvttpd2dq	%xmm1, %xmm0
! **	movq	%xmm0, %rax
  **	movq	%rcx, %rdx
  **	ret
  **	.cfi_endproc
--- 30,39 ----
  **.LFB[0-9]+:
  **	.cfi_startproc
  **	cvttsd2sil	16\(%rdi\), %ecx
! **	movupd	\(%rdi\), %xmm0
! **	cvttpd2dq	%xmm0, %xmm1
! **	movq	%xmm1, %rax
! **	movl	%ecx, %ecx
  **	movq	%rcx, %rdx
  **	ret
  **	.cfi_endproc
*************** func1 (struct bar1 *x)
*** 53,58 ****
--- 54,60 ----
  **	movq	\(%rdi\), %xmm0
  **	cvttps2dq	%xmm0, %xmm0
  **	movq	%xmm0, %rsi
+ **	movl	%eax, %eax
  **	movq	%rax, %rdi
  **	movq	%rsi, %rax
  **	movq	%rdi, %rdx
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/powerpc/pr116004.c gcc-17-20260830/gcc/testsuite/gcc.target/powerpc/pr116004.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/powerpc/pr116004.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/powerpc/pr116004.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
+ /* { dg-final { scan-assembler-times {\mvcmpnezb\M} 2 } } */
+ /* { dg-final { scan-assembler-times {\mvcmpnezh\M} 2 } } */
+ /* { dg-final { scan-assembler-times {\mvcmpnezw\M} 2 } } */
+ /* { dg-final { scan-assembler-not {\mvcmpneb\M} } } */
+ /* { dg-final { scan-assembler-not {\mvcmpneh\M} } } */
+ /* { dg-final { scan-assembler-not {\mvcmpnew\M} } } */
+ 
+ #include <altivec.h>
+ #include <stdint.h>
+ 
+ unsigned int
+ test_schar (vector signed char a, vector signed char b)
+ {
+   return vec_first_mismatch_or_eos_index (a, b);
+ }
+ 
+ unsigned int
+ test_uchar (vector unsigned char a, vector unsigned char b)
+ {
+   return vec_first_mismatch_or_eos_index (a, b);
+ }
+ 
+ unsigned int
+ test_sshort (vector signed short a, vector signed short b)
+ {
+   return vec_first_mismatch_or_eos_index (a, b);
+ }
+ 
+ unsigned int
+ test_ushort (vector unsigned short a, vector unsigned short b)
+ {
+   return vec_first_mismatch_or_eos_index (a, b);
+ }
+ 
+ unsigned int
+ test_sint (vector signed int a, vector signed int b)
+ {
+   return vec_first_mismatch_or_eos_index (a, b);
+ }
+ 
+ unsigned int
+ test_uint (vector unsigned int a, vector unsigned int b)
+ {
+   return vec_first_mismatch_or_eos_index (a, b);
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/powerpc/pr125138.c gcc-17-20260830/gcc/testsuite/gcc.target/powerpc/pr125138.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/powerpc/pr125138.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/powerpc/pr125138.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,34 ----
+ /* PR target/125138 */
+ /* { dg-do compile { target { powerpc64le-*-* } } } */
+ /* { dg-require-effective-target power10_ok } */
+ /* { dg-options "-O3 -mdejagnu-cpu=power10" } */
+ 
+ #include <altivec.h>
+ 
+ typedef vector unsigned char vui8_t;
+ 
+ vui8_t
+ test1 (vui8_t vra0, vui8_t vrb0, vui8_t vra1, vui8_t vrb1, vui8_t vrc)
+ {
+   vui8_t perm0, perm1;
+   perm0 = vec_permx (vra0, vrb0, vrc, 0);
+   perm1 = vec_permx (vra1, vrb1, vrc, 1);
+   return vec_or (perm0, perm1);
+ }
+ 
+ vui8_t
+ test2 (vui8_t vra0, vui8_t vrb0, vui8_t vra1, vui8_t vrb1, vui8_t vra2,
+        vui8_t vrb2, vui8_t vra3, vui8_t vrb3, vui8_t vrc)
+ {
+   vui8_t perm0, perm1, perm2, perm3;
+   perm0 = vec_permx (vra0, vrb0, vrc, 0);
+   perm1 = vec_permx (vra1, vrb1, vrc, 1);
+   perm2 = vec_permx (vra2, vrb2, vrc, 2);
+   perm3 = vec_permx (vra3, vrb3, vrc, 3);
+   perm0 = vec_or (perm0, perm1);
+   perm2 = vec_or (perm2, perm3);
+   return vec_or (perm0, perm2);
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mxxlnor\M} 2 } } */
+ /* { dg-final { scan-assembler-times {\mxxpermx\M} 6 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/powerpc/pr126512.c gcc-17-20260830/gcc/testsuite/gcc.target/powerpc/pr126512.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/powerpc/pr126512.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/powerpc/pr126512.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-options "-maltivec -mno-vsx" } */
+ /* { dg-require-effective-target int128 } */
+ /* { dg-require-effective-target powerpc_altivec } */
+ 
+ /* The 128-bit integer vector built-ins need VSX, as V1TImode is only
+    available with VSX.  Verify there is no ICE but expected error
+    messages instead.  */
+ 
+ #include <altivec.h>
+ 
+ extern vector signed __int128 res_vsq;
+ extern vector unsigned __int128 res_vuq;
+ extern vector bool __int128 res_vbq;
+ 
+ extern vector signed __int128 vsq;
+ extern vector unsigned __int128 vuq;
+ extern vector bool __int128 vbq;
+ extern vector unsigned char vuc;
+ 
+ void
+ test_vec_sel (void)
+ {
+   res_vsq = vec_sel (vsq, vsq, vuq); /* { dg-error "'__builtin_altivec_vsel_1ti' requires the '-mvsx' option" } */
+   res_vbq = vec_sel (vbq, vbq, vuq); /* { dg-error "'__builtin_altivec_vsel_1ti' requires the '-mvsx' option" } */
+ }
+ 
+ void
+ test_vec_perm (void)
+ {
+   res_vsq = vec_perm (vsq, vsq, vuc); /* { dg-error "'__builtin_altivec_vperm_1ti' requires the '-mvsx' option" } */
+   res_vuq = vec_perm (vuq, vuq, vuc); /* { dg-error "'__builtin_altivec_vperm_1ti_uns' requires the '-mvsx' option" } */
+ }
+ 
+ void
+ test_vec_sld (void)
+ {
+   res_vsq = vec_sld (vsq, vsq, 3); /* { dg-error "'__builtin_altivec_vsldoi_v1ti' requires the '-mvsx' option" } */
+   res_vuq = vec_sld (vuq, vuq, 3); /* { dg-error "'__builtin_altivec_vsldoi_v1ti' requires the '-mvsx' option" } */
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_0 gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_0
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_0	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_0	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,20 ----
+ processor	: 0
+ hart		: 0
+ model name	: Spacemit(R) X100
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000002
+ mimpid		: 0x33d8a600
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+ 
+ processor	: 8
+ hart		: 8
+ model name	: Spacemit(R) A100
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000041000002
+ mimpid		: 0x10000000d5686200
+ hart isa	: rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_1 gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_1
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_1	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_1	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,10 ----
+ processor	: 0
+ hart		: 0
+ model name	: Nonesuch
+ isa		: rv64imafdc_znosuchext_zba_xmadeup_zbb
+ mmu		: sv39
+ mvendorid	: 0xdead
+ marchid		: 0xbeef
+ mimpid		: 0x1
+ hart isa	: rv64imafdc_znosuchext_zba_xmadeup_zbb
+ 
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_2 gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_2
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_2	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_2	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,39 ----
+ processor	: 0
+ hart		: 2
+ isa		: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+ mmu		: sv39
+ uarch		: sifive,u74-mc
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000007
+ mimpid		: 0x4210427
+ hart isa	: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+ 
+ processor	: 1
+ hart		: 1
+ isa		: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+ mmu		: sv39
+ uarch		: sifive,u74-mc
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000007
+ mimpid		: 0x4210427
+ hart isa	: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+ 
+ processor	: 2
+ hart		: 3
+ isa		: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+ mmu		: sv39
+ uarch		: sifive,u74-mc
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000007
+ mimpid		: 0x4210427
+ hart isa	: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+ 
+ processor	: 3
+ hart		: 4
+ isa		: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+ mmu		: sv39
+ uarch		: sifive,u74-mc
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000007
+ mimpid		: 0x4210427
+ hart isa	: rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_3 gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_3
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_3	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_3	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,71 ----
+ processor	: 0
+ hart		: 0
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
+ 
+ processor	: 1
+ hart		: 1
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
+ 
+ processor	: 2
+ hart		: 2
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
+ 
+ processor	: 3
+ hart		: 3
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
+ 
+ processor	: 4
+ hart		: 4
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
+ 
+ processor	: 5
+ hart		: 5
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
+ 
+ processor	: 6
+ hart		: 6
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
+ 
+ processor	: 7
+ hart		: 7
+ model name	: Spacemit(R) X60
+ isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+ mmu		: sv39
+ mvendorid	: 0x710
+ marchid		: 0x8000000058000001
+ mimpid		: 0x1000000049772200
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_4 gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_4
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/info_4	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/info_4	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,287 ----
+ processor	: 0
+ hart		: 0
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 1
+ hart		: 1
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 2
+ hart		: 2
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 3
+ hart		: 3
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 4
+ hart		: 4
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 5
+ hart		: 5
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 6
+ hart		: 6
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 7
+ hart		: 7
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 8
+ hart		: 8
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 9
+ hart		: 9
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 10
+ hart		: 10
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 11
+ hart		: 11
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 12
+ hart		: 12
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 13
+ hart		: 13
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 14
+ hart		: 14
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 15
+ hart		: 15
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 16
+ hart		: 16
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 17
+ hart		: 17
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 18
+ hart		: 18
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 19
+ hart		: 19
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 20
+ hart		: 20
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 21
+ hart		: 21
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 22
+ hart		: 22
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 23
+ hart		: 23
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 24
+ hart		: 24
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 25
+ hart		: 25
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 26
+ hart		: 26
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 27
+ hart		: 27
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 28
+ hart		: 28
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 29
+ hart		: 29
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 30
+ hart		: 30
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ 
+ processor	: 31
+ hart		: 31
+ isa		: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+ mmu		: sv48
+ mvendorid	: 0x489
+ marchid		: 0x8000000000000109
+ mimpid		: 0x14250606
+ hart isa	: rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,17 ----
+ /* The X100 half of a heterogeneous machine.  Its hart implements H, and
+    the compiler is told it is running on that core.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/riscv/cpunative/info_0" } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO_CPU "0" } */
+ /* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_h1p0_} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,17 ----
+ /* Real /proc/cpuinfo from a spacemit K3.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/riscv/cpunative/info_0" } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO_CPU "8" } */
+ /* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_v1p0_} } } */
+ /* { dg-final { scan-assembler-not {\.attribute arch, "[^"]*_h1p0_} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/riscv/cpunative/info_0" } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO_CPU "99" } */
+ /* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_h1p0_} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* Testcase with unknown ext in /proc/cpuinfo.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/riscv/cpunative/info_1" } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO_CPU "0" } */
+ /* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_zba1p0_zbb1p0} } } */
+ /* { dg-final { scan-assembler-not {znosuchext} } } */
+ /* { dg-final { scan-assembler-not {xmadeup} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,17 ----
+ /* A real /proc/cpuinfo from StarFive VisionFive 2.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/riscv/cpunative/info_2" } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO_CPU "2" } */
+ /* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_zba1p0_zbb1p0"} } } */
+ /* { dg-final { scan-assembler-not {\.attribute arch, "[^"]*_v1p0_} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ /* Real /proc/cpuinfo from a Banana Pi BPI-F3.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/riscv/cpunative/info_3" } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO_CPU "0" } */
+ /* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_v1p0_[^"]*_zvfh1p0_} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,22 ----
+ /* A real /proc/cpuinfo, from a SiFive P870-D.  It is the last of the
+    thirty-two blocks that are asked for here, and the ISA string is the
+    longest and the most recent of any file in this directory, carrying
+    names -- zfbfmin, zvfbfwma, smmpm, ssnpm, svade -- that the others
+    do not.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/riscv/cpunative/info_4" } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO_CPU "31" } */
+ /* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_zfbfmin1p0_} } } */
+ /* { dg-final { scan-assembler {\.attribute arch, "[^"]*_zvfbfwma1p0_} } } */
+ /* { dg-final { scan-assembler {\.attribute arch, "[^"]*_svade1p0_} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,35 ----
+ # Copyright (C) 2026 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 a RISC-V target.
+ if ![istarget riscv*-*-*] 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-17-20260823/gcc/testsuite/gcc.target/riscv/march-native-1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/march-native-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/march-native-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/march-native-1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target riscv_native_cpu_detect } */
+ /* { dg-options "-march=native" } */
+ 
+ #ifndef __riscv_arch_test
+ #error "-march=native did not produce a usable ISA string"
+ #endif
+ 
+ #ifndef __riscv_mul
+ #error "-march=native lost the M extension"
+ #endif
+ 
+ #ifndef __riscv_atomic
+ #error "-march=native lost the A extension"
+ #endif
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p550.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p550.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p550.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p550.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=unset -mcpu=sifive-p550 -mabi=lp64d" } */
+ /* SiFive p550 => rv64imafdc_zifencei_zfhmin_zba_zbb */
+ 
+ #if !((__riscv_xlen == 64)		\
+       && !defined(__riscv_32e)		\
+       && (__riscv_flen == 64)		\
+       && defined(__riscv_c)		\
+       && defined(__riscv_zifencei)	\
+       && defined(__riscv_zfhmin)	\
+       && defined(__riscv_zba)		\
+       && defined(__riscv_zbb))
+ #error "unexpected arch"
+ #endif
+ 
+ int main()
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p870-d.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p870-d.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p870-d.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/mcpu-sifive-p870-d.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=unset -mcpu=sifive-p870-d -mabi=lp64d" } */
+ /* SiFive p870-d => rv64imafdcbv_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_ziccrse_zicntr_zicond_zifencei_zihintntl_zihintpause_zihpm_zimop_za64rs_zama16b_zawrs_zfa_zfh_zcb_zcmop_zkr_zkt_zvbb_zvfbfwma_zvfh_zvfhmin_zvknc_zvksg */
+ 
+ #if !((__riscv_xlen == 64)		\
+       && !defined(__riscv_32e)		\
+       && (__riscv_flen == 64)		\
+       && defined(__riscv_c)		\
+       && defined(__riscv_b)		\
+       && defined(__riscv_v)		\
+       && defined(__riscv_zic64b)	\
+       && defined(__riscv_zicbom)	\
+       && defined(__riscv_zicbop)	\
+       && defined(__riscv_zicboz)	\
+       && defined(__riscv_ziccamoa)	\
+       && defined(__riscv_ziccif)	\
+       && defined(__riscv_zicclsm)	\
+       && defined(__riscv_ziccrse)	\
+       && defined(__riscv_zicntr)	\
+       && defined(__riscv_zicond)	\
+       && defined(__riscv_zifencei)	\
+       && defined(__riscv_zihintntl)	\
+       && defined(__riscv_zihintpause)	\
+       && defined(__riscv_zihpm)		\
+       && defined(__riscv_zimop)		\
+       && defined(__riscv_za64rs)	\
+       && defined(__riscv_zama16b)	\
+       && defined(__riscv_zawrs)		\
+       && defined(__riscv_zfa)		\
+       && defined(__riscv_zfh)		\
+       && defined(__riscv_zcb)		\
+       && defined(__riscv_zcmop)		\
+       && defined(__riscv_zkr)		\
+       && defined(__riscv_zkt)		\
+       && defined(__riscv_zvbb)		\
+       && defined(__riscv_zvfbfwma)	\
+       && defined(__riscv_zvfh)		\
+       && defined(__riscv_zvfhmin)	\
+       && defined(__riscv_zvknc)		\
+       && defined(__riscv_zvksg))
+ #error "unexpected arch"
+ #endif
+ 
+ int main()
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/group_overlap.h	Sun Aug 30 22:32:13 2026
***************
*** 811,816 ****
--- 811,955 ----
      ST_F ((void *)out, vd14, VL); OUT += VL;                                \
      ST_F ((void *)out, vd15, VL); OUT += VL;                                \
  
+ #define LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X4(NT, WT, LD_NF, LD_WF, OUT_F,     \
+ 					    ST_F, OUT, START, X, VL)        \
+     NT vs0 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs1 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs2 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs3 = LD_NF ((void *)START, VL); START += VL;                        \
+     WT vw0 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw1 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw2 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw3 = LD_WF ((void *)START, VL); START += VL;                        \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     WT vd0 = OUT_F (vw0, X, vs0, VL);                                       \
+     WT vd1 = OUT_F (vw1, X, vs1, VL);                                       \
+     WT vd2 = OUT_F (vw2, X, vs2, VL);                                       \
+     WT vd3 = OUT_F (vw3, X, vs3, VL);                                       \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     ST_F ((void *)out, vd0, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd1, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd2, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd3, VL); OUT += VL;                                 \
+ 
+ #define LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X8(NT, WT, LD_NF, LD_WF, OUT_F,     \
+ 					    ST_F, OUT, START, X, VL)        \
+     NT vs0 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs1 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs2 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs3 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs4 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs5 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs6 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs7 = LD_NF ((void *)START, VL); START += VL;                        \
+     WT vw0 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw1 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw2 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw3 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw4 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw5 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw6 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw7 = LD_WF ((void *)START, VL); START += VL;                        \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     WT vd0 = OUT_F (vw0, X, vs0, VL);                                       \
+     WT vd1 = OUT_F (vw1, X, vs1, VL);                                       \
+     WT vd2 = OUT_F (vw2, X, vs2, VL);                                       \
+     WT vd3 = OUT_F (vw3, X, vs3, VL);                                       \
+     WT vd4 = OUT_F (vw4, X, vs4, VL);                                       \
+     WT vd5 = OUT_F (vw5, X, vs5, VL);                                       \
+     WT vd6 = OUT_F (vw6, X, vs6, VL);                                       \
+     WT vd7 = OUT_F (vw7, X, vs7, VL);                                       \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     ST_F ((void *)out, vd0, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd1, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd2, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd3, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd4, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd5, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd6, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd7, VL); OUT += VL;                                 \
+ 
+ #define LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16(NT, WT, LD_NF, LD_WF, OUT_F,    \
+ 					    ST_F, OUT, START, X, VL)        \
+     NT vs0 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs1 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs2 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs3 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs4 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs5 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs6 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs7 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs8 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs9 = LD_NF ((void *)START, VL); START += VL;                        \
+     NT vs10 = LD_NF ((void *)START, VL); START += VL;                       \
+     NT vs11 = LD_NF ((void *)START, VL); START += VL;                       \
+     NT vs12 = LD_NF ((void *)START, VL); START += VL;                       \
+     NT vs13 = LD_NF ((void *)START, VL); START += VL;                       \
+     NT vs14 = LD_NF ((void *)START, VL); START += VL;                       \
+     NT vs15 = LD_NF ((void *)START, VL); START += VL;                       \
+     WT vw0 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw1 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw2 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw3 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw4 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw5 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw6 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw7 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw8 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw9 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw10 = LD_WF ((void *)START, VL); START += VL;                       \
+     WT vw11 = LD_WF ((void *)START, VL); START += VL;                       \
+     WT vw12 = LD_WF ((void *)START, VL); START += VL;                       \
+     WT vw13 = LD_WF ((void *)START, VL); START += VL;                       \
+     WT vw14 = LD_WF ((void *)START, VL); START += VL;                       \
+     WT vw15 = LD_WF ((void *)START, VL); START += VL;                       \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     WT vd0 = OUT_F (vw0, X, vs0, VL);                                       \
+     WT vd1 = OUT_F (vw1, X, vs1, VL);                                       \
+     WT vd2 = OUT_F (vw2, X, vs2, VL);                                       \
+     WT vd3 = OUT_F (vw3, X, vs3, VL);                                       \
+     WT vd4 = OUT_F (vw4, X, vs4, VL);                                       \
+     WT vd5 = OUT_F (vw5, X, vs5, VL);                                       \
+     WT vd6 = OUT_F (vw6, X, vs6, VL);                                       \
+     WT vd7 = OUT_F (vw7, X, vs7, VL);                                       \
+     WT vd8 = OUT_F (vw8, X, vs8, VL);                                       \
+     WT vd9 = OUT_F (vw9, X, vs9, VL);                                       \
+     WT vd10 = OUT_F (vw10, X, vs10, VL);                                    \
+     WT vd11 = OUT_F (vw11, X, vs11, VL);                                    \
+     WT vd12 = OUT_F (vw12, X, vs12, VL);                                    \
+     WT vd13 = OUT_F (vw13, X, vs13, VL);                                    \
+     WT vd14 = OUT_F (vw14, X, vs14, VL);                                    \
+     WT vd15 = OUT_F (vw15, X, vs15, VL);                                    \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     ST_F ((void *)out, vd0, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd1, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd2, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd3, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd4, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd5, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd6, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd7, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd8, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd9, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd10, VL); OUT += VL;                                \
+     ST_F ((void *)out, vd11, VL); OUT += VL;                                \
+     ST_F ((void *)out, vd12, VL); OUT += VL;                                \
+     ST_F ((void *)out, vd13, VL); OUT += VL;                                \
+     ST_F ((void *)out, vd14, VL); OUT += VL;                                \
+     ST_F ((void *)out, vd15, VL); OUT += VL;                                \
+ 
  #define LOOP_DUAL_WIDEN_TERNARY_BODY_SU_X4(NT, NUT, WT, LD_NF,              \
  					    LD_NUF, LD_WF, OUT_F, ST_F,     \
  					    OUT, START, VL)                 \
***************
*** 1013,1018 ****
--- 1152,1184 ----
      ST_F ((void *)out, vd0, VL); OUT += VL;                                 \
      ST_F ((void *)out, vd1, VL); OUT += VL;                                 \
  
+ /* Like LOOP_DUAL_WIDEN_TERNARY_BODY_OVERLAP_X2 but the multiplier comes from
+    a scalar register, thus the narrowed source is the only vector operand that
+    can overlap the destination register group.  RI_F reinterprets the widened
+    accumulator as the narrowed element type and GET_F extracts the
+    highest-numbered half of it.  */
+ #define LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2(NT, WT, WNT, LD_WF,      \
+ 						   RI_F, GET_F, OUT_F,      \
+ 						   ST_F, OUT, START, X, VL) \
+     WT vw0 = LD_WF ((void *)START, VL); START += VL;                        \
+     WT vw1 = LD_WF ((void *)START, VL); START += VL;                        \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     WNT vr0 = RI_F (vw0);                                                   \
+     WNT vr1 = RI_F (vw1);                                                   \
+                                                                             \
+     NT vs0 = GET_F (vr0, 1);                                                \
+     NT vs1 = GET_F (vr1, 1);                                                \
+                                                                             \
+     WT vd0 = OUT_F (vw0, X, vs0, VL);                                       \
+     WT vd1 = OUT_F (vw1, X, vs1, VL);                                       \
+                                                                             \
+     asm volatile("nop" ::: "memory");                                       \
+                                                                             \
+     ST_F ((void *)out, vd0, VL); OUT += VL;                                 \
+     ST_F ((void *)out, vd1, VL); OUT += VL;                                 \
+ 
  /* Like LOOP_DUAL_WIDEN_TERNARY_BODY_OVERLAP_X2 but for the mixed signed and
     unsigned narrowed sources.  The first insn overlaps the destination register
     group with the signed source, the second one with the unsigned source, thus
***************
*** 1188,1191 ****
--- 1354,1390 ----
      }                                                                       \
    }
  
+ #define DEF_GROUP_OVERLAP_TERNARY_4(VL_F, NT, WT, ST, LD_NF, LD_WF, OUT_F,  \
+ 				    ST_F, NAME, LOOP_BODY)                  \
+   void test_group_overlap_##NAME##_##NT##_ternary_4(uint8_t *data,          \
+ 						    uint8_t *out,           \
+ 						    ST x,                   \
+ 						    size_t limit)           \
+   {                                                                         \
+     uint8_t *start = data;                                                  \
+     uint8_t *end = data + limit;                                            \
+     size_t vl = VL_F ();                                                    \
+                                                                             \
+     while (start < end) {                                                   \
+       LOOP_BODY (NT, WT, LD_NF, LD_WF, OUT_F, ST_F, out, start, x, vl);     \
+     }                                                                       \
+   }
+ 
+ #define DEF_GROUP_OVERLAP_TERNARY_5(VL_F, NT, WT, WNT, ST, LD_WF, RI_F,     \
+ 				    GET_F, OUT_F, ST_F, NAME, LOOP_BODY)    \
+   void test_group_overlap_##NAME##_##NT##_ternary_5(uint8_t *data,          \
+ 						    uint8_t *out,           \
+ 						    ST x,                   \
+ 						    size_t limit)           \
+   {                                                                         \
+     uint8_t *start = data;                                                  \
+     uint8_t *end = data + limit;                                            \
+     size_t vl = VL_F ();                                                    \
+                                                                             \
+     while (start < end) {                                                   \
+       LOOP_BODY (NT, WT, WNT, LD_WF, RI_F, GET_F, OUT_F, ST_F, out, start,  \
+ 		 x, vl);                                                    \
+     }                                                                       \
+   }
+ 
  #endif
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m1,
+   vint16m1_t,
+   vint32m2_t,
+   int16_t,
+   __riscv_vle16_v_i16m1,
+   __riscv_vle32_v_i32m2,
+   __riscv_vwmacc_vx_i32m2,
+   __riscv_vse32_v_i32m2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e16m1,
+   vint16m1_t,
+   vint32m2_t,
+   vint16m2_t,
+   int16_t,
+   __riscv_vle32_v_i32m2,
+   __riscv_vreinterpret_v_i32m2_i16m2,
+   __riscv_vget_v_i16m2_i16m1,
+   __riscv_vwmacc_vx_i32m2,
+   __riscv_vse32_v_i32m2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v6,s0,v27([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,s0,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v14,s0,v31([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v12,s0,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v2,s0,v25([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v26,s0,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v10,s0,v29([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v30,s0,v23([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,s0,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,s0,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v26,s0,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,s0,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v22,s0,v21([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,s0,v18([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v20,s0,v19([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v18,s0,v1([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v5([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m2,
+   vint16m2_t,
+   vint32m4_t,
+   int16_t,
+   __riscv_vle16_v_i16m2,
+   __riscv_vle32_v_i32m4,
+   __riscv_vwmacc_vx_i32m4,
+   __riscv_vse32_v_i32m4,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X8)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e16m2,
+   vint16m2_t,
+   vint32m4_t,
+   vint16m4_t,
+   int16_t,
+   __riscv_vle32_v_i32m4,
+   __riscv_vreinterpret_v_i32m4_i16m4,
+   __riscv_vget_v_i16m4_i16m2,
+   __riscv_vwmacc_vx_i32m4,
+   __riscv_vse32_v_i32m4,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v12,a2,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,a2,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,a2,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v20,a2,v2([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v10([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m4,
+   vint16m4_t,
+   vint32m8_t,
+   int16_t,
+   __riscv_vle16_v_i16m4,
+   __riscv_vle32_v_i32m8,
+   __riscv_vwmacc_vx_i32m8,
+   __riscv_vse32_v_i32m8,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X4)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e16m4,
+   vint16m4_t,
+   vint32m8_t,
+   vint16m8_t,
+   int16_t,
+   __riscv_vle32_v_i32m8,
+   __riscv_vreinterpret_v_i32m8_i16m8,
+   __riscv_vget_v_i16m8_i16m4,
+   __riscv_vwmacc_vx_i32m8,
+   __riscv_vse32_v_i32m8,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v8([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v4([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf2_t,
+   vint32m1_t,
+   int16_t,
+   __riscv_vle16_v_i16mf2,
+   __riscv_vle32_v_i32m1,
+   __riscv_vwmacc_vx_i32m1,
+   __riscv_vse32_v_i32m1,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmacc\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i16-mf4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf4_t,
+   vint32mf2_t,
+   int16_t,
+   __riscv_vle16_v_i16mf4,
+   __riscv_vle32_v_i32mf2,
+   __riscv_vwmacc_vx_i32mf2,
+   __riscv_vse32_v_i32mf2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmacc\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m1,
+   vint32m1_t,
+   vint64m2_t,
+   int32_t,
+   __riscv_vle32_v_i32m1,
+   __riscv_vle64_v_i64m2,
+   __riscv_vwmacc_vx_i64m2,
+   __riscv_vse64_v_i64m2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e32m1,
+   vint32m1_t,
+   vint64m2_t,
+   vint32m2_t,
+   int32_t,
+   __riscv_vle64_v_i64m2,
+   __riscv_vreinterpret_v_i64m2_i32m2,
+   __riscv_vget_v_i32m2_i32m1,
+   __riscv_vwmacc_vx_i64m2,
+   __riscv_vse64_v_i64m2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v6,s0,v27([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,s0,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v14,s0,v31([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v12,s0,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v2,s0,v25([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v26,s0,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v10,s0,v29([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v30,s0,v23([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,s0,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,s0,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v26,s0,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,s0,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v22,s0,v21([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,s0,v18([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v20,s0,v19([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v18,s0,v1([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v5([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m2,
+   vint32m2_t,
+   vint64m4_t,
+   int32_t,
+   __riscv_vle32_v_i32m2,
+   __riscv_vle64_v_i64m4,
+   __riscv_vwmacc_vx_i64m4,
+   __riscv_vse64_v_i64m4,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X8)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e32m2,
+   vint32m2_t,
+   vint64m4_t,
+   vint32m4_t,
+   int32_t,
+   __riscv_vle64_v_i64m4,
+   __riscv_vreinterpret_v_i64m4_i32m4,
+   __riscv_vget_v_i32m4_i32m2,
+   __riscv_vwmacc_vx_i64m4,
+   __riscv_vse64_v_i64m4,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v12,a2,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,a2,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,a2,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v20,a2,v2([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v10([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m4,
+   vint32m4_t,
+   vint64m8_t,
+   int32_t,
+   __riscv_vle32_v_i32m4,
+   __riscv_vle64_v_i64m8,
+   __riscv_vwmacc_vx_i64m8,
+   __riscv_vse64_v_i64m8,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X4)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e32m4,
+   vint32m4_t,
+   vint64m8_t,
+   vint32m8_t,
+   int32_t,
+   __riscv_vle64_v_i64m8,
+   __riscv_vreinterpret_v_i64m8_i32m8,
+   __riscv_vget_v_i32m8_i32m4,
+   __riscv_vwmacc_vx_i64m8,
+   __riscv_vse64_v_i64m8,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v8([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v4([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i32-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m1,
+   vint32mf2_t,
+   vint64m1_t,
+   int32_t,
+   __riscv_vle32_v_i32mf2,
+   __riscv_vle64_v_i64m1,
+   __riscv_vwmacc_vx_i64m1,
+   __riscv_vse64_v_i64m1,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmacc\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vint8m1_t,
+   vint16m2_t,
+   int8_t,
+   __riscv_vle8_v_i8m1,
+   __riscv_vle16_v_i16m2,
+   __riscv_vwmacc_vx_i16m2,
+   __riscv_vse16_v_i16m2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e8m1,
+   vint8m1_t,
+   vint16m2_t,
+   vint8m2_t,
+   int8_t,
+   __riscv_vle16_v_i16m2,
+   __riscv_vreinterpret_v_i16m2_i8m2,
+   __riscv_vget_v_i8m2_i8m1,
+   __riscv_vwmacc_vx_i16m2,
+   __riscv_vse16_v_i16m2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v6,s0,v27([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,s0,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v14,s0,v31([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v12,s0,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v2,s0,v25([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v26,s0,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v10,s0,v29([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v30,s0,v23([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,s0,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,s0,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v26,s0,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,s0,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v22,s0,v21([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,s0,v18([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v20,s0,v19([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v18,s0,v1([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v5([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m2,
+   vint8m2_t,
+   vint16m4_t,
+   int8_t,
+   __riscv_vle8_v_i8m2,
+   __riscv_vle16_v_i16m4,
+   __riscv_vwmacc_vx_i16m4,
+   __riscv_vse16_v_i16m4,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X8)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e8m2,
+   vint8m2_t,
+   vint16m4_t,
+   vint8m4_t,
+   int8_t,
+   __riscv_vle16_v_i16m4,
+   __riscv_vreinterpret_v_i16m4_i8m4,
+   __riscv_vget_v_i8m4_i8m2,
+   __riscv_vwmacc_vx_i16m4,
+   __riscv_vse16_v_i16m4,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v12,a2,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,a2,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,a2,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v28,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v20,a2,v2([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v10([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m4,
+   vint8m4_t,
+   vint16m8_t,
+   int8_t,
+   __riscv_vle8_v_i8m4,
+   __riscv_vle16_v_i16m8,
+   __riscv_vwmacc_vx_i16m8,
+   __riscv_vse16_v_i16m8,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X4)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e8m4,
+   vint8m4_t,
+   vint16m8_t,
+   vint8m8_t,
+   int8_t,
+   __riscv_vle16_v_i16m8,
+   __riscv_vreinterpret_v_i16m8_i8m8,
+   __riscv_vget_v_i8m8_i8m4,
+   __riscv_vwmacc_vx_i16m8,
+   __riscv_vse16_v_i16m8,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v24,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v8([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v4([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v16,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf2_t,
+   vint16m1_t,
+   int8_t,
+   __riscv_vle8_v_i8mf2,
+   __riscv_vle16_v_i16m1,
+   __riscv_vwmacc_vx_i16m1,
+   __riscv_vse16_v_i16m1,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmacc\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf4_t,
+   vint16mf2_t,
+   int8_t,
+   __riscv_vle8_v_i8mf4,
+   __riscv_vle16_v_i16mf2,
+   __riscv_vwmacc_vx_i16mf2,
+   __riscv_vse16_v_i16mf2,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmacc\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf8.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmacc_vx-i8-mf8.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf8_t,
+   vint16mf4_t,
+   int8_t,
+   __riscv_vle8_v_i8mf8,
+   __riscv_vle16_v_i16mf4,
+   __riscv_vwmacc_vx_i16mf4,
+   __riscv_vse16_v_i16mf4,
+   vwmacc_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmacc\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m1,
+   vuint16m1_t,
+   vuint32m2_t,
+   uint16_t,
+   __riscv_vle16_v_u16m1,
+   __riscv_vle32_v_u32m2,
+   __riscv_vwmaccu_vx_u32m2,
+   __riscv_vse32_v_u32m2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e16m1,
+   vuint16m1_t,
+   vuint32m2_t,
+   vuint16m2_t,
+   uint16_t,
+   __riscv_vle32_v_u32m2,
+   __riscv_vreinterpret_v_u32m2_u16m2,
+   __riscv_vget_v_u16m2_u16m1,
+   __riscv_vwmaccu_vx_u32m2,
+   __riscv_vse32_v_u32m2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v6,s0,v27([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,s0,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v14,s0,v31([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v12,s0,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,s0,v25([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v26,s0,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v10,s0,v29([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v30,s0,v23([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,s0,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,s0,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v26,s0,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,s0,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v22,s0,v21([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,s0,v18([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v20,s0,v19([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v18,s0,v1([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v5([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m2,
+   vuint16m2_t,
+   vuint32m4_t,
+   uint16_t,
+   __riscv_vle16_v_u16m2,
+   __riscv_vle32_v_u32m4,
+   __riscv_vwmaccu_vx_u32m4,
+   __riscv_vse32_v_u32m4,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X8)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e16m2,
+   vuint16m2_t,
+   vuint32m4_t,
+   vuint16m4_t,
+   uint16_t,
+   __riscv_vle32_v_u32m4,
+   __riscv_vreinterpret_v_u32m4_u16m4,
+   __riscv_vget_v_u16m4_u16m2,
+   __riscv_vwmaccu_vx_u32m4,
+   __riscv_vse32_v_u32m4,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v12,a2,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,a2,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,a2,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v20,a2,v2([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v10([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m4,
+   vuint16m4_t,
+   vuint32m8_t,
+   uint16_t,
+   __riscv_vle16_v_u16m4,
+   __riscv_vle32_v_u32m8,
+   __riscv_vwmaccu_vx_u32m8,
+   __riscv_vse32_v_u32m8,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X4)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e16m4,
+   vuint16m4_t,
+   vuint32m8_t,
+   vuint16m8_t,
+   uint16_t,
+   __riscv_vle32_v_u32m8,
+   __riscv_vreinterpret_v_u32m8_u16m8,
+   __riscv_vget_v_u16m8_u16m4,
+   __riscv_vwmaccu_vx_u32m8,
+   __riscv_vse32_v_u32m8,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v8([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v4([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m1,
+   vuint16mf2_t,
+   vuint32m1_t,
+   uint16_t,
+   __riscv_vle16_v_u16mf2,
+   __riscv_vle32_v_u32m1,
+   __riscv_vwmaccu_vx_u32m1,
+   __riscv_vse32_v_u32m1,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u16-mf4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e16m1,
+   vuint16mf4_t,
+   vuint32mf2_t,
+   uint16_t,
+   __riscv_vle16_v_u16mf4,
+   __riscv_vle32_v_u32mf2,
+   __riscv_vwmaccu_vx_u32mf2,
+   __riscv_vse32_v_u32mf2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m1,
+   vuint32m1_t,
+   vuint64m2_t,
+   uint32_t,
+   __riscv_vle32_v_u32m1,
+   __riscv_vle64_v_u64m2,
+   __riscv_vwmaccu_vx_u64m2,
+   __riscv_vse64_v_u64m2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e32m1,
+   vuint32m1_t,
+   vuint64m2_t,
+   vuint32m2_t,
+   uint32_t,
+   __riscv_vle64_v_u64m2,
+   __riscv_vreinterpret_v_u64m2_u32m2,
+   __riscv_vget_v_u32m2_u32m1,
+   __riscv_vwmaccu_vx_u64m2,
+   __riscv_vse64_v_u64m2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v6,s0,v27([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,s0,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v14,s0,v31([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v12,s0,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,s0,v25([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v26,s0,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v10,s0,v29([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v30,s0,v23([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,s0,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,s0,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v26,s0,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,s0,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v22,s0,v21([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,s0,v18([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v20,s0,v19([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v18,s0,v1([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v5([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m2,
+   vuint32m2_t,
+   vuint64m4_t,
+   uint32_t,
+   __riscv_vle32_v_u32m2,
+   __riscv_vle64_v_u64m4,
+   __riscv_vwmaccu_vx_u64m4,
+   __riscv_vse64_v_u64m4,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X8)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e32m2,
+   vuint32m2_t,
+   vuint64m4_t,
+   vuint32m4_t,
+   uint32_t,
+   __riscv_vle64_v_u64m4,
+   __riscv_vreinterpret_v_u64m4_u32m4,
+   __riscv_vget_v_u32m4_u32m2,
+   __riscv_vwmaccu_vx_u64m4,
+   __riscv_vse64_v_u64m4,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v12,a2,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,a2,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,a2,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v20,a2,v2([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v10([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m4,
+   vuint32m4_t,
+   vuint64m8_t,
+   uint32_t,
+   __riscv_vle32_v_u32m4,
+   __riscv_vle64_v_u64m8,
+   __riscv_vwmaccu_vx_u64m8,
+   __riscv_vse64_v_u64m8,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X4)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e32m4,
+   vuint32m4_t,
+   vuint64m8_t,
+   vuint32m8_t,
+   uint32_t,
+   __riscv_vle64_v_u64m8,
+   __riscv_vreinterpret_v_u64m8_u32m8,
+   __riscv_vget_v_u32m8_u32m4,
+   __riscv_vwmaccu_vx_u64m8,
+   __riscv_vse64_v_u64m8,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v8([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v4([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u32-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e32m1,
+   vuint32mf2_t,
+   vuint64m1_t,
+   uint32_t,
+   __riscv_vle32_v_u32mf2,
+   __riscv_vle64_v_u64m1,
+   __riscv_vwmaccu_vx_u64m1,
+   __riscv_vse64_v_u64m1,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vuint8m1_t,
+   vuint16m2_t,
+   uint8_t,
+   __riscv_vle8_v_u8m1,
+   __riscv_vle16_v_u16m2,
+   __riscv_vwmaccu_vx_u16m2,
+   __riscv_vse16_v_u16m2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e8m1,
+   vuint8m1_t,
+   vuint16m2_t,
+   vuint8m2_t,
+   uint8_t,
+   __riscv_vle16_v_u16m2,
+   __riscv_vreinterpret_v_u16m2_u8m2,
+   __riscv_vget_v_u8m2_u8m1,
+   __riscv_vwmaccu_vx_u16m2,
+   __riscv_vse16_v_u16m2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v6,s0,v27([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,s0,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v14,s0,v31([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v12,s0,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,s0,v25([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v26,s0,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v10,s0,v29([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v30,s0,v23([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,s0,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,s0,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v26,s0,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,s0,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v22,s0,v21([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,s0,v18([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v20,s0,v19([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v18,s0,v1([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v5([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m2,
+   vuint8m2_t,
+   vuint16m4_t,
+   uint8_t,
+   __riscv_vle8_v_u8m2,
+   __riscv_vle16_v_u16m4,
+   __riscv_vwmaccu_vx_u16m4,
+   __riscv_vse16_v_u16m4,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X8)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e8m2,
+   vuint8m2_t,
+   vuint16m4_t,
+   vuint8m4_t,
+   uint8_t,
+   __riscv_vle16_v_u16m4,
+   __riscv_vreinterpret_v_u16m4_u8m4,
+   __riscv_vget_v_u8m4_u8m2,
+   __riscv_vwmaccu_vx_u16m4,
+   __riscv_vse16_v_u16m4,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v12,a2,v30([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v28([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v26([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,a2,v24([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,a2,v22([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v28,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v20,a2,v2([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v10([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m4,
+   vuint8m4_t,
+   vuint16m8_t,
+   uint8_t,
+   __riscv_vle8_v_u8m4,
+   __riscv_vle16_v_u16m8,
+   __riscv_vwmaccu_vx_u16m8,
+   __riscv_vse16_v_u16m8,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X4)
+ 
+ DEF_GROUP_OVERLAP_TERNARY_5(
+   __riscv_vsetvlmax_e8m4,
+   vuint8m4_t,
+   vuint16m8_t,
+   vuint8m8_t,
+   uint8_t,
+   __riscv_vle16_v_u16m8,
+   __riscv_vreinterpret_v_u16m8_u8m8,
+   __riscv_vget_v_u8m8_u8m4,
+   __riscv_vwmaccu_vx_u16m8,
+   __riscv_vse16_v_u16m8,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_OVERLAP_X2)
+ 
+ /* ternary_4: the accumulator occupies the whole destination register group and
+    is live when the narrowed source is read, so the source cannot be allocated
+    inside the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v24,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v0([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v8([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v4([^0-9]|$)} 1 } } */
+ 
+ /* ternary_5: the narrowed source is the highest-numbered half of its own
+    accumulator, thus it overlaps the highest-numbered part of the destination
+    register group.  Without the group overlap the source would have to be
+    copied out to a disjoint register group first.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v16,a2,v20([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } */
+ /* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf2_t,
+   vuint16m1_t,
+   uint8_t,
+   __riscv_vle8_v_u8mf2,
+   __riscv_vle16_v_u16m1,
+   __riscv_vwmaccu_vx_u16m1,
+   __riscv_vse16_v_u16m1,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf4_t,
+   vuint16mf2_t,
+   uint8_t,
+   __riscv_vle8_v_u8mf4,
+   __riscv_vle16_v_u16mf2,
+   __riscv_vwmaccu_vx_u16mf2,
+   __riscv_vse16_v_u16mf2,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf8.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx-u8-mf8.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_TERNARY_4(
+   __riscv_vsetvlmax_e8m1,
+   vuint8mf8_t,
+   vuint16mf4_t,
+   uint8_t,
+   __riscv_vle8_v_u8mf8,
+   __riscv_vle16_v_u16mf4,
+   __riscv_vwmaccu_vx_u16mf4,
+   __riscv_vse16_v_u16mf4,
+   vwmaccu_vx,
+   LOOP_DUAL_WIDEN_TERNARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx} 16 } } */
+ /* { dg-final { scan-assembler-not {vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e16m1,
+   vint16m1_t,
+   vint32m2_t,
+   uint16_t,
+   __riscv_vle16_v_i16m1,
+   __riscv_vwmulsu_vx_i32m2,
+   __riscv_vse32_v_i32m2,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v1,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v2,v3,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e16m2,
+   vint16m2_t,
+   vint32m4_t,
+   uint16_t,
+   __riscv_vle16_v_i16m2,
+   __riscv_vwmulsu_vx_i32m4,
+   __riscv_vse32_v_i32m4,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v2,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v4,v6,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e16m4,
+   vint16m4_t,
+   vint32m8_t,
+   uint16_t,
+   __riscv_vle16_v_i16m4,
+   __riscv_vwmulsu_vx_i32m8,
+   __riscv_vse32_v_i32m8,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v4,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v8,v12,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf2_t,
+   vint32m1_t,
+   uint16_t,
+   __riscv_vle16_v_i16mf2,
+   __riscv_vwmulsu_vx_i32m1,
+   __riscv_vse32_v_i32m1,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-not {vwmulsu\.vx\s+(v[0-9]+),\1,} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i16-mf4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e16m1,
+   vint16mf4_t,
+   vint32mf2_t,
+   uint16_t,
+   __riscv_vle16_v_i16mf4,
+   __riscv_vwmulsu_vx_i32mf2,
+   __riscv_vse32_v_i32mf2,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-not {vwmulsu\.vx\s+(v[0-9]+),\1,} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e32m1,
+   vint32m1_t,
+   vint64m2_t,
+   uint32_t,
+   __riscv_vle32_v_i32m1,
+   __riscv_vwmulsu_vx_i64m2,
+   __riscv_vse64_v_i64m2,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v1,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v2,v3,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e32m2,
+   vint32m2_t,
+   vint64m4_t,
+   uint32_t,
+   __riscv_vle32_v_i32m2,
+   __riscv_vwmulsu_vx_i64m4,
+   __riscv_vse64_v_i64m4,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v2,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v4,v6,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e32m4,
+   vint32m4_t,
+   vint64m8_t,
+   uint32_t,
+   __riscv_vle32_v_i32m4,
+   __riscv_vwmulsu_vx_i64m8,
+   __riscv_vse64_v_i64m8,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v4,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v8,v12,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i32-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e32m1,
+   vint32mf2_t,
+   vint64m1_t,
+   uint32_t,
+   __riscv_vle32_v_i32mf2,
+   __riscv_vwmulsu_vx_i64m1,
+   __riscv_vse64_v_i64m1,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-not {vwmulsu\.vx\s+(v[0-9]+),\1,} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e8m1,
+   vint8m1_t,
+   vint16m2_t,
+   uint8_t,
+   __riscv_vle8_v_i8m1,
+   __riscv_vwmulsu_vx_i16m2,
+   __riscv_vse16_v_i16m2,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v1,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v2,v3,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e8m2,
+   vint8m2_t,
+   vint16m4_t,
+   uint8_t,
+   __riscv_vle8_v_i8m2,
+   __riscv_vwmulsu_vx_i16m4,
+   __riscv_vse16_v_i16m4,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X8)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v2,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v4,v6,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-m4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e8m4,
+   vint8m4_t,
+   vint16m8_t,
+   uint8_t,
+   __riscv_vle8_v_i8m4,
+   __riscv_vwmulsu_vx_i16m8,
+   __riscv_vse16_v_i16m8,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X4)
+ 
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v0,v4,} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v8,v12,} 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf2.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf2.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf2.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf2_t,
+   vint16m1_t,
+   uint8_t,
+   __riscv_vle8_v_i8mf2,
+   __riscv_vwmulsu_vx_i16m1,
+   __riscv_vse16_v_i16m1,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-not {vwmulsu\.vx\s+(v[0-9]+),\1,} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf4.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf4.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf4.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf4_t,
+   vint16mf2_t,
+   uint8_t,
+   __riscv_vle8_v_i8mf4,
+   __riscv_vwmulsu_vx_i16mf2,
+   __riscv_vse16_v_i16mf2,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-not {vwmulsu\.vx\s+(v[0-9]+),\1,} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf8.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf8.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmulsu_vx-i8-mf8.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+ 
+ #include "group_overlap.h"
+ 
+ DEF_GROUP_OVERLAP_BINARY_3(
+   __riscv_vsetvlmax_e8m1,
+   vint8mf8_t,
+   vint16mf4_t,
+   uint8_t,
+   __riscv_vle8_v_i8mf8,
+   __riscv_vwmulsu_vx_i16mf4,
+   __riscv_vse16_v_i16mf4,
+   vwmulsu_vx,
+   LOOP_DUAL_WIDEN_BINARY_VX_BODY_X16)
+ 
+ /* The fractional LMUL source has EMUL < 1, thus the widened destination
+    register group must not overlap the source at all.  */
+ /* { dg-final { scan-assembler-not {vwmulsu\.vx\s+(v[0-9]+),\1,} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/pr123501.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/pr123501.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/pr123501.c	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/pr123501.c	Sun Aug 30 22:32:13 2026
*************** int main() {
*** 18,21 ****
      __builtin_abort ();
  }
  
! /* { dg-final { scan-assembler-times "vcpop.m" 2 } } */
--- 18,21 ----
      __builtin_abort ();
  }
  
! /* { dg-final { scan-assembler-times "vcpop.m" 1 } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-22.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-22.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-22.c	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-22.c	Sun Aug 30 22:32:13 2026
*************** foo2 (char const *buf, size_t len)
*** 185,188 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 185,188 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-23.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-23.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-23.c	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-23.c	Sun Aug 30 22:32:13 2026
*************** foo2 (char const *buf, size_t len)
*** 116,119 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 116,119 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-24.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-24.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-24.c	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-24.c	Sun Aug 30 22:32:13 2026
*************** foo2 (char const *buf, size_t len)
*** 83,86 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 83,86 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-52.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-52.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-52.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-52.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,63 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+ 
+ #include "riscv_vector.h"
+ 
+ void
+ foo (void *in, void *out, int n, uint8_t x)
+ {
+   for (int i = 0; i < n; i++)
+     {
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v0 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v0_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v0, 1));
+       v0 = __riscv_vwmulsu_vx_i16m4_tu (v0, v0_n, x, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v1 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v1_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v1, 1));
+       v1 = __riscv_vwmulsu_vx_i16m4_tu (v1, v1_n, x, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v2 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v2_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v2, 1));
+       v2 = __riscv_vwmulsu_vx_i16m4_tu (v2, v2_n, x, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v3 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v3_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v3, 1));
+       v3 = __riscv_vwmulsu_vx_i16m4_tu (v3, v3_n, x, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v4 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v4_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v4, 1));
+       v4 = __riscv_vwmulsu_vx_i16m4_tu (v4, v4_n, x, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v5 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v5_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v5, 1));
+       v5 = __riscv_vwmulsu_vx_i16m4_tu (v5, v5_n, x, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v6 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v6_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v6, 1));
+       v6 = __riscv_vwmulsu_vx_i16m4_tu (v6, v6_n, x, 4);
+       asm volatile("nop" ::: "memory");
+       vint8m2_t v7_n = __riscv_vle8_v_i8m2 (in, 4);in+=100;
+       vint16m4_t v7 = __riscv_vwmulsu_vx_i16m4 (v7_n, x, 4);
+ 
+       asm volatile("nop" ::: "memory");
+       __riscv_vsse16_v_i16m4 (out, 4, v0, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v1, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v2, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v3, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v4, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v5, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v6, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v7, 4);out+=100;
+     }
+ }
+ 
+ /* The narrowed source is the highest-numbered half of the tail-undisturbed
+    destination, thus it overlaps the destination register group.  The trailing
+    non-tu operation is expected to overlap as well.  */
+ /* { dg-final { scan-assembler-times {vwmulsu\.vx\s+v4,v6,} 8 } } */
+ /* { dg-final { scan-assembler-not {vmv1r} } } */
+ /* { dg-final { scan-assembler-not {vmv2r} } } */
+ /* { dg-final { scan-assembler-not {vmv4r} { xfail riscv*-*-* } } } */
+ /* { dg-final { scan-assembler-not {vmv8r} } } */
+ /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-53.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-53.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-53.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-53.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,62 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+ 
+ #include "riscv_vector.h"
+ 
+ void
+ foo (void *in, void *out, int n, int8_t x)
+ {
+   for (int i = 0; i < n; i++)
+     {
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v0 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v0_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v0, 1));
+       v0 = __riscv_vwmacc_vx_i16m4_tu (v0, x, v0_n, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v1 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v1_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v1, 1));
+       v1 = __riscv_vwmacc_vx_i16m4_tu (v1, x, v1_n, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v2 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v2_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v2, 1));
+       v2 = __riscv_vwmacc_vx_i16m4_tu (v2, x, v2_n, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v3 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v3_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v3, 1));
+       v3 = __riscv_vwmacc_vx_i16m4_tu (v3, x, v3_n, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v4 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v4_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v4, 1));
+       v4 = __riscv_vwmacc_vx_i16m4_tu (v4, x, v4_n, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v5 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v5_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v5, 1));
+       v5 = __riscv_vwmacc_vx_i16m4_tu (v5, x, v5_n, 4);
+       asm volatile("nop" ::: "memory");
+       vint16m4_t v6 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+       vint8m2_t v6_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v6, 1));
+       v6 = __riscv_vwmacc_vx_i16m4_tu (v6, x, v6_n, 4);
+       asm volatile("nop" ::: "memory");
+       vint8m2_t v7_n = __riscv_vle8_v_i8m2 (in, 4);in+=100;
+       vint16m4_t v7 = __riscv_vwcvt_x_x_v_i16m4 (v7_n, 4);
+ 
+       asm volatile("nop" ::: "memory");
+       __riscv_vsse16_v_i16m4 (out, 4, v0, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v1, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v2, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v3, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v4, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v5, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v6, 4);out+=100;
+       __riscv_vsse16_v_i16m4 (out, 4, v7, 4);out+=100;
+     }
+ }
+ 
+ /* The narrowed source is the highest-numbered half of the accumulator, thus it
+    overlaps the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmacc\.vx\s+v4,[^,]+,v6([^0-9]|$)} 7 } } */
+ /* { dg-final { scan-assembler-not {vmv1r} } } */
+ /* { dg-final { scan-assembler-not {vmv2r} } } */
+ /* { dg-final { scan-assembler-not {vmv4r} { xfail riscv*-*-* } } } */
+ /* { dg-final { scan-assembler-not {vmv8r} } } */
+ /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-54.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-54.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-54.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-54.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,62 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+ 
+ #include "riscv_vector.h"
+ 
+ void
+ foo (void *in, void *out, int n, uint8_t x)
+ {
+   for (int i = 0; i < n; i++)
+     {
+       asm volatile("nop" ::: "memory");
+       vuint16m4_t v0 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+       vuint8m2_t v0_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v0, 1));
+       v0 = __riscv_vwmaccu_vx_u16m4_tu (v0, x, v0_n, 4);
+       asm volatile("nop" ::: "memory");
+       vuint16m4_t v1 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+       vuint8m2_t v1_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v1, 1));
+       v1 = __riscv_vwmaccu_vx_u16m4_tu (v1, x, v1_n, 4);
+       asm volatile("nop" ::: "memory");
+       vuint16m4_t v2 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+       vuint8m2_t v2_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v2, 1));
+       v2 = __riscv_vwmaccu_vx_u16m4_tu (v2, x, v2_n, 4);
+       asm volatile("nop" ::: "memory");
+       vuint16m4_t v3 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+       vuint8m2_t v3_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v3, 1));
+       v3 = __riscv_vwmaccu_vx_u16m4_tu (v3, x, v3_n, 4);
+       asm volatile("nop" ::: "memory");
+       vuint16m4_t v4 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+       vuint8m2_t v4_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v4, 1));
+       v4 = __riscv_vwmaccu_vx_u16m4_tu (v4, x, v4_n, 4);
+       asm volatile("nop" ::: "memory");
+       vuint16m4_t v5 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+       vuint8m2_t v5_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v5, 1));
+       v5 = __riscv_vwmaccu_vx_u16m4_tu (v5, x, v5_n, 4);
+       asm volatile("nop" ::: "memory");
+       vuint16m4_t v6 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+       vuint8m2_t v6_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v6, 1));
+       v6 = __riscv_vwmaccu_vx_u16m4_tu (v6, x, v6_n, 4);
+       asm volatile("nop" ::: "memory");
+       vuint8m2_t v7_n = __riscv_vle8_v_u8m2 (in, 4);in+=100;
+       vuint16m4_t v7 = __riscv_vwcvtu_x_x_v_u16m4 (v7_n, 4);
+ 
+       asm volatile("nop" ::: "memory");
+       __riscv_vsse16_v_u16m4 (out, 4, v0, 4);out+=100;
+       __riscv_vsse16_v_u16m4 (out, 4, v1, 4);out+=100;
+       __riscv_vsse16_v_u16m4 (out, 4, v2, 4);out+=100;
+       __riscv_vsse16_v_u16m4 (out, 4, v3, 4);out+=100;
+       __riscv_vsse16_v_u16m4 (out, 4, v4, 4);out+=100;
+       __riscv_vsse16_v_u16m4 (out, 4, v5, 4);out+=100;
+       __riscv_vsse16_v_u16m4 (out, 4, v6, 4);out+=100;
+       __riscv_vsse16_v_u16m4 (out, 4, v7, 4);out+=100;
+     }
+ }
+ 
+ /* The narrowed source is the highest-numbered half of the accumulator, thus it
+    overlaps the destination register group.  */
+ /* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,[^,]+,v6([^0-9]|$)} 7 } } */
+ /* { dg-final { scan-assembler-not {vmv1r} } } */
+ /* { dg-final { scan-assembler-not {vmv2r} } } */
+ /* { dg-final { scan-assembler-not {vmv4r} { xfail riscv*-*-* } } } */
+ /* { dg-final { scan-assembler-not {vmv8r} } } */
+ /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/reduc-xor-uniform-1.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/reduc-xor-uniform-1.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/rvv/base/reduc-xor-uniform-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/rvv/base/reduc-xor-uniform-1.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fgimple -march=rv64im_zve64f -mabi=lp64 -fdump-tree-forwprop1" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "riscv_vector.h"
+ 
+ /*
+ ** reduc_xor_even:
+ **	li	a0,0
+ **	ret
+ */
+ long __GIMPLE ()
+ reduc_xor_even (void)
+ {
+   vbool32_t mask;
+   vint64m2_t ones;
+   long res;
+ 
+   mask = _Literal (vint64m2_t) 0 == _Literal (vint64m2_t) 0;
+   ones = .VEC_CONVERT (mask);
+   res = .REDUC_XOR (ones);
+   return res;
+ }
+ 
+ /*
+ ** reduc_xor_unknown:
+ **	vsetvli	[a-x0-9]+,zero,e64,m1,ta,ma
+ **	...
+ **	vredxor\.vs	v[0-9]+,v[0-9]+,v[0-9]+
+ **	...
+ **	ret
+ */
+ long __GIMPLE ()
+ reduc_xor_unknown (void)
+ {
+   vbool64_t mask;
+   vint64m1_t ones;
+   long res;
+ 
+   mask = _Literal (vint64m1_t) 0 == _Literal (vint64m1_t) 0;
+   ones = .VEC_CONVERT (mask);
+   res = .REDUC_XOR (ones);
+   return res;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times {\.REDUC_XOR} 1 "forwprop1" } } */
+ /* { dg-final { scan-tree-dump-times {return 0;} 1 "forwprop1" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/riscv/slliw-shifted-bitfield-rtl.c gcc-17-20260830/gcc/testsuite/gcc.target/riscv/slliw-shifted-bitfield-rtl.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/riscv/slliw-shifted-bitfield-rtl.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gcc.target/riscv/slliw-shifted-bitfield-rtl.c	Sun Aug 30 22:32:13 2026
***************
*** 0 ****
--- 1,115 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target rv64 } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Os" "-Og" "-Oz" "-flto" } } */
+ /* { dg-options "-O2 -march=rv64gc_zicond -mabi=lp64d" } */
+ 
+ /* This RTL is roughly equivalent to:
+ 
+      slli   a5,a0,40
+      srai   a0,a5,44
+      andi   a0,a0,-2
+      slli   a0,a0,12
+ 
+    which means a0[4..23] (sign_extract 20 bits from bit 4). It should
+    not be rewritten into:
+ 
+      andi   a0,a0,-2
+      slliw  a0,a0,12
+ 
+    because that would ignore the sign_extract start bit.  For example,
+    x = 2 should produce 0 because bit 1 is outside a0[4..23], but the
+    rewritten sequence would produce 0x2000.  */
+ unsigned long __RTL (startwith ("combine"))
+ foo_pos (unsigned long x)
+ {
+ (function "foo_pos"
+   (param "x"
+     (DECL_RTL (reg/v:DI <1> [ x ]))
+     (DECL_RTL_INCOMING (reg:DI a0 [ x ])))
+   (insn-chain
+     (block 2
+       (edge-from entry (flags "FALLTHRU"))
+       (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+       (cinsn 2 (set (reg/v:DI <1> [ x ])
+                     (reg:DI a0 [ x ])))
+       (cinsn 3 (set (reg:DI <2>)
+                     (sign_extract:DI (reg/v:DI <1> [ x ])
+                       (const_int 20)
+                       (const_int 4))))
+       (cinsn 4 (set (reg:DI <3>)
+                     (ashift:DI (reg:DI <2>)
+                       (const_int 12))))
+       (cinsn 5 (set (reg:DI <0> [ <retval> ])
+                     (and:DI (reg:DI <3>)
+                       (const_int -8192))))
+       (cinsn 6 (set (reg/i:DI a0)
+                     (reg:DI <0> [ <retval> ])))
+       (cinsn 7 (use (reg/i:DI a0)))
+       (edge-to exit (flags "FALLTHRU"))
+     )
+   )
+   (crtl
+     (return_rtx
+       (reg/i:DI a0)
+     )
+   )
+ )
+ }
+ 
+ /* This RTL is roughly equivalent to:
+ 
+      slli   a5,a0,61
+      srai   a0,a5,61
+      andi   a0,a0,14
+      slli   a0,a0,29
+ 
+    The outer mask clears high 32 bits that SLLIW would instead fill
+    from bit 31.  The shifted-bitfield split must not rewrite it as
+    the following sequence:
+ 
+      andi   a0,a0,-2
+      slliw  a0,a0,29
+ 
+    because that would sign-extend the final 32-bit result.  For example,
+    x = 4 should produce 0x180000000, but the rewritten sequence would
+    produce 0xffffffff80000000.  */
+ unsigned long __RTL (startwith ("combine"))
+ foo_mask (unsigned long x)
+ {
+ (function "foo_mask"
+   (param "x"
+     (DECL_RTL (reg/v:DI <1> [ x ]))
+     (DECL_RTL_INCOMING (reg:DI a0 [ x ])))
+   (insn-chain
+     (block 2
+       (edge-from entry (flags "FALLTHRU"))
+       (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+       (cinsn 2 (set (reg/v:DI <1> [ x ])
+                     (reg:DI a0 [ x ])))
+       (cinsn 3 (set (reg:DI <2>)
+                     (ashift:DI (reg/v:DI <1> [ x ])
+                       (const_int 61))))
+       (cinsn 4 (set (reg:DI <3>)
+                     (ashiftrt:DI (reg:DI <2>)
+                       (const_int 62))))
+       (cinsn 5 (set (reg:DI <4>)
+                     (ashift:DI (reg:DI <3>)
+                       (const_int 30))))
+       (cinsn 6 (set (reg:DI <0> [ <retval> ])
+                     (and:DI (reg:DI <4>)
+                       (const_int 7516192768))))
+       (cinsn 7 (set (reg/i:DI a0)
+                     (reg:DI <0> [ <retval> ])))
+       (cinsn 8 (use (reg/i:DI a0)))
+       (edge-to exit (flags "FALLTHRU"))
+     )
+   )
+   (crtl
+     (return_rtx
+       (reg/i:DI a0)
+     )
+   )
+ )
+ }
+ 
+ /* { dg-final { scan-assembler-not "slliw\t" } } */
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gcc.target/sh/pr51244-20.c gcc-17-20260830/gcc/testsuite/gcc.target/sh/pr51244-20.c
*** gcc-17-20260823/gcc/testsuite/gcc.target/sh/pr51244-20.c	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gcc.target/sh/pr51244-20.c	Sun Aug 30 22:32:13 2026
***************
*** 6,18 ****
  /* { dg-final { scan-assembler-not "not\t" } } */
  /* { dg-final { scan-assembler-times "cmp/eq" 2 } } */
  /* { dg-final { scan-assembler-times "cmp/hi" 4 } } */
! /* { dg-final { scan-assembler-times "cmp/gt" 2 } } */
! 
! /* { dg-final { scan-assembler-times "tst" 7 { target { ! sh2a } } } } */
! /* { dg-final { scan-assembler-times "movt" 2 { target { ! sh2a } } } } */
  
! /* { dg-final { scan-assembler-times "tst" 6 { target { sh2a } } } } */
! /* { dg-final { scan-assembler-not "movt" { target { sh2a } } } } */
  /* { dg-final { scan-assembler-times "nott" 2 { target { sh2a } } } } */
  
  
--- 6,15 ----
  /* { dg-final { scan-assembler-not "not\t" } } */
  /* { dg-final { scan-assembler-times "cmp/eq" 2 } } */
  /* { dg-final { scan-assembler-times "cmp/hi" 4 } } */
! /* { dg-final { scan-assembler-times "cmp/gt" 3 } } */
  
! /* { dg-final { scan-assembler-times "tst" 6 } } */
! /* { dg-final { scan-assembler-not "movt" } } */
  /* { dg-final { scan-assembler-times "nott" 2 { target { sh2a } } } } */
  
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/assumed_rank_11.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/assumed_rank_11.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/assumed_rank_11.f90	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/assumed_rank_11.f90	Sun Aug 30 22:32:13 2026
*************** subroutine orig(X) ! { dg-error "may not
*** 42,52 ****
   integer :: x(..)[*]
  end
  
! subroutine val1(X)
!  integer, value :: x(..)  ! { dg-error "VALUE attribute conflicts with DIMENSION attribute" }
  end
  
! subroutine val2(X)
   integer, value :: x
!  dimension :: x(..)  ! { dg-error "VALUE attribute conflicts with DIMENSION attribute" }
  end
--- 42,52 ----
   integer :: x(..)[*]
  end
  
! subroutine val1(X) ! { dg-error "may not have the VALUE or CODIMENSION attribute" }
!  integer, value :: x(..)
  end
  
! subroutine val2(X) ! { dg-error "may not have the VALUE or CODIMENSION attribute" }
   integer, value :: x
!  dimension :: x(..)
  end
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/c-interop/c535a-2.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/c-interop/c535a-2.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/c-interop/c535a-2.f90	Sun Aug 23 22:32:17 2026
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/c-interop/c535a-2.f90	Sun Aug 30 22:32:13 2026
*************** subroutine s2 (b) ! { dg-error "has no I
*** 71,78 ****
    integer, codimension[*] :: b(..) ! { dg-error "assumed-rank array" }
  end subroutine
  
! subroutine s5 (e) ! { dg-error "has no IMPLICIT type" }
    implicit none
!   integer, value :: e(..) ! { dg-error "VALUE attribute conflicts with DIMENSION" }
  end subroutine
  
--- 71,78 ----
    integer, codimension[*] :: b(..) ! { dg-error "assumed-rank array" }
  end subroutine
  
! subroutine s5 (e) ! { dg-error "may not have the VALUE or CODIMENSION attribute" }
    implicit none
!   integer, value :: e(..)
  end subroutine
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/guality/arg1.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/guality/arg1.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/guality/arg1.f90	Sun Aug 23 22:32:18 2026
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/guality/arg1.f90	Sun Aug 30 22:32:14 2026
*************** end
*** 8,15 ****
  
  subroutine sub (a, n)
    integer :: a(n), n
    do i = 1, n
      a(i) = i
    end do
!   write (*,*) a	! { dg-final { gdb-test 14 "a(10)" "10" } }
  end subroutine
--- 8,18 ----
  
  subroutine sub (a, n)
    integer :: a(n), n
+   integer, volatile :: v
+   v = 0
    do i = 1, n
      a(i) = i
    end do
!   write (*,*) a
!   v = v + 1	! { dg-final { gdb-test 17 "a(10)" "10" } }
  end subroutine
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/iso_fortran_env_10.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/iso_fortran_env_10.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/iso_fortran_env_10.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/iso_fortran_env_10.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,50 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/82065
+ !
+ ! Array-valued named constants from ISO_FORTRAN_ENV were emitted without
+ ! a static initializer when used inside a procedure.
+ 
+ module m
+ contains
+   subroutine mod_proc
+     use iso_fortran_env, only : integer_kinds
+     if (size (integer_kinds) < 1) stop 1
+     if (integer_kinds(1) < 1) stop 2
+   end subroutine
+ end module
+ 
+ program main
+   use m
+   use iso_fortran_env
+   implicit none
+ 
+   call check (integer_kinds)
+   call testsub
+   call testsub2
+   call mod_proc
+ 
+ contains
+ 
+   subroutine check (k)
+     integer, intent(in) :: k(:)
+     if (size (k) < 1) stop 3
+     if (any (k < 1)) stop 4
+   end subroutine
+ 
+   subroutine testsub
+     if (size (integer_kinds) < 1) stop 5
+     if (any (integer_kinds < 1)) stop 6
+     call check (integer_kinds)
+   end subroutine
+ 
+   subroutine testsub2
+     use iso_fortran_env, only : x => integer_kinds, y => real_kinds, &
+                                 z => logical_kinds, c => character_kinds
+     if (any (x < 1)) stop 7
+     if (any (y < 1)) stop 8
+     if (any (z < 1)) stop 9
+     if (any (c < 1)) stop 10
+   end subroutine
+ 
+ end program main
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/pr127100.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/pr127100.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/pr127100.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/pr127100.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,11 ----
+ ! PR tree-optimization/127100
+ ! { dg-do compile { target s390*-*-* } }
+ ! { dg-options "-O2 -march=z13 -fdump-tree-optimized" }
+ ! Verify the test isn't miscompiled into unconditional STOP 1.
+ ! { dg-final { scan-tree-dump "return 0;" "optimized" } }
+ 
+ program main
+   integer(kind=1), dimension(2,2) :: a
+   a = reshape((/ 1_1, 2_1, 3_1, 4_1/), shape(a))
+   if (any(matmul(a,a) /= reshape ( (/ 7, 10, 15, 22 /), shape(a)))) STOP 1
+ end program main
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/structure_constructor_22.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/structure_constructor_22.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/structure_constructor_22.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/structure_constructor_22.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,38 ----
+ ! { dg-do run }
+ !
+ ! PR125722
+ !
+ program p
+   type t
+      character(2), allocatable :: c(:)
+   end type t
+   type(t) :: x
+ 
+   character(:), allocatable :: d(:)
+   character(2), allocatable :: e(:)
+ 
+   ! Deferred-length source longer than the component -> truncate each element.
+   allocate (character(5) :: d(3))
+   d = [ "abcde", "fghij", "klmno" ]
+   x = t (d)
+   if (size (x%c) /= 3) stop 1
+   if (len (x%c) /= 2) stop 2
+   if (x%c(1) /= "ab") stop 3
+   if (x%c(2) /= "fg") stop 4
+   if (x%c(3) /= "kl") stop 5
+ 
+   ! Deferred-length source shorter than the component -> blank pad.
+   deallocate (d)
+   allocate (character(1) :: d(2))
+   d = [ "p", "q" ]
+   x = t (d)
+   if (x%c(1) /= "p ") stop 6
+   if (x%c(2) /= "q ") stop 7
+ 
+   ! Explicit-length allocatable source, equal length.
+   allocate (e(2))
+   e = [ "xy", "zw" ]
+   x = t (e)
+   if (x%c(1) /= "xy") stop 8
+   if (x%c(2) /= "zw") stop 9
+ end program p
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_11.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_11.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_11.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_11.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,17 ----
+ ! { dg-do run }
+ ! PR 49802
+ ! character(len=n), value with a non-constant specified length (n is a
+ ! dummy argument) was rejected with "must have constant length".  Verify
+ ! that it compiles and that VALUE semantics hold.
+ 
+ program test
+   implicit none
+   call sub_char1_n ("abc", 3)
+ contains
+   subroutine sub_char1_n (x, n)
+     integer, intent(in)            :: n
+     character(len=n), value :: x
+     x(1:1) = "1"
+     if (x(1:1) /= "1") error stop 23
+   end subroutine sub_char1_n
+ end program test
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_12.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_12.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_12.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_12.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,69 ----
+ ! { dg-do run }
+ ! PR 49802
+ ! VALUE was rejected outright for array dummy arguments ("VALUE
+ ! attribute conflicts with DIMENSION attribute"), even though F2018
+ ! C862 only prohibits VALUE for assumed-size arrays (and coarrays).
+ ! Verify that assumed-shape, explicit-shape, and
+ ! non-contiguous array actuals are passed by VALUE correctly: the
+ ! callee gets a private copy, and modifications do not propagate back
+ ! to the actual argument, including for PARAMETER actuals.
+ 
+ program test
+   implicit none
+   integer, parameter :: p(5) = [1,2,3,4,5]
+   character(len=*), parameter :: c1(2) = [ "abc", "def" ]
+   integer :: a(10), i
+ 
+   a = [(i, i=1,10)]
+ 
+   call sub_int_assumed_shape (p)
+   if (any (p /= [1,2,3,4,5])) stop 1
+ 
+   call sub_int_noncontig (a(1:10:2))
+   if (any (a /= [(i, i=1,10)])) stop 2
+ 
+   call sub_int_explicit (p)
+   if (any (p /= [1,2,3,4,5])) stop 3
+ 
+   call sub_opt_array (p)
+   call sub_opt_array ()
+ 
+   call sub_char_assumed_shape (c1)
+   if (c1(1) /= "abc") stop 4
+ 
+ contains
+ 
+   subroutine sub_int_assumed_shape (x)
+     integer, value :: x(:)
+     x = x + 100
+     if (any (x /= [101,102,103,104,105])) stop 11
+   end subroutine
+ 
+   subroutine sub_int_noncontig (x)
+     integer, value :: x(:)
+     x = -1
+     if (any (x /= -1)) stop 12
+   end subroutine
+ 
+   subroutine sub_int_explicit (x)
+     integer, value :: x(5)
+     x(1) = -99
+     if (x(1) /= -99) stop 13
+   end subroutine
+ 
+   subroutine sub_opt_array (x)
+     integer, value, optional :: x(:)
+     if (present (x)) then
+       if (any (x /= [1,2,3,4,5])) stop 14
+       x = -1
+     end if
+   end subroutine
+ 
+   subroutine sub_char_assumed_shape (x)
+     character(len=*), value :: x(:)
+     if (len (x) /= 3) stop 15
+     x(1)(1:1) = "1"
+     if (x(1)(1:1) /= "1") stop 16
+   end subroutine
+ 
+ end program test
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_13.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_13.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_13.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_13.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,18 ----
+ ! { dg-do compile }
+ ! { dg-options "-std=f2008" }
+ ! PR 49802
+ ! Assumed-shape and explicit-shape array dummies may have the VALUE
+ ! attribute since Fortran 2008 (F2008, C557), but assumed-size arrays
+ ! may not.
+ 
+ subroutine foo (x)
+   integer, value :: x(:)    ! assumed-shape: OK
+ end subroutine
+ 
+ subroutine bar (x)
+   integer, value :: x(10)   ! explicit-shape: OK
+ end subroutine
+ 
+ subroutine baz (x) ! { dg-error "may not have the VALUE attribute" }
+   integer, value :: x(*)
+ end subroutine
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_14.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_14.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_14.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_14.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,35 ----
+ ! { dg-do run }
+ ! PR 49802
+ ! The caller-side copy made for an assumed-length CHARACTER VALUE dummy
+ ! copied a number of bytes equal to the character count, which is wrong
+ ! for a character kind wider than one byte.
+ 
+ program test
+   implicit none
+   character(kind=4,len=10) :: s4
+   character(kind=1,len=10) :: s1
+ 
+   s4 = 4_"abcdefghij"
+   call by_value_k4 (s4)
+   if (s4 /= 4_"abcdefghij") stop 1
+ 
+   s1 = "abcdefghij"
+   call by_value_k1 (s1)
+   if (s1 /= "abcdefghij") stop 2
+ 
+ contains
+ 
+   subroutine by_value_k4 (y)
+     character(kind=4,len=*), value :: y
+     if (len (y) /= 10) stop 3
+     if (y /= 4_"abcdefghij") stop 4
+     y = 4_"ZZZZZZZZZZ"
+   end subroutine
+ 
+   subroutine by_value_k1 (y)
+     character(kind=1,len=*), value :: y
+     if (y /= "abcdefghij") stop 5
+     y = "ZZZZZZZZZZ"
+   end subroutine
+ 
+ end program
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_15.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_15.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_15.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_15.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,90 ----
+ ! { dg-do run }
+ ! PR 49802
+ ! Sequence association (F2023, 15.5.2.12) of a scalar actual argument
+ ! with an explicit-shape array dummy that has the VALUE attribute used
+ ! to ICE in conv_dummy_value.  The dummy receives a private copy of as
+ ! many elements as it declares.
+ 
+ program test
+   implicit none
+   type :: dt
+     integer, allocatable :: d(:)
+   end type
+   integer :: a(20), i
+   character(len=12) :: s
+   type(dt) :: t(3)
+ 
+   a = [(i, i=1,20)]
+   s = "abcdefghijkl"
+ 
+   call const_bound (a(3))
+   if (any (a /= [(i, i=1,20)])) stop 1
+ 
+   call dummy_bound (4, a(3))
+   if (any (a /= [(i, i=1,20)])) stop 2
+ 
+   call rank_two (a(5))
+   if (any (a /= [(i, i=1,20)])) stop 3
+ 
+   call char_elems (s)
+   if (s /= "abcdefghijkl") stop 4
+ 
+   call char_dummy_len (3, s)
+   if (s /= "abcdefghijkl") stop 5
+ 
+   do i = 1, 3
+     allocate (t(i)%d(2), source=[i,i])
+   end do
+   call alloc_comp (t(1))
+   if (any (t(1)%d /= [1,1])) stop 6
+   if (any (t(2)%d /= [2,2])) stop 7
+ 
+ contains
+ 
+   subroutine const_bound (x)
+     integer, value :: x(5)
+     if (any (x /= [3,4,5,6,7])) stop 11
+     x = -1
+   end subroutine
+ 
+   subroutine dummy_bound (n, x)
+     integer, intent(in) :: n
+     integer, value :: x(n)
+     if (size (x) /= 4) stop 21
+     if (any (x /= [3,4,5,6])) stop 22
+     x = -1
+   end subroutine
+ 
+   subroutine rank_two (x)
+     integer, value :: x(2,3)
+     if (any (reshape (x, [6]) /= [5,6,7,8,9,10])) stop 31
+     x = -1
+   end subroutine
+ 
+   subroutine char_elems (x)
+     character(len=3), value :: x(4)
+     if (x(1) /= "abc" .or. x(4) /= "jkl") stop 41
+     x = "ZZZ"
+   end subroutine
+ 
+   ! The copy is deep: the callee must not reach the actual argument's
+   ! data through a shared component pointer.
+   subroutine alloc_comp (x)
+     type(dt), value :: x(2)
+     if (any (x(1)%d /= [1,1])) stop 61
+     if (any (x(2)%d /= [2,2])) stop 62
+     x(1)%d = [-1,-1]
+     x(2)%d = [-9,-9]
+     if (any (x(1)%d /= [-1,-1])) stop 63
+     if (any (x(2)%d /= [-9,-9])) stop 64
+   end subroutine
+ 
+   subroutine char_dummy_len (n, x)
+     integer, intent(in) :: n
+     character(len=n), value :: x(4)
+     if (len (x) /= 3) stop 51
+     if (x(1) /= "abc" .or. x(4) /= "jkl") stop 52
+     x = "ZZZ"
+   end subroutine
+ 
+ end program
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_16.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_16.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_16.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_16.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,50 ----
+ ! { dg-do run }
+ ! PR 49802
+ ! A VALUE array dummy of a derived type with allocatable components was
+ ! given a shallow copy, so the callee reached the actual argument's data
+ ! through the shared component pointers.  The copy must be deep.
+ 
+ program test
+   implicit none
+   type :: inner
+     integer, allocatable :: d(:)
+   end type
+   type :: outer
+     type(inner), allocatable :: b(:)
+     character(:), allocatable :: nm
+   end type
+   type(outer) :: v(2)
+   integer :: k
+ 
+   do k = 1, 2
+     allocate (v(k)%b(2))
+     allocate (v(k)%b(1)%d(2), source=[k,k])
+     allocate (v(k)%b(2)%d(2), source=[10*k,10*k])
+     v(k)%nm = "orig"
+   end do
+ 
+   call explicit_shape (v)
+   if (any (v(1)%b(1)%d /= [1,1])) stop 1
+   if (v(1)%nm /= "orig") stop 2
+ 
+   call assumed_shape (v)
+   if (any (v(2)%b(2)%d /= [20,20])) stop 3
+   if (v(2)%nm /= "orig") stop 4
+ 
+ contains
+ 
+   subroutine explicit_shape (x)
+     type(outer), value :: x(2)
+     x(1)%b(1)%d = [-1,-1]
+     x(1)%nm = "changed"
+     if (any (x(1)%b(1)%d /= [-1,-1])) stop 11
+   end subroutine
+ 
+   subroutine assumed_shape (x)
+     type(outer), value :: x(:)
+     x(2)%b(2)%d = [-9,-9]
+     x(2)%nm = "changed"
+     if (x(2)%nm /= "changed") stop 21
+   end subroutine
+ 
+ end program
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_17.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_17.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_17.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_17.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,28 ----
+ ! { dg-do compile }
+ ! PR 49802
+ ! Only a scalar VALUE dummy is interoperable with a formal parameter of
+ ! the C prototype (F2023, 18.3.6 (4)), so an array VALUE dummy is not
+ ! allowed in a BIND(C) procedure.  A polymorphic array VALUE dummy is
+ ! not yet implemented; it used to ICE.
+ 
+ module m
+   use iso_c_binding
+   implicit none
+   type :: t
+     integer :: i = 0
+   end type
+ contains
+ 
+   subroutine bindc_expl (x) bind(c) ! { dg-error "not allowed in BIND\\(C\\) procedure" }
+     integer(c_int), value :: x(3)
+   end subroutine
+ 
+   subroutine bindc_ashape (x) bind(c) ! { dg-error "not allowed in BIND\\(C\\) procedure" }
+     integer(c_int), value :: x(:)
+   end subroutine
+ 
+   subroutine poly (x) ! { dg-error "not yet implemented" }
+     class(t), value :: x(:)
+   end subroutine
+ 
+ end module
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_18.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_18.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_18.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_18.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,184 ----
+ ! { dg-do run }
+ ! PR 49802
+ ! An absent OPTIONAL actual argument passed to an OPTIONAL dummy with the
+ ! VALUE attribute used to segfault: the private copy made for the dummy
+ ! dereferenced the actual argument unconditionally.  Both the array copy
+ ! and the copy made for a character dummy of assumed or non-constant
+ ! length must be suppressed when the actual argument is absent.
+ 
+ module m
+   implicit none
+   type :: dt
+     integer, allocatable :: d(:)
+   end type
+ contains
+ 
+   subroutine take_as (x, present_x)
+     integer, value, optional :: x(:)
+     logical, intent(in) :: present_x
+     if (present (x) .neqv. present_x) stop 1
+     if (present (x)) then
+       if (size (x) /= 3) stop 2
+       if (any (x /= [1, 2, 3])) stop 3
+       x = -1
+       if (any (x /= -1)) stop 4
+     end if
+   end subroutine take_as
+ 
+   subroutine take_es (n, x, present_x)
+     integer, intent(in) :: n
+     integer, value, optional :: x(n)
+     logical, intent(in) :: present_x
+     if (present (x) .neqv. present_x) stop 5
+     if (present (x)) then
+       if (size (x) /= n) stop 6
+       if (x(1) /= 1) stop 7
+       x = 0
+       if (any (x /= 0)) stop 8
+     end if
+   end subroutine take_es
+ 
+   subroutine take_cs (s, present_s)
+     character(len=*), value, optional :: s
+     logical, intent(in) :: present_s
+     if (present (s) .neqv. present_s) stop 9
+     if (present (s)) then
+       if (s /= 'payload') stop 10
+       s = repeat ('Z', len (s))
+       if (s /= repeat ('Z', len (s))) stop 11
+     end if
+   end subroutine take_cs
+ 
+   subroutine take_ca (s, present_s)
+     character(len=*), value, optional :: s(:)
+     logical, intent(in) :: present_s
+     if (present (s) .neqv. present_s) stop 12
+     if (present (s)) then
+       if (size (s) /= 2) stop 13
+       if (any (s /= ['ab', 'cd'])) stop 14
+       s = 'ZZ'
+       if (any (s /= 'ZZ')) stop 15
+     end if
+   end subroutine take_ca
+ 
+   ! A derived type with an allocatable component: the deep copy must be
+   ! suppressed too, not just the copy of the descriptor.
+ 
+   subroutine take_dt (x, present_x)
+     type(dt), value, optional :: x(:)
+     logical, intent(in) :: present_x
+     if (present (x) .neqv. present_x) stop 19
+     if (present (x)) then
+       if (size (x) /= 2) stop 20
+       if (any (x(1)%d /= [1, 1])) stop 21
+       x(1)%d = [-1, -1]
+       if (any (x(1)%d /= [-1, -1])) stop 22
+     end if
+   end subroutine take_dt
+ 
+   ! Relay an optional dummy on to the optional VALUE dummy.  This is what
+   ! puts a descriptor of an absent argument into the argument list.
+ 
+   subroutine relay_as (x, present_x)
+     integer, optional :: x(:)
+     logical, intent(in) :: present_x
+     call take_as (x, present_x)
+   end subroutine relay_as
+ 
+   subroutine relay_es (n, x, present_x)
+     integer, intent(in) :: n
+     integer, optional :: x(n)
+     logical, intent(in) :: present_x
+     call take_es (n, x, present_x)
+   end subroutine relay_es
+ 
+   ! A non-constant length is needed here: with len=* the length of an
+   ! absent actual argument is zero and the copy reads nothing.
+   subroutine relay_cs (n, s, present_s)
+     integer, intent(in) :: n
+     character(len=n), optional :: s
+     logical, intent(in) :: present_s
+     call take_cs (s, present_s)
+   end subroutine relay_cs
+ 
+   subroutine relay_ca (s, present_s)
+     character(len=*), optional :: s(:)
+     logical, intent(in) :: present_s
+     call take_ca (s, present_s)
+   end subroutine relay_ca
+ 
+   subroutine relay_dt (x, present_x)
+     type(dt), optional :: x(:)
+     logical, intent(in) :: present_x
+     call take_dt (x, present_x)
+   end subroutine relay_dt
+ 
+   ! An optional VALUE dummy relayed on to another optional VALUE dummy.
+ 
+   subroutine relay_asv (x, present_x)
+     integer, value, optional :: x(:)
+     logical, intent(in) :: present_x
+     call take_as (x, present_x)
+   end subroutine relay_asv
+ 
+   subroutine relay_csv (n, s, present_s)
+     integer, intent(in) :: n
+     character(len=n), value, optional :: s
+     logical, intent(in) :: present_s
+     call take_cs (s, present_s)
+   end subroutine relay_csv
+ 
+ end module m
+ 
+ program test
+   use m
+   implicit none
+   integer :: v(3), i
+   character(len=7) :: s
+   character(len=2) :: a(2)
+   type(dt) :: w(2)
+ 
+   v = [1, 2, 3]
+   s = 'payload'
+   a = ['ab', 'cd']
+   do i = 1, 2
+     allocate (w(i)%d(2), source=[i, i])
+   end do
+ 
+   ! Directly, with and without the actual argument.
+   call take_as (v, .true.)
+   call take_as (present_x = .false.)
+   call take_es (3, v, .true.)
+   call take_es (3, present_x = .false.)
+   call take_cs (s, .true.)
+   call take_cs (present_s = .false.)
+   call take_ca (a, .true.)
+   call take_ca (present_s = .false.)
+   call take_dt (w, .true.)
+   call take_dt (present_x = .false.)
+ 
+   ! Relayed through an optional dummy.
+   call relay_as (v, .true.)
+   call relay_as (present_x = .false.)
+   call relay_es (3, v, .true.)
+   call relay_es (3, present_x = .false.)
+   call relay_cs (7, s, .true.)
+   call relay_cs (7, present_s = .false.)
+   call relay_ca (a, .true.)
+   call relay_ca (present_s = .false.)
+   call relay_dt (w, .true.)
+   call relay_dt (present_x = .false.)
+ 
+   ! Relayed through an optional VALUE dummy.
+   call relay_asv (v, .true.)
+   call relay_asv (present_x = .false.)
+   call relay_csv (7, s, .true.)
+   call relay_csv (7, present_s = .false.)
+ 
+   ! None of the copies may write back to the actual arguments.
+   if (any (v /= [1, 2, 3])) stop 16
+   if (s /= 'payload') stop 17
+   if (any (a /= ['ab', 'cd'])) stop 18
+   if (any (w(1)%d /= [1, 1])) stop 23
+   if (any (w(2)%d /= [2, 2])) stop 24
+ end program test
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_3.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_3.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_3.f90	Sun Aug 23 22:32:18 2026
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_3.f90	Sun Aug 30 22:32:14 2026
***************
*** 1,8 ****
  ! { dg-do compile }
  ! Tests the constraints in the patch for PR29642, which requested the
  ! implementation of the F2003 VALUE attribute for gfortran.
  !
! ! Contributed by Paul Thomas  <pault@gcc.gnu.org> 
  !
  program test_value
    integer(8) :: i = 42, j   ! { dg-error "not a dummy" }
--- 1,14 ----
  ! { dg-do compile }
+ ! { dg-options "-std=f2003" }
  ! Tests the constraints in the patch for PR29642, which requested the
  ! implementation of the F2003 VALUE attribute for gfortran.
  !
! ! Compiled as -std=f2003 because Fortran 2008 relaxed C527 to allow the
! ! VALUE attribute on explicit-shape and assumed-shape array dummies
! ! (F2008, C557); bar_1 below exercises the resulting -std=f2003
! ! rejection.  The acceptance case is covered separately by value_12.f90.
! !
! ! Contributed by Paul Thomas  <pault@gcc.gnu.org>
  !
  program test_value
    integer(8) :: i = 42, j   ! { dg-error "not a dummy" }
*************** program test_value
*** 10,19 ****
    value :: j
  
  contains
!   subroutine bar_1 (i)
      integer(8) :: i
      dimension i(8)
!     value :: i  ! { dg-error "conflicts with DIMENSION" }
      i = 0
    end subroutine bar_1
  
--- 16,25 ----
    value :: j
  
  contains
!   subroutine bar_1 (i) ! { dg-error "Fortran 2008: Array dummy argument" }
      integer(8) :: i
      dimension i(8)
!     value :: i
      i = 0
    end subroutine bar_1
  
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_5.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_5.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_5.f90	Sun Aug 23 22:32:18 2026
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_5.f90	Sun Aug 30 22:32:14 2026
***************
*** 1,9 ****
--- 1,15 ----
  ! { dg-do compile }
+ ! { dg-options "-std=f2003" }
  ! Length of character dummy variable with VALUE attribute:
  ! - must be initialization expression or omitted
  ! - C interoperable: must be initialization expression of length one
  !   or omitted
  !
+ ! Compiled as -std=f2003 because Fortran 2008 relaxed C558 to allow
+ ! assumed-length character dummies with the VALUE attribute; that case
+ ! (foo4) and its rejection under -std=f2003 are exercised separately in
+ ! value_6.f90 and value_7.f90.
+ !
  ! Contributed by Tobias Burnus
  program x
    implicit none
*************** contains
*** 36,42 ****
      value :: a
    end subroutine foo3
  
!   subroutine foo4(a) ! { dg-error "VALUE attribute must have constant length" }
      character(*) :: a
      value :: a
    end subroutine foo4
--- 42,48 ----
      value :: a
    end subroutine foo3
  
!   subroutine foo4(a) ! { dg-error "Assumed-length character" }
      character(*) :: a
      value :: a
    end subroutine foo4
*************** contains
*** 60,66 ****
      value :: a
    end subroutine bar3
  
!   subroutine bar4(a) ! { dg-error "VALUE attribute must have constant length" }
      use iso_c_binding, only: c_char
      character(kind=c_char,len=*) :: a
      value :: a
--- 66,72 ----
      value :: a
    end subroutine bar3
  
!   subroutine bar4(a) ! { dg-error "VALUE attribute must have length one" }
      use iso_c_binding, only: c_char
      character(kind=c_char,len=*) :: a
      value :: a
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_6.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_6.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_6.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_6.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,29 ----
+ ! { dg-do run }
+ ! PR 49802
+ ! character(len=*), value was rejected by gfortran despite being valid
+ ! from Fortran 2008 onwards.  Verify that it compiles and that VALUE
+ ! semantics are correct: modifications to the dummy do not affect the
+ ! actual argument, and len() returns the actual argument's length.
+ 
+ program test
+   implicit none
+   character(len=10) :: str
+ 
+   str = "123456789"
+   call by_value (str)
+   if (str /= "123456789") stop 1
+ 
+ contains
+ 
+   subroutine by_value (y)
+     character(len=*), value :: y
+     if (len (y) /= 10) stop 2
+     if (y /= "123456789 ") stop 3
+     y = "abcdefghij"
+     if (y /= "abcdefghij") stop 4
+     ! str is accessible via host association; VALUE must not let
+     ! the assignment to y propagate back.
+     if (str /= "123456789") stop 5
+   end subroutine
+ 
+ end program
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/value_7.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/value_7.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/value_7.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/value_7.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,9 ----
+ ! { dg-do compile }
+ ! { dg-options "-std=f2003" }
+ ! PR 49802
+ ! Fortran 2003 C558 prohibited assumed-length character with VALUE.
+ ! Verify that -std=f2003 rejects it.
+ 
+ subroutine sub (y)  ! { dg-error "Assumed-length character" }
+   character(len=*), value :: y
+ end subroutine
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gfortran.dg/vect/pr127058.f90 gcc-17-20260830/gcc/testsuite/gfortran.dg/vect/pr127058.f90
*** gcc-17-20260823/gcc/testsuite/gfortran.dg/vect/pr127058.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gfortran.dg/vect/pr127058.f90	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,25 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Ofast" }
+ ! { dg-additional-options "-mcpu=neoverse-v1" { target { aarch64-*-* } } }
+ 
+ MODULE a
+     integer, parameter ::      b = selected_real_kind(12)
+     integer, parameter :: d     =  10
+     real(b) e(1,d)
+     CONTAINS
+     SUBROUTINE f(ime ,jme)
+     REAL, DIMENSION( ime,d,jme )  :: g
+     INTEGER  c,h,l,k,aa,ab
+         DO h = jts,jte
+         DO l = its,aa
+         if (m.eq.1) THEN
+            do c = 1,ab
+             do k = 1,d
+                e(c,k) = g(i,k,j)
+             enddo
+             enddo
+         endif
+         end do
+     end do
+     end
+ end
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gnat.dg/array43.adb gcc-17-20260830/gcc/testsuite/gnat.dg/array43.adb
*** gcc-17-20260823/gcc/testsuite/gnat.dg/array43.adb	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gnat.dg/array43.adb	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,19 ----
+ -- { dg-do run }
+ 
+ procedure Array43 is
+ 
+   type Arr is array (Integer range <>) of Integer;
+ 
+   procedure Fill (B : out Arr; N : Integer) is
+   begin
+     B := (1 .. N => 7);
+   end Fill;
+ 
+   V : Arr (5 .. 8) := (others => 0);
+ 
+ begin
+   Fill (V, V'Length);
+   if V /= (V'First .. V'Last => 7) then
+     raise Program_Error;
+   end if;
+ end;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/gnat.dg/opt110.adb gcc-17-20260830/gcc/testsuite/gnat.dg/opt110.adb
*** gcc-17-20260823/gcc/testsuite/gnat.dg/opt110.adb	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/gcc/testsuite/gnat.dg/opt110.adb	Sun Aug 30 22:32:14 2026
***************
*** 0 ****
--- 1,106 ----
+ -- { dg-do run }
+ -- { dg-options "-O" }
+ 
+ procedure Opt110 is
+ 
+   type REAL is new Long_Float;
+ 
+   R : REAL;
+ 
+   N : constant := 3;
+ 
+   C2, S2 : array ( 0..N) of REAL;
+   C, S   : array (-N..0) of REAL;
+ 
+   U, V : REAL;
+ 
+   procedure ADD (C1, S1, C2L, S2L :     REAL;
+                  CO, SO           : out REAL) is
+   begin
+     CO := C1*C2L - S1*S2L;
+     SO := S1*C2L + C1*S2L;
+   end ADD;
+ 
+   procedure TERM (I1, I    : Integer;
+                   DLC, DLS : REAL) is
+   begin
+     ADD (C2(I1), S2(I1), C(I), S(I), U, V);
+     R := R + DLC*U + DLS*V;
+   end TERM;
+ 
+   procedure PERT_1 is
+     COS_M : constant REAL := -0.810937203096633;
+     SIN_M : constant REAL := 0.585133192216790;
+   begin
+     C(-1) := COS_M;
+     S(-1) := -SIN_M;
+     ADD (C(-1), S(-1), C(-1), S(-1), C(-2), S(-2));
+     TERM (1, -1, 0.00,  0.00);
+     TERM (2, -1, 0.25, -0.09);
+   end PERT_1;
+ 
+   procedure PERT_2 is
+     COS_M : constant REAL := -0.977631621135276;
+     SIN_M : constant REAL := 0.210324542924530;
+   begin
+     C(-1) := COS_M;
+     S(-1) := -SIN_M;
+     for I in reverse -(N-1) .. -1 loop
+       ADD (C(I), S(I), C(-1), S(-1), C(I-1), S(I-1));
+     end loop;
+     TERM (1, 0, 2.37, 2793.23);
+   end PERT_2;
+ 
+   procedure PERT_3 is
+     COS_M : constant REAL := 0.682917440967473;
+     SIN_M : constant REAL := 0.730495563862258;
+   begin
+     C(-1) := COS_M;
+     S(-1) := -SIN_M;
+     for I in reverse -2 .. -1 loop
+       ADD (C(I), S(I), C(-1), S(-1), C(I-1), S(I-1));
+     end loop;
+     TERM (1, -3, -0.65, 1.02);
+     TERM (2, -2, -0.05, 0.04);
+     TERM (2, -3, -0.50, 0.45);
+   end PERT_3;
+ 
+   procedure PERT_4 is
+     COS_M : constant REAL := -0.238503621267387;
+     SIN_M : constant REAL := 0.971141607924582;
+   begin
+     C(-1) := COS_M;
+     S(-1) := -SIN_M;
+     for I in reverse -2 .. -1 loop
+       ADD (C(I), S(I), C(-1), S(-1), C(I-1), S(I-1));
+     end loop;
+     TERM (0, -1, -0.05,  1.56);
+     TERM (1, -1, -2.62,  1.40);
+     TERM (1, -2, -0.47, -0.08);
+     TERM (2, -2, -0.73, -0.51);
+     TERM (2, -3, -0.14, -0.10);
+     TERM (3, -3, -0.01,  0.04);
+   end PERT_4;
+ 
+   COS_M : constant REAL := 0.476541619435702;
+   SIN_M : constant REAL := 0.879151912325508;
+ 
+ begin
+   R := 0.0;
+   C(0) := 1.0;
+   S(0) := 0.0;
+   C2(0) := 1.0;
+   S2(0) := 0.0;
+   C2(1) := COS_M;
+   S2(1) := SIN_M;
+   for I in 2 .. N loop
+     ADD (C2(I-1), S2(I-1), C2(1), S2(1), C2(I), S2(I));
+   end loop;
+   PERT_1;
+   PERT_2;
+   PERT_3;
+   PERT_4;
+   if Integer(R) /= 2452 then
+     raise Program_Error;
+   end if;
+ end;
diff -Nrcpad gcc-17-20260823/gcc/testsuite/lib/target-supports.exp gcc-17-20260830/gcc/testsuite/lib/target-supports.exp
*** gcc-17-20260823/gcc/testsuite/lib/target-supports.exp	Sun Aug 23 22:32:18 2026
--- gcc-17-20260830/gcc/testsuite/lib/target-supports.exp	Sun Aug 30 22:32:14 2026
*************** proc check_effective_target_rv_float_abi
*** 2064,2069 ****
--- 2064,2083 ----
      }]
  }
  
+ # Return 1 if the compiler under test can work out the ISA of the machine
+ # it is running on, 0 otherwise.  This is only true of a native RISC-V
+ # Linux compiler; a cross compiler rejects -march=native outright.
+ # Cache the result.
+ 
+ proc check_effective_target_riscv_native_cpu_detect { } {
+     if { ![istarget riscv*-*-linux*] } {
+ 	return 0
+     }
+     return [check_no_compiler_messages riscv_native_cpu_detect object {
+ 	int dummy;
+     } "-march=native"]
+ }
+ 
  # Return 1 if the target arch supports the atomic extension, 0 otherwise.
  # Cache the result.
  
*************** proc check_effective_target_aarch64_tiny
*** 13063,13068 ****
--- 13077,13099 ----
      }
  }
  
+ # True if the compiler will emit tiny code model when provided with the
+ # -mcmodel=tiny compiler switch.
+ 
+ proc check_effective_target_aarch64_mcmodel_tiny { } {
+     if { [istarget aarch64*-*-*] } {
+ 	return [check_no_compiler_messages aarch64_mcmodel_tiny object {
+ 	    #ifdef __AARCH64_CMODEL_TINY__
+ 	    int dummy;
+ 	    #else
+ 	    #error target not AArch64 tiny code model
+ 	    #endif
+ 	} "-mcmodel=tiny"]
+     } else {
+ 	return 0
+     }
+ }
+ 
  # Return 1 if Gas supports AEABI build attributes on AArch64 target
  proc check_effective_target_aarch64_gas_has_build_attributes { } {
      if { ![istarget aarch64*-*-*] } {
*************** proc check_effective_target_aarch64_larg
*** 13184,13189 ****
--- 13215,13237 ----
      } else {
  	return 0
      }
+ }
+ 
+ # True if the compiler will emit large code model when provided with the
+ # -mcmodel=large compiler switch.
+ 
+ proc check_effective_target_aarch64_mcmodel_large { } {
+     if { [istarget aarch64*-*-*] } {
+ 	return [check_no_compiler_messages aarch64_mcmodel_large object {
+ 	    #ifdef __AARCH64_CMODEL_LARGE__
+ 	    int dummy;
+ 	    #else
+ 	    #error target not AArch64 large code model
+ 	    #endif
+ 	} "-mcmodel=large"]
+     } else {
+ 	return 0
+     }
  }
  
  # Return 1 if the assembler accepts the aarch64 .variant_pcs directive.
diff -Nrcpad gcc-17-20260823/gcc/tree-dfa.cc gcc-17-20260830/gcc/tree-dfa.cc
*** gcc-17-20260823/gcc/tree-dfa.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-dfa.cc	Sun Aug 30 22:32:15 2026
*************** get_ref_base_and_extent (tree exp, poly_
*** 530,559 ****
  		   index.  */
  		seen_variable_array_ref = true;
  
! 		int_range_max vr;
! 		range_query *query;
! 		query = get_range_query (cfun);
  
  		if (TREE_CODE (index) == SSA_NAME
  		    && (low_bound = array_ref_low_bound (exp),
! 			poly_int_tree_p (low_bound))
  		    && (unit_size = array_ref_element_size (exp),
  			TREE_CODE (unit_size) == INTEGER_CST)
  		    && query->range_of_expr (vr, index)
  		    && !vr.varying_p ()
  		    && !vr.undefined_p ())
  		  {
  		    wide_int min = vr.lower_bound ();
  		    wide_int max = vr.upper_bound ();
- 		    poly_offset_int lbound = wi::to_poly_offset (low_bound);
  		    /* Try to constrain maxsize with range information.  */
  		    offset_int omax
  		      = offset_int::from (max, TYPE_SIGN (TREE_TYPE (index)));
  		    if (wi::get_precision (max) <= ADDR_MAX_BITSIZE
! 			&& known_lt (lbound, omax))
  		      {
! 			poly_offset_int rmaxsize;
! 			rmaxsize = (omax - lbound + 1)
  			    * wi::to_offset (unit_size) << LOG2_BITS_PER_UNIT;
  			if (!known_size_p (maxsize)
  			    || known_lt (rmaxsize, maxsize))
--- 530,570 ----
  		   index.  */
  		seen_variable_array_ref = true;
  
! 		/* Try to constrain the access range by using the range of the
! 		   index expression when we know it.  Extra care must be taken
! 		   when the low bound of the array is not zero, because it may
! 		   be very large and the index expression may be unsigned and
! 		   wrap around; in this case, the correct range is that of the
! 		   difference between the index expression and the low bound,
! 		   see get_inner_reference for the model computation.  */
! 		range_query *query = get_range_query (cfun);
! 		range_op_handler minus_op (MINUS_EXPR);
! 		int_range_max vr_idx, vr_lb, vr;
  
  		if (TREE_CODE (index) == SSA_NAME
  		    && (low_bound = array_ref_low_bound (exp),
! 			TREE_CODE (low_bound) == INTEGER_CST)
  		    && (unit_size = array_ref_element_size (exp),
  			TREE_CODE (unit_size) == INTEGER_CST)
  		    && query->range_of_expr (vr, index)
+ 		    && (integer_zerop (low_bound)
+ 			|| ((vr_idx = vr,
+ 			     query->range_of_expr (vr_lb, low_bound))
+ 			    && minus_op.fold_range (vr, TREE_TYPE (index),
+ 						    vr_idx, vr_lb)))
  		    && !vr.varying_p ()
  		    && !vr.undefined_p ())
  		  {
  		    wide_int min = vr.lower_bound ();
  		    wide_int max = vr.upper_bound ();
  		    /* Try to constrain maxsize with range information.  */
  		    offset_int omax
  		      = offset_int::from (max, TYPE_SIGN (TREE_TYPE (index)));
  		    if (wi::get_precision (max) <= ADDR_MAX_BITSIZE
! 			&& omax >= 0)
  		      {
! 			offset_int rmaxsize
! 			  = (omax + 1)
  			    * wi::to_offset (unit_size) << LOG2_BITS_PER_UNIT;
  			if (!known_size_p (maxsize)
  			    || known_lt (rmaxsize, maxsize))
*************** get_ref_base_and_extent (tree exp, poly_
*** 569,579 ****
  		    offset_int omin
  		      = offset_int::from (min, TYPE_SIGN (TREE_TYPE (index)));
  		    if (wi::get_precision (min) <= ADDR_MAX_BITSIZE
! 			&& known_le (lbound, omin))
  		      {
! 			poly_offset_int woffset
! 			  = wi::sext (omin - lbound,
! 				      TYPE_PRECISION (sizetype));
  			woffset *= wi::to_offset (unit_size);
  			woffset <<= LOG2_BITS_PER_UNIT;
  			bit_offset += woffset;
--- 580,589 ----
  		    offset_int omin
  		      = offset_int::from (min, TYPE_SIGN (TREE_TYPE (index)));
  		    if (wi::get_precision (min) <= ADDR_MAX_BITSIZE
! 			&& omin > 0)
  		      {
! 			offset_int woffset
! 			  = wi::sext (omin, TYPE_PRECISION (sizetype));
  			woffset *= wi::to_offset (unit_size);
  			woffset <<= LOG2_BITS_PER_UNIT;
  			bit_offset += woffset;
diff -Nrcpad gcc-17-20260823/gcc/tree-if-conv.cc gcc-17-20260830/gcc/tree-if-conv.cc
*** gcc-17-20260823/gcc/tree-if-conv.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-if-conv.cc	Sun Aug 30 22:32:15 2026
*************** is_cond_scalar_reduction (gimple *phi, g
*** 1985,1999 ****
      res_2 = res_13 + _ifc__1;
    Argument SWAP tells that arguments of conditional expression should be
    swapped.
!   If LOOP_VERSIONED is true if we assume that we versioned the loop for
!   vectorization.  In that case we can create a COND_OP.
    Returns rhs of resulting PHI assignment.  */
  
  static tree
  convert_scalar_cond_reduction (gimple *reduc, gimple_stmt_iterator *gsi,
  			       tree cond, tree op0, tree op1, bool swap,
! 			       bool has_nop, gimple* nop_reduc,
! 			       bool loop_versioned)
  {
    gimple_stmt_iterator stmt_it;
    gimple *new_assign;
--- 1985,1998 ----
      res_2 = res_13 + _ifc__1;
    Argument SWAP tells that arguments of conditional expression should be
    swapped.
!   We can assume that we versioned the loop for vectorization, so can
!   create a COND_OP.
    Returns rhs of resulting PHI assignment.  */
  
  static tree
  convert_scalar_cond_reduction (gimple *reduc, gimple_stmt_iterator *gsi,
  			       tree cond, tree op0, tree op1, bool swap,
! 			       bool has_nop, gimple* nop_reduc)
  {
    gimple_stmt_iterator stmt_it;
    gimple *new_assign;
*************** convert_scalar_cond_reduction (gimple *r
*** 2017,2023 ****
       The COND_OP will have a neutral_op else value.  */
    internal_fn ifn;
    ifn = get_conditional_internal_fn (reduction_op);
!   if (loop_versioned && ifn != IFN_LAST
        && vectorized_internal_fn_supported_p (ifn, TREE_TYPE (lhs))
        && !VECTOR_TYPE_P (TREE_TYPE (lhs))
        && !swap)
--- 2016,2022 ----
       The COND_OP will have a neutral_op else value.  */
    internal_fn ifn;
    ifn = get_conditional_internal_fn (reduction_op);
!   if (ifn != IFN_LAST
        && vectorized_internal_fn_supported_p (ifn, TREE_TYPE (lhs))
        && !VECTOR_TYPE_P (TREE_TYPE (lhs))
        && !swap)
*************** cmp_arg_entry (const void *p1, const voi
*** 2405,2417 ****
     The generated code is inserted at GSI that points to the top of
     basic block's statement list.
     If PHI node has more than two arguments a chain of conditional
!    expression is produced.
!    LOOP_VERSIONED should be true if we know that the loop was versioned for
!    vectorization. */
  
  
  static void
! predicate_scalar_phi (gphi *phi, gimple_stmt_iterator *gsi, bool loop_versioned)
  {
    gimple *new_stmt = NULL, *reduc, *nop_reduc;
    tree rhs, res, arg0, arg1, op0, op1, scev;
--- 2404,2414 ----
     The generated code is inserted at GSI that points to the top of
     basic block's statement list.
     If PHI node has more than two arguments a chain of conditional
!    expression is produced.  */
  
  
  static void
! predicate_scalar_phi (gphi *phi, gimple_stmt_iterator *gsi)
  {
    gimple *new_stmt = NULL, *reduc, *nop_reduc;
    tree rhs, res, arg0, arg1, op0, op1, scev;
*************** predicate_scalar_phi (gphi *phi, gimple_
*** 2496,2503 ****
  	  /* Convert reduction stmt into vectorizable form.  */
  	  rhs = convert_scalar_cond_reduction (reduc, gsi, cond, op0, op1,
  					       true_bb != gimple_bb (reduc),
! 					       has_nop, nop_reduc,
! 					       loop_versioned);
  	  redundant_ssa_names.safe_push (std::make_pair (res, rhs));
  	}
        else
--- 2493,2499 ----
  	  /* Convert reduction stmt into vectorizable form.  */
  	  rhs = convert_scalar_cond_reduction (reduc, gsi, cond, op0, op1,
  					       true_bb != gimple_bb (reduc),
! 					       has_nop, nop_reduc);
  	  redundant_ssa_names.safe_push (std::make_pair (res, rhs));
  	}
        else
*************** predicate_scalar_phi (gphi *phi, gimple_
*** 2595,2602 ****
  	{
  	  /* Convert reduction stmt into vectorizable form.  */
  	  rhs = convert_scalar_cond_reduction (reduc, gsi, cond, op0, op1,
! 					       swap, has_nop, nop_reduc,
! 					       loop_versioned);
  	  redundant_ssa_names.safe_push (std::make_pair (res, rhs));
  	}
        new_stmt = gimple_build_assign (res, rhs);
--- 2591,2597 ----
  	{
  	  /* Convert reduction stmt into vectorizable form.  */
  	  rhs = convert_scalar_cond_reduction (reduc, gsi, cond, op0, op1,
! 					       swap, has_nop, nop_reduc);
  	  redundant_ssa_names.safe_push (std::make_pair (res, rhs));
  	}
        new_stmt = gimple_build_assign (res, rhs);
*************** predicate_scalar_phi (gphi *phi, gimple_
*** 2619,2630 ****
  }
  
  /* Replaces in LOOP all the scalar phi nodes other than those in the
!    LOOP->header block with conditional modify expressions.
!    LOOP_VERSIONED should be true if we know that the loop was versioned for
!    vectorization. */
  
  static void
! predicate_all_scalar_phis (class loop *loop, bool loop_versioned)
  {
    basic_block bb;
    unsigned int orig_loop_num_nodes = loop->num_nodes;
--- 2614,2623 ----
  }
  
  /* Replaces in LOOP all the scalar phi nodes other than those in the
!    LOOP->header block with conditional modify expressions.  */
  
  static void
! predicate_all_scalar_phis (class loop *loop)
  {
    basic_block bb;
    unsigned int orig_loop_num_nodes = loop->num_nodes;
*************** predicate_all_scalar_phis (class loop *l
*** 2652,2658 ****
  	    gsi_next (&phi_gsi);
  	  else
  	    {
! 	      predicate_scalar_phi (phi, &gsi, loop_versioned);
  	      remove_phi_node (&phi_gsi, false);
  	    }
  	}
--- 2645,2651 ----
  	    gsi_next (&phi_gsi);
  	  else
  	    {
! 	      predicate_scalar_phi (phi, &gsi);
  	      remove_phi_node (&phi_gsi, false);
  	    }
  	}
*************** remove_conditions_and_labels (loop_p loo
*** 3227,3238 ****
  }
  
  /* Combine all the basic blocks from LOOP into one or two super basic
!    blocks.  Replace PHI nodes with conditional modify expressions.
!    LOOP_VERSIONED should be true if we know that the loop was versioned for
!    vectorization. */
  
  static void
! combine_blocks (class loop *loop, bool loop_versioned)
  {
    basic_block bb, exit_bb, merge_target_bb;
    unsigned int orig_loop_num_nodes = loop->num_nodes;
--- 3220,3229 ----
  }
  
  /* Combine all the basic blocks from LOOP into one or two super basic
!    blocks.  Replace PHI nodes with conditional modify expressions.  */
  
  static void
! combine_blocks (class loop *loop)
  {
    basic_block bb, exit_bb, merge_target_bb;
    unsigned int orig_loop_num_nodes = loop->num_nodes;
*************** combine_blocks (class loop *loop, bool l
*** 3263,3269 ****
  
    remove_conditions_and_labels (loop);
    insert_gimplified_predicates (loop);
!   predicate_all_scalar_phis (loop, loop_versioned);
  
    if (need_to_predicate || need_to_rewrite_undefined)
      predicate_statements (loop);
--- 3254,3260 ----
  
    remove_conditions_and_labels (loop);
    insert_gimplified_predicates (loop);
!   predicate_all_scalar_phis (loop);
  
    if (need_to_predicate || need_to_rewrite_undefined)
      predicate_statements (loop);
*************** tree_if_conversion (class loop *loop, ve
*** 4084,4090 ****
    bitmap exit_bbs;
    edge pe;
    auto_vec<data_reference_p, 10> refs;
!   bool loop_versioned;
  
   again:
    rloop = NULL;
--- 4075,4081 ----
    bitmap exit_bbs;
    edge pe;
    auto_vec<data_reference_p, 10> refs;
!   class loop *vloop, *nloop;
  
   again:
    rloop = NULL;
*************** tree_if_conversion (class loop *loop, ve
*** 4094,4100 ****
    need_to_predicate = false;
    need_to_rewrite_undefined = false;
    any_complicated_phi = false;
-   loop_versioned = false;
  
    /* Apply more aggressive if-conversion when loop or its outer loop were
       marked with simd pragma.  When that's the case, we try to if-convert
--- 4085,4090 ----
*************** tree_if_conversion (class loop *loop, ve
*** 4139,4156 ****
  	  if (!if_convertible_loop_p (loop, &refs)
  	      || !dbg_cnt (if_conversion_tree))
  	    goto cleanup;
- 
- 	  if ((need_to_predicate || any_complicated_phi)
- 	      && ((!flag_tree_loop_vectorize && !loop->force_vectorize)
- 		  || loop->dont_vectorize))
- 	    goto cleanup;
  	}
      }
  
!   if ((flag_tree_loop_vectorize || loop->force_vectorize)
!       && !loop->dont_vectorize)
!     need_to_lower_bitfields = bitfields_to_lower_p (loop, reads_to_lower,
! 						    writes_to_lower);
  
    if (!need_to_ifcvt && !need_to_lower_bitfields)
      goto cleanup;
--- 4129,4139 ----
  	  if (!if_convertible_loop_p (loop, &refs)
  	      || !dbg_cnt (if_conversion_tree))
  	    goto cleanup;
  	}
      }
  
!   need_to_lower_bitfields = bitfields_to_lower_p (loop, reads_to_lower,
! 						  writes_to_lower);
  
    if (!need_to_ifcvt && !need_to_lower_bitfields)
      goto cleanup;
*************** tree_if_conversion (class loop *loop, ve
*** 4158,4185 ****
    /* The edge to insert invariant stmts on.  */
    pe = loop_preheader_edge (loop);
  
!   /* Since we have no cost model, always version loops unless the user
!      specified -ftree-loop-if-convert or unless versioning is required.
       Either version this loop, or if the pattern is right for outer-loop
       vectorization, version the outer loop.  In the latter case we will
       still if-convert the original inner loop.  */
!   if (need_to_lower_bitfields
!       || need_to_predicate
!       || any_complicated_phi
!       || flag_tree_loop_if_convert != 1)
!     {
!       class loop *vloop
! 	= (versionable_outer_loop_p (loop_outer (loop))
  	   ? loop_outer (loop) : loop);
!       class loop *nloop = version_loop_for_if_conversion (vloop, preds);
!       if (nloop == NULL)
! 	goto cleanup;
!       if (vloop != loop)
! 	{
! 	  /* If versionable_outer_loop_p decided to version the
! 	     outer loop, version also the inner loop of the non-vectorized
! 	     loop copy.  So we transform:
! 	      loop1
  		loop2
  	     into:
  	      if (LOOP_VECTORIZED (1, 3))
--- 4141,4161 ----
    /* The edge to insert invariant stmts on.  */
    pe = loop_preheader_edge (loop);
  
!   /* Since we have no cost model, always version loops.
       Either version this loop, or if the pattern is right for outer-loop
       vectorization, version the outer loop.  In the latter case we will
       still if-convert the original inner loop.  */
!   vloop = (versionable_outer_loop_p (loop_outer (loop))
  	   ? loop_outer (loop) : loop);
!   nloop = version_loop_for_if_conversion (vloop, preds);
!   if (nloop == NULL)
!     goto cleanup;
!   if (vloop != loop)
!     {
!       /* If versionable_outer_loop_p decided to version the
! 	 outer loop, version also the inner loop of the non-vectorized
! 	 loop copy.  So we transform:
! 	     loop1
  		loop2
  	     into:
  	      if (LOOP_VECTORIZED (1, 3))
*************** tree_if_conversion (class loop *loop, ve
*** 4193,4210 ****
  		    loop4 (copy of loop2)
  		  else
  		    loop5 (copy of loop4)  */
! 	  gcc_assert (nloop->inner && nloop->inner->next == NULL);
! 	  rloop = nloop->inner;
! 	}
!       else
! 	/* If we versioned loop then make sure to insert invariant
! 	   stmts before the .LOOP_VECTORIZED check since the vectorizer
! 	   will re-use that for things like runtime alias versioning
! 	   whose condition can end up using those invariants.  */
! 	pe = single_pred_edge (gimple_bb (preds->last ()));
! 
!       loop_versioned = true;
      }
  
    if (need_to_lower_bitfields)
      {
--- 4169,4183 ----
  		    loop4 (copy of loop2)
  		  else
  		    loop5 (copy of loop4)  */
!       gcc_assert (nloop->inner && nloop->inner->next == NULL);
!       rloop = nloop->inner;
      }
+   else
+     /* If we versioned loop then make sure to insert invariant
+        stmts before the .LOOP_VECTORIZED check since the vectorizer
+        will re-use that for things like runtime alias versioning
+        whose condition can end up using those invariants.  */
+     pe = single_pred_edge (gimple_bb (preds->last ()));
  
    if (need_to_lower_bitfields)
      {
*************** tree_if_conversion (class loop *loop, ve
*** 4236,4242 ****
        /* Now all statements are if-convertible.  Combine all the basic
  	 blocks into one huge basic block doing the if-conversion
  	 on-the-fly.  */
!       combine_blocks (loop, loop_versioned);
      }
  
    std::pair <tree, tree> *name_pair;
--- 4209,4215 ----
        /* Now all statements are if-convertible.  Combine all the basic
  	 blocks into one huge basic block doing the if-conversion
  	 on-the-fly.  */
!       combine_blocks (loop);
      }
  
    std::pair <tree, tree> *name_pair;
*************** public:
*** 4327,4335 ****
  bool
  pass_if_conversion::gate (function *fun)
  {
!   return (((flag_tree_loop_vectorize || fun->has_force_vectorize_loops)
! 	   && flag_tree_loop_if_convert != 0)
! 	  || flag_tree_loop_if_convert == 1);
  }
  
  unsigned int
--- 4300,4306 ----
  bool
  pass_if_conversion::gate (function *fun)
  {
!   return flag_tree_loop_vectorize || fun->has_force_vectorize_loops;
  }
  
  unsigned int
*************** pass_if_conversion::execute (function *f
*** 4342,4350 ****
  
    auto_vec<gimple *> preds;
    for (auto loop : loops_list (cfun, 0))
!     if (flag_tree_loop_if_convert == 1
! 	|| ((flag_tree_loop_vectorize || loop->force_vectorize)
! 	    && !loop->dont_vectorize))
        todo |= tree_if_conversion (loop, &preds);
  
    if (todo)
--- 4313,4320 ----
  
    auto_vec<gimple *> preds;
    for (auto loop : loops_list (cfun, 0))
!     if ((flag_tree_loop_vectorize || loop->force_vectorize)
! 	&& !loop->dont_vectorize)
        todo |= tree_if_conversion (loop, &preds);
  
    if (todo)
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-loop-ivopts.cc gcc-17-20260830/gcc/tree-ssa-loop-ivopts.cc
*** gcc-17-20260823/gcc/tree-ssa-loop-ivopts.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-loop-ivopts.cc	Sun Aug 30 22:32:15 2026
*************** ivopts_estimate_reg_pressure (struct ivo
*** 6093,6119 ****
      available_regs = available_regs - target_clobbered_regs;
  
    /* If we have enough registers.  */
!   if (regs_needed + target_res_regs < available_regs)
      cost = 0;
-   /* If close to running out of registers, try to preserve them.  */
-   else if (regs_needed <= available_regs)
-     cost = target_reg_cost [speed] * regs_needed;
    /* If we run out of available registers but the number of candidates
!      does not, we penalize extra registers using target_spill_cost.  */
    else if (n_cands <= available_regs)
!     cost = target_reg_cost [speed] * available_regs
! 	   + target_spill_cost [speed] * (regs_needed - available_regs);
!   /* If the number of candidates runs out available registers, we penalize
!      extra candidate registers using target_spill_cost * 2.  Because it is
!      more expensive to spill induction variable than invariant.  */
    else
!     cost = target_reg_cost [speed] * available_regs
! 	   + target_spill_cost [speed] * (n_cands - available_regs) * 2
! 	   + target_spill_cost [speed] * (regs_needed - n_cands);
  
!   /* Finally, add the number of candidates, so that we prefer eliminating
!      induction variables if possible.  */
!   return cost + n_cands;
  }
  
  /* For each size of the induction variable set determine the penalty.  */
--- 6093,6114 ----
      available_regs = available_regs - target_clobbered_regs;
  
    /* If we have enough registers.  */
!   if (regs_needed <= available_regs)
      cost = 0;
    /* If we run out of available registers but the number of candidates
!      does not, we penalize extra registers using target_spill_cost.
!      As we tend to spill invariants here, only take loading the
!      invariant into account, because the invariant won't change for the
!      duration of the loop and storing it every iteration is unnecessary. */
    else if (n_cands <= available_regs)
!     cost = target_spill_cost [speed] * (regs_needed - available_regs) / 2;
!   /* If both IV cands and invariants spill, calculate additional cost for
!      having to store spilled candidates. */
    else
!     cost = (target_spill_cost [speed] * (regs_needed - available_regs) / 2
! 	    + target_spill_cost[speed] * (n_cands - available_regs) / 2);
  
!   return cost;
  }
  
  /* For each size of the induction variable set determine the penalty.  */
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-loop-unswitch.cc gcc-17-20260830/gcc/tree-ssa-loop-unswitch.cc
*** gcc-17-20260823/gcc/tree-ssa-loop-unswitch.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-loop-unswitch.cc	Sun Aug 30 22:32:15 2026
*************** along with GCC; see the file COPYING3.
*** 41,46 ****
--- 41,47 ----
  #include "gimple-range.h"
  #include "dbgcnt.h"
  #include "cfganal.h"
+ #include "tree-cfgcleanup.h"
  
  /* This file implements the loop unswitching, i.e. transformation of loops like
  
*************** tree_ssa_unswitch_loops (function *fun)
*** 452,458 ****
      clean_up_after_unswitching (ignored_edge_flag);
  
    if (changed_unswitch || changed_hoist)
!     return TODO_cleanup_cfg;
  
    return 0;
  }
--- 453,462 ----
      clean_up_after_unswitching (ignored_edge_flag);
  
    if (changed_unswitch || changed_hoist)
!     cleanup_tree_cfg ();
! 
!   if (changed_unswitch)
!     return loop_invariant_motion_in_fun (cfun, false);
  
    return 0;
  }
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-math-opts.cc gcc-17-20260830/gcc/tree-ssa-math-opts.cc
*** gcc-17-20260823/gcc/tree-ssa-math-opts.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-math-opts.cc	Sun Aug 30 22:32:15 2026
*************** convert_plusminus_to_widen (gimple_stmt_
*** 2956,2961 ****
--- 2956,2963 ----
        && (rhs1_code == MULT_EXPR || rhs1_code == WIDEN_MULT_EXPR))
      {
        if (!has_single_use (rhs1)
+ 	  || (conv1_stmt
+ 	      && !has_single_use (gimple_assign_lhs (conv1_stmt)))
  	  || gimple_bb (rhs1_stmt) != gimple_bb (stmt)
  	  || !is_widening_mult_p (rhs1_stmt, &type1, &mult_rhs1,
  				  &type2, &mult_rhs2))
*************** convert_plusminus_to_widen (gimple_stmt_
*** 2966,2971 ****
--- 2968,2975 ----
    else if (rhs2_code == MULT_EXPR || rhs2_code == WIDEN_MULT_EXPR)
      {
        if (!has_single_use (rhs2)
+ 	  || (conv2_stmt
+ 	      && !has_single_use (gimple_assign_lhs (conv2_stmt)))
  	  || gimple_bb (rhs2_stmt) != gimple_bb (stmt)
  	  || !is_widening_mult_p (rhs2_stmt, &type1, &mult_rhs1,
  				  &type2, &mult_rhs2))
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-operands.cc gcc-17-20260830/gcc/tree-ssa-operands.cc
*** gcc-17-20260823/gcc/tree-ssa-operands.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-operands.cc	Sun Aug 30 22:32:15 2026
*************** operands_scanner::verify_ssa_operands ()
*** 1026,1031 ****
--- 1026,1032 ----
    unsigned i;
    tree def;
    bool volatile_p = gimple_has_volatile_ops (stmt);
+   gcc_assert (!cfun->gimple_df->ssa_renaming_needed);
  
    /* build_ssa_operands w/o finalizing them.  */
    gimple_set_has_volatile_ops (stmt, false);
*************** operands_scanner::verify_ssa_operands ()
*** 1101,1106 ****
--- 1102,1113 ----
        return true;
      }
  
+   if (cfun->gimple_df->ssa_renaming_needed)
+     {
+       error ("statement contains unrenamed symbols");
+       return true;
+     }
+ 
    cleanup_build_arrays ();
    return false;
  }
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-phiopt.cc gcc-17-20260830/gcc/tree-ssa-phiopt.cc
*** gcc-17-20260823/gcc/tree-ssa-phiopt.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-phiopt.cc	Sun Aug 30 22:32:15 2026
*************** along with GCC; see the file COPYING3.
*** 55,60 ****
--- 55,61 ----
  #include "tree-ssa-loop-niter.h"
  #include "gimple-predict.h"
  #include "alias.h"
+ #include "tree-ssa-threadedge.h"
  
  /* Return the singleton PHI in the SEQ of PHIs for edges E0 and E1. */
  
*************** cond_if_else_store_replacement (basic_bl
*** 3943,3953 ****
    while (cond_if_else_store_replacement_limited (then_bb, else_bb, join_bb))
      ;
  
!   /* If either vectorization or if-conversion is disabled then do
!      not sink any stores.  */
    if (param_max_stores_to_sink == 0
!       || (!flag_tree_loop_vectorize && !flag_tree_slp_vectorize)
!       || !flag_tree_loop_if_convert)
      return false;
  
    /* Find data references.  */
--- 3944,3952 ----
    while (cond_if_else_store_replacement_limited (then_bb, else_bb, join_bb))
      ;
  
!   /* If vectorization is disabled then do not sink any stores.  */
    if (param_max_stores_to_sink == 0
!       || (!flag_tree_loop_vectorize && !flag_tree_slp_vectorize))
      return false;
  
    /* Find data references.  */
*************** execute_over_cond_phis (func_type func)
*** 4871,4876 ****
--- 4870,4969 ----
  
     where left and right are typically adjacent pointers in a tree structure.  */
  
+ /* Replicate the join block at E's destination into E's source.  The copy's
+    PHIs degenerate to their argument on E, so the copied conditional tests the
+    predecessor's own value.  The net effect after cleanups, for edge (3, 5)
+    would be:
+ 
+      <bb 3>:				<bb 3>:
+      t_9 = a < b;			t_9 = a < b;
+      goto <bb 5>;			if (t_9 != 0)
+ 
+      <bb 4>:			->	<bb 4>:
+      t_6 = c < d;			t_6 = c < d;
+      goto <bb 5>;			goto <bb 5>;
+ 
+      <bb 5>:				<bb 5>:
+      # t_1 = PHI <t_9(3), t_6(4)>	# t_1 = PHI <t_6(4)>
+      if (t_1 != 0)			if (t_1 != 0)
+ 
+    Return TRUE if the replication was performed.  */
+ 
+ static bool
+ replicate_cond_into_pred (edge e)
+ {
+   basic_block bb = e->dest;
+ 
+   if (!can_duplicate_block_on_edge_p (e))
+     return false;
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     fprintf (dump_file,
+ 	     "replicating conditional in bb%d into predecessor bb%d\n",
+ 	     bb->index, e->src->index);
+ 
+   basic_block copy = duplicate_block (bb, e, e->src);
+   flush_pending_stmts (e);
+   add_phi_args_after_copy (&copy, 1, NULL);
+   return true;
+ }
+ 
+ /* Replicate conditionals over a PHI of comparisons into the
+    qualifying predecessors of every join block in the function, so
+    each arm branches directly on its own comparison instead of merging
+    into a boolean that is tested again:
+ 
+      <bb 3>:			<bb 3>:
+      t_9 = a < b;		t_9 = a < b;
+      goto <bb 5>;		if (t_9 != 0)
+ 
+      <bb 4>:		->	<bb 4>:
+      t_6 = c < d;		t_6 = c < d;
+      goto <bb 5>;		if (t_6 != 0)
+ 
+      <bb 5>:
+      # t_1 = PHI <t_9(3), t_6(4)>
+      if (t_1 != 0)
+ */
+ 
+ static bool
+ replicate_conds_over_phis (void)
+ {
+   bool cfgchanged = false;
+   basic_block bb;
+ 
+   initialize_original_copy_tables ();
+   FOR_EACH_BB_FN (bb, cfun)
+     {
+       gcond *cond;
+       gphi *phi;
+       /* Never duplicate loop headers.  */
+       if (bb->loop_father->header == bb
+ 	  || EDGE_COUNT (bb->preds) < 2
+ 	  || !cond_on_phi_p (bb, &cond, &phi))
+ 	continue;
+ 
+       edge e;
+       edge_iterator ei = ei_start (bb->preds);
+       while ((e = ei_safe_edge (ei)))
+ 	{
+ 	  if (phi_arg_from_cmp_p (phi, e)
+ 	      && replicate_cond_into_pred (e))
+ 	    cfgchanged = true;
+ 	  else
+ 	    ei_next (&ei);
+ 	}
+     }
+   free_original_copy_tables ();
+ 
+   /* Removing an entry of an irreducible region can make it reducible, creating
+      a new loop.  */
+   if (cfgchanged)
+     loops_state_set (LOOPS_NEED_FIXUP);
+ 
+   return cfgchanged;
+ }
+ 
  namespace {
  
  const pass_data pass_data_phiopt =
*************** pass_phiopt::execute (function *)
*** 5010,5015 ****
--- 5103,5114 ----
  
    execute_over_cond_phis (phiopt_exec);
  
+   if (replicate_conds_over_phis ())
+     {
+       free_dominance_info (CDI_DOMINATORS);
+       return TODO_cleanup_cfg | TODO_update_ssa;
+     }
+ 
    if (cfgchanged)
      return TODO_cleanup_cfg;
    return 0;
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-sccvn.cc gcc-17-20260830/gcc/tree-ssa-sccvn.cc
*** gcc-17-20260823/gcc/tree-ssa-sccvn.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-sccvn.cc	Sun Aug 30 22:32:15 2026
*************** vn_nary_build_or_lookup_1 (gimple_match_
*** 2571,2578 ****
        tree val = vn_lookup_simplify_result (res_op);
        /* ???  In weird cases we can end up with internal-fn calls,
  	 but this isn't expected so throw the result away.  See
! 	 PR123040 for an example.  */
!       if (!val && insert && res_op->code.is_tree_code ())
  	{
  	  gimple_seq stmts = NULL;
  	  result = maybe_push_res_to_seq (res_op, &stmts);
--- 2571,2582 ----
        tree val = vn_lookup_simplify_result (res_op);
        /* ???  In weird cases we can end up with internal-fn calls,
  	 but this isn't expected so throw the result away.  See
! 	 PR123040 for an example.  Likewise we can end up with
! 	 &MEM[ptr_1 + CST] which would be a vn_reference (PR127000).  */
!       if (!val
! 	  && insert
! 	  && res_op->code.is_tree_code ()
! 	  && (tree_code) res_op->code != ADDR_EXPR)
  	{
  	  gimple_seq stmts = NULL;
  	  result = maybe_push_res_to_seq (res_op, &stmts);
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-threadedge.cc gcc-17-20260830/gcc/tree-ssa-threadedge.cc
*** gcc-17-20260823/gcc/tree-ssa-threadedge.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-threadedge.cc	Sun Aug 30 22:32:15 2026
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,28 ----
  #include "system.h"
  #include "coretypes.h"
  #include "backend.h"
+ #include "cfghooks.h"
  #include "tree.h"
  #include "gimple.h"
  #include "predict.h"
*************** jump_threader::thread_through_normal_blo
*** 899,910 ****
  
     Return true if E is (P0,X) or (P1,X)  */
  
! bool
  edge_forwards_cmp_to_conditional_jump_through_empty_bb_p (edge e)
  {
-   /* See if there is only one stmt which is gcond.  */
    gcond *gs;
!   if (!(gs = safe_dyn_cast<gcond *> (last_and_only_stmt (e->dest))))
      return false;
  
    /* See if gcond's cond is "(phi !=/== 0/1)" in the basic block.  */
--- 900,929 ----
  
     Return true if E is (P0,X) or (P1,X)  */
  
! static bool
  edge_forwards_cmp_to_conditional_jump_through_empty_bb_p (edge e)
  {
    gcond *gs;
!   gphi *phi;
!   return (cond_on_phi_p (e->dest, &gs, &phi)
! 	  && phi_arg_from_cmp_p (phi, e));
! }
! 
! /* Return true if BB contains only a conditional jump on a PHI
!    defined in it, compared against 0 or 1:
! 
!      <bb 5>:
!      # t_1 = PHI <t_9(3), t_6(4)>
!      if (t_1 != 0)
! 
!    The conditional and the PHI are returned in *COND_OUT and
!    *PHI_OUT.  */
! 
! bool
! cond_on_phi_p (basic_block bb, gcond **cond_out, gphi **phi_out)
! {
!   gcond *gs;
!   if (!(gs = safe_dyn_cast<gcond *> (last_and_only_stmt (bb))))
      return false;
  
    /* See if gcond's cond is "(phi !=/== 0/1)" in the basic block.  */
*************** edge_forwards_cmp_to_conditional_jump_th
*** 916,925 ****
        || (!integer_onep (rhs) && !integer_zerop (rhs)))
      return false;
    gphi *phi = dyn_cast <gphi *> (SSA_NAME_DEF_STMT (cond));
!   if (phi == NULL || gimple_bb (phi) != e->dest)
      return false;
  
!   /* Check if phi's incoming value is CMP.  */
    gassign *def;
    tree value = PHI_ARG_DEF_FROM_EDGE (phi, e);
    if (TREE_CODE (value) != SSA_NAME
--- 935,962 ----
        || (!integer_onep (rhs) && !integer_zerop (rhs)))
      return false;
    gphi *phi = dyn_cast <gphi *> (SSA_NAME_DEF_STMT (cond));
!   if (phi == NULL || gimple_bb (phi) != bb)
      return false;
  
!   *cond_out = gs;
!   *phi_out = phi;
!   return true;
! }
! 
! /* Return true if PHI's incoming value on edge E is a single-use
!    comparison, possibly through a single-use conversion:
! 
!      <bb 3>:
!      t_9 = a < b;
!      goto <bb 5>;
! 
!      <bb 5>:
!      # t_1 = PHI <t_9(3), ...>
! */
! 
! bool
! phi_arg_from_cmp_p (gphi *phi, edge e)
! {
    gassign *def;
    tree value = PHI_ARG_DEF_FROM_EDGE (phi, e);
    if (TREE_CODE (value) != SSA_NAME
*************** jump_threader::thread_across_edge (edge
*** 1010,1021 ****
  
      /* If E->dest has abnormal outgoing edges, then there's no guarantee
         we can safely redirect any of the edges.  Just punt those cases.  */
!     FOR_EACH_EDGE (taken_edge, ei, e->dest->succs)
!       if (taken_edge->flags & EDGE_COMPLEX)
! 	{
! 	  m_state->pop ();
! 	  return;
! 	}
  
      /* Look at each successor of E->dest to see if we can thread through it.  */
      FOR_EACH_EDGE (taken_edge, ei, e->dest->succs)
--- 1047,1057 ----
  
      /* If E->dest has abnormal outgoing edges, then there's no guarantee
         we can safely redirect any of the edges.  Just punt those cases.  */
!     if (!can_duplicate_block_on_edge_p (e))
!       {
! 	m_state->pop ();
! 	return;
!       }
  
      /* Look at each successor of E->dest to see if we can thread through it.  */
      FOR_EACH_EDGE (taken_edge, ei, e->dest->succs)
diff -Nrcpad gcc-17-20260823/gcc/tree-ssa-threadedge.h gcc-17-20260830/gcc/tree-ssa-threadedge.h
*** gcc-17-20260823/gcc/tree-ssa-threadedge.h	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-ssa-threadedge.h	Sun Aug 30 22:32:15 2026
*************** private:
*** 118,123 ****
--- 118,125 ----
  
  extern void propagate_threaded_block_debug_into (basic_block, basic_block);
  extern bool single_succ_to_potentially_threadable_block (basic_block);
+ extern bool cond_on_phi_p (basic_block, gcond **, gphi **);
+ extern bool phi_arg_from_cmp_p (gphi *, edge);
  
  // ?? All this ssa_name_values stuff is the store of values for
  // avail_exprs_stack and const_and_copies, so it really belongs in the
diff -Nrcpad gcc-17-20260823/gcc/tree-vect-data-refs.cc gcc-17-20260830/gcc/tree-vect-data-refs.cc
*** gcc-17-20260823/gcc/tree-vect-data-refs.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-vect-data-refs.cc	Sun Aug 30 22:32:15 2026
*************** vect_lanes_optab_supported_p (const char
*** 111,246 ****
    return true;
  }
  
- /* Helper function to identify a simd clone call.  If this is a call to a
-    function with simd clones then return the corresponding cgraph_node,
-    otherwise return NULL.  */
- 
- static cgraph_node*
- simd_clone_call_p (gimple *stmt)
- {
-   gcall *call = dyn_cast <gcall *> (stmt);
-   if (!call)
-     return NULL;
- 
-   tree fndecl = NULL_TREE;
-   if (gimple_call_internal_p (call, IFN_MASK_CALL))
-     fndecl = TREE_OPERAND (gimple_call_arg (stmt, 0), 0);
-   else
-     fndecl = gimple_call_fndecl (stmt);
- 
-   if (fndecl == NULL_TREE)
-     return NULL;
- 
-   cgraph_node *node = cgraph_node::get (fndecl);
-   if (node && node->simd_clones != NULL)
-     return node;
- 
-   return NULL;
- }
- 
- 
- 
- /* Return the smallest scalar part of STMT_INFO.
-    This is used to determine the vectype of the stmt.  We generally set the
-    vectype according to the type of the result (lhs).  For stmts whose
-    result-type is different than the type of the arguments (e.g., demotion,
-    promotion), vectype will be reset appropriately (later).  Note that we have
-    to visit the smallest datatype in this function, because that determines the
-    VF.  If the smallest datatype in the loop is present only as the rhs of a
-    promotion operation - we'd miss it.
-    Such a case, where a variable of this datatype does not appear in the lhs
-    anywhere in the loop, can only occur if it's an invariant: e.g.:
-    'int_x = (int) short_inv', which we'd expect to have been optimized away by
-    invariant motion.  However, we cannot rely on invariant motion to always
-    take invariants out of the loop, and so in the case of promotion we also
-    have to check the rhs.
-    LHS_SIZE_UNIT and RHS_SIZE_UNIT contain the sizes of the corresponding
-    types.  */
- 
- tree
- vect_get_smallest_scalar_type (stmt_vec_info stmt_info, tree scalar_type)
- {
-   HOST_WIDE_INT lhs, rhs;
- 
-   /* During the analysis phase, this function is called on arbitrary
-      statements that might not have scalar results.  */
-   if (!tree_fits_uhwi_p (TYPE_SIZE_UNIT (scalar_type)))
-     return scalar_type;
- 
-   lhs = rhs = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (scalar_type));
- 
-   gassign *assign = dyn_cast <gassign *> (stmt_info->stmt);
-   if (assign)
-     {
-       scalar_type = TREE_TYPE (gimple_assign_lhs (assign));
-       if (gimple_assign_cast_p (assign)
- 	  || gimple_assign_rhs_code (assign) == DOT_PROD_EXPR
- 	  || gimple_assign_rhs_code (assign) == WIDEN_SUM_EXPR
- 	  || gimple_assign_rhs_code (assign) == SAD_EXPR
- 	  || gimple_assign_rhs_code (assign) == WIDEN_MULT_EXPR
- 	  || gimple_assign_rhs_code (assign) == WIDEN_MULT_PLUS_EXPR
- 	  || gimple_assign_rhs_code (assign) == WIDEN_MULT_MINUS_EXPR
- 	  || gimple_assign_rhs_code (assign) == WIDEN_LSHIFT_EXPR
- 	  || gimple_assign_rhs_code (assign) == FLOAT_EXPR)
- 	{
- 	  tree rhs_type = TREE_TYPE (gimple_assign_rhs1 (assign));
- 
- 	  rhs = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (rhs_type));
- 	  if (rhs < lhs)
- 	    scalar_type = rhs_type;
- 	}
-     }
-   else if (cgraph_node *node = simd_clone_call_p (stmt_info->stmt))
-     {
-       auto clone = node->simd_clones->simdclone;
-       for (unsigned int i = 0; i < clone->nargs; ++i)
- 	{
- 	  if (clone->args[i].arg_type == SIMD_CLONE_ARG_TYPE_VECTOR)
- 	    {
- 	      tree arg_scalar_type = TREE_TYPE (clone->args[i].vector_type);
- 	      rhs = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (arg_scalar_type));
- 	      if (rhs < lhs)
- 		{
- 		  scalar_type = arg_scalar_type;
- 		  lhs = rhs;
- 		}
- 	    }
- 	}
-     }
-   else if (gcall *call = dyn_cast <gcall *> (stmt_info->stmt))
-     {
-       unsigned int i = 0;
-       if (gimple_call_internal_p (call))
- 	{
- 	  internal_fn ifn = gimple_call_internal_fn (call);
- 	  if (internal_load_fn_p (ifn))
- 	    /* For loads the LHS type does the trick.  */
- 	    i = ~0U;
- 	  else if (internal_store_fn_p (ifn))
- 	    {
- 	      /* For stores use the type of the stored value.  */
- 	      i = internal_fn_stored_value_index (ifn);
- 	      scalar_type = TREE_TYPE (gimple_call_arg (call, i));
- 	      i = ~0U;
- 	    }
- 	  else if (internal_fn_mask_index (ifn) == 0)
- 	    i = 1;
- 	}
-       if (i < gimple_call_num_args (call))
- 	{
- 	  tree rhs_type = TREE_TYPE (gimple_call_arg (call, i));
- 	  if (tree_fits_uhwi_p (TYPE_SIZE_UNIT (rhs_type)))
- 	    {
- 	      rhs = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (rhs_type));
- 	      if (rhs < lhs)
- 		scalar_type = rhs_type;
- 	    }
- 	}
-     }
- 
-   return scalar_type;
- }
- 
  
  /* Insert DDR into LOOP_VINFO list of ddrs that may alias and need to be
     tested at run-time.  Return TRUE if DDR was successfully inserted.
--- 111,116 ----
*************** vect_analyze_data_refs (vec_info *vinfo,
*** 5484,5490 ****
  	  tree init_offset = fold_build2 (PLUS_EXPR, TREE_TYPE (offset),
  					  init, offset);
  	  tree init_addr = fold_build_pointer_plus (base, init_offset);
! 	  tree init_ref = build_fold_indirect_ref (init_addr);
  
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_NOTE, vect_location,
--- 5354,5361 ----
  	  tree init_offset = fold_build2 (PLUS_EXPR, TREE_TYPE (offset),
  					  init, offset);
  	  tree init_addr = fold_build_pointer_plus (base, init_offset);
! 	  tree init_ref = build2 (MEM_REF, TREE_TYPE (DR_REF (dr)),
! 				  init_addr, build_zero_cst (ptr_type_node));
  
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_NOTE, vect_location,
diff -Nrcpad gcc-17-20260823/gcc/tree-vect-loop.cc gcc-17-20260830/gcc/tree-vect-loop.cc
*** gcc-17-20260823/gcc/tree-vect-loop.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-vect-loop.cc	Sun Aug 30 22:32:15 2026
*************** build_vect_cond_expr (code_helper code,
*** 6700,6711 ****
     may be different from VECTYPE_IN, either in base type or vectype lanes,
     lane-reducing operation is the case.  This function check if it is possible,
     and how to perform partial vectorization on the operation in the context
!    of LOOP_VINFO.  */
  
! static void
  vect_reduction_update_partial_vector_usage (loop_vec_info loop_vinfo,
  					    vect_reduc_info reduc_info,
- 					    slp_tree slp_node,
  					    code_helper code, tree type,
  					    tree vectype_in)
  {
--- 6700,6711 ----
     may be different from VECTYPE_IN, either in base type or vectype lanes,
     lane-reducing operation is the case.  This function check if it is possible,
     and how to perform partial vectorization on the operation in the context
!    of LOOP_VINFO.  It returns whether partial vectors are possible.  The
!    caller is responsible to register the usage appropriately.  */
  
! static bool
  vect_reduction_update_partial_vector_usage (loop_vec_info loop_vinfo,
  					    vect_reduc_info reduc_info,
  					    code_helper code, tree type,
  					    tree vectype_in)
  {
*************** vect_reduction_update_partial_vector_usa
*** 6750,6767 ****
        LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
      }
    else
!     {
!       internal_fn mask_reduc_fn
! 			= get_masked_reduction_fn (reduc_fn, vectype_in);
!       vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo);
!       vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo);
!       unsigned nvectors = vect_get_num_copies (loop_vinfo, slp_node);
! 
!       if (mask_reduc_fn == IFN_MASK_LEN_FOLD_LEFT_PLUS)
! 	vect_record_loop_len (loop_vinfo, lens, nvectors, vectype_in, 1);
!       else
! 	vect_record_loop_mask (loop_vinfo, masks, nvectors, vectype_in, NULL);
!     }
  }
  
  /* Check if STMT_INFO is a lane-reducing operation that can be vectorized in
--- 6750,6757 ----
        LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
      }
    else
!     return true;
!   return false;
  }
  
  /* Check if STMT_INFO is a lane-reducing operation that can be vectorized in
*************** vectorizable_lane_reducing (loop_vec_inf
*** 6862,6870 ****
    tree vectype_in = SLP_TREE_VECTYPE (node_in);
    gcc_assert (vectype_in);
  
!   /* Compute number of effective vector statements for costing.  */
!   unsigned int ncopies_for_cost = vect_get_num_copies (loop_vinfo, node_in);
!   gcc_assert (ncopies_for_cost >= 1);
  
    if (vect_is_emulated_mixed_dot_prod (slp_node))
      {
--- 6852,6863 ----
    tree vectype_in = SLP_TREE_VECTYPE (node_in);
    gcc_assert (vectype_in);
  
!   /* Compute number of effective vector statements for costing from the
!      number of input lanes allow for excess lanes in the last input vector.  */
!   unsigned int ncopies_for_cost;
!   bool res = vect_get_num_copies_for_invariant (loop_vinfo, node_in,
! 						&ncopies_for_cost);
!   gcc_assert (res && ncopies_for_cost >= 1);
  
    if (vect_is_emulated_mixed_dot_prod (slp_node))
      {
*************** vectorizable_lane_reducing (loop_vec_inf
*** 6888,6896 ****
    if (LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
      {
        enum tree_code code = gimple_assign_rhs_code (stmt);
!       vect_reduction_update_partial_vector_usage (loop_vinfo, reduc_info,
! 						  node_in, code, type,
! 						  vectype_in);
      }
  
    /* Transform via vect_transform_reduction.  */
--- 6881,6901 ----
    if (LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
      {
        enum tree_code code = gimple_assign_rhs_code (stmt);
!       if (vect_reduction_update_partial_vector_usage (loop_vinfo, reduc_info,
! 						      code, type, vectype_in))
! 	{
! 	  internal_fn reduc_fn = VECT_REDUC_INFO_FN (reduc_info);
! 	  internal_fn mask_reduc_fn
! 	    = get_masked_reduction_fn (reduc_fn, vectype_in);
! 	  vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo);
! 	  vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo);
! 	  if (mask_reduc_fn == IFN_MASK_LEN_FOLD_LEFT_PLUS)
! 	    vect_record_loop_len (loop_vinfo, lens, ncopies_for_cost,
! 				  vectype_in, 1);
! 	  else
! 	    vect_record_loop_mask (loop_vinfo, masks, ncopies_for_cost,
! 				   vectype_in, NULL);
! 	}
      }
  
    /* Transform via vect_transform_reduction.  */
*************** vectorizable_reduction (loop_vec_info lo
*** 7855,7864 ****
    else
      {
        STMT_VINFO_DEF_TYPE (tem) = vect_reduction_def;
!       if (LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
! 	vect_reduction_update_partial_vector_usage (loop_vinfo, reduc_info,
! 						    slp_node, op.code, op.type,
! 						    vectype_in);
      }
    return true;
  }
--- 7860,7881 ----
    else
      {
        STMT_VINFO_DEF_TYPE (tem) = vect_reduction_def;
!       if (LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo)
! 	  && vect_reduction_update_partial_vector_usage (loop_vinfo, reduc_info,
! 							 op.code, op.type,
! 							 vectype_in))
! 	{
! 	  internal_fn reduc_fn = VECT_REDUC_INFO_FN (reduc_info);
! 	  internal_fn mask_reduc_fn
! 	    = get_masked_reduction_fn (reduc_fn, vectype_in);
! 	  vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo);
! 	  vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo);
! 	  if (mask_reduc_fn == IFN_MASK_LEN_FOLD_LEFT_PLUS)
! 	    vect_record_loop_len (loop_vinfo, lens, ncopies, vectype_in, 1);
! 	  else
! 	    vect_record_loop_mask (loop_vinfo, masks, ncopies,
! 				   vectype_in, NULL);
! 	}
      }
    return true;
  }
*************** vect_transform_reduction (loop_vec_info
*** 7956,7962 ****
  {
    tree vectype_out = SLP_TREE_VECTYPE (slp_node);
    class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
-   unsigned vec_num;
  
    vect_reduc_info reduc_info = info_for_reduction (loop_vinfo, slp_node);
  
--- 7973,7978 ----
*************** vect_transform_reduction (loop_vec_info
*** 7976,7986 ****
       assumption is not true: we use reduc_index to record the index of the
       reduction variable.  */
    int reduc_index = SLP_TREE_REDUC_IDX (slp_node);
!   tree vectype_in = SLP_TREE_VECTYPE (slp_node);
!   if (lane_reducing_op_p (op.code))
!     vectype_in = SLP_TREE_VECTYPE (SLP_TREE_CHILDREN (slp_node)[0]);
! 
!   vec_num = vect_get_num_copies (loop_vinfo, SLP_TREE_CHILDREN (slp_node)[0]);
  
    code_helper code = canonicalize_code (op.code, op.type);
    internal_fn cond_fn
--- 7992,8000 ----
       assumption is not true: we use reduc_index to record the index of the
       reduction variable.  */
    int reduc_index = SLP_TREE_REDUC_IDX (slp_node);
!   slp_tree node_in = SLP_TREE_CHILDREN (slp_node)[reduc_index == 0 ? 1 : 0];
!   tree vectype_in = SLP_TREE_VECTYPE (node_in);
!   unsigned vec_in_num = SLP_TREE_VEC_DEFS (node_in).length ();
  
    code_helper code = canonicalize_code (op.code, op.type);
    internal_fn cond_fn
*************** vect_transform_reduction (loop_vec_info
*** 8160,8203 ****
  
        tree reduc_vectype_in = vectype_in;
        gcc_assert (reduc_vectype_in);
- 
-       unsigned effec_reduc_ncopies
- 	= vect_get_num_copies (loop_vinfo, SLP_TREE_CHILDREN (slp_node)[0]);
- 
-       gcc_assert (effec_ncopies <= effec_reduc_ncopies);
- 
-       if (effec_ncopies < effec_reduc_ncopies)
- 	{
- 	  /* Find suitable def-use cycles to generate vectorized statements
- 	     into, and reorder operands based on the selection.  */
- 	  unsigned curr_pos = VECT_REDUC_INFO_RESULT_POS (reduc_info);
- 	  unsigned next_pos = (curr_pos + effec_ncopies) % effec_reduc_ncopies;
- 
- 	  gcc_assert (curr_pos < effec_reduc_ncopies);
- 	  VECT_REDUC_INFO_RESULT_POS (reduc_info) = next_pos;
- 
- 	  if (curr_pos)
- 	    {
- 	      unsigned count = effec_reduc_ncopies - effec_ncopies;
- 	      unsigned start = curr_pos - count;
- 
- 	      if ((int) start < 0)
- 		{
- 		  count = curr_pos;
- 		  start = 0;
- 		}
- 
- 	      for (unsigned i = 0; i < op.num_ops - 1; i++)
- 		{
- 		  for (unsigned j = effec_ncopies; j > start; j--)
- 		    {
- 		      unsigned k = j - 1;
- 		      std::swap (vec_oprnds[i][k], vec_oprnds[i][k + count]);
- 		      gcc_assert (!vec_oprnds[i][k]);
- 		    }
- 		}
- 	    }
- 	}
      }
  
    bool emulated_mixed_dot_prod = vect_is_emulated_mixed_dot_prod (slp_node);
--- 8174,8179 ----
*************** vect_transform_reduction (loop_vec_info
*** 8235,8241 ****
  	  gcc_assert (!lane_reducing);
  
  	  tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					  vec_num, vectype_in,
  					  mask_index++);
  	  gcall *call;
  	  if (code.is_internal_fn () && cond_fn_p)
--- 8211,8217 ----
  	  gcc_assert (!lane_reducing);
  
  	  tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					  vec_in_num, vectype_in,
  					  mask_index++);
  	  gcall *call;
  	  if (code.is_internal_fn () && cond_fn_p)
*************** vect_transform_reduction (loop_vec_info
*** 8265,8271 ****
  	  if (masked_loop_p && mask_by_cond_expr)
  	    {
  	      tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					      vec_num, vectype_in,
  					      mask_index++);
  	      build_vect_cond_expr (code, vop, mask, gsi);
  	    }
--- 8241,8247 ----
  	  if (masked_loop_p && mask_by_cond_expr)
  	    {
  	      tree mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
! 					      vec_in_num, vectype_in,
  					      mask_index++);
  	      build_vect_cond_expr (code, vop, mask, gsi);
  	    }
diff -Nrcpad gcc-17-20260823/gcc/tree-vect-slp-patterns.cc gcc-17-20260830/gcc/tree-vect-slp-patterns.cc
*** gcc-17-20260823/gcc/tree-vect-slp-patterns.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-vect-slp-patterns.cc	Sun Aug 30 22:32:15 2026
*************** class complex_pattern : public vect_patt
*** 483,497 ****
  {
    protected:
      auto_vec<slp_tree> m_workset;
      complex_pattern (slp_tree *node, vec<slp_tree> *m_ops, internal_fn ifn)
        : vect_pattern (node, m_ops, ifn)
      {
        this->m_workset.safe_push (*node);
      }
  
!   public:
!     void build (vec_info *) override;
  
      static internal_fn
      matches (complex_operation_t op, slp_tree_to_load_perm_map_t *, slp_tree *,
  	     vec<slp_tree> *);
--- 483,505 ----
  {
    protected:
      auto_vec<slp_tree> m_workset;
+     stmt_vec_info m_rep;
+ 
      complex_pattern (slp_tree *node, vec<slp_tree> *m_ops, internal_fn ifn)
        : vect_pattern (node, m_ops, ifn)
      {
+       /* ???  We should not have to guess here, analysis should have
+ 	 it and pass it as CTOR argument.  */
+       if (SLP_TREE_PERMUTE_P (*node))
+ 	m_rep = SLP_TREE_REPRESENTATIVE (SLP_TREE_CHILDREN (*node)[0]);
+       else
+ 	m_rep = SLP_TREE_REPRESENTATIVE (*node);
        this->m_workset.safe_push (*node);
      }
  
!     void build_common (vec_info *);
  
+   public:
      static internal_fn
      matches (complex_operation_t op, slp_tree_to_load_perm_map_t *, slp_tree *,
  	     vec<slp_tree> *);
*************** class complex_pattern : public vect_patt
*** 518,527 ****
  */
  
  void
! complex_pattern::build (vec_info *vinfo)
  {
-   stmt_vec_info stmt_info;
- 
    auto_vec<tree> args;
    args.create (this->m_num_args);
    args.quick_grow_cleared (this->m_num_args);
--- 526,533 ----
  */
  
  void
! complex_pattern::build_common (vec_info *vinfo)
  {
    auto_vec<tree> args;
    args.create (this->m_num_args);
    args.quick_grow_cleared (this->m_num_args);
*************** complex_pattern::build (vec_info *vinfo)
*** 534,541 ****
    FOR_EACH_VEC_ELT (this->m_workset, ix, node)
      {
        /* Calculate the location of the statement in NODE to replace.  */
!       stmt_info = SLP_TREE_SCALAR_STMTS (node)[0];
!       gimple* old_stmt = STMT_VINFO_STMT (stmt_info);
        tree lhs_old_stmt = gimple_get_lhs (old_stmt);
        tree type = TREE_TYPE (lhs_old_stmt);
  
--- 540,546 ----
    FOR_EACH_VEC_ELT (this->m_workset, ix, node)
      {
        /* Calculate the location of the statement in NODE to replace.  */
!       gimple* old_stmt = STMT_VINFO_STMT (m_rep);
        tree lhs_old_stmt = gimple_get_lhs (old_stmt);
        tree type = TREE_TYPE (lhs_old_stmt);
  
*************** complex_pattern::build (vec_info *vinfo)
*** 556,569 ****
  	 the nodes as such we need to manually update them.  Any changes will be
  	 undone if SLP is cancelled.  */
        call_stmt_info
! 	= vinfo->add_pattern_stmt (call_stmt, vect_orig_stmt (stmt_info));
  
        /* Make sure to mark the representative statement pure_slp and
  	 relevant and transfer reduction info. */
        STMT_VINFO_RELEVANT (call_stmt_info) = vect_used_in_scope;
        STMT_SLP_TYPE (call_stmt_info) = pure_slp;
  
!       gimple_set_bb (call_stmt, gimple_bb (stmt_info->stmt));
        STMT_VINFO_VECTYPE (call_stmt_info) = SLP_TREE_VECTYPE (node);
  
        /* Since we are replacing all the statements in the group with the same
--- 561,574 ----
  	 the nodes as such we need to manually update them.  Any changes will be
  	 undone if SLP is cancelled.  */
        call_stmt_info
! 	= vinfo->add_pattern_stmt (call_stmt, vect_orig_stmt (m_rep));
  
        /* Make sure to mark the representative statement pure_slp and
  	 relevant and transfer reduction info. */
        STMT_VINFO_RELEVANT (call_stmt_info) = vect_used_in_scope;
        STMT_SLP_TYPE (call_stmt_info) = pure_slp;
  
!       gimple_set_bb (call_stmt, gimple_bb (m_rep->stmt));
        STMT_VINFO_VECTYPE (call_stmt_info) = SLP_TREE_VECTYPE (node);
  
        /* Since we are replacing all the statements in the group with the same
*************** complex_add_pattern::build (vec_info *vi
*** 626,632 ****
    vect_free_slp_tree (this->m_ops[0]);
    vect_free_slp_tree (this->m_ops[1]);
  
!   complex_pattern::build (vinfo);
  }
  
  /* Pattern matcher for trying to match complex addition pattern in SLP tree.
--- 631,637 ----
    vect_free_slp_tree (this->m_ops[0]);
    vect_free_slp_tree (this->m_ops[1]);
  
!   build_common (vinfo);
  }
  
  /* Pattern matcher for trying to match complex addition pattern in SLP tree.
*************** complex_mul_pattern::build (vec_info *vi
*** 1243,1249 ****
    }
  
    /* And then rewrite the node itself.  */
!   complex_pattern::build (vinfo);
  }
  
  /*******************************************************************************
--- 1248,1254 ----
    }
  
    /* And then rewrite the node itself.  */
!   build_common (vinfo);
  }
  
  /*******************************************************************************
*************** complex_fms_pattern::build (vec_info *vi
*** 1500,1506 ****
    SLP_TREE_CHILDREN (*this->m_node).quick_push (this->m_ops[0]);
  
    /* And then rewrite the node itself.  */
!   complex_pattern::build (vinfo);
  }
  
  /*******************************************************************************
--- 1505,1511 ----
    SLP_TREE_CHILDREN (*this->m_node).quick_push (this->m_ops[0]);
  
    /* And then rewrite the node itself.  */
!   build_common (vinfo);
  }
  
  /*******************************************************************************
diff -Nrcpad gcc-17-20260823/gcc/tree-vect-slp.cc gcc-17-20260830/gcc/tree-vect-slp.cc
*** gcc-17-20260823/gcc/tree-vect-slp.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-vect-slp.cc	Sun Aug 30 22:32:15 2026
*************** compatible_calls_p (gcall *call1, gcall
*** 1097,1143 ****
    return true;
  }
  
- /* A subroutine of vect_build_slp_tree for checking VECTYPE, which is the
-    caller's attempt to find the vector type in STMT_INFO with the narrowest
-    element type.  Return true if VECTYPE is nonnull and if it is valid
-    for STMT_INFO.  GROUP_SIZE is as for vect_build_slp_tree.  */
- 
- static bool
- vect_record_vectype (vec_info *vinfo, stmt_vec_info stmt_info,
- 		     unsigned int group_size, tree vectype)
- {
-   if (!vectype)
-     {
-       if (dump_enabled_p ())
- 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- 			 "Build SLP failed: unsupported data-type in %G\n",
- 			 stmt_info->stmt);
-       /* Fatal mismatch.  */
-       return false;
-     }
- 
-   /* If populating the vector type requires unrolling then fail
-      for basic-block vectorization.  */
-   if (is_a <bb_vec_info> (vinfo)
-       && !multiple_p (group_size, TYPE_VECTOR_SUBPARTS (vectype)))
-     {
-       if (dump_enabled_p ())
- 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- 			 "Build SLP failed: unrolling required "
- 			 "in basic block SLP\n");
-       /* Fatal mismatch.  */
-       return false;
-     }
- 
-   return true;
- }
- 
  /* Verify if the scalar stmts STMTS are isomorphic, require data
!    permutation or are of unsupported types of operation.  Return
!    true if they are, otherwise return false and indicate in *MATCHES
!    which stmts are not isomorphic to the first one.  If MATCHES[0]
!    is false then this indicates the comparison could not be
!    carried out or the stmts will never be vectorized by SLP.
  
     Note COND_EXPR is possibly isomorphic to another one after swapping its
     operands.  Set SWAP[i] to 1 if stmt I is COND_EXPR and isomorphic to
--- 1097,1108 ----
    return true;
  }
  
  /* Verify if the scalar stmts STMTS are isomorphic, require data
!    permutation or are of unsupported types of operation.
!    Return false if at least one stmt is unvectorizable or the comparison
!    could not be carried out.
!    Return true if they all are and indicate in *MATCHES which stmts are
!    not isomorphic to the first one.
  
     Note COND_EXPR is possibly isomorphic to another one after swapping its
     operands.  Set SWAP[i] to 1 if stmt I is COND_EXPR and isomorphic to
*************** vect_record_vectype (vec_info *vinfo, st
*** 1147,1157 ****
     to (B1 <= A1 ? X1 : Y1); or be inverted to (A1 < B1) ? Y1 : X1.  */
  
  static bool
! vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
  		       vec<stmt_vec_info> stmts, bool *matches,
! 		       bool *two_operators, tree *node_vectype)
  {
-   unsigned int group_size = stmts.length ();
    unsigned int i;
    stmt_vec_info first_stmt_info = stmts[0];
    code_helper first_stmt_code = ERROR_MARK;
--- 1112,1121 ----
     to (B1 <= A1 ? X1 : Y1); or be inverted to (A1 < B1) ? Y1 : X1.  */
  
  static bool
! vect_build_slp_tree_3 (vec_info *vinfo, unsigned char *swap,
  		       vec<stmt_vec_info> stmts, bool *matches,
! 		       bool *two_operators, tree vectype)
  {
    unsigned int i;
    stmt_vec_info first_stmt_info = stmts[0];
    code_helper first_stmt_code = ERROR_MARK;
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1164,1209 ****
    bool first_stmt_ldst_p = false, first_stmt_ldst_masklen_p = false;
    bool first_stmt_phi_p = false;
    int first_reduc_idx = -1;
-   bool maybe_soft_fail = false;
-   tree soft_fail_nunits_vectype = NULL_TREE;
- 
-   tree vectype, nunits_vectype;
-   if (!vect_get_vector_types_for_stmt (vinfo, first_stmt_info, &vectype,
- 				       &nunits_vectype, group_size))
-     {
-       /* Fatal mismatch.  */
-       matches[0] = false;
-       return false;
-     }
-   if (is_a <bb_vec_info> (vinfo)
-       && known_le (TYPE_VECTOR_SUBPARTS (vectype), 1U))
-     {
-       if (dump_enabled_p ())
- 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- 			 "Build SLP failed: not using single lane "
- 			 "vector type %T\n", vectype);
-       matches[0] = false;
-       return false;
-     }
-   /* Record nunits required but continue analysis, producing matches[]
-      as if nunits was not an issue.  This allows splitting of groups
-      to happen.  */
-   if (nunits_vectype
-       && !vect_record_vectype (vinfo, first_stmt_info, group_size,
- 			       nunits_vectype))
-     {
-       gcc_assert (is_a <bb_vec_info> (vinfo));
-       maybe_soft_fail = true;
-       soft_fail_nunits_vectype = nunits_vectype;
-     }
- 
-   gcc_assert (vectype || !gimple_get_lhs (first_stmt_info->stmt));
-   *node_vectype = vectype;
  
    basic_block common_bb = gimple_bb (first_stmt_info->stmt);
    gimple *trapping_stmt = NULL;
  
-   /* For every stmt in NODE find its def stmt/s.  */
    stmt_vec_info stmt_info;
    FOR_EACH_VEC_ELT (stmts, i, stmt_info)
      {
--- 1128,1137 ----
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1240,1247 ****
  	     work for this though but it's the easiest we can do here.  */
  	  if (is_a <bb_vec_info> (vinfo) && i != 0)
  	    continue;
- 	  /* Fatal mismatch.  */
- 	  matches[0] = false;
            return false;
          }
  
--- 1168,1173 ----
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1255,1262 ****
  			     "GIMPLE_CALL %G", stmt);
  	  if (is_a <bb_vec_info> (vinfo) && i != 0)
  	    continue;
- 	  /* Fatal mismatch.  */
- 	  matches[0] = false;
  	  return false;
  	}
  
--- 1181,1186 ----
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1302,1309 ****
  				 (gimple *) call_stmt);
  	      if (is_a <bb_vec_info> (vinfo) && i != 0)
  		continue;
- 	      /* Fatal mismatch.  */
- 	      matches[0] = false;
  	      return false;
  	    }
  	}
--- 1226,1231 ----
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1318,1323 ****
--- 1240,1289 ----
  	  ldst_p = STMT_VINFO_DATA_REF (stmt_info) != nullptr;
  	}
  
+       if (!ldst_p
+ 	  && !phi_p
+ 	  && rhs_code.is_tree_code ()
+ 	  && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_binary
+ 	  && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_unary
+ 	  && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_expression
+ 	  && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_comparison
+ 	  && rhs_code != VIEW_CONVERT_EXPR
+ 	  && rhs_code != CALL_EXPR
+ 	  && rhs_code != BIT_FIELD_REF
+ 	  && rhs_code != SSA_NAME)
+ 	{
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 			     "Build SLP failed: operation unsupported %G",
+ 			     stmt);
+ 	  if (is_a <bb_vec_info> (vinfo) && i != 0)
+ 	    continue;
+ 	  return false;
+ 	}
+ 
+       if (!ldst_p && rhs_code == BIT_FIELD_REF)
+ 	{
+ 	  tree vec = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0);
+ 	  if (!is_a <bb_vec_info> (vinfo)
+ 	      || TREE_CODE (vec) != SSA_NAME
+ 	      /* When the element types are not compatible we pun the
+ 		 source to the target vectype which requires equal size.  */
+ 	      || ((!VECTOR_TYPE_P (TREE_TYPE (vec))
+ 		   || !types_compatible_p (TREE_TYPE (vectype),
+ 					   TREE_TYPE (TREE_TYPE (vec))))
+ 		  && !operand_equal_p (TYPE_SIZE (vectype),
+ 				       TYPE_SIZE (TREE_TYPE (vec)))))
+ 	    {
+ 	      if (dump_enabled_p ())
+ 		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 				 "Build SLP failed: "
+ 				 "BIT_FIELD_REF not supported\n");
+ 	      if (i != 0)
+ 		continue;
+ 	      return false;
+ 	    }
+ 	}
+ 
        /* Check the operation.  */
        if (i == 0)
  	{
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1349,1377 ****
                need_same_oprnds = true;
                first_op1 = gimple_assign_rhs2 (stmt);
              }
- 	  else if (!ldst_p
- 		   && rhs_code == BIT_FIELD_REF)
- 	    {
- 	      tree vec = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0);
- 	      if (!is_a <bb_vec_info> (vinfo)
- 		  || TREE_CODE (vec) != SSA_NAME
- 		  /* When the element types are not compatible we pun the
- 		     source to the target vectype which requires equal size.  */
- 		  || ((!VECTOR_TYPE_P (TREE_TYPE (vec))
- 		       || !types_compatible_p (TREE_TYPE (vectype),
- 					       TREE_TYPE (TREE_TYPE (vec))))
- 		      && !operand_equal_p (TYPE_SIZE (vectype),
- 					   TYPE_SIZE (TREE_TYPE (vec)))))
- 		{
- 		  if (dump_enabled_p ())
- 		    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- 				     "Build SLP failed: "
- 				     "BIT_FIELD_REF not supported\n");
- 		  /* Fatal mismatch.  */
- 		  matches[0] = false;
- 		  return false;
- 		}
- 	    }
  	  else if (rhs_code == CFN_DIV_POW2)
  	    {
  	      need_same_oprnds = true;
--- 1315,1320 ----
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1593,1628 ****
  
  	      if (i != 0)
  		continue;
- 	      /* Fatal mismatch.  */
- 	      matches[0] = false;
  	      return false;
  	    }
  	}
        /* Not memory operation.  */
        else
  	{
- 	  if (!phi_p
- 	      && rhs_code.is_tree_code ()
- 	      && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_binary
- 	      && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_unary
- 	      && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_expression
- 	      && TREE_CODE_CLASS (tree_code (rhs_code)) != tcc_comparison
- 	      && rhs_code != VIEW_CONVERT_EXPR
- 	      && rhs_code != CALL_EXPR
- 	      && rhs_code != BIT_FIELD_REF
- 	      && rhs_code != SSA_NAME)
- 	    {
- 	      if (dump_enabled_p ())
- 		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- 				 "Build SLP failed: operation unsupported %G",
- 				 stmt);
- 	      if (is_a <bb_vec_info> (vinfo) && i != 0)
- 		continue;
- 	      /* Fatal mismatch.  */
- 	      matches[0] = false;
- 	      return false;
- 	    }
- 
  	  if (rhs_code == COND_EXPR)
  	    {
  	      tree cond_expr = gimple_assign_rhs1 (stmt);
--- 1536,1547 ----
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1693,1707 ****
  	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
  			 "Build SLP failed: not all stmts in same BB but "
  			 "possibly trapping operation in %G", trapping_stmt);
-       /* Fatal mismatch.  */
-       matches[0] = false;
        return false;
      }
  
-   for (i = 0; i < group_size; ++i)
-     if (!matches[i])
-       return false;
- 
    /* If we allowed a two-operation SLP node verify the target can cope
       with the permute we are going to use.  */
    if (alt_stmt_code != ERROR_MARK
--- 1612,1620 ----
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1712,1731 ****
        *two_operators = true;
      }
  
!   if (maybe_soft_fail)
      {
!       unsigned HOST_WIDE_INT const_nunits;
!       if (!TYPE_VECTOR_SUBPARTS
! 	    (soft_fail_nunits_vectype).is_constant (&const_nunits)
  	  || const_nunits > group_size)
- 	matches[0] = false;
-       else
  	{
! 	  /* With constant vector elements simulate a mismatch at the
! 	     point we need to split.  */
! 	  unsigned tail = group_size & (const_nunits - 1);
! 	  memset (&matches[group_size - tail], 0, sizeof (bool) * tail);
  	}
        return false;
      }
  
--- 1625,1716 ----
        *two_operators = true;
      }
  
!   return true;
! }
! 
! /* Verify if the scalar stmts STMTS are isomorphic, require data
!    permutation or are of unsupported types of operation.  Return
!    true if they are, otherwise return false and indicate in *MATCHES
!    which stmts are not isomorphic to the first one.  If MATCHES[0]
!    is false then this indicates the comparison could not be
!    carried out or the stmts will never be vectorized by SLP.
! 
!    Note COND_EXPR is possibly isomorphic to another one after swapping its
!    operands.  Set SWAP[i] to 1 if stmt I is COND_EXPR and isomorphic to
!    the first stmt by swapping the two operands of comparison; set SWAP[i]
!    to 2 if stmt I is isormorphic to the first stmt by inverting the code
!    of comparison.  Take A1 >= B1 ? X1 : Y1 as an example, it can be swapped
!    to (B1 <= A1 ? X1 : Y1); or be inverted to (A1 < B1) ? Y1 : X1.  */
! 
! static bool
! vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
! 		       vec<stmt_vec_info> stmts, bool *matches,
! 		       bool *two_operators, tree *node_vectype)
! {
!   stmt_vec_info first_stmt_info = stmts[0];
!   unsigned int group_size = stmts.length ();
!   tree vectype;
!   if (!vect_get_vector_types_for_stmt (vinfo, first_stmt_info, &vectype,
! 				       group_size))
      {
!       /* Fatal mismatch.  */
!       matches[0] = false;
!       return false;
!     }
!   if (is_a <bb_vec_info> (vinfo)
!       && known_le (TYPE_VECTOR_SUBPARTS (vectype), 1U))
!     {
!       if (dump_enabled_p ())
! 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			 "Build SLP failed: not using single lane "
! 			 "vector type %T\n", vectype);
!       matches[0] = false;
!       return false;
!     }
!   /* Check nunits required but continue analysis, producing matches[]
!      as if nunits was not an issue.  This allows splitting of groups
!      to happen.  */
!   bool maybe_soft_fail = false;
!   unsigned HOST_WIDE_INT const_nunits = 0;
!   if (vectype
!       && is_a <bb_vec_info> (vinfo)
!       && !multiple_p (group_size, TYPE_VECTOR_SUBPARTS (vectype)))
!     {
!       if (dump_enabled_p ())
! 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			 "Build SLP failed: unrolling required "
! 			 "in basic block SLP\n");
!       if (!TYPE_VECTOR_SUBPARTS (vectype).is_constant (&const_nunits)
  	  || const_nunits > group_size)
  	{
! 	  /* Fatal mismatch.  */
! 	  matches[0] = false;
! 	  return false;
  	}
+       maybe_soft_fail = true;
+     }
+ 
+   gcc_assert (vectype || !gimple_get_lhs (first_stmt_info->stmt));
+   *node_vectype = vectype;
+ 
+   if (!vect_build_slp_tree_3 (vinfo, swap, stmts, matches, two_operators,
+ 			      vectype))
+     {
+       /* Fatal mismatch.  */
+       matches[0] = false;
+       return false;
+     }
+ 
+   for (unsigned i = 0; i < group_size; ++i)
+     if (!matches[i])
+       return false;
+ 
+   if (maybe_soft_fail)
+     {
+       /* With constant vector elements simulate a mismatch at the
+ 	 point we need to split.  */
+       unsigned tail = group_size & (const_nunits - 1);
+       memset (&matches[group_size - tail], 0, sizeof (bool) * tail);
        return false;
      }
  
*************** vect_build_slp_tree_2 (vec_info *vinfo,
*** 2059,2066 ****
  	tree scalar_type = TREE_TYPE (PHI_RESULT (stmt));
  	tree vectype = get_vectype_for_scalar_type (vinfo, scalar_type,
  						    group_size);
! 	if (!vect_record_vectype (vinfo, stmt_info, group_size, vectype))
! 	  return NULL;
  
  	vect_def_type def_type = STMT_VINFO_DEF_TYPE (stmt_info);
  	if (def_type == vect_induction_def)
--- 2044,2057 ----
  	tree scalar_type = TREE_TYPE (PHI_RESULT (stmt));
  	tree vectype = get_vectype_for_scalar_type (vinfo, scalar_type,
  						    group_size);
! 	if (!vectype)
! 	  {
! 	    if (dump_enabled_p ())
! 	      dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			       "Build SLP failed: unsupported data-type in %G\n",
! 			       stmt_info->stmt);
! 	    return NULL;
! 	  }
  
  	vect_def_type def_type = STMT_VINFO_DEF_TYPE (stmt_info);
  	if (def_type == vect_induction_def)
*************** vect_analyze_slp_reduc_chain (loop_vec_i
*** 4391,4399 ****
    if (fail)
      return false;
  
-   /* Remember a stmt with the actual reduction operation.  */
-   stmt_vec_info reduc_scalar_stmt = scalar_stmts[0];
- 
    /* When the SSA def chain through reduc-idx does not form a natural
       reduction chain try to linearize an associative operation manually.  */
    if (scalar_stmts.length () == 1
--- 4382,4387 ----
*************** vect_analyze_slp_reduc_chain (loop_vec_i
*** 4401,4409 ****
        && associative_tree_code ((tree_code)code)
        /* We may not associate if a fold-left reduction is required.  */
        && !needs_fold_left_reduction_p (TREE_TYPE (gimple_get_lhs
! 						    (reduc_scalar_stmt->stmt)),
  				       code))
      {
        auto_vec<chain_op_t> chain;
        auto_vec<std::pair<tree_code, gimple *> > worklist;
        gimple *op_stmt = NULL, *other_op_stmt = NULL;
--- 4389,4399 ----
        && associative_tree_code ((tree_code)code)
        /* We may not associate if a fold-left reduction is required.  */
        && !needs_fold_left_reduction_p (TREE_TYPE (gimple_get_lhs
! 						    (scalar_stmts[0]->stmt)),
  				       code))
      {
+       /* Remember a stmt with the actual reduction operation.  */
+       stmt_vec_info reduc_scalar_stmt = scalar_stmts[0];
        auto_vec<chain_op_t> chain;
        auto_vec<std::pair<tree_code, gimple *> > worklist;
        gimple *op_stmt = NULL, *other_op_stmt = NULL;
*************** vect_scalar_ops_slice_hash::equal (const
*** 8938,8944 ****
     excess elements in the last vector.  Returns false if *NVECTORS
     cannot be computed.  */
  
! static bool
  vect_get_num_copies_for_invariant (vec_info *vinfo, slp_tree node,
  				   unsigned *nvectors)
  {
--- 8928,8934 ----
     excess elements in the last vector.  Returns false if *NVECTORS
     cannot be computed.  */
  
! bool
  vect_get_num_copies_for_invariant (vec_info *vinfo, slp_tree node,
  				   unsigned *nvectors)
  {
*************** vect_create_constant_vectors (vec_info *
*** 10936,10946 ****
  
    number_of_copies = nunits * number_of_vectors / group_size;
  
-   number_of_places_left_in_vector = nunits;
    constant_p = true;
    tree uniform_elt = NULL_TREE;
    tree_vector_builder elts (vector_type, nunits, 1);
    elts.quick_grow (nunits);
    stmt_vec_info insert_after = NULL;
    for (j = 0; j < number_of_copies; j++)
      {
--- 10926,10940 ----
  
    number_of_copies = nunits * number_of_vectors / group_size;
  
    constant_p = true;
    tree uniform_elt = NULL_TREE;
    tree_vector_builder elts (vector_type, nunits, 1);
    elts.quick_grow (nunits);
+   /* Zero-pad the last vector if necessary.  */
+   number_of_places_left_in_vector
+     = nunits - nunits * number_of_vectors % group_size;
+   for (i = nunits; i > number_of_places_left_in_vector; --i)
+     elts[i-1] = build_zero_cst (TREE_TYPE (vector_type));
    stmt_vec_info insert_after = NULL;
    for (j = 0; j < number_of_copies; j++)
      {
*************** vect_schedule_slp_node (vec_info *vinfo,
*** 12218,12224 ****
        if (is_a <bb_vec_info> (vinfo)
  	  && !SLP_TREE_PERMUTE_P (node)
  	  && (!last_stmt
! 	      || gimple_bb (last_stmt) != gimple_bb (stmt_info->stmt))
  	  && gimple_could_trap_p (stmt_info->stmt))
  	{
  	  /* We've constrained possibly trapping operations to all come
--- 12212,12219 ----
        if (is_a <bb_vec_info> (vinfo)
  	  && !SLP_TREE_PERMUTE_P (node)
  	  && (!last_stmt
! 	      || !dominated_by_p (CDI_DOMINATORS, gimple_bb (last_stmt),
! 				  gimple_bb (stmt_info->stmt)))
  	  && gimple_could_trap_p (stmt_info->stmt))
  	{
  	  /* We've constrained possibly trapping operations to all come
*************** vect_schedule_slp_node (vec_info *vinfo,
*** 12227,12236 ****
  	     This is only necessary for BB vectorization since for loop vect
  	     all operations are in a single BB and scalar stmt based
  	     placement doesn't play well with epilogue vectorization.  */
! 	  gcc_assert (!last_stmt
! 		      || dominated_by_p (CDI_DOMINATORS,
! 					 gimple_bb (stmt_info->stmt),
! 					 gimple_bb (last_stmt)));
  	  si = gsi_after_labels (gimple_bb (stmt_info->stmt));
  	  last_stmt = gsi_stmt (si);
  	}
--- 12222,12235 ----
  	     This is only necessary for BB vectorization since for loop vect
  	     all operations are in a single BB and scalar stmt based
  	     placement doesn't play well with epilogue vectorization.  */
! 	  if (last_stmt
! 	      && !dominated_by_p (CDI_DOMINATORS,
! 				  gimple_bb (stmt_info->stmt),
! 				  gimple_bb (last_stmt)))
! 	    {
! 	      gcc_assert (place_only);
! 	      return false;
! 	    }
  	  si = gsi_after_labels (gimple_bb (stmt_info->stmt));
  	  last_stmt = gsi_stmt (si);
  	}
*************** vectorize_slp_instance_root_stmt (vec_in
*** 12540,12545 ****
--- 12539,12545 ----
  struct slp_scc_info
  {
    bool on_stack;
+   bool res;
    int dfs;
    int lowlink;
  };
*************** vect_schedule_scc (vec_info *vinfo, slp_
*** 12565,12574 ****
        info->on_stack = false;
        bool res = vect_schedule_slp_node (vinfo, node, instance, place_only);
        gcc_assert (res);
!       return true;
      }
  
    info->on_stack = true;
    stack.safe_push (node);
  
    bool res = true;
--- 12565,12576 ----
        info->on_stack = false;
        bool res = vect_schedule_slp_node (vinfo, node, instance, place_only);
        gcc_assert (res);
!       info->res = res;
!       return res;
      }
  
    info->on_stack = true;
+   info->res = true;
    stack.safe_push (node);
  
    bool res = true;
*************** vect_schedule_scc (vec_info *vinfo, slp_
*** 12591,12596 ****
--- 12593,12600 ----
  	}
        else if (child_info->on_stack)
  	info->lowlink = MIN (info->lowlink, child_info->dfs);
+       else
+ 	res &= child_info->res;
      }
    if (info->lowlink != info->dfs)
      return res;
*************** vect_schedule_scc (vec_info *vinfo, slp_
*** 12603,12608 ****
--- 12607,12613 ----
        stack.pop ();
        info->on_stack = false;
        res &= vect_schedule_slp_node (vinfo, node, instance, place_only);
+       info->res = res;
        if (!SLP_TREE_PERMUTE_P (node)
  	  && is_a <gphi *> (SLP_TREE_REPRESENTATIVE (node)->stmt))
  	phis_to_fixup.quick_push (node);
*************** vect_schedule_scc (vec_info *vinfo, slp_
*** 12619,12624 ****
--- 12624,12632 ----
  	 for only back-reachable nodes).  But it's simpler to just
  	 iterate and schedule those that are ready.  */
        unsigned todo = stack.length () - last_idx;
+       auto_vec<slp_tree, 4> saved_scc (todo);
+       memcpy (saved_scc.address (), stack.address ()[last_idx + 1],
+ 	      sizeof (slp_tree) * todo);
        do
  	{
  	  for (int idx = stack.length () - 1; idx >= last_idx; --idx)
*************** vect_schedule_scc (vec_info *vinfo, slp_
*** 12630,12660 ****
  			  && is_a <gphi *> (SLP_TREE_REPRESENTATIVE (entry)->stmt));
  	      bool ready = !phi;
  	      FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (entry), i, child)
! 		  if (!child)
! 		    {
! 		      gcc_assert (phi);
! 		      ready = true;
! 		      break;
! 		    }
! 		  else if (scc_info.get (child)->on_stack)
! 		    {
! 		      if (!phi)
! 			{
! 			  ready = false;
! 			  break;
! 			}
! 		    }
! 		  else
! 		    {
! 		      if (phi)
! 			{
! 			  ready = true;
! 			  break;
! 			}
! 		    }
  	      if (ready)
  		{
! 		  vect_schedule_slp_node (vinfo, entry, instance, place_only);
  		  scc_info.get (entry)->on_stack = false;
  		  stack[idx] = NULL;
  		  todo--;
--- 12638,12669 ----
  			  && is_a <gphi *> (SLP_TREE_REPRESENTATIVE (entry)->stmt));
  	      bool ready = !phi;
  	      FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (entry), i, child)
! 		if (!child)
! 		  {
! 		    gcc_assert (phi);
! 		    ready = true;
! 		    break;
! 		  }
! 		else if (scc_info.get (child)->on_stack)
! 		  {
! 		    if (!phi)
! 		      {
! 			ready = false;
! 			break;
! 		      }
! 		  }
! 		else
! 		  {
! 		    if (phi)
! 		      {
! 			ready = true;
! 			break;
! 		      }
! 		  }
  	      if (ready)
  		{
! 		  res &= vect_schedule_slp_node (vinfo, entry, instance,
! 						 place_only);
  		  scc_info.get (entry)->on_stack = false;
  		  stack[idx] = NULL;
  		  todo--;
*************** vect_schedule_scc (vec_info *vinfo, slp_
*** 12665,12670 ****
--- 12674,12683 ----
  	}
        while (todo != 0);
  
+       /* Push the scheduling result to all of the SCC.  */
+       for (slp_tree entry : saved_scc)
+ 	scc_info.get (entry)->res = res;
+ 
        /* Pop the SCC.  */
        stack.truncate (last_idx);
      }
diff -Nrcpad gcc-17-20260823/gcc/tree-vect-stmts.cc gcc-17-20260830/gcc/tree-vect-stmts.cc
*** gcc-17-20260823/gcc/tree-vect-stmts.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-vect-stmts.cc	Sun Aug 30 22:32:15 2026
*************** vect_create_vectorized_demotion_stmts (v
*** 5160,5167 ****
  /* Create vectorized promotion statements for vector operands from VEC_OPRNDS0
     and VEC_OPRNDS1, for a binary operation associated with scalar statement
     STMT_INFO.  For multi-step conversions store the resulting vectors and
!    call the function recursively.  When HALF is true only generate half
!    of the result.  */
  
  static void
  vect_create_vectorized_promotion_stmts (vec_info *vinfo,
--- 5160,5167 ----
  /* Create vectorized promotion statements for vector operands from VEC_OPRNDS0
     and VEC_OPRNDS1, for a binary operation associated with scalar statement
     STMT_INFO.  For multi-step conversions store the resulting vectors and
!    call the function recursively.  When NUM_VECTORS is not -1U then only
!    NUM_VECTORS will be produced.  */
  
  static void
  vect_create_vectorized_promotion_stmts (vec_info *vinfo,
*************** vect_create_vectorized_promotion_stmts (
*** 5171,5184 ****
  					gimple_stmt_iterator *gsi,
  					code_helper ch1,
  					code_helper ch2, int op_type,
! 					bool half)
  {
    int i;
    tree vop0, vop1, new_tmp1, new_tmp2;
    gimple *new_stmt1, *new_stmt2;
    vec<tree> vec_tmp = vNULL;
  
!   vec_tmp.create ((half ? 1 : 2) * vec_oprnds0->length ());
    FOR_EACH_VEC_ELT (*vec_oprnds0, i, vop0)
      {
        if (op_type == binary_op)
--- 5171,5185 ----
  					gimple_stmt_iterator *gsi,
  					code_helper ch1,
  					code_helper ch2, int op_type,
! 					unsigned num_vectors)
  {
    int i;
    tree vop0, vop1, new_tmp1, new_tmp2;
    gimple *new_stmt1, *new_stmt2;
    vec<tree> vec_tmp = vNULL;
  
!   vec_tmp.create (num_vectors != -1U
! 		  ? num_vectors : 2 * vec_oprnds0->length ());
    FOR_EACH_VEC_ELT (*vec_oprnds0, i, vop0)
      {
        if (op_type == binary_op)
*************** vectorizable_conversion (vec_info *vinfo
*** 5852,5859 ****
  						    &vec_oprnds1, stmt_info,
  						    this_dest, gsi,
  						    c1, c2, op_type,
! 						    vec_oprnds0.length ()
! 						    == num_vectors);
  	}
  
        FOR_EACH_VEC_ELT (vec_oprnds0, i, vop0)
--- 5853,5859 ----
  						    &vec_oprnds1, stmt_info,
  						    this_dest, gsi,
  						    c1, c2, op_type,
! 						    i == 0 ? num_vectors : -1u);
  	}
  
        FOR_EACH_VEC_ELT (vec_oprnds0, i, vop0)
*************** vect_gen_while_not (gimple_seq *seq, tre
*** 14490,14505 ****
  
     - Set *STMT_VECTYPE_OUT to:
       - NULL_TREE if the statement doesn't need to be vectorized;
!      - the equivalent of STMT_VINFO_VECTYPE otherwise.
! 
!    - Set *NUNITS_VECTYPE_OUT to the vector type that contains the maximum
!      number of units needed to vectorize STMT_INFO, or NULL_TREE if the
!      statement does not help to determine the overall number of units.  */
  
  opt_result
  vect_get_vector_types_for_stmt (vec_info *vinfo, stmt_vec_info stmt_info,
  				tree *stmt_vectype_out,
- 				tree *nunits_vectype_out,
  				unsigned int group_size)
  {
    gimple *stmt = stmt_info->stmt;
--- 14490,14500 ----
  
     - Set *STMT_VECTYPE_OUT to:
       - NULL_TREE if the statement doesn't need to be vectorized;
!      - the equivalent of STMT_VINFO_VECTYPE otherwise.  */
  
  opt_result
  vect_get_vector_types_for_stmt (vec_info *vinfo, stmt_vec_info stmt_info,
  				tree *stmt_vectype_out,
  				unsigned int group_size)
  {
    gimple *stmt = stmt_info->stmt;
*************** vect_get_vector_types_for_stmt (vec_info
*** 14514,14520 ****
      group_size = 0;
  
    *stmt_vectype_out = NULL_TREE;
-   *nunits_vectype_out = NULL_TREE;
  
    if (gimple_get_lhs (stmt) == NULL_TREE
        /* Allow vector conditionals through here.  */
--- 14509,14514 ----
*************** vect_get_vector_types_for_stmt (vec_info
*** 14602,14651 ****
  				   stmt);
  
    *stmt_vectype_out = vectype;
- 
-   /* Don't try to compute scalar types if the stmt produces a boolean
-      vector; use the existing vector type instead.  */
-   tree nunits_vectype = vectype;
-   if (!VECTOR_BOOLEAN_TYPE_P (vectype))
-     {
-       /* The number of units is set according to the smallest scalar
- 	 type (or the largest vector size, but we only support one
- 	 vector size per vectorization).  */
-       scalar_type = vect_get_smallest_scalar_type (stmt_info,
- 						   TREE_TYPE (vectype));
-       if (!types_compatible_p (scalar_type, TREE_TYPE (vectype)))
- 	{
- 	  if (dump_enabled_p ())
- 	    dump_printf_loc (MSG_NOTE, vect_location,
- 			     "get vectype for smallest scalar type: %T\n",
- 			     scalar_type);
- 	  nunits_vectype = get_vectype_for_scalar_type (vinfo, scalar_type,
- 							group_size);
- 	  if (!nunits_vectype)
- 	    return opt_result::failure_at
- 	      (stmt, "not vectorized: unsupported data-type %T\n",
- 	       scalar_type);
- 	  if (dump_enabled_p ())
- 	    dump_printf_loc (MSG_NOTE, vect_location, "nunits vectype: %T\n",
- 			     nunits_vectype);
- 	}
-     }
- 
-   if (!multiple_p (TYPE_VECTOR_SUBPARTS (nunits_vectype),
- 		   TYPE_VECTOR_SUBPARTS (*stmt_vectype_out)))
-     return opt_result::failure_at (stmt,
- 				   "Not vectorized: Incompatible number "
- 				   "of vector subparts between %T and %T\n",
- 				   nunits_vectype, *stmt_vectype_out);
- 
-   if (dump_enabled_p ())
-     {
-       dump_printf_loc (MSG_NOTE, vect_location, "nunits = ");
-       dump_dec (MSG_NOTE, TYPE_VECTOR_SUBPARTS (nunits_vectype));
-       dump_printf (MSG_NOTE, "\n");
-     }
- 
-   *nunits_vectype_out = nunits_vectype;
    return opt_result::success ();
  }
  
--- 14596,14601 ----
diff -Nrcpad gcc-17-20260823/gcc/tree-vectorizer.h gcc-17-20260830/gcc/tree-vectorizer.h
*** gcc-17-20260823/gcc/tree-vectorizer.h	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-vectorizer.h	Sun Aug 30 22:32:15 2026
*************** extern tree vect_gen_while (gimple_seq *
*** 2606,2612 ****
  extern tree vect_gen_while_not (gimple_seq *, tree, tree, tree);
  extern opt_result vect_get_vector_types_for_stmt (vec_info *,
  						  stmt_vec_info, tree *,
! 						  tree *, unsigned int = 0);
  extern opt_tree vect_get_mask_type_for_stmt (stmt_vec_info, unsigned int = 0);
  
  /* In tree-if-conv.cc.  */
--- 2606,2612 ----
  extern tree vect_gen_while_not (gimple_seq *, tree, tree, tree);
  extern opt_result vect_get_vector_types_for_stmt (vec_info *,
  						  stmt_vec_info, tree *,
! 						  unsigned int = 0);
  extern opt_tree vect_get_mask_type_for_stmt (stmt_vec_info, unsigned int = 0);
  
  /* In tree-if-conv.cc.  */
*************** extern bool vect_can_force_dr_alignment_
*** 2617,2623 ****
  extern enum dr_alignment_support vect_supportable_dr_alignment
  				   (vec_info *, dr_vec_info *, tree, int,
  				    bool = false);
- extern tree vect_get_smallest_scalar_type (stmt_vec_info, tree);
  extern opt_result vect_analyze_data_ref_dependences (loop_vec_info, unsigned int *);
  extern bool vect_slp_analyze_instance_dependence (vec_info *, slp_instance);
  extern opt_result vect_enhance_data_refs_alignment (loop_vec_info);
--- 2617,2622 ----
*************** extern tree prepare_vec_mask (loop_vec_i
*** 2790,2795 ****
--- 2789,2796 ----
  			      gimple_stmt_iterator *);
  extern tree vect_get_mask_load_else (int, tree);
  extern bool vect_load_perm_consecutive_p (slp_tree, unsigned = UINT_MAX);
+ extern bool vect_get_num_copies_for_invariant (vec_info *, slp_tree,
+ 					       unsigned *);
  
  /* In tree-vect-patterns.cc.  */
  extern void
diff -Nrcpad gcc-17-20260823/gcc/tree-vrp.cc gcc-17-20260830/gcc/tree-vrp.cc
*** gcc-17-20260823/gcc/tree-vrp.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/gcc/tree-vrp.cc	Sun Aug 30 22:32:15 2026
*************** public:
*** 93,99 ****
    bool remove ();
    bool remove_and_update_globals ();
    bool fully_replaceable (tree name, basic_block bb);
!   vec<std::pair<int, int> > m_list;
    range_query &m_ranger;
    bool final_p;
    bitmap m_tmp;
--- 93,99 ----
    bool remove ();
    bool remove_and_update_globals ();
    bool fully_replaceable (tree name, basic_block bb);
!   vec<edge> m_list;
    range_query &m_ranger;
    bool final_p;
    bitmap m_tmp;
*************** remove_unreachable::maybe_register (gimp
*** 131,137 ****
    if (!final_p)
      handle_early (s, e);
    else
!     m_list.safe_push (std::make_pair (e->src->index, e->dest->index));
  }
  
  // Return true if all uses of NAME are dominated by block BB.  1 use
--- 131,137 ----
    if (!final_p)
      handle_early (s, e);
    else
!     m_list.safe_push (e);
  }
  
  // Return true if all uses of NAME are dominated by block BB.  1 use
*************** remove_unreachable::remove ()
*** 266,277 ****
    unsigned i;
    for (i = 0; i < m_list.length (); i++)
      {
!       auto eb = m_list[i];
!       basic_block src = BASIC_BLOCK_FOR_FN (cfun, eb.first);
!       basic_block dest = BASIC_BLOCK_FOR_FN (cfun, eb.second);
!       if (!src || !dest)
! 	continue;
!       edge e = find_edge (src, dest);
        gimple *s = gimple_outgoing_range_stmt_p (e->src);
        gcc_checking_assert (gimple_code (s) == GIMPLE_COND);
  
--- 266,272 ----
    unsigned i;
    for (i = 0; i < m_list.length (); i++)
      {
!       edge e = m_list[i];
        gimple *s = gimple_outgoing_range_stmt_p (e->src);
        gcc_checking_assert (gimple_code (s) == GIMPLE_COND);
  
*************** remove_unreachable::remove ()
*** 279,285 ****
        if (!name)
  	name = gimple_range_ssa_p (gimple_cond_rhs (s));
        // Check if global value can be set for NAME.
!       if (name && fully_replaceable (name, src))
  	{
  	  value_range r (TREE_TYPE (name));
  	  if (gori_name_on_edge (r, name, e, &m_ranger))
--- 274,280 ----
        if (!name)
  	name = gimple_range_ssa_p (gimple_cond_rhs (s));
        // Check if global value can be set for NAME.
!       if (name && fully_replaceable (name, e->src))
  	{
  	  value_range r (TREE_TYPE (name));
  	  if (gori_name_on_edge (r, name, e, &m_ranger))
*************** remove_unreachable::remove_and_update_gl
*** 322,333 ****
    auto_bitmap all_exports;
    for (i = 0; i < m_list.length (); i++)
      {
!       auto eb = m_list[i];
!       basic_block src = BASIC_BLOCK_FOR_FN (cfun, eb.first);
!       basic_block dest = BASIC_BLOCK_FOR_FN (cfun, eb.second);
!       if (!src || !dest)
! 	continue;
!       edge e = find_edge (src, dest);
        gimple *s = gimple_outgoing_range_stmt_p (e->src);
        gcc_checking_assert (gimple_code (s) == GIMPLE_COND);
  
--- 317,323 ----
    auto_bitmap all_exports;
    for (i = 0; i < m_list.length (); i++)
      {
!       edge e = m_list[i];
        gimple *s = gimple_outgoing_range_stmt_p (e->src);
        gcc_checking_assert (gimple_code (s) == GIMPLE_COND);
  
diff -Nrcpad gcc-17-20260823/libcpp/ChangeLog gcc-17-20260830/libcpp/ChangeLog
*** gcc-17-20260823/libcpp/ChangeLog	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libcpp/ChangeLog	Sun Aug 30 22:32:15 2026
***************
*** 1,3 ****
--- 1,10 ----
+ 2026-08-29  Kael Andrew Alonzo Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR middle-end/125507
+ 	* include/cpplib.h (struct cpp_token): Remove ENUM_BITFIELD.
+ 	(struct cpp_hashnode): Ditto.
+ 	* include/line-map.h (struct line_map_ordinary): Ditto.
+ 
  2026-08-21  Wilco Dijkstra  <wilco.dijkstra@arm.com>
  
  	* lex.cc (search_line_neon): New optimized AdvSIMD implementation.
diff -Nrcpad gcc-17-20260823/libcpp/include/cpplib.h gcc-17-20260830/libcpp/include/cpplib.h
*** gcc-17-20260823/libcpp/include/cpplib.h	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libcpp/include/cpplib.h	Sun Aug 30 22:32:15 2026
*************** struct GTY(()) cpp_token {
*** 268,274 ****
    /* Location of first char of token, together with range of full token.  */
    location_t src_loc;
  
!   ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
    unsigned short flags;		/* flags - see above */
  
    union cpp_token_u
--- 268,274 ----
    /* Location of first char of token, together with range of full token.  */
    location_t src_loc;
  
!   enum cpp_ttype type : CHAR_BIT;  /* token type */
    unsigned short flags;		/* flags - see above */
  
    union cpp_token_u
*************** struct GTY(()) cpp_hashnode {
*** 1076,1082 ****
  					   Otherwise, a NODE_OPERATOR.  */
    unsigned int rid_code : 8;		/* Rid code - for front ends.  */
    unsigned int flags : 9;		/* CPP flags.  */
!   ENUM_BITFIELD(node_type) type : 2;	/* CPP node type.  */
  
    /* 5 bits spare.  */
  
--- 1076,1082 ----
  					   Otherwise, a NODE_OPERATOR.  */
    unsigned int rid_code : 8;		/* Rid code - for front ends.  */
    unsigned int flags : 9;		/* CPP flags.  */
!   enum node_type type : 2;		/* CPP node type.  */
  
    /* 5 bits spare.  */
  
diff -Nrcpad gcc-17-20260823/libcpp/include/line-map.h gcc-17-20260830/libcpp/include/line-map.h
*** gcc-17-20260823/libcpp/include/line-map.h	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libcpp/include/line-map.h	Sun Aug 30 22:32:15 2026
*************** struct GTY((tag ("1"))) line_map_ordinar
*** 428,434 ****
    /* 4 bytes of integers, each 1 byte for easy extraction/insertion.  */
  
    /* The reason for creation of this line map.  */
!   ENUM_BITFIELD (lc_reason) reason : 8;
  
    /* SYSP is one for a system header, two for a C system header file
       that therefore needs to be extern "C" protected in C++, and zero
--- 428,434 ----
    /* 4 bytes of integers, each 1 byte for easy extraction/insertion.  */
  
    /* The reason for creation of this line map.  */
!   enum lc_reason reason : 8;
  
    /* SYSP is one for a system header, two for a C system header file
       that therefore needs to be extern "C" protected in C++, and zero
diff -Nrcpad gcc-17-20260823/libgcc/ChangeLog gcc-17-20260830/libgcc/ChangeLog
*** gcc-17-20260823/libgcc/ChangeLog	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcc/ChangeLog	Sun Aug 30 22:32:15 2026
***************
*** 1,3 ****
--- 1,19 ----
+ 2026-08-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/127071
+ 	* config/avr/t-copy-libgcc: Remove file.
+ 	* config/avr/t-avrlibc: Remove code to pull in t-copy-libgcc.
+ 
+ 2026-08-24  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/feature_bits.c: Include
+ 	common/config/riscv/riscv-hwprobe.h, and drop the hwprobe key
+ 	numbers, extension bit positions, struct riscv_hwprobe and
+ 	syscall_5_args that moved there.
+ 	(__init_riscv_features_bits_linux): Set the extension bits from
+ 	riscv-hwprobe.def.
+ 	(__init_riscv_feature_bits): Add a declaration.
+ 
  2026-08-16  Georg-Johann Lay  <avr@gjlay.de>
  
  	* config/avr/lib1funcs.S: Fix typo in comment.
diff -Nrcpad gcc-17-20260823/libgcc/config/avr/libf7/ChangeLog gcc-17-20260830/libgcc/config/avr/libf7/ChangeLog
*** gcc-17-20260823/libgcc/config/avr/libf7/ChangeLog	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcc/config/avr/libf7/ChangeLog	Sun Aug 30 22:32:15 2026
***************
*** 1,3 ****
--- 1,14 ----
+ 2026-08-25  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/127071
+ 	* t-libf7-math-symbols: Adjust comment.
+ 
+ 2026-08-24  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/127024
+ 	* libf7-asm.sx (to_integer): Don't skip XJMP
+ 	if __AVR_ERRATA_SKIP_JMP_CALL__.
+ 
  2026-06-28  Georg-Johann Lay  <avr@gjlay.de>
  
  	PR target/125752
diff -Nrcpad gcc-17-20260823/libgcc/config/avr/libf7/libf7-asm.sx gcc-17-20260830/libgcc/config/avr/libf7/libf7-asm.sx
*** gcc-17-20260823/libgcc/config/avr/libf7/libf7-asm.sx	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcc/config/avr/libf7/libf7-asm.sx	Sun Aug 30 22:32:15 2026
*************** DEFUN to_integer
*** 602,613 ****
      brmi    .Lsaturate.T    ;   > INTxx_MAX  =>  saturate
  
      brtc 9f                 ;   >= 0         =>  return
      sbrc    Mask,   5
-     .global __negdi2
      XJMP    __negdi2
      sbrc    Mask,   4
-     .global __negsi2
      XJMP    __negsi2
      neg     C6
      neg     C5
      sbci    C6,     0
--- 602,622 ----
      brmi    .Lsaturate.T    ;   > INTxx_MAX  =>  saturate
  
      brtc 9f                 ;   >= 0         =>  return
+ #ifdef __AVR_ERRATA_SKIP_JMP_CALL__
+     ;; Some cores have a problem skipping 2-word instructions.
+     sbrs    Mask,   5
+     rjmp    0f
+     XJMP    __negdi2
+ 0:  sbrs    Mask,   4
+     rjmp    1f
+     XJMP    __negsi2
+ 1:
+ #else
      sbrc    Mask,   5
      XJMP    __negdi2
      sbrc    Mask,   4
      XJMP    __negsi2
+ #endif /* __AVR_ERRATA_SKIP_JMP_CALL__ */
      neg     C6
      neg     C5
      sbci    C6,     0
diff -Nrcpad gcc-17-20260823/libgcc/config/avr/libf7/t-libf7-math-symbols gcc-17-20260830/libgcc/config/avr/libf7/t-libf7-math-symbols
*** gcc-17-20260823/libgcc/config/avr/libf7/t-libf7-math-symbols	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcc/config/avr/libf7/t-libf7-math-symbols	Sun Aug 30 22:32:15 2026
***************
*** 1,10 ****
  # Triggered by --with-libf7=math-symbols
  #
! # We have at least one module in libgcc that depends on __SIZEOF_DOUBLE__
! # or __SIZEOF_LONG_DOUBLE__ which means that t-avrlibc must not copy
! # double32/64 or long-double32/64 variants from the vanilla one.
! # This occurs when some module(s) define(s) weak aliases for functions
! # that usually live in libm.
  
  WITH_LIBF7_MATH_SYMBOLS = 1
  
--- 1,7 ----
  # Triggered by --with-libf7=math-symbols
  #
! # Add weak aliases for the math.h functions, like sin for __f7_sin
! # when double is a 64-bit type, and similar for sinl and long double.
  
  WITH_LIBF7_MATH_SYMBOLS = 1
  
diff -Nrcpad gcc-17-20260823/libgcc/config/avr/t-avrlibc gcc-17-20260830/libgcc/config/avr/t-avrlibc
*** gcc-17-20260823/libgcc/config/avr/t-avrlibc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcc/config/avr/t-avrlibc	Sun Aug 30 22:32:15 2026
*************** LIB2FUNCS_EXCLUDE += \
*** 64,104 ****
  	_fixunssfsi _fixsfdi \
  	_fixunssfdi \
  	_floatdisf _floatundisf
- 
- ifeq (,$(WITH_LIBF7_MATH_SYMBOLS))
- 
- # No modules depend on __SIZEOF_LONG_DOUBLE__ or __SIZEOF_DOUBLE__
- # which means we might have an opportunity to copy libgcc.a.
- # WITH_LIBF7_MATH_SYMBOLS is set by libf7/t-libf7-math-symbols.
- 
- ifneq (,$(findstring avr,$(MULTISUBDIR)))
- 
- # We are not in the avr2 (default) subdir, hence copying will work.
- # In default dir, copying won'twork because the default multilib is
- # built after all the others.
- 
- ifneq (,$(findstring double,$(MULTISUBDIR)))
- 
- # We are in double{32|64}/libgcc or long-double{32|64}/libgcc:
- # Just copy from the [long ]double=float multilib; we would remove any DFmode
- # bits from this multilib variant, anyway, because the current assumption
- # is that avr-libc hosts *all* the IEEE-double stuff.
- 
- LIB2FUNCS_EXCLUDE := %
- LIB1ASMFUNCS :=
- libgcc-objects :=
- libgcov-objects :=
- objects :=
- 
- t-copy-libgcc.dep: $(srcdir)/config/avr/t-copy-libgcc
- 	-rm -f libgcc.a
- 	-rm -f libgcov.a
- 	cp $< $@
- 
- libgcc.a libgcov.a libgcc_tm.h: t-copy-libgcc.dep
- 
- Makefile: t-copy-libgcc.dep
- 
- endif
- endif
- endif
--- 64,66 ----
diff -Nrcpad gcc-17-20260823/libgcc/config/avr/t-copy-libgcc gcc-17-20260830/libgcc/config/avr/t-copy-libgcc
*** gcc-17-20260823/libgcc/config/avr/t-copy-libgcc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcc/config/avr/t-copy-libgcc	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- # Only used with --with-avrlibc & (-mlong-double=64 | -mdouble=64)
- #
- # Inserted at the end of Makefile by magic[tm].
- # We need this *after* Makefile's rules so we can override them.
- 
- libgcc.a: ../../libgcc/libgcc.a
- 	cp $< $@
- 
- libgcov.a: ../../libgcc/libgcov.a
- 	@:
- ifeq ($(enable_gcov),yes)
- 	cp $< $@
- endif
--- 0 ----
diff -Nrcpad gcc-17-20260823/libgcc/config/riscv/feature_bits.c gcc-17-20260830/libgcc/config/riscv/feature_bits.c
*** gcc-17-20260823/libgcc/config/riscv/feature_bits.c	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcc/config/riscv/feature_bits.c	Sun Aug 30 22:32:15 2026
*************** struct {
*** 190,308 ****
  #define SET_EXT(EXT) features[EXT##_GROUPID] |= EXT##_BITMASK
  
  #ifdef __linux
! 
! #define __NR_riscv_hwprobe 258
! #define RISCV_HWPROBE_KEY_MVENDORID 0
! #define RISCV_HWPROBE_KEY_MARCHID 1
! #define RISCV_HWPROBE_KEY_MIMPID 2
! #define RISCV_HWPROBE_KEY_BASE_BEHAVIOR 3
! #define RISCV_HWPROBE_BASE_BEHAVIOR_IMA (1ULL << 0)
! #define RISCV_HWPROBE_KEY_IMA_EXT_0 4
! #define RISCV_HWPROBE_IMA_FD (1ULL << 0)
! #define RISCV_HWPROBE_IMA_C (1ULL << 1)
! #define RISCV_HWPROBE_IMA_V (1ULL << 2)
! #define RISCV_HWPROBE_EXT_ZBA (1ULL << 3)
! #define RISCV_HWPROBE_EXT_ZBB (1ULL << 4)
! #define RISCV_HWPROBE_EXT_ZBS (1ULL << 5)
! #define RISCV_HWPROBE_EXT_ZICBOZ (1ULL << 6)
! #define RISCV_HWPROBE_EXT_ZBC (1ULL << 7)
! #define RISCV_HWPROBE_EXT_ZBKB (1ULL << 8)
! #define RISCV_HWPROBE_EXT_ZBKC (1ULL << 9)
! #define RISCV_HWPROBE_EXT_ZBKX (1ULL << 10)
! #define RISCV_HWPROBE_EXT_ZKND (1ULL << 11)
! #define RISCV_HWPROBE_EXT_ZKNE (1ULL << 12)
! #define RISCV_HWPROBE_EXT_ZKNH (1ULL << 13)
! #define RISCV_HWPROBE_EXT_ZKSED (1ULL << 14)
! #define RISCV_HWPROBE_EXT_ZKSH (1ULL << 15)
! #define RISCV_HWPROBE_EXT_ZKT (1ULL << 16)
! #define RISCV_HWPROBE_EXT_ZVBB (1ULL << 17)
! #define RISCV_HWPROBE_EXT_ZVBC (1ULL << 18)
! #define RISCV_HWPROBE_EXT_ZVKB (1ULL << 19)
! #define RISCV_HWPROBE_EXT_ZVKG (1ULL << 20)
! #define RISCV_HWPROBE_EXT_ZVKNED (1ULL << 21)
! #define RISCV_HWPROBE_EXT_ZVKNHA (1ULL << 22)
! #define RISCV_HWPROBE_EXT_ZVKNHB (1ULL << 23)
! #define RISCV_HWPROBE_EXT_ZVKSED (1ULL << 24)
! #define RISCV_HWPROBE_EXT_ZVKSH (1ULL << 25)
! #define RISCV_HWPROBE_EXT_ZVKT (1ULL << 26)
! #define RISCV_HWPROBE_EXT_ZFH (1ULL << 27)
! #define RISCV_HWPROBE_EXT_ZFHMIN (1ULL << 28)
! #define RISCV_HWPROBE_EXT_ZIHINTNTL (1ULL << 29)
! #define RISCV_HWPROBE_EXT_ZVFH (1ULL << 30)
! #define RISCV_HWPROBE_EXT_ZVFHMIN (1ULL << 31)
! #define RISCV_HWPROBE_EXT_ZFA (1ULL << 32)
! #define RISCV_HWPROBE_EXT_ZTSO (1ULL << 33)
! #define RISCV_HWPROBE_EXT_ZACAS (1ULL << 34)
! #define RISCV_HWPROBE_EXT_ZICOND (1ULL << 35)
! #define RISCV_HWPROBE_EXT_ZIHINTPAUSE (1ULL << 36)
! #define RISCV_HWPROBE_EXT_ZVE32X (1ULL << 37)
! #define RISCV_HWPROBE_EXT_ZVE32F (1ULL << 38)
! #define RISCV_HWPROBE_EXT_ZVE64X (1ULL << 39)
! #define RISCV_HWPROBE_EXT_ZVE64F (1ULL << 40)
! #define RISCV_HWPROBE_EXT_ZVE64D (1ULL << 41)
! #define RISCV_HWPROBE_EXT_ZIMOP  (1ULL << 42)
! #define RISCV_HWPROBE_EXT_ZCA    (1ULL << 43)
! #define RISCV_HWPROBE_EXT_ZCB    (1ULL << 44)
! #define RISCV_HWPROBE_EXT_ZCD    (1ULL << 45)
! #define RISCV_HWPROBE_EXT_ZCF    (1ULL << 46)
! #define RISCV_HWPROBE_EXT_ZCMOP  (1ULL << 47)
! #define RISCV_HWPROBE_EXT_ZAWRS  (1ULL << 48)
! #define RISCV_HWPROBE_EXT_SUPM   (1ULL << 49)
! #define RISCV_HWPROBE_EXT_ZICNTR (1ULL << 50)
! #define RISCV_HWPROBE_EXT_ZIHPM  (1ULL << 51)
! #define RISCV_HWPROBE_EXT_ZFBFMIN (1ULL << 52)
! #define RISCV_HWPROBE_EXT_ZVFBFMIN (1ULL << 53)
! #define RISCV_HWPROBE_EXT_ZVFBFWMA (1ULL << 54)
! #define RISCV_HWPROBE_EXT_ZICBOM (1ULL << 55)
! #define RISCV_HWPROBE_EXT_ZAAMO  (1ULL << 56)
! #define RISCV_HWPROBE_EXT_ZALRSC (1ULL << 57)
! #define RISCV_HWPROBE_EXT_ZABHA  (1ULL << 58)
! #define RISCV_HWPROBE_EXT_ZALASR (1ULL << 59)
! #define RISCV_HWPROBE_EXT_ZICBOP (1ULL << 60)
! #define RISCV_HWPROBE_EXT_ZILSD  (1ULL << 61)
! #define RISCV_HWPROBE_EXT_ZCLSD  (1ULL << 62)
! #define RISCV_HWPROBE_EXT_ZICFILP (1ULL << 63)
! #define RISCV_HWPROBE_KEY_CPUPERF_0 5
! #define RISCV_HWPROBE_MISALIGNED_UNKNOWN (0 << 0)
! #define RISCV_HWPROBE_MISALIGNED_EMULATED (1ULL << 0)
! #define RISCV_HWPROBE_MISALIGNED_SLOW (2 << 0)
! #define RISCV_HWPROBE_MISALIGNED_FAST (3 << 0)
! #define RISCV_HWPROBE_MISALIGNED_UNSUPPORTED (4 << 0)
! #define RISCV_HWPROBE_MISALIGNED_MASK (7 << 0)
! #define RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE 6
! #define RISCV_HWPROBE_KEY_IMA_EXT_1 16
! #define RISCV_HWPROBE_EXT_ZICFISS (1ULL << 0)
! 
! struct riscv_hwprobe {
!   long long key;
!   unsigned long long value;
! };
! 
! static long syscall_5_args (long number, long arg1, long arg2, long arg3,
! 			    long arg4, long arg5)
! {
!   register long a7 __asm__ ("a7") = number;
!   register long a0 __asm__ ("a0") = arg1;
!   register long a1 __asm__ ("a1") = arg2;
!   register long a2 __asm__ ("a2") = arg3;
!   register long a3 __asm__ ("a3") = arg4;
!   register long a4 __asm__ ("a4") = arg5;
!   __asm__ __volatile__ ("ecall\n\t"
! 			: "=r"(a0)
! 			: "r"(a7), "r"(a0), "r"(a1), "r"(a2), "r"(a3), "r"(a4)
! 			: "memory");
!   return a0;
! }
! 
! #define SET_FROM_HWPROBE(HWPROBE_VAR, EXT) \
!   if (HWPROBE_VAR.value & RISCV_HWPROBE_EXT_##EXT) \
!     SET_EXT (EXT)
! 
! #define SET_FROM_IMA_EXT(EXT) \
!   SET_FROM_HWPROBE (hwprobe_ima_ext, EXT)
! 
! #define SET_FROM_IMA_EXT_1(EXT) \
!   SET_FROM_HWPROBE (hwprobe_ima_ext_1, EXT)
  
  static void __init_riscv_features_bits_linux ()
  {
--- 190,196 ----
  #define SET_EXT(EXT) features[EXT##_GROUPID] |= EXT##_BITMASK
  
  #ifdef __linux
! #include "common/config/riscv/riscv-hwprobe.h"
  
  static void __init_riscv_features_bits_linux ()
  {
*************** static void __init_riscv_features_bits_l
*** 314,323 ****
      {RISCV_HWPROBE_KEY_IMA_EXT_0, 0},
      {RISCV_HWPROBE_KEY_IMA_EXT_1, 0},
    };
  
!   long res = syscall_5_args (__NR_riscv_hwprobe, (long)&hwprobes,
! 			     sizeof (hwprobes) / sizeof (hwprobes[0]), 0,
! 			     0, 0);
  
    if (res)
      return;
--- 202,210 ----
      {RISCV_HWPROBE_KEY_IMA_EXT_0, 0},
      {RISCV_HWPROBE_KEY_IMA_EXT_1, 0},
    };
+   const int npairs = sizeof (hwprobes) / sizeof (hwprobes[0]);
  
!   long res = riscv_hwprobe (hwprobes, npairs);
  
    if (res)
      return;
*************** static void __init_riscv_features_bits_l
*** 354,371 ****
       1.  The new extension implies a previous extension (e.g., Zve32f -> F).
       2.  The extensions imply some other extensions appear in the same release
  	 version of Linux Kernel (e.g., Zbc - > Zbkc).  */
! 
!   if (hwprobe_ima_ext.value & RISCV_HWPROBE_IMA_FD)
      {
        SET_EXT (F);
        SET_EXT (D);
      }
  
!   if (hwprobe_ima_ext.value & RISCV_HWPROBE_IMA_C)
      {
        SET_EXT (C);
        SET_EXT (ZCA);
!       if (hwprobe_ima_ext.value & RISCV_HWPROBE_IMA_FD)
  	{
  #if __riscv_xlen == 32
  	  SET_EXT (ZCF);
--- 241,257 ----
       1.  The new extension implies a previous extension (e.g., Zve32f -> F).
       2.  The extensions imply some other extensions appear in the same release
  	 version of Linux Kernel (e.g., Zbc - > Zbkc).  */
!   if (hwprobe_ima_ext.value & (RISCV_HWPROBE_EXT_F | RISCV_HWPROBE_EXT_D))
      {
        SET_EXT (F);
        SET_EXT (D);
      }
  
!   if (hwprobe_ima_ext.value & RISCV_HWPROBE_EXT_C)
      {
        SET_EXT (C);
        SET_EXT (ZCA);
!       if (hwprobe_ima_ext.value & (RISCV_HWPROBE_EXT_F | RISCV_HWPROBE_EXT_D))
  	{
  #if __riscv_xlen == 32
  	  SET_EXT (ZCF);
*************** static void __init_riscv_features_bits_l
*** 375,381 ****
      }
  
    /* Added since Linux v6.5.  */
!   if (hwprobe_ima_ext.value & RISCV_HWPROBE_IMA_V)
      {
        SET_EXT (V);
        SET_EXT (ZVE32X);
--- 261,267 ----
      }
  
    /* Added since Linux v6.5.  */
!   if (hwprobe_ima_ext.value & RISCV_HWPROBE_EXT_V)
      {
        SET_EXT (V);
        SET_EXT (ZVE32X);
*************** static void __init_riscv_features_bits_l
*** 385,458 ****
        SET_EXT (ZVE64D);
      }
  
!   SET_FROM_IMA_EXT (ZBA);
!   SET_FROM_IMA_EXT (ZBB);
!   SET_FROM_IMA_EXT (ZBS);
!   /* Added since Linux v6.7.  */
!   SET_FROM_IMA_EXT (ZICBOZ);
!   /* Added since Linux v6.8.  */
!   SET_FROM_IMA_EXT (ZBC);
!   SET_FROM_IMA_EXT (ZBKB);
!   SET_FROM_IMA_EXT (ZBKC);
!   SET_FROM_IMA_EXT (ZBKX);
!   SET_FROM_IMA_EXT (ZKND);
!   SET_FROM_IMA_EXT (ZKNE);
!   SET_FROM_IMA_EXT (ZKNH);
!   SET_FROM_IMA_EXT (ZKSED);
!   SET_FROM_IMA_EXT (ZKSH);
!   SET_FROM_IMA_EXT (ZKT);
!   SET_FROM_IMA_EXT (ZVBB);
!   SET_FROM_IMA_EXT (ZVBC);
!   SET_FROM_IMA_EXT (ZVKB);
!   SET_FROM_IMA_EXT (ZVKG);
!   SET_FROM_IMA_EXT (ZVKNED);
!   SET_FROM_IMA_EXT (ZVKNHA);
!   SET_FROM_IMA_EXT (ZVKNHB);
!   SET_FROM_IMA_EXT (ZVKSED);
!   SET_FROM_IMA_EXT (ZVKSH);
!   SET_FROM_IMA_EXT (ZVKT);
!   SET_FROM_IMA_EXT (ZFH);
!   SET_FROM_IMA_EXT (ZFHMIN);
!   SET_FROM_IMA_EXT (ZIHINTNTL);
!   SET_FROM_IMA_EXT (ZVFH);
!   SET_FROM_IMA_EXT (ZVFHMIN);
!   SET_FROM_IMA_EXT (ZFA);
!   SET_FROM_IMA_EXT (ZTSO);
!   SET_FROM_IMA_EXT (ZACAS);
!   SET_FROM_IMA_EXT (ZICOND);
!   /* Added since Linux v6.10.  */
!   SET_FROM_IMA_EXT (ZIHINTPAUSE);
!   /* Added since Linux v6.11.  */
!   SET_FROM_IMA_EXT (ZVE32X);
!   SET_FROM_IMA_EXT (ZVE32F);
!   SET_FROM_IMA_EXT (ZVE64X);
!   SET_FROM_IMA_EXT (ZVE64F);
!   SET_FROM_IMA_EXT (ZVE64D);
!   SET_FROM_IMA_EXT (ZIMOP);
!   SET_FROM_IMA_EXT (ZCA);
!   SET_FROM_IMA_EXT (ZCB);
!   SET_FROM_IMA_EXT (ZCD);
!   SET_FROM_IMA_EXT (ZCF);
!   SET_FROM_IMA_EXT (ZCMOP);
!   SET_FROM_IMA_EXT (ZAWRS);
!   SET_FROM_IMA_EXT (SUPM);
!   SET_FROM_IMA_EXT (ZICNTR);
!   SET_FROM_IMA_EXT (ZIHPM);
!   SET_FROM_IMA_EXT (ZFBFMIN);
!   SET_FROM_IMA_EXT (ZVFBFMIN);
!   SET_FROM_IMA_EXT (ZVFBFWMA);
!   SET_FROM_IMA_EXT (ZICBOM);
!   SET_FROM_IMA_EXT (ZAAMO);
!   SET_FROM_IMA_EXT (ZALRSC);
!   SET_FROM_IMA_EXT (ZABHA);
!   SET_FROM_IMA_EXT (ZALASR);
!   SET_FROM_IMA_EXT (ZICBOP);
!   SET_FROM_IMA_EXT (ZILSD);
!   SET_FROM_IMA_EXT (ZCLSD);
!   SET_FROM_IMA_EXT (ZICFILP);
! 
!   const struct riscv_hwprobe hwprobe_ima_ext_1 = hwprobes[5];
!   SET_FROM_IMA_EXT_1 (ZICFISS);
  
    for (i = 0; i < RISCV_FEATURE_BITS_LENGTH; ++i)
      __riscv_feature_bits.features[i] = features[i];
--- 271,280 ----
        SET_EXT (ZVE64D);
      }
  
! #define RISCV_HWPROBE_EXT(NAME, UPPERCASE_NAME, KEY, BIT, XLEN)		\
!   if (riscv_hwprobe_value (hwprobes, npairs, KEY) & (1ULL << (BIT)))	\
!     SET_EXT (UPPERCASE_NAME);
! #include "common/config/riscv/riscv-hwprobe.def"
  
    for (i = 0; i < RISCV_FEATURE_BITS_LENGTH; ++i)
      __riscv_feature_bits.features[i] = features[i];
*************** static void __init_riscv_features_bits_l
*** 464,469 ****
--- 286,293 ----
  
  static int __init = 0;
  
+ void __init_riscv_feature_bits ();
+ 
  void
  __attribute__ ((constructor (101)))
  __init_riscv_feature_bits ()
diff -Nrcpad gcc-17-20260823/libgcobol/ChangeLog gcc-17-20260830/libgcobol/ChangeLog
*** gcc-17-20260823/libgcobol/ChangeLog	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcobol/ChangeLog	Sun Aug 30 22:32:15 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-08-25  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* common-defs.h (class cbl_enabled_exceptions_t): Use complain().
+ 
  2026-08-19  Robert Dubner  <rdubner@symas.com>
  	    James K. Lowden  <jklowden@cobolworx.com>
  
diff -Nrcpad gcc-17-20260823/libgcobol/common-defs.h gcc-17-20260830/libgcobol/common-defs.h
*** gcc-17-20260823/libgcobol/common-defs.h	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcobol/common-defs.h	Sun Aug 30 22:32:15 2026
*************** typedef std::vector<cbl_declarative_t> c
*** 614,624 ****
--- 614,628 ----
  
  class cbl_enabled_exceptions_t : protected std::set<cbl_enabled_exception_t>
  {
+   static void complain( ec_type_t ec );
+ 
    void apply( bool enabled, const cbl_enabled_exception_t& elem ) {
      if( ! enabled ) {
        erase(elem);
        return;
      }
+     complain( elem.ec );
+ 
      auto inserted = insert( elem );
      if( ! inserted.second ) {
        erase(inserted.first);
diff -Nrcpad gcc-17-20260823/libgcobol/gmath.cc gcc-17-20260830/libgcobol/gmath.cc
*** gcc-17-20260823/libgcobol/gmath.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcobol/gmath.cc	Sun Aug 30 22:32:15 2026
*************** conditional_stash(  cblc_field_t *destin
*** 75,87 ****
      {
      // It's an uncomplicated assignment, because there was no
      // ON SIZE ERROR phrase
!     __gg__int128_to_qualified_field(destination,
!                                     destination_o,
!                                     destination_s,
!                                     value,
!                                     rdigits,
!                                     rounded,
!                                     &retval);
      }
    else
      {
--- 75,86 ----
      {
      // It's an uncomplicated assignment, because there was no
      // ON SIZE ERROR phrase
!     retval = __gg__int128_to_qualified_field(destination,
!                                              destination_o,
!                                              destination_s,
!                                              value,
!                                              rdigits,
!                                              rounded);
      }
    else
      {
*************** conditional_stash(  cblc_field_t *destin
*** 92,104 ****
      massert(stash);
      memcpy(stash, destination->data+destination_o, destination_s);
  
!     __gg__int128_to_qualified_field(destination,
!                                     destination_o,
!                                     destination_s,
!                                     value,
!                                     rdigits,
!                                     rounded,
!                                     &retval);
      if( retval )
        {
        // Because there was a size error, we will report that
--- 91,102 ----
      massert(stash);
      memcpy(stash, destination->data+destination_o, destination_s);
  
!     retval = __gg__int128_to_qualified_field(destination,
!                                              destination_o,
!                                              destination_s,
!                                              value,
!                                              rdigits,
!                                              rounded);
      if( retval )
        {
        // Because there was a size error, we will report that
*************** __gg__dividef45(cbl_arith_format_t ,
*** 1986,2004 ****
  
      if( !error_this_time )
        {
!       *compute_error |= conditional_stash(C[1].field, C[1].offset, C[1].size,
                                            on_size_error,
                                            c_value,
!                                           *rounded_p++);
        // This is floating point, and there is a remainder, and we don't know
!       // what that means.  Set the remainder to zero
        if( !*compute_error )
          {
          c_value = 0;
!         *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                              on_size_error,
                                              c_value,
!                                             *rounded_p++);
          }
        }
      }
--- 1984,2010 ----
  
      if( !error_this_time )
        {
!       // C[0] is the temporary remainder and C[1] is the quotient.
!       // The quotient's rounding mode is therefore rounded_p[1].
!       *compute_error |= conditional_stash(C[1].field,
!                                           C[1].offset,
!                                           C[1].size,
                                            on_size_error,
                                            c_value,
!                                           rounded_p[1]);
! 
        // This is floating point, and there is a remainder, and we don't know
!       // what that means.  Set the remainder to zero.  A remainder has no
!       // ROUNDED phrase, so use truncation explicitly.
        if( !*compute_error )
          {
          c_value = 0;
!         *compute_error |= conditional_stash(C[0].field,
!                                             C[0].offset,
!                                             C[0].size,
                                              on_size_error,
                                              c_value,
!                                             truncation_e);
          }
        }
      }
*************** __gg__compute_fixed(const char
*** 2482,2494 ****
    value <<= 64;
    value  +=  v256.i64[0];
  
!   __gg__int128_to_qualified_field(target,
!                                   target_offset,
!                                   target->capacity,
!                                   value,
!                                   v256.rdigits,
!                                   truncation_e,
!                                   &retval);
    return retval;
    }
  
--- 2488,2499 ----
    value <<= 64;
    value  +=  v256.i64[0];
  
!   retval |= __gg__int128_to_qualified_field(target,
!                                             target_offset,
!                                             target->capacity,
!                                             value,
!                                             v256.rdigits,
!                                             truncation_e);
    return retval;
    }
  
diff -Nrcpad gcc-17-20260823/libgcobol/inspect.cc gcc-17-20260830/libgcobol/inspect.cc
*** gcc-17-20260823/libgcobol/inspect.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcobol/inspect.cc	Sun Aug 30 22:32:15 2026
*************** inspect_backward_format_1(const size_t i
*** 1180,1187 ****
                                      id_2_results[i].id2_s,
                                      id_2_value.i128,
                                      0,
!                                     truncation_e,
!                                     NULL);
      }
    }
  
--- 1180,1186 ----
                                      id_2_results[i].id2_s,
                                      id_2_value.i128,
                                      0,
!                                     truncation_e);
      }
    }
  
*************** __gg__inspect_format_1( int backward,
*** 1549,1556 ****
                                      id_2_results[i].id2_s,
                                      id_2_value.i128,
                                      0,
!                                     truncation_e,
!                                     NULL);
      }
    }
  
--- 1548,1554 ----
                                      id_2_results[i].id2_s,
                                      id_2_value.i128,
                                      0,
!                                     truncation_e);
      }
    }
  
*************** __gg__inspect_format_1_sbc( int backward
*** 3011,3017 ****
                                      id_2_results[i].id2_s,
                                      id_2_value.i128,
                                      0,
!                                     truncation_e,
!                                     NULL);
      }
    }
--- 3009,3014 ----
                                      id_2_results[i].id2_s,
                                      id_2_value.i128,
                                      0,
!                                     truncation_e);
      }
    }
diff -Nrcpad gcc-17-20260823/libgcobol/libgcobol.cc gcc-17-20260830/libgcobol/libgcobol.cc
*** gcc-17-20260823/libgcobol/libgcobol.cc	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcobol/libgcobol.cc	Sun Aug 30 22:32:15 2026
***************
*** 40,45 ****
--- 40,46 ----
  #include <unordered_map>
  #include <vector>
  #include <cwctype>
+ #include <limits>
  
  #include <dirent.h>
  #include <dlfcn.h>
*************** const char *__gg__exception_source_file
*** 211,217 ****
  int         __gg__exception_line_number       = 0    ;
  const char *__gg__exception_statement         = NULL ;
  int         __gg__default_compute_error       = 0    ;
! int         __gg__rdigits                     = 0    ;
  int         __gg__nop                         = 0    ;
  int         __gg__main_called                 = 0    ;
  size_t      __gg__entry_index                 = 0    ;
--- 212,218 ----
  int         __gg__exception_line_number       = 0    ;
  const char *__gg__exception_statement         = NULL ;
  int         __gg__default_compute_error       = 0    ;
! int         __gg__fracdigits                     = 0    ;
  int         __gg__nop                         = 0    ;
  int         __gg__main_called                 = 0    ;
  size_t      __gg__entry_index                 = 0    ;
*************** __int128
*** 1376,1383 ****
  __gg__scale_by_power_of_ten_1(__int128 value, int N)
    {
    // This routine is called when the result of the scaling is not allowed to
!   // have non-zero rdigits.  __gg__rdigits is set to 1 when the result is
!   // in the bad zone.  The ultimate caller needs to examine __gg__rdigits to
    // decide what to do about it.
  
    // This is a separate routine because of the performance hit caused by the
--- 1377,1384 ----
  __gg__scale_by_power_of_ten_1(__int128 value, int N)
    {
    // This routine is called when the result of the scaling is not allowed to
!   // have non-zero rdigits.  __gg__fracdigits is set to 1 when the result is
!   // in the bad zone.  The ultimate caller needs to examine __gg__fracdigits to
    // decide what to do about it.
  
    // This is a separate routine because of the performance hit caused by the
*************** __gg__scale_by_power_of_ten_1(__int128 v
*** 1385,1405 ****
    // turned on.
    if( N > 0 )
      {
!     __gg__rdigits = 0;
      value *= __gg__power_of_ten(N);
      }
    else if( N < 0)
      {
!     // We throwing away the N rightmost digits.  Use __gg__rdigits
      // to let the calling chain know they were non-zero:
      __int128 pot = __gg__power_of_ten(-N);
      if( value % pot)
        {
!       __gg__rdigits = 1;
        }
      else
        {
!       __gg__rdigits = 0;
        }
  
      value /= pot;
--- 1386,1406 ----
    // turned on.
    if( N > 0 )
      {
!     __gg__fracdigits = 0;
      value *= __gg__power_of_ten(N);
      }
    else if( N < 0)
      {
!     // We throwing away the N rightmost digits.  Use __gg__fracdigits
      // to let the calling chain know they were non-zero:
      __int128 pot = __gg__power_of_ten(-N);
      if( value % pot)
        {
!       __gg__fracdigits = 1;
        }
      else
        {
!       __gg__fracdigits = 0;
        }
  
      value /= pot;
*************** __gg__scale_by_power_of_ten_1(__int128 v
*** 1407,1413 ****
    else
      {
      // N is zero
!     __gg__rdigits = 0;
      }
    return value;
    }
--- 1408,1414 ----
    else
      {
      // N is zero
!     __gg__fracdigits = 0;
      }
    return value;
    }
*************** extern "C"
*** 4529,4535 ****
  int
  __gg__compare_field_class(const cblc_field_t  *conditional,
                      unsigned char       *conditional_location,
!                     int                  conditional_length,
                      cblc_field_t        *list)
    {
    int retval = 1; // Zero means equal
--- 4530,4536 ----
  int
  __gg__compare_field_class(const cblc_field_t  *conditional,
                      unsigned char       *conditional_location,
!                     size_t               conditional_length,
                      cblc_field_t        *list)
    {
    int retval = 1; // Zero means equal
*************** __gg__move( cblc_field_t        *fdest,
*** 6882,6895 ****
                  }
                }
  
!             __gg__int128_to_qualified_field(
!                                   fdest,
!                                   dest_offset,
!                                   dest_size,
!                                   val128.i128,
!                                   val128.rdigits,
!                                   rounded,
!                                   &size_error );
              break;
              }
  
--- 6883,6894 ----
                  }
                }
  
!             size_error = __gg__int128_to_qualified_field(fdest,
!                                                      dest_offset,
!                                                      dest_size,
!                                                      val128.i128,
!                                                      val128.rdigits,
!                                                      rounded);
              break;
              }
  
*************** __gg__move( cblc_field_t        *fdest,
*** 6945,6958 ****
                {
                value128 = -value128;
                }
!             __gg__int128_to_qualified_field(
!                                   fdest,
!                                   dest_offset,
!                                   dest_size,
!                                   value128,
!                                   rdigits,
!                                   rounded,
!                                   &size_error );
              break;
              }
  
--- 6944,6955 ----
                {
                value128 = -value128;
                }
!             size_error = __gg__int128_to_qualified_field( fdest,
!                                                           dest_offset,
!                                                           dest_size,
!                                                           value128,
!                                                           rdigits,
!                                                           rounded);
              break;
              }
  
*************** __gg__move( cblc_field_t        *fdest,
*** 7005,7017 ****
                                                fsource,
                                                source_offset,
                                                source_size);
!            __gg__int128_to_qualified_field( fdest,
!                                             dest_offset,
!                                             dest_size,
!                                             val128.i128,
!                                             val128.rdigits,
!                                             rounded,
!                                             &size_error );
              break;
              }
  
--- 7002,7013 ----
                                                fsource,
                                                source_offset,
                                                source_size);
!            size_error = __gg__int128_to_qualified_field(fdest,
!                                                         dest_offset,
!                                                         dest_size,
!                                                         val128.i128,
!                                                         val128.rdigits,
!                                                         rounded);
              break;
              }
  
*************** __gg__move_literala(cblc_field_t *field,
*** 7288,7301 ****
            value %= __gg__power_of_ten(field->digits);
            }
          }
!       __gg__int128_to_qualified_field(
!                             field,
!                             field_offset,
!                             field_size,
!                             value,
!                             rdigits,
!                             rounded,
!                             &size_error );
        break;
        }
  
--- 7284,7295 ----
            value %= __gg__power_of_ten(field->digits);
            }
          }
!       size_error = __gg__int128_to_qualified_field( field,
!                                                     field_offset,
!                                                     field_size,
!                                                     value,
!                                                     rdigits,
!                                                     rounded);
        break;
        }
  
*************** __gg__move_literala(cblc_field_t *field,
*** 7311,7324 ****
                                      field->encoding,
                                      strlen,
                                      &rdigits );
!       __gg__int128_to_qualified_field(
!                             field,
!                             field_offset,
!                             field_size,
!                             value,
!                             rdigits,
!                             rounded,
!                             &size_error );
        break;
  
      case FldAlphaEdited:
--- 7305,7316 ----
                                      field->encoding,
                                      strlen,
                                      &rdigits );
!       size_error = __gg__int128_to_qualified_field( field,
!                                                     field_offset,
!                                                     field_size,
!                                                     value,
!                                                     rdigits,
!                                                     rounded);
        break;
  
      case FldAlphaEdited:
*************** move_string(cblc_field_t *field,
*** 7825,7832 ****
                                        length,
                                        value,
                                        rdigits,
!                                       truncation_e,
!                                       NULL);
        break;
        }
  
--- 7817,7823 ----
                                        length,
                                        value,
                                        rdigits,
!                                       truncation_e);
        break;
        }
  
*************** __gg__string(const size_t integers[], co
*** 8120,8127 ****
                                        ref[INDEX_OF_POINTER].size,
                                        (__int128)(pointer+1),
                                        0,
!                                       truncation_e,
!                                       NULL );
        }
      }
    else
--- 8111,8117 ----
                                        ref[INDEX_OF_POINTER].size,
                                        (__int128)(pointer+1),
                                        0,
!                                       truncation_e);
        }
      }
    else
*************** we_are_done:
*** 8518,8525 ****
                                        length,
                                        value,
                                        rdigits,
!                                       truncation_e,
!                                       NULL);
        break;
        }
  
--- 8508,8514 ----
                                        length,
                                        value,
                                        rdigits,
!                                       truncation_e);
        break;
        }
  
*************** we_are_done:
*** 8541,8548 ****
                                        length,
                                        value,
                                        rdigits,
!                                       truncation_e,
!                                       NULL);
        break;
        }
      }
--- 8530,8536 ----
                                        length,
                                        value,
                                        rdigits,
!                                       truncation_e);
        break;
        }
      }
*************** __gg__int128_to_field(cblc_field_t   *tg
*** 8687,8708 ****
    }
  
  extern "C"
! void
  __gg__int128_to_qualified_field(cblc_field_t   *tgt,
                                  size_t          offset,
                                  size_t          length,
                                  __int128        value,
                                  int             source_rdigits,
!                                 enum cbl_round_t  rounded,
!                                 int            *compute_error)
    {
    int128_to_field(tgt,
                    tgt->data + offset,
                    length ? length : tgt->capacity,
                    value,
                    source_rdigits,
                    rounded,
!                   compute_error);
    }
  
  static __int128
--- 8675,8697 ----
    }
  
  extern "C"
! int
  __gg__int128_to_qualified_field(cblc_field_t   *tgt,
                                  size_t          offset,
                                  size_t          length,
                                  __int128        value,
                                  int             source_rdigits,
!                                 enum cbl_round_t  rounded)
    {
+   int            compute_error = 0;
    int128_to_field(tgt,
                    tgt->data + offset,
                    length ? length : tgt->capacity,
                    value,
                    source_rdigits,
                    rounded,
!                   &compute_error);
!   return compute_error;
    }
  
  static __int128
*************** __gg__unstring( const cblc_referlet_t *i
*** 10289,10296 ****
                                        id6[nreceiver].size,
                                        (__int128)examined,
                                        0,
!                                       truncation_e,
!                                       NULL );
        }
  
      // Update the state variables:
--- 10278,10284 ----
                                        id6[nreceiver].size,
                                        (__int128)examined,
                                        0,
!                                       truncation_e);
        }
  
      // Update the state variables:
*************** done:
*** 10311,10318 ****
                                      id8_s,
                                      (__int128)tally,
                                      0,
!                                     truncation_e,
!                                     NULL );
      }
  
    if( id7 )
--- 10299,10305 ----
                                      id8_s,
                                      (__int128)tally,
                                      0,
!                                     truncation_e);
      }
  
    if( id7 )
*************** done:
*** 10322,10329 ****
                                      id7_s,
                                      (__int128)pointer,
                                      0,
!                                     truncation_e,
!                                     NULL );
      }
  
    if( left < right )
--- 10309,10315 ----
                                      id7_s,
                                      (__int128)pointer,
                                      0,
!                                     truncation_e);
      }
  
    if( left < right )
*************** __gg__show_int128(__int128 val)
*** 13072,13084 ****
    }
  
  extern "C"
! void
! __gg__compare_string_all(int            *result,
!                    const unsigned char  *left,
!                          size_t          length_left,
!                          int             stride,
!                    const unsigned char  *right,
!                          size_t          length_right)
    {
    // "all" in the name is in the confusing COBOL sense, as in VALUE ALL "A".
  
--- 13058,13069 ----
    }
  
  extern "C"
! int
! __gg__compare_string_all(const unsigned char  *left,
!                                size_t          length_left,
!                                int             stride,
!                          const unsigned char  *right,
!                                size_t          length_right)
    {
    // "all" in the name is in the confusing COBOL sense, as in VALUE ALL "A".
  
*************** __gg__compare_string_all(int
*** 13090,13096 ****
       and so on.  So, for now if the stride is one, we use the display
       alphabet. */
  
!   *result = 0;
    size_t index = 0;
    if( stride == 1 )
      {
--- 13075,13081 ----
       and so on.  So, for now if the stride is one, we use the display
       alphabet. */
  
!   int result = 0;
    size_t index = 0;
    if( stride == 1 )
      {
*************** __gg__compare_string_all(int
*** 13101,13107 ****
  
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          break;
          }
        index += 1;
--- 13086,13092 ----
  
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          break;
          }
        index += 1;
*************** __gg__compare_string_all(int
*** 13118,13124 ****
                                                 + (index % length_right) * 2);
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          break;
          }
        index += 1;
--- 13103,13109 ----
                                                 + (index % length_right) * 2);
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          break;
          }
        index += 1;
*************** __gg__compare_string_all(int
*** 13135,13161 ****
                                                 + (index % length_right) * 4);
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          break;
          }
        index += 1;
        }
      }
    }
  
  extern "C"
! void
! __gg__compare_string_1( int            *result,
!                   const unsigned char  *left,
!                         size_t          length_left,
!                   const unsigned char  *right,
!                         size_t          length_right,
!                   const unsigned char  *char_space)
    {
    // This is the the routine that will probably do all of the real-world work,
    // the following routines not withstanding.  It does single-byte comparisons
    // through the collation table.
!   *result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
--- 13120,13146 ----
                                                 + (index % length_right) * 4);
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          break;
          }
        index += 1;
        }
      }
+   return result;
    }
  
  extern "C"
! int
! __gg__compare_string_1( const unsigned char  *left,
!                               size_t          length_left,
!                         const unsigned char  *right,
!                               size_t          length_right,
!                         const unsigned char  *char_space)
    {
    // This is the the routine that will probably do all of the real-world work,
    // the following routines not withstanding.  It does single-byte comparisons
    // through the collation table.
!   int result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
*************** __gg__compare_string_1( int            *
*** 13165,13183 ****
      unsigned char ch_r = collated(right[index]);
      if( ch_l != ch_r )
        {
!       *result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 1;
      }
!   if( *result == 0 )
      {
      while( index < length_left )
        {
        unsigned char ch_l = collated(left[index]);
        if( ch_l != *char_space )
          {
!         *result =  ch_l < *char_space ? -1 : +1 ;
          goto done;
          }
        index += 1;
--- 13150,13168 ----
      unsigned char ch_r = collated(right[index]);
      if( ch_l != ch_r )
        {
!       result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 1;
      }
!   if( result == 0 )
      {
      while( index < length_left )
        {
        unsigned char ch_l = collated(left[index]);
        if( ch_l != *char_space )
          {
!         result =  ch_l < *char_space ? -1 : +1 ;
          goto done;
          }
        index += 1;
*************** __gg__compare_string_1( int            *
*** 13187,13200 ****
        unsigned char ch_r = collated(right[index]);
        if( *char_space != ch_r )
          {
!         *result =  *char_space < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
        }
      }
    done:
!   return;
    }
  
  #define ASCII_16 "                "
--- 13172,13185 ----
        unsigned char ch_r = collated(right[index]);
        if( *char_space != ch_r )
          {
!         result =  *char_space < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
        }
      }
    done:
!   return result;
    }
  
  #define ASCII_16 "                "
*************** static const unsigned char  ascii_1024[1
*** 13211,13218 ****
  static const unsigned char ebcdic_1024[1025] = EBCDIC_1024;
  
  extern "C"
! void
! __gg__compare_string_1a( int            *result,
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
--- 13196,13203 ----
  static const unsigned char ebcdic_1024[1025] = EBCDIC_1024;
  
  extern "C"
! int
! __gg__compare_string_1a(
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
*************** __gg__compare_string_1a( int
*** 13221,13231 ****
    {
    // This is the rarely-seen, but simplest routine of all, comparing
    // single-byte ASCII characters in the same encoding without fear or favor.
!   *result = 0;
  
    size_t length = std::min(length_left, length_right);
!   *result = memcmp(left, right, length);
!   if( *result == 0 )
      {
      if( length < length_left ) // Right is shorter than Left
        {
--- 13206,13216 ----
    {
    // This is the rarely-seen, but simplest routine of all, comparing
    // single-byte ASCII characters in the same encoding without fear or favor.
!   int result = 0;
  
    size_t length = std::min(length_left, length_right);
!   result = memcmp(left, right, length);
!   if( result == 0 )
      {
      if( length < length_left ) // Right is shorter than Left
        {
*************** __gg__compare_string_1a( int
*** 13236,13243 ****
        while( length_left )
          {
          size_t this_time = std::min(1024UL, length_left);
!         *result = memcmp(left, ascii_1024, this_time);
!         if( *result )
            {
            break;
            }
--- 13221,13228 ----
        while( length_left )
          {
          size_t this_time = std::min(1024UL, length_left);
!         result = memcmp(left, ascii_1024, this_time);
!         if( result )
            {
            break;
            }
*************** __gg__compare_string_1a( int
*** 13254,13261 ****
        while( length_right )
          {
          size_t this_time = std::min(1024UL, length_right);
!         *result = memcmp(ascii_1024, right, this_time);
!         if( *result )
            {
            break;
            }
--- 13239,13246 ----
        while( length_right )
          {
          size_t this_time = std::min(1024UL, length_right);
!         result = memcmp(ascii_1024, right, this_time);
!         if( result )
            {
            break;
            }
*************** __gg__compare_string_1a( int
*** 13264,13275 ****
          }
        }
      }
!   return;
    }
  
  extern "C"
! void
! __gg__compare_string_1e( int            *result,
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
--- 13249,13260 ----
          }
        }
      }
!   return result;
    }
  
  extern "C"
! int
! __gg__compare_string_1e(
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
*************** __gg__compare_string_1e( int
*** 13278,13288 ****
    {
    // This is the rarely-seen, but simplest routine of all, comparing
    // single-byte EBCDIC characters in the same encoding without fear or favor.
!   *result = 0;
  
    size_t length = std::min(length_left, length_right);
!   *result = memcmp(left, right, length);
!   if( *result == 0 )
      {
      if( length < length_left ) // Right is shorter than Left
        {
--- 13263,13273 ----
    {
    // This is the rarely-seen, but simplest routine of all, comparing
    // single-byte EBCDIC characters in the same encoding without fear or favor.
!   int result = 0;
  
    size_t length = std::min(length_left, length_right);
!   result = memcmp(left, right, length);
!   if( result == 0 )
      {
      if( length < length_left ) // Right is shorter than Left
        {
*************** __gg__compare_string_1e( int
*** 13293,13300 ****
        while( length_left )
          {
          size_t this_time = std::min(1024UL, length_left);
!         *result = memcmp(left, ebcdic_1024, this_time);
!         if( *result )
            {
            break;
            }
--- 13278,13285 ----
        while( length_left )
          {
          size_t this_time = std::min(1024UL, length_left);
!         result = memcmp(left, ebcdic_1024, this_time);
!         if( result )
            {
            break;
            }
*************** __gg__compare_string_1e( int
*** 13311,13318 ****
        while( length_right )
          {
          size_t this_time = std::min(1024UL, length_right);
!         *result = memcmp(ebcdic_1024, right, this_time);
!         if( *result )
            {
            break;
            }
--- 13296,13303 ----
        while( length_right )
          {
          size_t this_time = std::min(1024UL, length_right);
!         result = memcmp(ebcdic_1024, right, this_time);
!         if( result )
            {
            break;
            }
*************** __gg__compare_string_1e( int
*** 13321,13332 ****
          }
        }
      }
!   return;
    }
  
  extern "C"
! void
! __gg__compare_string_2( int            *result,
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
--- 13306,13317 ----
          }
        }
      }
!   return result;
    }
  
  extern "C"
! int
! __gg__compare_string_2(
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
*************** __gg__compare_string_2( int            *
*** 13340,13346 ****
  
    bool is_little_endian = *char_space != 0;
  
!   *result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
--- 13325,13331 ----
  
    bool is_little_endian = *char_space != 0;
  
!   int result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
*************** __gg__compare_string_2( int            *
*** 13366,13372 ****
      uint32_t ch_r = collated(index_r);
      if( ch_l != ch_r )
        {
!       *result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
--- 13351,13357 ----
      uint32_t ch_r = collated(index_r);
      if( ch_l != ch_r )
        {
!       result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
*************** __gg__compare_string_2( int            *
*** 13386,13392 ****
      uint32_t ch_l = collated(index_l);
      if( ch_l != ascii_space )
        {
!       *result =  ch_l < ascii_space ? -1 : +1 ;
        goto done;
        }
      index += 2;
--- 13371,13377 ----
      uint32_t ch_l = collated(index_l);
      if( ch_l != ascii_space )
        {
!       result =  ch_l < ascii_space ? -1 : +1 ;
        goto done;
        }
      index += 2;
*************** __gg__compare_string_2( int            *
*** 13406,13423 ****
      uint32_t ch_r = collated(index_r);
      if( ascii_space != ch_r )
        {
!       *result =  ascii_space < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
      }
    done:
!   return;
    }
  
  extern "C"
! void
! __gg__compare_string_2a( int            *result,
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
--- 13391,13408 ----
      uint32_t ch_r = collated(index_r);
      if( ascii_space != ch_r )
        {
!       result =  ascii_space < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
      }
    done:
!   return result;
    }
  
  extern "C"
! int
! __gg__compare_string_2a(
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
*************** __gg__compare_string_2a( int
*** 13425,13431 ****
                     const char           *char_space)
    {
    // This compares two-byte character strings.
!   *result = 0;
  
    length_left/=2;
    length_left*=2;
--- 13410,13416 ----
                     const char           *char_space)
    {
    // This compares two-byte character strings.
!   int result = 0;
  
    length_left/=2;
    length_left*=2;
*************** __gg__compare_string_2a( int
*** 13455,13461 ****
        ch_r = right[index+1];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        // And then compare the low bytes
--- 13440,13446 ----
        ch_r = right[index+1];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        // And then compare the low bytes
*************** __gg__compare_string_2a( int
*** 13463,13469 ****
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
--- 13448,13454 ----
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
*************** __gg__compare_string_2a( int
*** 13477,13489 ****
        ch_l = left[index+1];
        if( ch_l != char_space[1] )
          {
!         *result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index];
        if( ch_l != char_space[0] )
          {
!         *result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        index += stride;
--- 13462,13474 ----
        ch_l = left[index+1];
        if( ch_l != char_space[1] )
          {
!         result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index];
        if( ch_l != char_space[0] )
          {
!         result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        index += stride;
*************** __gg__compare_string_2a( int
*** 13494,13506 ****
        ch_r = right[index+1];
        if( char_space[1] != ch_r )
          {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index];
        if( char_space[0] != ch_r )
          {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
--- 13479,13491 ----
        ch_r = right[index+1];
        if( char_space[1] != ch_r )
          {
!         result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index];
        if( char_space[0] != ch_r )
          {
!         result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
*************** __gg__compare_string_2a( int
*** 13518,13524 ****
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
--- 13503,13509 ----
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
*************** __gg__compare_string_2a( int
*** 13531,13543 ****
        ch_l = left[index++];
        if( ch_l != char_space[0] )
          {
!         *result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index++];
        if( ch_l != char_space[1] )
          {
!         *result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        }
--- 13516,13528 ----
        ch_l = left[index++];
        if( ch_l != char_space[0] )
          {
!         result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index++];
        if( ch_l != char_space[1] )
          {
!         result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        }
*************** __gg__compare_string_2a( int
*** 13547,13570 ****
        ch_r = right[index++];
        if( char_space[0] != ch_r )
          {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index++];
        if( char_space[1] != ch_r )
          {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        }
      }
    done:
!   return;
    }
  
  extern "C"
! void
! __gg__compare_string_4( int            *result,
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
--- 13532,13555 ----
        ch_r = right[index++];
        if( char_space[0] != ch_r )
          {
!         result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index++];
        if( char_space[1] != ch_r )
          {
!         result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        }
      }
    done:
!   return result;
    }
  
  extern "C"
! int
! __gg__compare_string_4(
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
*************** __gg__compare_string_4( int            *
*** 13578,13584 ****
  
    bool is_little_endian = *char_space != 0;
  
!   *result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
--- 13563,13569 ----
  
    bool is_little_endian = *char_space != 0;
  
!   int result = 0;
  
    size_t length = std::min(length_left, length_right);
    size_t index = 0;
*************** __gg__compare_string_4( int            *
*** 13616,13622 ****
      uint32_t ch_r = collated(index_r);
      if( ch_l != ch_r )
        {
!       *result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
--- 13601,13607 ----
      uint32_t ch_r = collated(index_r);
      if( ch_l != ch_r )
        {
!       result =  ch_l < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
*************** __gg__compare_string_4( int            *
*** 13642,13648 ****
      uint32_t ch_l = collated(index_l);
      if( ch_l != ascii_space )
        {
!       *result =  ch_l < ascii_space ? -1 : +1 ;
        goto done;
        }
      index += 2;
--- 13627,13633 ----
      uint32_t ch_l = collated(index_l);
      if( ch_l != ascii_space )
        {
!       result =  ch_l < ascii_space ? -1 : +1 ;
        goto done;
        }
      index += 2;
*************** __gg__compare_string_4( int            *
*** 13668,13685 ****
      uint32_t ch_r = collated(index_r);
      if( ascii_space != ch_r )
        {
!       *result =  ascii_space < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
      }
    done:
!   return;
    }
  
  extern "C"
! void
! __gg__compare_string_4a( int            *result,
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
--- 13653,13670 ----
      uint32_t ch_r = collated(index_r);
      if( ascii_space != ch_r )
        {
!       result =  ascii_space < ch_r ? -1 : +1 ;
        goto done;
        }
      index += 2;
      }
    done:
!   return result;
    }
  
  extern "C"
! int
! __gg__compare_string_4a(
                     const unsigned char  *left,
                           size_t          length_left,
                     const unsigned char  *right,
*************** __gg__compare_string_4a( int
*** 13687,13693 ****
                     const char           *char_space)
    {
    // This compares four-byte character strings.
!   *result = 0;
  
    length_left/=4;
    length_left*=4;
--- 13672,13678 ----
                     const char           *char_space)
    {
    // This compares four-byte character strings.
!   int result = 0;
  
    length_left/=4;
    length_left*=4;
*************** __gg__compare_string_4a( int
*** 13717,13737 ****
        ch_r = right[index+3];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_l =  left[index+2];
        ch_r = right[index+2];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_l =  left[index+1];
        ch_r = right[index+1];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        // And then compare the low bytes
--- 13702,13722 ----
        ch_r = right[index+3];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_l =  left[index+2];
        ch_r = right[index+2];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_l =  left[index+1];
        ch_r = right[index+1];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        // And then compare the low bytes
*************** __gg__compare_string_4a( int
*** 13739,13745 ****
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
--- 13724,13730 ----
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
*************** __gg__compare_string_4a( int
*** 13753,13777 ****
        ch_l = left[index+3];
        if( ch_l != char_space[3] )
          {
!         *result =  ch_l < char_space[3] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index+2];
        if( ch_l != char_space[2] )
          {
!         *result =  ch_l < char_space[2] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index+1];
        if( ch_l != char_space[1] )
          {
!         *result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index];
        if( ch_l != char_space[0] )
          {
!         *result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        index += stride;
--- 13738,13762 ----
        ch_l = left[index+3];
        if( ch_l != char_space[3] )
          {
!         result =  ch_l < char_space[3] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index+2];
        if( ch_l != char_space[2] )
          {
!         result =  ch_l < char_space[2] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index+1];
        if( ch_l != char_space[1] )
          {
!         result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index];
        if( ch_l != char_space[0] )
          {
!         result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        index += stride;
*************** __gg__compare_string_4a( int
*** 13782,13806 ****
        ch_r = right[index+3];
        if( char_space[3] != ch_r )
          {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index+2];
        if( char_space[2] != ch_r )
          {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index+1];
        if( char_space[1] != ch_r )
          {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index];
        if( char_space[0] != ch_r )
          {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
--- 13767,13791 ----
        ch_r = right[index+3];
        if( char_space[3] != ch_r )
          {
!         result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index+2];
        if( char_space[2] != ch_r )
          {
!         result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index+1];
        if( char_space[1] != ch_r )
          {
!         result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index];
        if( char_space[0] != ch_r )
          {
!         result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
*************** __gg__compare_string_4a( int
*** 13818,13824 ****
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         *result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
--- 13803,13809 ----
        ch_r = right[index];
        if( ch_l != ch_r )
          {
!         result =  ch_l < ch_r ? -1 : +1 ;
          goto done;
          }
        index += 1;
*************** __gg__compare_string_4a( int
*** 13831,13853 ****
        ch_l = left[index++];
        if( ch_l != char_space[0] )
          {
!         *result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index++];
        if( ch_l != char_space[1] )
          {
!         *result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        if( ch_l != char_space[2] )
          {
!         *result =  ch_l < char_space[2] ? -1 : +1 ;
          goto done;
          }
        if( ch_l != char_space[3] )
          {
!         *result =  ch_l < char_space[3] ? -1 : +1 ;
          goto done;
          }
        }
--- 13816,13838 ----
        ch_l = left[index++];
        if( ch_l != char_space[0] )
          {
!         result =  ch_l < char_space[0] ? -1 : +1 ;
          goto done;
          }
        ch_l = left[index++];
        if( ch_l != char_space[1] )
          {
!         result =  ch_l < char_space[1] ? -1 : +1 ;
          goto done;
          }
        if( ch_l != char_space[2] )
          {
!         result =  ch_l < char_space[2] ? -1 : +1 ;
          goto done;
          }
        if( ch_l != char_space[3] )
          {
!         result =  ch_l < char_space[3] ? -1 : +1 ;
          goto done;
          }
        }
*************** __gg__compare_string_4a( int
*** 13857,13901 ****
        ch_r = right[index++];
        if( char_space[0] != ch_r )
          {
!         *result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index];
        if( char_space[1] != ch_r )
          {
!         *result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        if( char_space[2] != ch_r )
          {
!         *result =  char_space[2] < ch_r ? -1 : +1 ;
          goto done;
          }
        if( char_space[3] != ch_r )
          {
!         *result =  char_space[3] < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
        }
      }
    done:
!   return;
    }
  
  extern "C"
! void
! __gg_compare_string_different(int            *result,
!                         const unsigned char  *left,
!                               size_t          length_left,
!                               cbl_encoding_t  encoding_left,
!                         const unsigned char  *right,
!                               size_t          length_right,
!                               cbl_encoding_t  encoding_right)
    {
    /*  This routine converts the right string to the left encoding, and then
        compares the results.  In the case where the left side is the
        __gg__display_encoding, the `collated` table is used. */
    const charmap_t *charmap = __gg__get_charmap(encoding_left);
    int stride = charmap->stride();
    unsigned char ach_space[4];
--- 13842,13886 ----
        ch_r = right[index++];
        if( char_space[0] != ch_r )
          {
!         result =  char_space[0] < ch_r ? -1 : +1 ;
          goto done;
          }
        ch_r = right[index];
        if( char_space[1] != ch_r )
          {
!         result =  char_space[1] < ch_r ? -1 : +1 ;
          goto done;
          }
        if( char_space[2] != ch_r )
          {
!         result =  char_space[2] < ch_r ? -1 : +1 ;
          goto done;
          }
        if( char_space[3] != ch_r )
          {
!         result =  char_space[3] < ch_r ? -1 : +1 ;
          goto done;
          }
        index += stride;
        }
      }
    done:
!   return result;
    }
  
  extern "C"
! int
! __gg_compare_string_different(const unsigned char  *left,
!                                     size_t          length_left,
!                                     cbl_encoding_t  encoding_left,
!                               const unsigned char  *right,
!                                     size_t          length_right,
!                                     cbl_encoding_t  encoding_right)
    {
    /*  This routine converts the right string to the left encoding, and then
        compares the results.  In the case where the left side is the
        __gg__display_encoding, the `collated` table is used. */
+   int result = 0;
    const charmap_t *charmap = __gg__get_charmap(encoding_left);
    int stride = charmap->stride();
    unsigned char ach_space[4];
*************** __gg_compare_string_different(int
*** 13917,13965 ****
      {
      case 1:
        {
!       __gg__compare_string_1a( result,
!                                left,
!                                length_left,
!                                as_unsigned_chars(converted),
!                                nbytes,
!                                NULL);
        break;
        }
  
      case 2:
        {
!       __gg__compare_string_2(result,
!                              left,
!                              length_left,
!                              as_unsigned_chars(converted),
!                              nbytes,
!                              ach_space);
        break;
        }
  
      case 4:
        {
!       __gg__compare_string_4(result,
!                              left,
!                              length_left,
!                              as_unsigned_chars(converted),
!                              nbytes,
!                              ach_space);
        break;
        }
      }
!   return;
    }
  
  extern "C"
! void
! __gg__compare_numeric_all(int *result,
!                           __int128 value,
                            size_t digits,
                            const unsigned char *string,
                            size_t length,
                            cbl_encoding_t encoding )
    {
    char ach[128];
    unsigned char *pach = as_unsigned_chars(ach);
    if( digits == 0 )
--- 13902,13947 ----
      {
      case 1:
        {
!       result = __gg__compare_string_1a(left,
!                                        length_left,
!                                        as_unsigned_chars(converted),
!                                        nbytes,
!                                        NULL);
        break;
        }
  
      case 2:
        {
!       result = __gg__compare_string_2( left,
!                                        length_left,
!                                        as_unsigned_chars(converted),
!                                        nbytes,
!                                        ach_space);
        break;
        }
  
      case 4:
        {
!       result = __gg__compare_string_4( left,
!                                        length_left,
!                                        as_unsigned_chars(converted),
!                                        nbytes,
!                                        ach_space);
        break;
        }
      }
!   return result;
    }
  
  extern "C"
! int
! __gg__compare_numeric_all(__int128 value,
                            size_t digits,
                            const unsigned char *string,
                            size_t length,
                            cbl_encoding_t encoding )
    {
+   int result = 0;
    char ach[128];
    unsigned char *pach = as_unsigned_chars(ach);
    if( digits == 0 )
*************** __gg__compare_numeric_all(int *result,
*** 13991,13997 ****
                                              ach,
                                              digits,
                                              &nbytes);
-   *result = 0;
    for(size_t i=0; i<digits; i++)
      {
      cbl_char_t chl = charmap->getch(converted, i);
--- 13973,13978 ----
*************** __gg__compare_numeric_all(int *result,
*** 14001,14027 ****
      chr = collated(chr);
      if( chl > chr )
        {
!       *result = 1;
        break;
        }
      else if( chl < chr )
        {
!       *result = -1;
        break;
        }
      }
!   return;
    }
  
  extern "C"
! void
! __gg__compare_binary_to_string( int *result,
!                                 __int128 value,
                                  size_t digits,
                                  char *right,
                                  size_t length,
                                  cbl_encoding_t encoding)
    {
    char ach[128];
    unsigned char *pach = as_unsigned_chars(ach);
    if( digits == 0 )
--- 13982,14008 ----
      chr = collated(chr);
      if( chl > chr )
        {
!       result = 1;
        break;
        }
      else if( chl < chr )
        {
!       result = -1;
        break;
        }
      }
!   return result;
    }
  
  extern "C"
! int
! __gg__compare_binary_to_string( __int128 value,
                                  size_t digits,
                                  char *right,
                                  size_t length,
                                  cbl_encoding_t encoding)
    {
+   int result = 0;
    char ach[128];
    unsigned char *pach = as_unsigned_chars(ach);
    if( digits == 0 )
*************** __gg__compare_binary_to_string( int *res
*** 14064,14070 ****
    switch( charmap->stride() )
      {
      case 1:
!       __gg__compare_string_1(result,
                               as_unsigned_chars(converted),
                               nbytes,
                               as_unsigned_chars(right),
--- 14045,14051 ----
    switch( charmap->stride() )
      {
      case 1:
!       result = __gg__compare_string_1(
                               as_unsigned_chars(converted),
                               nbytes,
                               as_unsigned_chars(right),
*************** __gg__compare_binary_to_string( int *res
*** 14072,14078 ****
                               ach_space);
        break;
      case 2:
!       __gg__compare_string_2(result,
                               as_unsigned_chars(converted),
                               nbytes,
                               as_unsigned_chars(right),
--- 14053,14059 ----
                               ach_space);
        break;
      case 2:
!       result = __gg__compare_string_2(
                               as_unsigned_chars(converted),
                               nbytes,
                               as_unsigned_chars(right),
*************** __gg__compare_binary_to_string( int *res
*** 14080,14086 ****
                               ach_space);
        break;
      case 4:
!       __gg__compare_string_4(result,
                               as_unsigned_chars(converted),
                               nbytes,
                               as_unsigned_chars(right),
--- 14061,14067 ----
                               ach_space);
        break;
      case 4:
!       result = __gg__compare_string_4(
                               as_unsigned_chars(converted),
                               nbytes,
                               as_unsigned_chars(right),
*************** __gg__compare_binary_to_string( int *res
*** 14088,14094 ****
                               ach_space);
        break;
      }
!   return;
    }
  
  extern "C"
--- 14069,14075 ----
                               ach_space);
        break;
      }
!   return result;
    }
  
  extern "C"
*************** __gg__prohibited(const cblc_field_t *fie
*** 14161,14163 ****
--- 14142,14248 ----
      }
    return retval;
    }
+ 
+ struct move_stash_slot
+   {
+   unsigned char *data;
+   size_t capacity;
+ 
+   move_stash_slot()
+     : data(NULL),
+       capacity(0)
+     {
+     }
+   };
+ 
+ struct move_stash_pool
+   {
+   std::vector<move_stash_slot> slots;
+   size_t depth;
+ 
+   move_stash_pool()
+     : depth(0)
+     {
+     }
+ 
+   ~move_stash_pool()
+     {
+     for( move_stash_slot &slot : slots )
+       {
+       std::free(slot.data);
+       }
+     }
+   };
+ 
+ static thread_local move_stash_pool move_stashes;
+ 
+ static size_t
+ next_stash_capacity(size_t old_capacity, size_t required)
+   {
+   size_t capacity = old_capacity ? old_capacity : 1024;
+ 
+   while( capacity < required )
+     {
+     if( capacity > std::numeric_limits<size_t>::max() / 2 )
+       {
+       capacity = required;
+       break;
+       }
+ 
+     capacity *= 2;
+     }
+ 
+   return capacity;
+   }
+ 
+ extern "C" unsigned char *
+ __gg__move_stash_acquire(size_t size)
+   {
+   // Return a non-null pointer even for a zero-byte request.
+   size_t required = size ? size : 1;
+   size_t slot_number = move_stashes.depth++;
+ 
+   if( slot_number == move_stashes.slots.size() )
+     {
+     move_stashes.slots.emplace_back();
+     }
+ 
+   move_stash_slot &slot = move_stashes.slots[slot_number];
+ 
+   if( slot.capacity < required )
+     {
+     size_t new_capacity =
+                        next_stash_capacity(slot.capacity, required);
+     void *new_data = std::realloc(slot.data, new_capacity);
+ 
+     if( !new_data )
+       {
+       std::abort();
+       }
+ 
+     slot.data = static_cast<unsigned char *>(new_data);
+     slot.capacity = new_capacity;
+     }
+ 
+   return slot.data;
+   }
+ 
+ extern "C" void
+ __gg__move_stash_release(const unsigned char *stash)
+   {
+   if( move_stashes.depth == 0 )
+     {
+     std::abort();
+     }
+ 
+   const move_stash_slot &slot =
+                     move_stashes.slots[move_stashes.depth-1];
+ 
+   // This also verifies that acquisition and release remain LIFO.
+   if( slot.data != stash )
+     {
+     std::abort();
+     }
+ 
+   move_stashes.depth -= 1;
+   }
diff -Nrcpad gcc-17-20260823/libgcobol/libgcobol.h gcc-17-20260830/libgcobol/libgcobol.h
*** gcc-17-20260823/libgcobol/libgcobol.h	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgcobol/libgcobol.h	Sun Aug 30 22:32:15 2026
*************** extern "C" void __gg__float128_to_field(
*** 78,90 ****
                                          GCOB_FP128       value,
                                          enum cbl_round_t  rounded,
                                        int            *compute_error);
! extern "C" void __gg__int128_to_qualified_field(cblc_field_t   *tgt,
!                                 size_t          offset,
!                                 size_t          length,
!                                 __int128        value,
!                                 int             source_rdigits,
!                                 enum cbl_round_t  rounded,
!                                 int            *compute_error);
  extern "C" void __gg__float128_to_qualified_field(cblc_field_t   *tgt,
                                    size_t          tgt_offset,
                                    GCOB_FP128       value,
--- 78,89 ----
                                          GCOB_FP128       value,
                                          enum cbl_round_t  rounded,
                                        int            *compute_error);
! extern "C" int __gg__int128_to_qualified_field(cblc_field_t   *tgt,
!                                              size_t          offset,
!                                              size_t          length,
!                                              __int128        value,
!                                              int             source_rdigits,
!                                              enum cbl_round_t  rounded);
  extern "C" void __gg__float128_to_qualified_field(cblc_field_t   *tgt,
                                    size_t          tgt_offset,
                                    GCOB_FP128       value,
diff -Nrcpad gcc-17-20260823/libgm2/ChangeLog gcc-17-20260830/libgm2/ChangeLog
*** gcc-17-20260823/libgm2/ChangeLog	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/ChangeLog	Sun Aug 30 22:32:15 2026
***************
*** 1,3 ****
--- 1,28 ----
+ 2026-08-27  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	* ax_python_interpreter.m4 (AC_PYTHON_INTERPRETER): Add
+ 	double quotes to $1 in test.
+ 	* configure: Regenerate.
+ 
+ 2026-08-24  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/126847
+ 	PR modula2/125129
+ 	PR modula2/126863
+ 	* Makefile.in: Regenerate.
+ 	* aclocal.m4: Regenerate.
+ 	* config.h.in: Regenerate.
+ 	* configure: Regenerate.
+ 	* configure.ac: Call AC_PYTHON_INTERPRETER.
+ 	Remove call to AC_PYTHON_DEVEL.
+ 	* libm2cor/Makefile.in: Regenerate.
+ 	* libm2iso/Makefile.in: Regenerate.
+ 	* libm2log/Makefile.in: Regenerate.
+ 	* libm2min/Makefile.in: Regenerate.
+ 	* libm2pim/Makefile.in: Regenerate.
+ 	* ax_python_devel.m4: Removed.
+ 	* ax_python_interpreter.m4: New file.
+ 
  2026-08-12  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/125129
diff -Nrcpad gcc-17-20260823/libgm2/Makefile.in gcc-17-20260830/libgm2/Makefile.in
*** gcc-17-20260823/libgm2/Makefile.in	Sun Aug 23 22:32:24 2026
--- gcc-17-20260830/libgm2/Makefile.in	Sun Aug 30 22:32:19 2026
*************** host_triplet = @host@
*** 90,96 ****
  target_triplet = @target@
  subdir = .
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_devel.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
--- 90,96 ----
  target_triplet = @target@
  subdir = .
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_interpreter.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
*************** PACKAGE_VERSION = @PACKAGE_VERSION@
*** 240,251 ****
  PATH_SEPARATOR = @PATH_SEPARATOR@
  PICFLAG = @PICFLAG@
  PYTHON = @PYTHON@
- PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
- PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
- PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
- PYTHON_LIBS = @PYTHON_LIBS@
- PYTHON_PLATFORM_SITE_PKG = @PYTHON_PLATFORM_SITE_PKG@
- PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
  PYTHON_VERSION = @PYTHON_VERSION@
  RANLIB = @RANLIB@
  SED = @SED@
--- 240,245 ----
*************** am__leading_dot = @am__leading_dot@
*** 265,271 ****
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter = @ax_python_interpreter@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
--- 259,265 ----
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter_found = @ax_python_interpreter_found@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
diff -Nrcpad gcc-17-20260823/libgm2/aclocal.m4 gcc-17-20260830/libgm2/aclocal.m4
*** gcc-17-20260823/libgm2/aclocal.m4	Sun Aug 23 22:32:24 2026
--- gcc-17-20260830/libgm2/aclocal.m4	Sun Aug 30 22:32:19 2026
*************** AC_SUBST([am__tar])
*** 1187,1193 ****
  AC_SUBST([am__untar])
  ]) # _AM_PROG_TAR
  
! m4_include([ax_python_devel.m4])
  m4_include([../config/acx.m4])
  m4_include([../config/clang-plugin.m4])
  m4_include([../config/depstand.m4])
--- 1187,1193 ----
  AC_SUBST([am__untar])
  ]) # _AM_PROG_TAR
  
! m4_include([ax_python_interpreter.m4])
  m4_include([../config/acx.m4])
  m4_include([../config/clang-plugin.m4])
  m4_include([../config/depstand.m4])
diff -Nrcpad gcc-17-20260823/libgm2/ax_python_devel.m4 gcc-17-20260830/libgm2/ax_python_devel.m4
*** gcc-17-20260823/libgm2/ax_python_devel.m4	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/ax_python_devel.m4	Thu Jan  1 00:00:00 1970
***************
*** 1,522 ****
- # ===========================================================================
- #     https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
- # ===========================================================================
- #
- # SYNOPSIS
- #
- #   AX_PYTHON_DEVEL([version[,optional[,checkdev]]])
- #
- # DESCRIPTION
- #
- #   Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
- #   in your configure.ac.
- #
- #   This macro checks for Python and tries to get the include path to
- #   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS)
- #   output variables.  It also exports $(PYTHON_EXTRA_LIBS) and
- #   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
- #
- #   You can search for some particular version of Python by passing a
- #   parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
- #   note that you *have* to pass also an operator along with the version to
- #   match, and pay special attention to the single quotes surrounding the
- #   version number. Don't use "PYTHON_VERSION" for this: that environment
- #   variable is declared as precious and thus reserved for the end-user.
- #
- #   By default this will fail if it does not detect a development version of
- #   python.  If you want it to continue, set optional to something, like
- #   AX_PYTHON_DEVEL([], [no]).  The ax_python_devel_found variable will be
- #   "no" if it fails.  The ax_python_interpreter variable will be "no"
- #   if the incorrect version of Python is found.  It will be "yes" if found.
- #
- #   If you want to disable the search for Python development files you can
- #   add a non empty third parameter.  For example:
- #
- #   AX_PYTHON_DEVEL([>= '3.0'], [no], [no]) searches for a Python3
- #   interpreter (no development files) and will not fail if not found.
- #
- #   AX_PYTHON_DEVEL([>= '3.0'], [], [no]) searches for a Python3
- #   interpreter (no development files) and will fail if not found.
- #
- #   AX_PYTHON_DEVEL([>= '3.0'], [], []) searches for a Python3
- #   interpreter (with development files) and will fail if not found.
- #
- #   This macro should work for all versions of Python >= 2.1.0. As an end
- #   user, you can disable the check for the python version by setting the
- #   PYTHON_NOVERSIONCHECK environment variable to something else than the
- #   empty string.
- #
- #   If you need to use this macro for an older Python version, please
- #   contact the authors. We're always open for feedback.
- #
- # LICENSE
- #
- #   Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de>
- #   Copyright (c) 2009 Alan W. Irwin
- #   Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net>
- #   Copyright (c) 2009 Andrew Collier
- #   Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org>
- #   Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org>
- #   Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu>
- #   Copyright (c) 2026 Gaius Mulley  <gaiusmod2@gmail.com>
- #
- #   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 this program. If not, see <https://www.gnu.org/licenses/>.
- #
- #   As a special exception, the respective Autoconf Macro's copyright owner
- #   gives unlimited permission to copy, distribute and modify the configure
- #   scripts that are the output of Autoconf when processing the Macro. You
- #   need not follow the terms of the GNU General Public License when using
- #   or distributing such scripts, even though portions of the text of the
- #   Macro appear in them. The GNU General Public License (GPL) does govern
- #   all other use of the material that constitutes the Autoconf Macro.
- #
- #   This special exception to the GPL applies to versions of the Autoconf
- #   Macro released by the Autoconf Archive. When you make and distribute a
- #   modified version of the Autoconf Macro, you may extend this special
- #   exception to the GPL to apply to your modified version as well.
- #
- #   example of usage:
- #
- #   AC_PYTHON_DEVEL([>= '3.0'],[no],[no])
- #
- #   check for version >= 3.0.
- #   do not bail out if no Python interpreter is found.
- #   do not check for Python development files.
- #
- 
- #serial 37
- 
- AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
- AC_DEFUN([AX_PYTHON_DEVEL],[
- 	AC_MSG_CHECKING([starting ax_python_devel])
- 	# Get whether it's optional
- 	if test -z "$2"; then
-            AC_MSG_CHECKING([having a Python interpreter is not optional])
- 	   ax_python_devel_optional=false
- 	else
-            AC_MSG_CHECKING([having a Python interpreter is optional])
- 	   ax_python_devel_optional=$2
- 	fi
- 	# Should we test for python development?
- 	if test -z "$3"; then
- 	   ax_python_devel_check=yes
- 	else
-            AC_MSG_CHECKING([not checking for Python development])
- 	   ax_python_devel_check=$3
- 	fi
- 	ax_python_devel_found=yes
-         ax_python_interpreter=yes
-         AC_MSG_CHECKING([do we have a Python interpreter])
- 	#
- 	# Allow the use of a (user set) custom python version
- 	#
- 	AC_ARG_VAR([PYTHON_VERSION],[The installed Python
- 		version to use, for example '2.3'. This string
- 		will be appended to the Python interpreter
- 		canonical name.])
- 
-         AC_MSG_CHECKING([for python version])
- 	for version in $PYTHON_VERSION "" 3 2; do
-            AC_PATH_PROG([PYTHON],[python[$version]])
-            AC_MSG_CHECKING([$version])
-            if test -z "$PYTHON"; then
-               AC_MSG_CHECKING([no])
-               ax_python_devel_found=no
-               ax_python_interpreter=no
-            else
-               AC_MSG_CHECKING([yes])
-               ax_python_devel_found=yes
-               ax_python_interpreter=yes
- 	      PYTHON_VERSION=$version
- 	      break
- 	   fi
- 	done
- 
- 	if test "$ax_python_devel_found" = "yes"; then
- 	   #
- 	   # Check for a version of Python >= 2.1.0
- 	   #
- 	   AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
- 	   ac_supports_python_ver=`$PYTHON -c "import sys; \
- 		ver = sys.version.split ()[[0]]; \
- 		print (ver >= '2.1.0')"`
- 	   if test "$ac_supports_python_ver" != "True"; then
- 		if test -z "$PYTHON_NOVERSIONCHECK"; then
- 			AC_MSG_RESULT([no])
- 			AC_MSG_WARN([
- This version of the AC@&t@_PYTHON_DEVEL macro
- doesn't work properly with versions of Python before
- 2.1.0. You may need to re-run configure, setting the
- variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
- PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
- Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
- to something else than an empty string.
- ])
- 			if ! $ax_python_devel_optional; then
- 			   AC_MSG_FAILURE([Giving up])
- 			fi
- 			ax_python_devel_found=no
-                         AC_MSG_CHECKING([no interpreter found, incorrect version])
- 			PYTHON_VERSION=""
-                         ax_python_interpreter=no
-                         AC_MSG_CHECKING([no interpreter found])
- 		else
- 			AC_MSG_RESULT([skip at user request])
- 		fi
- 	   else
- 		AC_MSG_RESULT([yes])
- 	   fi
- 	fi
- 
- 	if test "$ax_python_devel_found" = "yes"; then
- 	   #
- 	   # If the macro parameter ``version'' is set, honour it.
- 	   # A Python shim class, VPy, is used to implement correct version comparisons via
- 	   # string expressions, since e.g. a naive textual ">= 2.7.3" won't work for
- 	   # Python 2.7.10 (the ".1" being evaluated as less than ".3").
- 	   #
- 	   if test -n $1; then
- 		AC_MSG_CHECKING([for a version of Python $1])
-                 cat << EOF > ax_python_devel_vpy.py
- class VPy:
-     def vtup(self, s):
-         return tuple(map(int, s.strip().replace("rc", ".").split(".")))
-     def __init__(self):
-         import sys
-         self.vpy = tuple(sys.version_info)[[:3]]
-     def __eq__(self, s):
-         return self.vpy == self.vtup(s)
-     def __ne__(self, s):
-         return self.vpy != self.vtup(s)
-     def __lt__(self, s):
-         return self.vpy < self.vtup(s)
-     def __gt__(self, s):
-         return self.vpy > self.vtup(s)
-     def __le__(self, s):
-         return self.vpy <= self.vtup(s)
-     def __ge__(self, s):
-         return self.vpy >= self.vtup(s)
- EOF
- 		ac_supports_python_ver=`$PYTHON -c """import ax_python_devel_vpy; \
-   ver = ax_python_devel_vpy.VPy(); \
-   print (ver $1) """`
-                 rm -rf ax_python_devel_vpy*.py* __pycache__/ax_python_devel_vpy*.py*
- 		if test "$ac_supports_python_ver" = "True"; then
- 			AC_MSG_RESULT([yes])
- 		else
- 			AC_MSG_RESULT([no])
- 			AC_MSG_WARN([this package requires Python $1.
- If you have it installed, but it isn't the default Python
- interpreter in your system path, please pass the PYTHON_VERSION
- variable to configure. See ``configure --help'' for reference.
- ])
- 			if ! $ax_python_devel_optional; then
- 			   AC_MSG_ERROR([Giving up])
- 			fi
-                         AC_MSG_CHECKING([no interpreter found, wrong version $1])
- 			ax_python_devel_found=no
- 			PYTHON_VERSION=""
- 			# Wrong version of the interpreter.
-                         ax_python_interpreter=no
- 		fi
- 	   fi
- 	fi
- 	if test "$ax_python_devel_found" = "yes"; then
- 	   #
- 	   # Check if you have distutils, else fail
- 	   #
- 	   AC_MSG_CHECKING([for the sysconfig Python package])
- 	   ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`
- 	   if test $? -eq 0; then
- 		AC_MSG_RESULT([yes])
- 		IMPORT_SYSCONFIG="import sysconfig"
- 	   else
- 		AC_MSG_RESULT([no])
- 
- 		AC_MSG_CHECKING([for the distutils Python package])
- 		ac_sysconfig_result=`$PYTHON -c "from distutils import sysconfig" 2>&1`
- 		if test $? -eq 0; then
- 			AC_MSG_RESULT([yes])
- 			IMPORT_SYSCONFIG="from distutils import sysconfig"
- 		else
- 			AC_MSG_WARN([cannot import Python module "distutils".
- Please check your Python installation. The error was:
- $ac_sysconfig_result])
- 			if ! $ax_python_devel_optional; then
- 			   AC_MSG_ERROR([Giving up])
- 			fi
- 			ax_python_devel_found=no
- 			PYTHON_VERSION=""
- 		fi
- 	   fi
- 	fi
- 
- 	if test "$ax_python_devel_found" = "yes"; then
- 	   #
- 	   # Check for Python include path
- 	   #
- 	   AC_MSG_CHECKING([for Python include path])
- 	   if test -z "$PYTHON_CPPFLAGS"; then
- 		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
- 			# sysconfig module has different functions
- 			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
- 				print (sysconfig.get_path ('include'));"`
- 			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
- 				print (sysconfig.get_path ('platinclude'));"`
- 		else
- 			# old distutils way
- 			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
- 				print (sysconfig.get_python_inc ());"`
- 			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
- 				print (sysconfig.get_python_inc (plat_specific=1));"`
- 		fi
- 		if test -n "${python_path}"; then
- 			if test "${plat_python_path}" != "${python_path}"; then
- 				python_path="-I$python_path -I$plat_python_path"
- 			else
- 				python_path="-I$python_path"
- 			fi
- 		fi
- 		PYTHON_CPPFLAGS=$python_path
- 	   fi
- 	   AC_MSG_RESULT([$PYTHON_CPPFLAGS])
- 	   AC_SUBST([PYTHON_CPPFLAGS])
- 
- 	   #
- 	   # Check for Python library path
- 	   #
- 	   AC_MSG_CHECKING([for Python library path])
- 	   if test -z "$PYTHON_LIBS"; then
- 		# (makes two attempts to ensure we've got a version number
- 		# from the interpreter)
- 		ac_python_version=`cat<<EOD | $PYTHON -
- 
- # join all versioning strings, on some systems
- # major/minor numbers could be in different list elements
- from sysconfig import *
- e = get_config_var('VERSION')
- if e is not None:
- 	print(e)
- EOD`
- 
- 		if test -z "$ac_python_version"; then
- 			if test -n "$PYTHON_VERSION"; then
- 				ac_python_version=$PYTHON_VERSION
- 			else
- 				ac_python_version=`$PYTHON -c "import sys; \
- 					print ("%d.%d" % sys.version_info[[:2]])"`
- 			fi
- 		fi
- 
- 		# Make the versioning information available to the compiler
- 		AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
-                                    [If available, contains the Python version number currently in use.])
- 
- 		# First, the library directory:
- 		ac_python_libdir=`cat<<EOD | $PYTHON -
- 
- # There should be only one
- $IMPORT_SYSCONFIG
- e = sysconfig.get_config_var('LIBDIR')
- if e is not None:
- 	print (e)
- EOD`
- 
- 		# Now, for the library:
- 		ac_python_library=`cat<<EOD | $PYTHON -
- 
- $IMPORT_SYSCONFIG
- c = sysconfig.get_config_vars()
- if 'LDVERSION' in c:
- 	print ('python'+c[['LDVERSION']])
- else:
- 	print ('python'+c[['VERSION']])
- EOD`
- 
- 		# This small piece shamelessly adapted from PostgreSQL python macro;
- 		# credits goes to momjian, I think. I'd like to put the right name
- 		# in the credits, if someone can point me in the right direction... ?
- 		#
- 		if test -n "$ac_python_libdir" -a -n "$ac_python_library"
- 		then
- 			# use the official shared library
- 			ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
- 			PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
- 		else
- 			# old way: use libpython from python_configdir
- 			ac_python_libdir=`$PYTHON -c \
- 			  "from sysconfig import get_python_lib as f; \
- 			  import os; \
- 			  print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
- 			PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
- 		fi
- 
- 		if test -z "$PYTHON_LIBS"; then
- 			AC_MSG_WARN([
-   Cannot determine location of your Python DSO. Please check it was installed with
-   dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
- 			])
- 			if ! $ax_python_devel_optional; then
- 			   AC_MSG_ERROR([Giving up])
- 			fi
- 			ax_python_devel_found=no
- 			PYTHON_VERSION=""
- 		fi
- 	   fi
- 	fi
- 
- 	if test "$ax_python_devel_found" = "yes"; then
- 	   AC_MSG_RESULT([$PYTHON_LIBS])
- 	   AC_SUBST([PYTHON_LIBS])
- 
- 	   #
- 	   # Check for site packages
- 	   #
- 	   AC_MSG_CHECKING([for Python site-packages path])
- 	   if test -z "$PYTHON_SITE_PKG"; then
- 		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
- 			PYTHON_SITE_PKG=`$PYTHON -c "
- $IMPORT_SYSCONFIG;
- if hasattr(sysconfig, 'get_default_scheme'):
-     scheme = sysconfig.get_default_scheme()
- else:
-     scheme = sysconfig._get_default_scheme()
- if scheme == 'posix_local':
-     # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
-     scheme = 'posix_prefix'
- prefix = '$prefix'
- if prefix == 'NONE':
-     prefix = '$ac_default_prefix'
- sitedir = sysconfig.get_path('purelib', scheme, vars={'base': prefix})
- print(sitedir)"`
- 		else
- 			# distutils.sysconfig way
- 			PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
- 				print (sysconfig.get_python_lib(0,0));"`
- 		fi
- 	   fi
- 	   AC_MSG_RESULT([$PYTHON_SITE_PKG])
- 	   AC_SUBST([PYTHON_SITE_PKG])
- 
- 	   #
- 	   # Check for platform-specific site packages
- 	   #
- 	   AC_MSG_CHECKING([for Python platform specific site-packages path])
- 	   if test -z "$PYTHON_PLATFORM_SITE_PKG"; then
- 		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
- 			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "
- $IMPORT_SYSCONFIG;
- if hasattr(sysconfig, 'get_default_scheme'):
-     scheme = sysconfig.get_default_scheme()
- else:
-     scheme = sysconfig._get_default_scheme()
- if scheme == 'posix_local':
-     # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
-     scheme = 'posix_prefix'
- prefix = '$prefix'
- if prefix == 'NONE':
-     prefix = '$ac_default_prefix'
- sitedir = sysconfig.get_path('platlib', scheme, vars={'platbase': prefix})
- print(sitedir)"`
- 		else
- 			# distutils.sysconfig way
- 			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
- 				print (sysconfig.get_python_lib(1,0));"`
- 		fi
- 	   fi
- 	   AC_MSG_RESULT([$PYTHON_PLATFORM_SITE_PKG])
- 	   AC_SUBST([PYTHON_PLATFORM_SITE_PKG])
- 
- 	   #
- 	   # libraries which must be linked in when embedding
- 	   #
- 	   AC_MSG_CHECKING(python extra libraries)
- 	   if test -z "$PYTHON_EXTRA_LIBS"; then
- 	      PYTHON_EXTRA_LIBS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
-                 conf = sysconfig.get_config_var; \
-                 print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
- 	   fi
- 	   AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
- 	   AC_SUBST(PYTHON_EXTRA_LIBS)
- 
- 	   #
- 	   # linking flags needed when embedding
- 	   #
- 	   AC_MSG_CHECKING(python extra linking flags)
- 	   if test -z "$PYTHON_EXTRA_LDFLAGS"; then
- 		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
- 			conf = sysconfig.get_config_var; \
- 			print (conf('LINKFORSHARED'))"`
- 		# Hack for macos, it sticks this in here.
- 		PYTHON_EXTRA_LDFLAGS=`echo $PYTHON_EXTRA_LDFLAGS | sed 's/CoreFoundation.*$/CoreFoundation/'`
- 	   fi
- 	   AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
- 	   AC_SUBST(PYTHON_EXTRA_LDFLAGS)
- 
-            if test "$ax_python_devel_check" = "yes"; then
-                #
- 	       # final check to see if everything compiles alright
- 	       #
- 	       AC_MSG_CHECKING([consistency of all components of python development environment])
- 	       # save current global flags
- 	       ac_save_LIBS="$LIBS"
- 	       ac_save_LDFLAGS="$LDFLAGS"
- 	       ac_save_CPPFLAGS="$CPPFLAGS"
- 	       LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS"
- 	       LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
- 	       CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
- 	       AC_LANG_PUSH([C])
- 	       AC_LINK_IFELSE([
- 	           AC_LANG_PROGRAM([[#include <Python.h>]],
-                                    [[Py_Initialize();]])
-                               ],[pythonexists=yes],[pythonexists=no])
- 	       AC_LANG_POP([C])
- 	       # turn back to default flags
- 	       CPPFLAGS="$ac_save_CPPFLAGS"
- 	       LIBS="$ac_save_LIBS"
- 	       LDFLAGS="$ac_save_LDFLAGS"
- 	       AC_MSG_RESULT([$pythonexists])
- 
- 	       if test ! "x$pythonexists" = "xyes"; then
- 	           AC_MSG_WARN([
-   Could not link test program to Python. Maybe the main Python library has been
-   installed in some non-standard library path. If so, pass it to configure,
-   via the LIBS environment variable.
-   Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
-   ============================================================================
-    ERROR!
-    You probably have to install the development version of the Python package
-    for your distribution.  The exact name of this package varies among them.
-   ============================================================================
- 	      ])
- 	          if ! $ax_python_devel_optional; then
- 		     AC_MSG_ERROR([Giving up])
- 	          fi
- 	          ax_python_devel_found=no
- 	          PYTHON_VERSION=""
- 	      fi
- 	   fi
- 	fi
-         AC_SUBST([ax_python_interpreter])
-         AC_MSG_CHECKING([result of having a Python interpreter])
- 	if test "$ax_python_interpreter" = "yes"; then
- 	   AC_MSG_RESULT([yes])
-         else
- 	   AC_MSG_RESULT([no])
- 	fi
- 
- 	#
- 	# all done!
- 	#
- ])
--- 0 ----
diff -Nrcpad gcc-17-20260823/libgm2/ax_python_interpreter.m4 gcc-17-20260830/libgm2/ax_python_interpreter.m4
*** gcc-17-20260823/libgm2/ax_python_interpreter.m4	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/libgm2/ax_python_interpreter.m4	Sun Aug 30 22:32:15 2026
***************
*** 0 ****
--- 1,136 ----
+ # ax_python_interpreter.m4 detect a versioned python interpreter.
+ #
+ #  Copyright (C) 2026 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 this program. If not, see <https://www.gnu.org/licenses/>.
+ #
+ #   As a special exception, the respective Autoconf Macro's copyright owner
+ #   gives unlimited permission to copy, distribute and modify the configure
+ #   scripts that are the output of Autoconf when processing the Macro. You
+ #   need not follow the terms of the GNU General Public License when using
+ #   or distributing such scripts, even though portions of the text of the
+ #   Macro appear in them. The GNU General Public License (GPL) does govern
+ #   all other use of the material that constitutes the Autoconf Macro.
+ #
+ #   This special exception to the GPL applies to versions of the Autoconf
+ #   Macro released by the Autoconf Archive. When you make and distribute a
+ #   modified version of the Autoconf Macro, you may extend this special
+ #   exception to the GPL to apply to your modified version as well.
+ #
+ #  This code is heavily derived and pruned from:
+ #
+ # ===========================================================================
+ #     https://www.gnu.org/software/autoconf-archive/ax_python_devel.html
+ # ===========================================================================
+ #
+ # SYNOPSIS
+ #
+ #   AX_PYTHON_INTERPRETER([version])
+ #
+ # DESCRIPTION
+ #
+ #   This macro checks for a particular version of Python.
+ #   The parameter is manditory, for example ">= '2.3.1'", or "== '2.4'".
+ #   Please note that you also *have* to pass an operator along with the
+ #   version to match, and pay special attention to the single quotes
+ #   surrounding the version number.
+ #
+ #   The ax_python_interpreter_found variable will be "no" if the incorrect
+ #   version of Python is found.  It will be "yes" if found.
+ #
+ #   PYTHON_VERSION can be set to force the interpreter program name.
+ #   For example PYTHON_VERSION=2.7.1 which searches for python2.7.1.
+ #   Otherwise it searches for a program named python, python2 or python3.
+ #
+ #   For example:
+ #
+ #   AX_PYTHON_INTERPRETER([>= '3.0']) searches for a Python3 interpreter.
+ #
+ #   This macro should work for all versions of Python >= 2.1.0.
+ #
+ 
+ AC_DEFUN([AC_PYTHON_INTERPRETER],[
+ 	# Default to no.
+         ax_python_interpreter_found=no
+         AC_MSG_CHECKING([do we have a Python interpreter])
+ 	#
+ 	# Allow the use of a (user set) custom python version
+ 	#
+ 	AC_ARG_VAR([PYTHON_VERSION],[The installed Python
+ 		version to use, for example '2.3'. This string
+ 		will be appended to the Python interpreter
+ 		canonical name.])
+ 	for version in $PYTHON_VERSION 3 2 ""; do
+             AC_PATH_PROG([PYTHON],[python[$version]])
+             if test -z "$PYTHON"; then
+                 AC_MSG_RESULT([no])
+             else
+                 AC_MSG_RESULT([yes])
+                 # Note: omitted the test for Python version < 2.1.0.
+                 #
+                 # If the macro parameter ``version'' is set, honour it.
+                 # A Python shim class, VPy, is used to implement correct version comparisons via
+                 # string expressions, since e.g. a naive textual ">= 2.7.3" won't work for
+                 # Python 2.7.10 (the ".1" being evaluated as less than ".3").
+                 if test -n "$1"; then
+                     AC_MSG_CHECKING([whether internal python version string is $1])
+                     cat << EOF > ax_python_interpreter_vpy.py
+ class VPy:
+     def vtup(self, s):
+         return tuple(map(int, s.strip().replace("rc", ".").split(".")))
+     def __init__(self):
+         import sys
+         self.vpy = tuple(sys.version_info)[[:3]]
+     def __eq__(self, s):
+         return self.vpy == self.vtup(s)
+     def __ne__(self, s):
+         return self.vpy != self.vtup(s)
+     def __lt__(self, s):
+         return self.vpy < self.vtup(s)
+     def __gt__(self, s):
+         return self.vpy > self.vtup(s)
+     def __le__(self, s):
+         return self.vpy <= self.vtup(s)
+     def __ge__(self, s):
+         return self.vpy >= self.vtup(s)
+ EOF
+ 		ac_supports_python_ver=`$PYTHON -c """import ax_python_interpreter_vpy; \
+   ver = ax_python_interpreter_vpy.VPy(); \
+   print (ver $1) """`
+                     rm -rf ax_python_interpreter_vpy*.py* __pycache__/ax_python_interpreter_vpy*.py*
+                     if test "$ac_supports_python_ver" = "True"; then
+ 			# Found correct version, now break from the loop.
+                         AC_MSG_RESULT([yes])
+                         PYTHON_VERSION=$version
+                         ax_python_interpreter_found=yes
+ 			break
+                     else
+                         AC_MSG_RESULT([no])
+ 			PYTHON_VERSION=""
+                     fi
+                 fi
+ 	    fi
+ 	done
+         AC_SUBST([ax_python_interpreter_found])
+         AC_MSG_CHECKING([result of having a Python $1 interpreter])
+ 	if test "$ax_python_interpreter_found" = "yes"; then
+            AC_MSG_RESULT([yes, all done.])
+         else
+ 	   AC_MSG_RESULT([no])
+            PYTHON_VERSION=""
+ 	fi
+ 	#
+ 	# all done!
+ 	#
+ ])
diff -Nrcpad gcc-17-20260823/libgm2/config.h.in gcc-17-20260830/libgm2/config.h.in
*** gcc-17-20260823/libgm2/config.h.in	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/config.h.in	Sun Aug 30 22:32:15 2026
***************
*** 152,160 ****
  /* Define to 1 if you have the <pwd.h> header file. */
  #undef HAVE_PWD_H
  
- /* If available, contains the Python version number currently in use. */
- #undef HAVE_PYTHON
- 
  /* function rand exists */
  #undef HAVE_RAND
  
--- 152,157 ----
diff -Nrcpad gcc-17-20260823/libgm2/configure gcc-17-20260830/libgm2/configure
*** gcc-17-20260823/libgm2/configure	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/configure	Sun Aug 30 22:32:15 2026
*************** enable_static
*** 652,664 ****
  enable_shared
  HAVE_PYTHON_INTERPRETER_FALSE
  HAVE_PYTHON_INTERPRETER_TRUE
! ax_python_interpreter
! PYTHON_EXTRA_LDFLAGS
! PYTHON_EXTRA_LIBS
! PYTHON_PLATFORM_SITE_PKG
! PYTHON_SITE_PKG
! PYTHON_LIBS
! PYTHON_CPPFLAGS
  PYTHON
  PYTHON_VERSION
  ENABLE_DARWIN_AT_RPATH_FALSE
--- 652,658 ----
  enable_shared
  HAVE_PYTHON_INTERPRETER_FALSE
  HAVE_PYTHON_INTERPRETER_TRUE
! ax_python_interpreter_found
  PYTHON
  PYTHON_VERSION
  ENABLE_DARWIN_AT_RPATH_FALSE
*************** else
*** 15258,15264 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15261 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 15252,15258 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15255 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 15364,15370 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15367 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 15358,15364 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15361 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 18706,18744 ****
  fi
  
  
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking starting ax_python_devel" >&5
! $as_echo_n "checking starting ax_python_devel... " >&6; }
! 	# Get whether it's optional
! 	if test -z "no"; then
!            { $as_echo "$as_me:${as_lineno-$LINENO}: checking having a Python interpreter is not optional" >&5
! $as_echo_n "checking having a Python interpreter is not optional... " >&6; }
! 	   ax_python_devel_optional=false
! 	else
!            { $as_echo "$as_me:${as_lineno-$LINENO}: checking having a Python interpreter is optional" >&5
! $as_echo_n "checking having a Python interpreter is optional... " >&6; }
! 	   ax_python_devel_optional=no
! 	fi
! 	# Should we test for python development?
! 	if test -z "no"; then
! 	   ax_python_devel_check=yes
! 	else
!            { $as_echo "$as_me:${as_lineno-$LINENO}: checking not checking for Python development" >&5
! $as_echo_n "checking not checking for Python development... " >&6; }
! 	   ax_python_devel_check=no
! 	fi
! 	ax_python_devel_found=yes
!         ax_python_interpreter=yes
          { $as_echo "$as_me:${as_lineno-$LINENO}: checking do we have a Python interpreter" >&5
  $as_echo_n "checking do we have a Python interpreter... " >&6; }
  	#
  	# Allow the use of a (user set) custom python version
  	#
  
! 
!         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python version" >&5
! $as_echo_n "checking for python version... " >&6; }
! 	for version in $PYTHON_VERSION "" 3 2; do
!            # Extract the first word of "python[$version]", so it can be a program name with args.
  set dummy python$version; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
  $as_echo_n "checking for $ac_word... " >&6; }
--- 18700,18715 ----
  fi
  
  
! 	# Default to no.
!         ax_python_interpreter_found=no
          { $as_echo "$as_me:${as_lineno-$LINENO}: checking do we have a Python interpreter" >&5
  $as_echo_n "checking do we have a Python interpreter... " >&6; }
  	#
  	# Allow the use of a (user set) custom python version
  	#
  
! 	for version in $PYTHON_VERSION 3 2 ""; do
!             # Extract the first word of "python[$version]", so it can be a program name with args.
  set dummy python$version; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
  $as_echo_n "checking for $ac_word... " >&6; }
*************** $as_echo "no" >&6; }
*** 18778,18865 ****
  fi
  
  
!            { $as_echo "$as_me:${as_lineno-$LINENO}: checking $version" >&5
! $as_echo_n "checking $version... " >&6; }
!            if test -z "$PYTHON"; then
!               { $as_echo "$as_me:${as_lineno-$LINENO}: checking no" >&5
! $as_echo_n "checking no... " >&6; }
!               ax_python_devel_found=no
!               ax_python_interpreter=no
!            else
!               { $as_echo "$as_me:${as_lineno-$LINENO}: checking yes" >&5
! $as_echo_n "checking yes... " >&6; }
!               ax_python_devel_found=yes
!               ax_python_interpreter=yes
! 	      PYTHON_VERSION=$version
! 	      break
! 	   fi
! 	done
! 
! 	if test "$ax_python_devel_found" = "yes"; then
! 	   #
! 	   # Check for a version of Python >= 2.1.0
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a version of Python >= '2.1.0'" >&5
! $as_echo_n "checking for a version of Python >= '2.1.0'... " >&6; }
! 	   ac_supports_python_ver=`$PYTHON -c "import sys; \
! 		ver = sys.version.split ()[0]; \
! 		print (ver >= '2.1.0')"`
! 	   if test "$ac_supports_python_ver" != "True"; then
! 		if test -z "$PYTHON_NOVERSIONCHECK"; then
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
! This version of the AC_PYTHON_DEVEL macro
! doesn't work properly with versions of Python before
! 2.1.0. You may need to re-run configure, setting the
! variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
! PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
! Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
! to something else than an empty string.
! " >&5
! $as_echo "$as_me: WARNING:
! This version of the AC_PYTHON_DEVEL macro
! doesn't work properly with versions of Python before
! 2.1.0. You may need to re-run configure, setting the
! variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
! PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
! Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
! to something else than an empty string.
! " >&2;}
! 			if ! $ax_python_devel_optional; then
! 			   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
! as_fn_error $? "Giving up
! See \`config.log' for more details" "$LINENO" 5; }
! 			fi
! 			ax_python_devel_found=no
!                         { $as_echo "$as_me:${as_lineno-$LINENO}: checking no interpreter found, incorrect version" >&5
! $as_echo_n "checking no interpreter found, incorrect version... " >&6; }
! 			PYTHON_VERSION=""
!                         ax_python_interpreter=no
!                         { $as_echo "$as_me:${as_lineno-$LINENO}: checking no interpreter found" >&5
! $as_echo_n "checking no interpreter found... " >&6; }
! 		else
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: skip at user request" >&5
! $as_echo "skip at user request" >&6; }
! 		fi
! 	   else
! 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
  $as_echo "yes" >&6; }
! 	   fi
! 	fi
! 
! 	if test "$ax_python_devel_found" = "yes"; then
! 	   #
! 	   # If the macro parameter ``version'' is set, honour it.
! 	   # A Python shim class, VPy, is used to implement correct version comparisons via
! 	   # string expressions, since e.g. a naive textual ">= 2.7.3" won't work for
! 	   # Python 2.7.10 (the ".1" being evaluated as less than ".3").
! 	   #
! 	   if test -n >= '3.0'; then
! 		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a version of Python >= '3.0'" >&5
! $as_echo_n "checking for a version of Python >= '3.0'... " >&6; }
!                 cat << EOF > ax_python_devel_vpy.py
  class VPy:
      def vtup(self, s):
          return tuple(map(int, s.strip().replace("rc", ".").split(".")))
--- 18749,18770 ----
  fi
  
  
!             if test -z "$PYTHON"; then
!                 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
!             else
!                 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
  $as_echo "yes" >&6; }
!                 # Note: omitted the test for Python version < 2.1.0.
!                 #
!                 # If the macro parameter ``version'' is set, honour it.
!                 # A Python shim class, VPy, is used to implement correct version comparisons via
!                 # string expressions, since e.g. a naive textual ">= 2.7.3" won't work for
!                 # Python 2.7.10 (the ".1" being evaluated as less than ".3").
!                 if test -n ">= '3.0'"; then
!                     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether internal python version string is >= '3.0'" >&5
! $as_echo_n "checking whether internal python version string is >= '3.0'... " >&6; }
!                     cat << EOF > ax_python_interpreter_vpy.py
  class VPy:
      def vtup(self, s):
          return tuple(map(int, s.strip().replace("rc", ".").split(".")))
*************** class VPy:
*** 18879,19277 ****
      def __ge__(self, s):
          return self.vpy >= self.vtup(s)
  EOF
! 		ac_supports_python_ver=`$PYTHON -c """import ax_python_devel_vpy; \
!   ver = ax_python_devel_vpy.VPy(); \
    print (ver >= '3.0') """`
!                 rm -rf ax_python_devel_vpy*.py* __pycache__/ax_python_devel_vpy*.py*
! 		if test "$ac_supports_python_ver" = "True"; then
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
  $as_echo "yes" >&6; }
! 		else
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
- 			{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: this package requires Python >= '3.0'.
- If you have it installed, but it isn't the default Python
- interpreter in your system path, please pass the PYTHON_VERSION
- variable to configure. See \`\`configure --help'' for reference.
- " >&5
- $as_echo "$as_me: WARNING: this package requires Python >= '3.0'.
- If you have it installed, but it isn't the default Python
- interpreter in your system path, please pass the PYTHON_VERSION
- variable to configure. See \`\`configure --help'' for reference.
- " >&2;}
- 			if ! $ax_python_devel_optional; then
- 			   as_fn_error $? "Giving up" "$LINENO" 5
- 			fi
-                         { $as_echo "$as_me:${as_lineno-$LINENO}: checking no interpreter found, wrong version >= '3.0'" >&5
- $as_echo_n "checking no interpreter found, wrong version >= '3.0'... " >&6; }
- 			ax_python_devel_found=no
  			PYTHON_VERSION=""
! 			# Wrong version of the interpreter.
!                         ax_python_interpreter=no
! 		fi
! 	   fi
! 	fi
! 	if test "$ax_python_devel_found" = "yes"; then
! 	   #
! 	   # Check if you have distutils, else fail
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the sysconfig Python package" >&5
! $as_echo_n "checking for the sysconfig Python package... " >&6; }
! 	   ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`
! 	   if test $? -eq 0; then
! 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
! $as_echo "yes" >&6; }
! 		IMPORT_SYSCONFIG="import sysconfig"
! 	   else
! 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
! 
! 		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
! $as_echo_n "checking for the distutils Python package... " >&6; }
! 		ac_sysconfig_result=`$PYTHON -c "from distutils import sysconfig" 2>&1`
! 		if test $? -eq 0; then
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
! $as_echo "yes" >&6; }
! 			IMPORT_SYSCONFIG="from distutils import sysconfig"
! 		else
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot import Python module \"distutils\".
! Please check your Python installation. The error was:
! $ac_sysconfig_result" >&5
! $as_echo "$as_me: WARNING: cannot import Python module \"distutils\".
! Please check your Python installation. The error was:
! $ac_sysconfig_result" >&2;}
! 			if ! $ax_python_devel_optional; then
! 			   as_fn_error $? "Giving up" "$LINENO" 5
! 			fi
! 			ax_python_devel_found=no
! 			PYTHON_VERSION=""
! 		fi
! 	   fi
! 	fi
! 
! 	if test "$ax_python_devel_found" = "yes"; then
! 	   #
! 	   # Check for Python include path
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5
! $as_echo_n "checking for Python include path... " >&6; }
! 	   if test -z "$PYTHON_CPPFLAGS"; then
! 		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
! 			# sysconfig module has different functions
! 			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
! 				print (sysconfig.get_path ('include'));"`
! 			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
! 				print (sysconfig.get_path ('platinclude'));"`
! 		else
! 			# old distutils way
! 			python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
! 				print (sysconfig.get_python_inc ());"`
! 			plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
! 				print (sysconfig.get_python_inc (plat_specific=1));"`
! 		fi
! 		if test -n "${python_path}"; then
! 			if test "${plat_python_path}" != "${python_path}"; then
! 				python_path="-I$python_path -I$plat_python_path"
! 			else
! 				python_path="-I$python_path"
! 			fi
! 		fi
! 		PYTHON_CPPFLAGS=$python_path
! 	   fi
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CPPFLAGS" >&5
! $as_echo "$PYTHON_CPPFLAGS" >&6; }
! 
! 
! 	   #
! 	   # Check for Python library path
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python library path" >&5
! $as_echo_n "checking for Python library path... " >&6; }
! 	   if test -z "$PYTHON_LIBS"; then
! 		# (makes two attempts to ensure we've got a version number
! 		# from the interpreter)
! 		ac_python_version=`cat<<EOD | $PYTHON -
! 
! # join all versioning strings, on some systems
! # major/minor numbers could be in different list elements
! from sysconfig import *
! e = get_config_var('VERSION')
! if e is not None:
! 	print(e)
! EOD`
! 
! 		if test -z "$ac_python_version"; then
! 			if test -n "$PYTHON_VERSION"; then
! 				ac_python_version=$PYTHON_VERSION
! 			else
! 				ac_python_version=`$PYTHON -c "import sys; \
! 					print ("%d.%d" % sys.version_info[:2])"`
! 			fi
! 		fi
! 
! 		# Make the versioning information available to the compiler
! 
! cat >>confdefs.h <<_ACEOF
! #define HAVE_PYTHON "$ac_python_version"
! _ACEOF
! 
! 
! 		# First, the library directory:
! 		ac_python_libdir=`cat<<EOD | $PYTHON -
! 
! # There should be only one
! $IMPORT_SYSCONFIG
! e = sysconfig.get_config_var('LIBDIR')
! if e is not None:
! 	print (e)
! EOD`
! 
! 		# Now, for the library:
! 		ac_python_library=`cat<<EOD | $PYTHON -
! 
! $IMPORT_SYSCONFIG
! c = sysconfig.get_config_vars()
! if 'LDVERSION' in c:
! 	print ('python'+c['LDVERSION'])
! else:
! 	print ('python'+c['VERSION'])
! EOD`
! 
! 		# This small piece shamelessly adapted from PostgreSQL python macro;
! 		# credits goes to momjian, I think. I'd like to put the right name
! 		# in the credits, if someone can point me in the right direction... ?
! 		#
! 		if test -n "$ac_python_libdir" -a -n "$ac_python_library"
! 		then
! 			# use the official shared library
! 			ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
! 			PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
! 		else
! 			# old way: use libpython from python_configdir
! 			ac_python_libdir=`$PYTHON -c \
! 			  "from sysconfig import get_python_lib as f; \
! 			  import os; \
! 			  print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
! 			PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
! 		fi
! 
! 		if test -z "$PYTHON_LIBS"; then
! 			{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
!   Cannot determine location of your Python DSO. Please check it was installed with
!   dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
! 			" >&5
! $as_echo "$as_me: WARNING:
!   Cannot determine location of your Python DSO. Please check it was installed with
!   dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
! 			" >&2;}
! 			if ! $ax_python_devel_optional; then
! 			   as_fn_error $? "Giving up" "$LINENO" 5
! 			fi
! 			ax_python_devel_found=no
! 			PYTHON_VERSION=""
! 		fi
! 	   fi
! 	fi
! 
! 	if test "$ax_python_devel_found" = "yes"; then
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LIBS" >&5
! $as_echo "$PYTHON_LIBS" >&6; }
! 
! 
! 	   #
! 	   # Check for site packages
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python site-packages path" >&5
! $as_echo_n "checking for Python site-packages path... " >&6; }
! 	   if test -z "$PYTHON_SITE_PKG"; then
! 		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
! 			PYTHON_SITE_PKG=`$PYTHON -c "
! $IMPORT_SYSCONFIG;
! if hasattr(sysconfig, 'get_default_scheme'):
!     scheme = sysconfig.get_default_scheme()
! else:
!     scheme = sysconfig._get_default_scheme()
! if scheme == 'posix_local':
!     # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
!     scheme = 'posix_prefix'
! prefix = '$prefix'
! if prefix == 'NONE':
!     prefix = '$ac_default_prefix'
! sitedir = sysconfig.get_path('purelib', scheme, vars={'base': prefix})
! print(sitedir)"`
! 		else
! 			# distutils.sysconfig way
! 			PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
! 				print (sysconfig.get_python_lib(0,0));"`
! 		fi
! 	   fi
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SITE_PKG" >&5
! $as_echo "$PYTHON_SITE_PKG" >&6; }
! 
! 
! 	   #
! 	   # Check for platform-specific site packages
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python platform specific site-packages path" >&5
! $as_echo_n "checking for Python platform specific site-packages path... " >&6; }
! 	   if test -z "$PYTHON_PLATFORM_SITE_PKG"; then
! 		if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
! 			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "
! $IMPORT_SYSCONFIG;
! if hasattr(sysconfig, 'get_default_scheme'):
!     scheme = sysconfig.get_default_scheme()
! else:
!     scheme = sysconfig._get_default_scheme()
! if scheme == 'posix_local':
!     # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
!     scheme = 'posix_prefix'
! prefix = '$prefix'
! if prefix == 'NONE':
!     prefix = '$ac_default_prefix'
! sitedir = sysconfig.get_path('platlib', scheme, vars={'platbase': prefix})
! print(sitedir)"`
! 		else
! 			# distutils.sysconfig way
! 			PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
! 				print (sysconfig.get_python_lib(1,0));"`
! 		fi
! 	   fi
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_PLATFORM_SITE_PKG" >&5
! $as_echo "$PYTHON_PLATFORM_SITE_PKG" >&6; }
! 
! 
! 	   #
! 	   # libraries which must be linked in when embedding
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra libraries" >&5
! $as_echo_n "checking python extra libraries... " >&6; }
! 	   if test -z "$PYTHON_EXTRA_LIBS"; then
! 	      PYTHON_EXTRA_LIBS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
!                 conf = sysconfig.get_config_var; \
!                 print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
! 	   fi
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LIBS" >&5
! $as_echo "$PYTHON_EXTRA_LIBS" >&6; }
! 
! 
! 	   #
! 	   # linking flags needed when embedding
! 	   #
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra linking flags" >&5
! $as_echo_n "checking python extra linking flags... " >&6; }
! 	   if test -z "$PYTHON_EXTRA_LDFLAGS"; then
! 		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
! 			conf = sysconfig.get_config_var; \
! 			print (conf('LINKFORSHARED'))"`
! 		# Hack for macos, it sticks this in here.
! 		PYTHON_EXTRA_LDFLAGS=`echo $PYTHON_EXTRA_LDFLAGS | sed 's/CoreFoundation.*$/CoreFoundation/'`
! 	   fi
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LDFLAGS" >&5
! $as_echo "$PYTHON_EXTRA_LDFLAGS" >&6; }
! 
! 
!            if test "$ax_python_devel_check" = "yes"; then
!                #
! 	       # final check to see if everything compiles alright
! 	       #
! 	       { $as_echo "$as_me:${as_lineno-$LINENO}: checking consistency of all components of python development environment" >&5
! $as_echo_n "checking consistency of all components of python development environment... " >&6; }
! 	       # save current global flags
! 	       ac_save_LIBS="$LIBS"
! 	       ac_save_LDFLAGS="$LDFLAGS"
! 	       ac_save_CPPFLAGS="$CPPFLAGS"
! 	       LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS"
! 	       LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
! 	       CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
! 	       ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! 
! 	       if test x$gcc_no_link = xyes; then
!   as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
! fi
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! 	           #include <Python.h>
! int
! main ()
! {
! Py_Initialize();
!   ;
!   return 0;
! }
! 
! _ACEOF
! if ac_fn_c_try_link "$LINENO"; then :
!   pythonexists=yes
! else
!   pythonexists=no
! fi
! rm -f core conftest.err conftest.$ac_objext \
!     conftest$ac_exeext conftest.$ac_ext
! 	       ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! 
! 	       # turn back to default flags
! 	       CPPFLAGS="$ac_save_CPPFLAGS"
! 	       LIBS="$ac_save_LIBS"
! 	       LDFLAGS="$ac_save_LDFLAGS"
! 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pythonexists" >&5
! $as_echo "$pythonexists" >&6; }
! 
! 	       if test ! "x$pythonexists" = "xyes"; then
! 	           { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
!   Could not link test program to Python. Maybe the main Python library has been
!   installed in some non-standard library path. If so, pass it to configure,
!   via the LIBS environment variable.
!   Example: ./configure LIBS=\"-L/usr/non-standard-path/python/lib\"
!   ============================================================================
!    ERROR!
!    You probably have to install the development version of the Python package
!    for your distribution.  The exact name of this package varies among them.
!   ============================================================================
! 	      " >&5
! $as_echo "$as_me: WARNING:
!   Could not link test program to Python. Maybe the main Python library has been
!   installed in some non-standard library path. If so, pass it to configure,
!   via the LIBS environment variable.
!   Example: ./configure LIBS=\"-L/usr/non-standard-path/python/lib\"
!   ============================================================================
!    ERROR!
!    You probably have to install the development version of the Python package
!    for your distribution.  The exact name of this package varies among them.
!   ============================================================================
! 	      " >&2;}
! 	          if ! $ax_python_devel_optional; then
! 		     as_fn_error $? "Giving up" "$LINENO" 5
! 	          fi
! 	          ax_python_devel_found=no
! 	          PYTHON_VERSION=""
! 	      fi
! 	   fi
! 	fi
  
!         { $as_echo "$as_me:${as_lineno-$LINENO}: checking result of having a Python interpreter" >&5
! $as_echo_n "checking result of having a Python interpreter... " >&6; }
! 	if test "$ax_python_interpreter" = "yes"; then
! 	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
! $as_echo "yes" >&6; }
          else
  	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  	fi
- 
  	#
  	# all done!
  	#
  
!  if test x$ax_python_interpreter = xyes; then
    HAVE_PYTHON_INTERPRETER_TRUE=
    HAVE_PYTHON_INTERPRETER_FALSE='#'
  else
--- 18784,18824 ----
      def __ge__(self, s):
          return self.vpy >= self.vtup(s)
  EOF
! 		ac_supports_python_ver=`$PYTHON -c """import ax_python_interpreter_vpy; \
!   ver = ax_python_interpreter_vpy.VPy(); \
    print (ver >= '3.0') """`
!                     rm -rf ax_python_interpreter_vpy*.py* __pycache__/ax_python_interpreter_vpy*.py*
!                     if test "$ac_supports_python_ver" = "True"; then
! 			# Found correct version, now break from the loop.
!                         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
  $as_echo "yes" >&6; }
!                         PYTHON_VERSION=$version
!                         ax_python_interpreter_found=yes
! 			break
!                     else
!                         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  			PYTHON_VERSION=""
!                     fi
!                 fi
! 	    fi
! 	done
  
!         { $as_echo "$as_me:${as_lineno-$LINENO}: checking result of having a Python >= '3.0' interpreter" >&5
! $as_echo_n "checking result of having a Python >= '3.0' interpreter... " >&6; }
! 	if test "$ax_python_interpreter_found" = "yes"; then
!            { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, all done." >&5
! $as_echo "yes, all done." >&6; }
          else
  	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+            PYTHON_VERSION=""
  	fi
  	#
  	# all done!
  	#
  
!  if test x$ax_python_interpreter_found = xyes; then
    HAVE_PYTHON_INTERPRETER_TRUE=
    HAVE_PYTHON_INTERPRETER_FALSE='#'
  else
diff -Nrcpad gcc-17-20260823/libgm2/configure.ac gcc-17-20260830/libgm2/configure.ac
*** gcc-17-20260823/libgm2/configure.ac	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/configure.ac	Sun Aug 30 22:32:15 2026
*************** LT_INIT
*** 259,266 ****
  AC_LIBTOOL_DLOPEN
  
  AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
! AC_PYTHON_DEVEL([>= '3.0'],[no],[no])
! AM_CONDITIONAL([HAVE_PYTHON_INTERPRETER], [test x$ax_python_interpreter = xyes])
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
  
--- 259,266 ----
  AC_LIBTOOL_DLOPEN
  
  AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
! AC_PYTHON_INTERPRETER([>= '3.0'])
! AM_CONDITIONAL([HAVE_PYTHON_INTERPRETER], [test x$ax_python_interpreter_found = xyes])
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
  
diff -Nrcpad gcc-17-20260823/libgm2/libm2cor/Makefile.in gcc-17-20260830/libgm2/libm2cor/Makefile.in
*** gcc-17-20260823/libgm2/libm2cor/Makefile.in	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/libm2cor/Makefile.in	Sun Aug 30 22:32:15 2026
*************** target_triplet = @target@
*** 108,114 ****
  @BUILD_CORLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2cor
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_devel.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
--- 108,114 ----
  @BUILD_CORLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2cor
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_interpreter.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
*************** PACKAGE_VERSION = @PACKAGE_VERSION@
*** 317,328 ****
  PATH_SEPARATOR = @PATH_SEPARATOR@
  PICFLAG = @PICFLAG@
  PYTHON = @PYTHON@
- PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
- PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
- PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
- PYTHON_LIBS = @PYTHON_LIBS@
- PYTHON_PLATFORM_SITE_PKG = @PYTHON_PLATFORM_SITE_PKG@
- PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
  PYTHON_VERSION = @PYTHON_VERSION@
  RANLIB = @RANLIB@
  SED = @SED@
--- 317,322 ----
*************** am__leading_dot = @am__leading_dot@
*** 342,348 ****
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter = @ax_python_interpreter@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
--- 336,342 ----
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter_found = @ax_python_interpreter_found@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
diff -Nrcpad gcc-17-20260823/libgm2/libm2iso/Makefile.in gcc-17-20260830/libgm2/libm2iso/Makefile.in
*** gcc-17-20260823/libgm2/libm2iso/Makefile.in	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/libm2iso/Makefile.in	Sun Aug 30 22:32:15 2026
*************** target_triplet = @target@
*** 108,114 ****
  @BUILD_ISOLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2iso
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_devel.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
--- 108,114 ----
  @BUILD_ISOLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2iso
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_interpreter.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
*************** PACKAGE_VERSION = @PACKAGE_VERSION@
*** 343,354 ****
  PATH_SEPARATOR = @PATH_SEPARATOR@
  PICFLAG = @PICFLAG@
  PYTHON = @PYTHON@
- PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
- PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
- PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
- PYTHON_LIBS = @PYTHON_LIBS@
- PYTHON_PLATFORM_SITE_PKG = @PYTHON_PLATFORM_SITE_PKG@
- PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
  PYTHON_VERSION = @PYTHON_VERSION@
  RANLIB = @RANLIB@
  SED = @SED@
--- 343,348 ----
*************** am__leading_dot = @am__leading_dot@
*** 368,374 ****
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter = @ax_python_interpreter@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
--- 362,368 ----
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter_found = @ax_python_interpreter_found@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
diff -Nrcpad gcc-17-20260823/libgm2/libm2log/Makefile.in gcc-17-20260830/libgm2/libm2log/Makefile.in
*** gcc-17-20260823/libgm2/libm2log/Makefile.in	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/libm2log/Makefile.in	Sun Aug 30 22:32:15 2026
*************** target_triplet = @target@
*** 108,114 ****
  @BUILD_LOGLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2log
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_devel.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
--- 108,114 ----
  @BUILD_LOGLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2log
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_interpreter.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
*************** PACKAGE_VERSION = @PACKAGE_VERSION@
*** 306,317 ****
  PATH_SEPARATOR = @PATH_SEPARATOR@
  PICFLAG = @PICFLAG@
  PYTHON = @PYTHON@
- PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
- PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
- PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
- PYTHON_LIBS = @PYTHON_LIBS@
- PYTHON_PLATFORM_SITE_PKG = @PYTHON_PLATFORM_SITE_PKG@
- PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
  PYTHON_VERSION = @PYTHON_VERSION@
  RANLIB = @RANLIB@
  SED = @SED@
--- 306,311 ----
*************** am__leading_dot = @am__leading_dot@
*** 331,337 ****
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter = @ax_python_interpreter@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
--- 325,331 ----
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter_found = @ax_python_interpreter_found@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
diff -Nrcpad gcc-17-20260823/libgm2/libm2min/Makefile.in gcc-17-20260830/libgm2/libm2min/Makefile.in
*** gcc-17-20260823/libgm2/libm2min/Makefile.in	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/libm2min/Makefile.in	Sun Aug 30 22:32:15 2026
*************** target_triplet = @target@
*** 108,114 ****
  @ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2min
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_devel.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
--- 108,114 ----
  @ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2min
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_interpreter.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
*************** PACKAGE_VERSION = @PACKAGE_VERSION@
*** 296,307 ****
  PATH_SEPARATOR = @PATH_SEPARATOR@
  PICFLAG = @PICFLAG@
  PYTHON = @PYTHON@
- PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
- PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
- PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
- PYTHON_LIBS = @PYTHON_LIBS@
- PYTHON_PLATFORM_SITE_PKG = @PYTHON_PLATFORM_SITE_PKG@
- PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
  PYTHON_VERSION = @PYTHON_VERSION@
  RANLIB = @RANLIB@
  SED = @SED@
--- 296,301 ----
*************** am__leading_dot = @am__leading_dot@
*** 321,327 ****
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter = @ax_python_interpreter@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
--- 315,321 ----
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter_found = @ax_python_interpreter_found@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
diff -Nrcpad gcc-17-20260823/libgm2/libm2pim/Makefile.in gcc-17-20260830/libgm2/libm2pim/Makefile.in
*** gcc-17-20260823/libgm2/libm2pim/Makefile.in	Sun Aug 23 22:32:19 2026
--- gcc-17-20260830/libgm2/libm2pim/Makefile.in	Sun Aug 30 22:32:15 2026
*************** target_triplet = @target@
*** 108,114 ****
  @BUILD_PIMLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2pim
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_devel.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
--- 108,114 ----
  @BUILD_PIMLIB_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@am__append_1 = -nodefaultrpaths -Wl,-rpath,@loader_path/
  subdir = libm2pim
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
! am__aclocal_m4_deps = $(top_srcdir)/ax_python_interpreter.m4 \
  	$(top_srcdir)/../config/acx.m4 \
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
*************** PACKAGE_VERSION = @PACKAGE_VERSION@
*** 333,344 ****
  PATH_SEPARATOR = @PATH_SEPARATOR@
  PICFLAG = @PICFLAG@
  PYTHON = @PYTHON@
- PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
- PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
- PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
- PYTHON_LIBS = @PYTHON_LIBS@
- PYTHON_PLATFORM_SITE_PKG = @PYTHON_PLATFORM_SITE_PKG@
- PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
  PYTHON_VERSION = @PYTHON_VERSION@
  RANLIB = @RANLIB@
  SED = @SED@
--- 333,338 ----
*************** am__leading_dot = @am__leading_dot@
*** 358,364 ****
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter = @ax_python_interpreter@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
--- 352,358 ----
  am__quote = @am__quote@
  am__tar = @am__tar@
  am__untar = @am__untar@
! ax_python_interpreter_found = @ax_python_interpreter_found@
  bindir = @bindir@
  build = @build@
  build_alias = @build_alias@
diff -Nrcpad gcc-17-20260823/libstdc++-v3/ChangeLog gcc-17-20260830/libstdc++-v3/ChangeLog
*** gcc-17-20260823/libstdc++-v3/ChangeLog	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/ChangeLog	Sun Aug 30 22:32:17 2026
***************
*** 1,3 ****
--- 1,29 ----
+ 2026-08-27  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/123510
+ 	* src/c++20/tzdb.cc (at_time::is_indicator): Add case labels
+ 	for uppercase letters.
+ 	(operator>>(istream&, years_from_to)): Check for 'M' and 'O',
+ 	(chrono::reload_tzdb): Add case labels for lowercase letters,
+ 	and normalize first letter of type.
+ 	(operator>>(istream&, abbrev_month&)): Match all cases in
+ 	switch and days_chars.
+ 	(operator>>(istream&, on_month_day&)): Check for 'L'.
+ 	* testsuite/std/time/tzdb/name_matching.cc: New test.
+ 
+ 2026-08-25  Andrea Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR libstdc++/127005
+ 	* include/std/optional (optional::_M_destroy): Add an assumption on _M_engaged
+ 	being false after the destructor call.
+ 
+ 2026-08-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/127006
+ 	* include/std/spanstream (basic_ospanstream(span, openmode)):
+ 	Add correct openmode value to parameter.
+ 	* testsuite/27_io/spanstream/127006.cc: New test.
+ 
  2026-08-21  Jonathan Wakely  <jwakely@redhat.com>
  
  	* testsuite/std/time/clock/utc/leap_second_info-2.cc: Create
diff -Nrcpad gcc-17-20260823/libstdc++-v3/doc/html/manual/status.html gcc-17-20260830/libstdc++-v3/doc/html/manual/status.html
*** gcc-17-20260823/libstdc++-v3/doc/html/manual/status.html	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/doc/html/manual/status.html	Sun Aug 30 22:32:17 2026
*************** since C++14 and the implementation is co
*** 970,976 ****
  	<span class="emphasis"><em>28</em></span>
        </td><td colspan="3" align="left">
  	<span class="emphasis"><em>Algorithms</em></span>
!       </td></tr><tr><td align="left">28.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">28.2</td><td align="left">Header <code class="code">&lt;algorithm&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">28.3</td><td align="left">Algorithms requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">28.4</td><td align="left">Parallel algorithms</td><td align="left"> </td><td align="left">Uses code from <a class="link" href="https://uxlfoundation.github.io/oneDPL/parallel_api_main.html" target="_top">oneDPL</a></td></tr><tr><td align="left">28.5</td><td align="left">Non-modifying sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.6</td><td align="left">Mutating sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.7</td><td align="left">Sorting and related operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.8</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
        <span class="emphasis"><em>29</em></span>
        </td><td colspan="3" align="left">
  	<span class="emphasis"><em>Numerics</em></span>
--- 970,976 ----
  	<span class="emphasis"><em>28</em></span>
        </td><td colspan="3" align="left">
  	<span class="emphasis"><em>Algorithms</em></span>
!       </td></tr><tr><td align="left">28.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">28.2</td><td align="left">Header <code class="code">&lt;algorithm&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">28.3</td><td align="left">Algorithms requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">28.4</td><td align="left">Parallel algorithms</td><td align="left"> </td><td align="left">Uses code from <a class="link" href="https://uxlfoundation.github.io/oneDPL/specification/parallel_api.html" target="_top">oneDPL</a></td></tr><tr><td align="left">28.5</td><td align="left">Non-modifying sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.6</td><td align="left">Mutating sequence operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.7</td><td align="left">Sorting and related operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">28.8</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
        <span class="emphasis"><em>29</em></span>
        </td><td colspan="3" align="left">
  	<span class="emphasis"><em>Numerics</em></span>
diff -Nrcpad gcc-17-20260823/libstdc++-v3/doc/xml/manual/status_cxx2017.xml gcc-17-20260830/libstdc++-v3/doc/xml/manual/status_cxx2017.xml
*** gcc-17-20260823/libstdc++-v3/doc/xml/manual/status_cxx2017.xml	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/doc/xml/manual/status_cxx2017.xml	Sun Aug 30 22:32:17 2026
*************** since C++14 and the implementation is co
*** 1896,1902 ****
        <entry>28.4</entry>
        <entry>Parallel algorithms</entry>
        <entry/>
!       <entry>Uses code from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://uxlfoundation.github.io/oneDPL/parallel_api_main.html">oneDPL</link></entry>
      </row>
      <row>
        <entry>28.5</entry>
--- 1896,1902 ----
        <entry>28.4</entry>
        <entry>Parallel algorithms</entry>
        <entry/>
!       <entry>Uses code from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://uxlfoundation.github.io/oneDPL/specification/parallel_api.html">oneDPL</link></entry>
      </row>
      <row>
        <entry>28.5</entry>
diff -Nrcpad gcc-17-20260823/libstdc++-v3/doc/xml/manual/status_cxx2020.xml gcc-17-20260830/libstdc++-v3/doc/xml/manual/status_cxx2020.xml
*** gcc-17-20260823/libstdc++-v3/doc/xml/manual/status_cxx2020.xml	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/doc/xml/manual/status_cxx2020.xml	Sun Aug 30 22:32:17 2026
*************** since C++17 and the implementation is co
*** 3425,3431 ****
        <entry>25.3</entry>
        <entry>Parallel algorithms</entry>
        <entry/>
!       <entry>Uses code from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://uxlfoundation.github.io/oneDPL/parallel_api_main.html">oneDPL</link></entry>
      </row>
  
      <row>
--- 3425,3431 ----
        <entry>25.3</entry>
        <entry>Parallel algorithms</entry>
        <entry/>
!       <entry>Uses code from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://uxlfoundation.github.io/oneDPL/specification/parallel_api.html">oneDPL</link></entry>
      </row>
  
      <row>
diff -Nrcpad gcc-17-20260823/libstdc++-v3/include/bits/chrono_io.h gcc-17-20260830/libstdc++-v3/include/bits/chrono_io.h
*** gcc-17-20260823/libstdc++-v3/include/bits/chrono_io.h	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/include/bits/chrono_io.h	Sun Aug 30 22:32:17 2026
*************** namespace __format
*** 1656,1661 ****
--- 1656,1662 ----
  	}
  
        template<typename _OutIter, typename _FormatContext>
+ 	[[__gnu__::__always_inline__]]
  	_OutIter
  	_M_subsecs(const _ChronoData<_CharT>& __t, _OutIter __out,
  		   _FormatContext& __ctx) const
*************** namespace __detail
*** 3635,3640 ****
--- 3636,3658 ----
        return std::__ostream_insert(__os, __s.data(), __s.size());
      }
  
+   // Wrapper around __chrono_write that skips locale for
+   // integer-second time_points.
+   template<size_t _BufSize, typename _TimePoint, typename _CharT,
+ 	   typename _Traits>
+     [[__gnu__::__always_inline__]]
+     inline basic_ostream<_CharT, _Traits>&
+     __chrono_write_time(basic_ostream<_CharT, _Traits>& __os,
+ 			const _TimePoint& __tp)
+     {
+       using _Duration = typename _TimePoint::duration;
+       if constexpr (!treat_as_floating_point_v<typename _Duration::rep>
+ 		    && _Duration::period::den == 1)
+ 	return __chrono_write<_BufSize>(__os, __tp);
+       else
+ 	return __chrono_write<_BufSize>(__os, __tp, __os.getloc());
+     }
+ 
  } // namespace __detail
  /// @endcond
  
*************** namespace __detail
*** 3740,3746 ****
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const weekday_last& __wdl)
      { return __detail::__chrono_write<128>(__os, __wdl, __os.getloc()); }
!     
    template<typename _CharT, typename _Traits>
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os, const month_day& __md)
--- 3758,3764 ----
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const weekday_last& __wdl)
      { return __detail::__chrono_write<128>(__os, __wdl, __os.getloc()); }
! 
    template<typename _CharT, typename _Traits>
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os, const month_day& __md)
*************** namespace __detail
*** 3846,3852 ****
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const hh_mm_ss<_Duration>& __hms)
!     { return __detail::__chrono_write<64>(__os, __hms, __os.getloc()); }
  
  #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
    /// Writes a sys_info object to an ostream in an unspecified format.
--- 3864,3876 ----
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const hh_mm_ss<_Duration>& __hms)
!     {
!       if constexpr (!treat_as_floating_point_v<typename _Duration::rep>
! 		    && _Duration::period::den == 1)
! 	return __detail::__chrono_write<64>(__os, __hms);
!       else
! 	return __detail::__chrono_write<64>(__os, __hms, __os.getloc());
!     }
  
  #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
    /// Writes a sys_info object to an ostream in an unspecified format.
*************** namespace __detail
*** 3866,3872 ****
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const zoned_time<_Duration, _TimeZonePtr>& __t)
!     { return __detail::__chrono_write<128>(__os, __t, __os.getloc()); }
  #endif
  
    template<typename _CharT, typename _Traits, typename _Duration>
--- 3890,3896 ----
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const zoned_time<_Duration, _TimeZonePtr>& __t)
!     { return __detail::__chrono_write_time<128>(__os, __t); }
  #endif
  
    template<typename _CharT, typename _Traits, typename _Duration>
*************** namespace __detail
*** 3875,3886 ****
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const sys_time<_Duration>& __tp)
!     { return __detail::__chrono_write<64>(__os, __tp, __os.getloc()); }
  
    template<typename _CharT, typename _Traits>
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os, const sys_days& __dp)
!     { return __detail::__chrono_write<32>(__os, __dp); };
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
--- 3899,3910 ----
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const sys_time<_Duration>& __tp)
!     { return __detail::__chrono_write_time<64>(__os, __tp); }
  
    template<typename _CharT, typename _Traits>
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os, const sys_days& __dp)
!     { return __detail::__chrono_write<32>(__os, __dp); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
*************** namespace __detail
*** 3914,3920 ****
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const utc_time<_Duration>& __t)
!     { return __detail::__chrono_write<64>(__os, __t, __os.getloc()); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
--- 3938,3944 ----
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const utc_time<_Duration>& __t)
!     { return __detail::__chrono_write_time<64>(__os, __t); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
*************** namespace __detail
*** 3946,3952 ****
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const tai_time<_Duration>& __t)
!     { return __detail::__chrono_write<64>(__os, __t, __os.getloc()); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
--- 3970,3976 ----
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const tai_time<_Duration>& __t)
!     { return __detail::__chrono_write_time<64>(__os, __t); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
*************** namespace __detail
*** 3982,3988 ****
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const gps_time<_Duration>& __t)
!     { return __detail::__chrono_write<64>(__os, __t, __os.getloc()); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
--- 4006,4012 ----
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const gps_time<_Duration>& __t)
!     { return __detail::__chrono_write_time<64>(__os, __t); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
*************** namespace __detail
*** 4017,4023 ****
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const file_time<_Duration>& __t)
!     { return __detail::__chrono_write<64>(__os, __t, __os.getloc()); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
--- 4041,4047 ----
      inline basic_ostream<_CharT, _Traits>&
      operator<<(basic_ostream<_CharT, _Traits>& __os,
  	       const file_time<_Duration>& __t)
!     { return __detail::__chrono_write_time<64>(__os, __t); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
*************** namespace __detail
*** 4040,4046 ****
      // _GLIBCXX_RESOLVE_LIB_DEFECTS
      // 4257. Stream insertion for chrono::local_time should be constrained
      requires requires(const sys_time<_Duration>& __st) { __os << __st; }
!     { return __detail::__chrono_write<64>(__os, __lt, __os.getloc()); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
--- 4064,4070 ----
      // _GLIBCXX_RESOLVE_LIB_DEFECTS
      // 4257. Stream insertion for chrono::local_time should be constrained
      requires requires(const sys_time<_Duration>& __st) { __os << __st; }
!     { return __detail::__chrono_write_time<64>(__os, __lt); }
  
    template<typename _CharT, typename _Traits, typename _Duration,
  	   typename _Alloc = allocator<_CharT>>
diff -Nrcpad gcc-17-20260823/libstdc++-v3/include/std/optional gcc-17-20260830/libstdc++-v3/include/std/optional
*** gcc-17-20260823/libstdc++-v3/include/std/optional	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/include/std/optional	Sun Aug 30 22:32:17 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 303,308 ****
--- 303,311 ----
        {
  	_M_engaged = false;
  	_M_payload._M_value.~_Stored_type();
+ 	// After the destructor, _M_engaged should always be false, see PR 127005.
+ 	if (_M_engaged)
+ 	  __builtin_unreachable();
  #if defined(__clang__) && __cpp_lib_optional >= 202106L // full constexpr support
  	if (std::is_constant_evaluated())
  	  // Work around PR124910 for Clang.
diff -Nrcpad gcc-17-20260823/libstdc++-v3/include/std/spanstream gcc-17-20260830/libstdc++-v3/include/std/spanstream
*** gcc-17-20260823/libstdc++-v3/include/std/spanstream	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/include/std/spanstream	Sun Aug 30 22:32:17 2026
*************** template<typename _CharT, typename _Trai
*** 343,349 ****
      basic_ospanstream(std::span<_CharT> __s,
  		      ios_base::openmode __which = ios_base::out)
      : __ostream_type(std::__addressof(_M_sb)),
!       _M_sb(__s, __which | ios_base::in)
      { }
  
      basic_ospanstream(const basic_ospanstream&) = delete;
--- 343,349 ----
      basic_ospanstream(std::span<_CharT> __s,
  		      ios_base::openmode __which = ios_base::out)
      : __ostream_type(std::__addressof(_M_sb)),
!       _M_sb(__s, __which | ios_base::out)
      { }
  
      basic_ospanstream(const basic_ospanstream&) = delete;
diff -Nrcpad gcc-17-20260823/libstdc++-v3/src/c++20/tzdb.cc gcc-17-20260830/libstdc++-v3/src/c++20/tzdb.cc
*** gcc-17-20260823/libstdc++-v3/src/c++20/tzdb.cc	Sun Aug 23 22:32:21 2026
--- gcc-17-20260830/libstdc++-v3/src/c++20/tzdb.cc	Sun Aug 30 22:32:17 2026
*************** namespace std::chrono
*** 272,285 ****
--- 272,291 ----
  	switch (c)
  	{
  	  case 's':
+ 	  case 'S':
  	    return {Standard, true};
  	  case 'u':
+ 	  case 'U':
  	  case 'g':
+ 	  case 'G':
  	  case 'z':
+ 	  case 'Z':
  	    return {Universal, true};
  	  case 'w':
+ 	  case 'W':
  	    return {Wall, true};
  	  case 'd':
+ 	  case 'D':
  	    return {Daylight, true};
  	  default:
  	    return {Wall, false};
*************** namespace std::chrono
*** 399,405 ****
        {
  	string s;
  	auto c = ws(in).peek();
! 	if (c == 'm') [[unlikely]] // keyword "minimum"
  	  {
  	    in >> s; // extract the rest of the word
  	    yy.from = year(1900);
--- 405,411 ----
        {
  	string s;
  	auto c = ws(in).peek();
! 	if (c == 'm' || c == 'M') [[unlikely]] // keyword "minimum"
  	  {
  	    in >> s; // extract the rest of the word
  	    yy.from = year(1900);
*************** namespace std::chrono
*** 408,419 ****
  	  yy.from = year{num};
  
  	c = ws(in).peek();
! 	if (c == 'm') // keyword "maximum"
  	  {
  	    in >> s; // extract the rest of the word
  	    yy.to = year::max();
  	  }
! 	else if (c == 'o') // keyword "only"
  	  {
  	    in >> s; // extract the rest of the word
  	    yy.to = yy.from;
--- 414,425 ----
  	  yy.from = year{num};
  
  	c = ws(in).peek();
! 	if (c == 'm' || c == 'M') // keyword "maximum"
  	  {
  	    in >> s; // extract the rest of the word
  	    yy.to = year::max();
  	  }
! 	else if (c == 'o' || c == 'O') // keyword "only"
  	  {
  	    in >> s; // extract the rest of the word
  	    yy.to = yy.from;
*************** constinit tzdb_list::_Node::NumLeapSecon
*** 1969,1996 ****
--- 1975,2011 ----
  	    {
  	      case '#':
  		break;
+ 	      case 'r':
  	      case 'R':
  	      {
  		// Rule  NAME  FROM  TO  TYPE  IN  ON  AT  SAVE  LETTER/S
  		is >> type; // extract the "Rule" or "R" marker
+ 		type[0] = 'R';
+ 
  		Rule rule;
  		is >> rule;
  		node->rules.push_back(std::move(rule));
  		break;
  	      }
+ 	      case 'l':
  	      case 'L':
  	      {
  		// Link  TARGET           LINK-NAME
  		is >> type; // extract the "Link" or "L" marker
+ 		type[0] = 'L';
+ 
  		time_zone_link link(nullptr);
  		is >> quoted(link._M_target) >> quoted(link._M_name);
  		node->db.links.push_back(std::move(link));
  		break;
  	      }
+ 	      case 'z':
  	      case 'Z':
  	      {
  		// Zone  NAME        STDOFF  RULES   FORMAT  [UNTIL]
  		is >> type; // extract the "Zone" or "Z" marker
+ 		type[0] = 'Z';
+ 
  		time_zone tz(std::make_unique<time_zone::_Impl>(node));
  		is >> quoted(tz._M_name);
  		node->db.zones.push_back(time_zone(std::move(tz)));
*************** constinit tzdb_list::_Node::NumLeapSecon
*** 2459,2518 ****
        in >> s;
        switch (s[0])
        {
        case 'J':
  	switch (s[1])
  	{
  	case 'a':
  	  am.m = January;
  	  return in;
  	case 'u':
  	  switch (s[2])
  	  {
  	  case 'n':
  	    am.m = June;
  	    return in;
  	  case 'l':
  	    am.m = July;
  	    return in;
  	  }
  	  break;
  	}
  	break;
        case 'F':
  	am.m = February;
  	return in;
        case 'M':
! 	if (s[1] == 'a') [[likely]]
  	  switch (s[2])
  	  {
  	  case 'r':
  	    am.m = March;
  	    return in;
  	  case 'y':
  	    am.m = May;
  	    return in;
  	  }
  	break;
        case 'A':
  	switch (s[1])
  	{
  	case 'p':
  	  am.m = April;
  	  return in;
  	case 'u':
  	  am.m = August;
  	  return in;
  	}
  	break;
        case 'S':
  	am.m = September;
  	return in;
        case 'O':
  	am.m = October;
  	return in;
        case 'N':
  	am.m = November;
  	return in;
        case 'D':
  	am.m = December;
  	return in;
--- 2474,2549 ----
        in >> s;
        switch (s[0])
        {
+       case 'j':
        case 'J':
  	switch (s[1])
  	{
  	case 'a':
+ 	case 'A':
  	  am.m = January;
  	  return in;
  	case 'u':
+ 	case 'U':
  	  switch (s[2])
  	  {
  	  case 'n':
+ 	  case 'N':
  	    am.m = June;
  	    return in;
  	  case 'l':
+ 	  case 'L':
  	    am.m = July;
  	    return in;
  	  }
  	  break;
  	}
  	break;
+       case 'f':
        case 'F':
  	am.m = February;
  	return in;
+       case 'm':
        case 'M':
! 	if (s[1] == 'a' || s[1] == 'A') [[likely]]
  	  switch (s[2])
  	  {
  	  case 'r':
+ 	  case 'R':
  	    am.m = March;
  	    return in;
  	  case 'y':
+ 	  case 'Y':
  	    am.m = May;
  	    return in;
  	  }
  	break;
+       case 'a':
        case 'A':
  	switch (s[1])
  	{
  	case 'p':
+ 	case 'P':
  	  am.m = April;
  	  return in;
  	case 'u':
+ 	case 'U':
  	  am.m = August;
  	  return in;
  	}
  	break;
+       case 's':
        case 'S':
  	am.m = September;
  	return in;
+       case 'o':
        case 'O':
  	am.m = October;
  	return in;
+       case 'n':
        case 'N':
  	am.m = November;
  	return in;
+       case 'd':
        case 'D':
  	am.m = December;
  	return in;
*************** constinit tzdb_list::_Node::NumLeapSecon
*** 2536,2572 ****
--- 2567,2612 ----
  	// Just peek at one char at a time.
  	switch (in.peek())
  	{
+ 	case 'm':
  	case 'M':
  	  aw.wd = Monday;
  	  break;
+ 	case 't':
  	case 'T':
  	  in.ignore(1); // Discard the 'T'
  	  switch (in.peek())
  	  {
  	  case 'u':
+ 	  case 'U':
  	    aw.wd = Tuesday;
  	    break;
  	  case 'h':
+ 	  case 'H':
  	    aw.wd = Thursday;
  	    break;
  	  default:
  	    in.setstate(ios::failbit);
  	  }
  	  break;
+ 	case 'w':
  	case 'W':
  	  aw.wd = Wednesday;
  	  break;
+ 	case 'f':
  	case 'F':
  	  aw.wd = Friday;
  	  break;
+ 	case 's':
  	case 'S':
  	  in.ignore(1); // Discard the 'S'
  	  switch (in.peek())
  	  {
  	  case 'a':
+ 	  case 'A':
  	    aw.wd = Saturday;
  	    break;
  	  case 'u':
+ 	  case 'U':
  	    aw.wd = Sunday;
  	    break;
  	  default:
*************** constinit tzdb_list::_Node::NumLeapSecon
*** 2579,2585 ****
  	in.ignore(1); // Discard whichever char we just looked at.
  
  	// Discard any remaining chars from weekday, e.g. "onday".
! 	string_view day_chars = "ondayesritu";
  	auto is_day_char = [&day_chars](int c) {
  	  return c != char_traits<char>::eof()
  		   && day_chars.find((char)c) != day_chars.npos;
--- 2619,2625 ----
  	in.ignore(1); // Discard whichever char we just looked at.
  
  	// Discard any remaining chars from weekday, e.g. "onday".
! 	string_view day_chars = "ondayesrituONDAYESRITU";
  	auto is_day_char = [&day_chars](int c) {
  	  return c != char_traits<char>::eof()
  		   && day_chars.find((char)c) != day_chars.npos;
*************** constinit tzdb_list::_Node::NumLeapSecon
*** 2613,2619 ****
  		  return in;
  		}
  	    }
! 	  else if (c == 'l') // lastSunday, lastWed, ...
  	    {
  	      in.ignore(4);
  	      if (abbrev_weekday w{}; in >> w) [[likely]]
--- 2653,2659 ----
  		  return in;
  		}
  	    }
! 	  else if (c == 'l' || c == 'L') // lastSunday, lastWed, ...
  	    {
  	      in.ignore(4);
  	      if (abbrev_weekday w{}; in >> w) [[likely]]
diff -Nrcpad gcc-17-20260823/libstdc++-v3/testsuite/27_io/spanstream/127006.cc gcc-17-20260830/libstdc++-v3/testsuite/27_io/spanstream/127006.cc
*** gcc-17-20260823/libstdc++-v3/testsuite/27_io/spanstream/127006.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/libstdc++-v3/testsuite/27_io/spanstream/127006.cc	Sun Aug 30 22:32:18 2026
***************
*** 0 ****
--- 1,30 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <spanstream>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_pr127006_out()
+ {
+   // PR libstdc++/127006
+   char buf[3]{};
+   std::ospanstream s(buf, std::ios::openmode{});
+   VERIFY( s << 'x' );
+   VERIFY( buf[0] == 'x' );
+ }
+ 
+ void
+ test_pr127006_in()
+ {
+   char buf[3]{'x'};
+   std::ispanstream s(buf, std::ios::openmode{});
+   char x;
+   VERIFY( s >> x );
+   VERIFY( x == 'x' );
+ }
+ 
+ int main()
+ {
+   test_pr127006_out();
+   test_pr127006_in();
+ }
diff -Nrcpad gcc-17-20260823/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc gcc-17-20260830/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc
*** gcc-17-20260823/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260830/libstdc++-v3/testsuite/std/time/tzdb/name_matching.cc	Sun Aug 30 22:32:18 2026
***************
*** 0 ****
--- 1,318 ----
+ // { dg-do run { target c++20 } }
+ // { dg-require-effective-target tzdb }
+ // { dg-require-effective-target cxx11_abi }
+ // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
+ 
+ #include <chrono>
+ #include <fstream>
+ #include <format>
+ #include <testsuite_hooks.h>
+ #include <iostream>
+ 
+ static bool override_used = false;
+ 
+ namespace __gnu_cxx
+ {
+   const char* zoneinfo_dir_override() {
+     override_used = true;
+     return "./";
+   }
+ }
+ 
+ using namespace std::chrono;
+ 
+ template<typename Functor, typename... Args>
+   void
+   test_combinations(Functor&& func, std::string_view txt, size_t min, Args&&... args)
+   {
+     std::string lower(txt);
+     std::string upper(txt);
+     for (char& c : upper)
+       c = std::toupper(c);
+ 
+     func(lower.substr(0, min), args...);
+     func(upper.substr(0, min), args...);
+     func(lower, args...);
+     func(upper, args...);
+   }
+ 
+ void
+ test_day(std::string_view name, weekday wd)
+ {
+   constexpr const char* templ = R"(# version test_day_{0}
+  # Zone  NAME  STDOFF  RULES  FORMAT  [UNTIL]
+  Zone    Test  0       -      Z1      2000 May last{0}
+                0       -      Z2      2010 May {0}>=10
+                0       -      Z3
+   )";
+ 
+   std::string input = std::format(templ, name);
+   std::ofstream("tzdata.zi") << input;
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+ 
+   std::string_view ver = db.version;
+   VERIFY( ver.starts_with("test_day_") );
+   ver.remove_prefix(9);
+   VERIFY( ver == name );
+ 
+   sys_info info = locate_zone("Test")->get_info(sys_days(2005y/January/1));
+   VERIFY( info.begin == sys_days(2000y/May/wd[last]) );
+   year_month_day ymd(ceil<days>(info.end));
+   VERIFY( ymd.year() == 2010y );
+   VERIFY( ymd.month() == May );
+   VERIFY( ymd.day() >= day(10) );
+   VERIFY( weekday(ymd) == wd );
+ }
+ 
+ void
+ test_last(std::string_view name)
+ {
+   constexpr const char* templ = R"(# version test_{0}
+  # Zone  NAME  STDOFF  RULES  FORMAT  [UNTIL]
+  Zone    Test  0       -      Z1      2000 July {0}Mon
+                0       -      Z3
+   )";
+ 
+   std::string input = std::format(templ, name);
+   std::ofstream("tzdata.zi") << input;
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+ 
+   std::string_view ver = db.version;
+   VERIFY( ver.starts_with("test_") );
+   ver.remove_prefix(5);
+   VERIFY( ver == name );
+ 
+   sys_info info = locate_zone("Test")->get_info(sys_days(2005y/January/1));
+   VERIFY( info.begin == sys_days(2000y/July/Monday[last]) );
+ }
+ 
+ void
+ test_days()
+ {
+   test_combinations(test_day, "monday", 1, Monday);
+   test_combinations(test_day, "tuesday", 2, Tuesday);
+   test_combinations(test_day, "wednesday", 1, Wednesday);
+   test_combinations(test_day, "thursday", 2, Thursday);
+   test_combinations(test_day, "friday", 1, Friday);
+   test_combinations(test_day, "saturday", 2, Saturday);
+   test_combinations(test_day, "sunday", 2, Sunday);
+ 
+   test_last("last");
+   test_last("LAST");
+ }
+ 
+ void
+ test_month(std::string_view name, month m)
+ {
+   constexpr const char* templ = R"(# version test_month_{0}
+  # Zone  NAME  STDOFF  RULES  FORMAT  [UNTIL]
+  Zone    Test  0       -      Z1      2000 {0} 13
+                0       -      Z2      2010 {0}
+                0       -      Z3
+   )";
+ 
+   std::string input = std::format(templ, name);
+   std::ofstream("tzdata.zi") << input;
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+ 
+   std::string_view ver = db.version;
+   VERIFY( ver.starts_with("test_month_") );
+   ver.remove_prefix(11);
+   VERIFY( ver == name );
+ 
+   sys_info info = locate_zone("Test")->get_info(sys_days(2005y/January/1));
+   VERIFY( info.begin == sys_days(2000y/m/13) );
+   VERIFY( info.end == sys_days(2010y/m/1) );
+ }
+ 
+ void
+ test_months()
+ {
+   test_combinations(test_month, "january", 2, January);
+   test_combinations(test_month, "february", 1, February);
+   test_combinations(test_month, "march", 3, March);
+   test_combinations(test_month, "april", 2, April);
+   test_combinations(test_month, "may", 3, May);
+   test_combinations(test_month, "june", 3, June);
+   test_combinations(test_month, "july", 3, July);
+   test_combinations(test_month, "august", 3, August);
+   test_combinations(test_month, "september", 1, September);
+   test_combinations(test_month, "october", 1, October);
+   test_combinations(test_month, "november", 1, November);
+   test_combinations(test_month, "december", 1, December);
+ }
+ 
+ void
+ test_year(std::string_view min, std::string_view max, std::string_view only)
+ {
+   constexpr const char* templ = R"(# version {0}
+  # Rule  NAME  FROM  TO    -  IN   ON       AT    SAVE  LETTER/S
+  Rule    Rule  {1}   2020  -  Jan  10       0u    0     S
+  Rule    Rule  2000  {2}   -  Nov  12       0u    1     D
+  Rule    Rule  2010  {3}   -  Aug  11       0u    2     O
+  Rule    Rule  2020  {2}  -   Jan  13       0u    0     S
+  # Zone  NAME  STDOFF  RULES  FORMAT  [UNTIL]
+  Zone    Test  0       -      Z1      1800 Jan 1 0u
+                0       Rule   Z%s     3001 Jan 1 0u
+                0       -      Zl
+   )";
+ 
+   const std::string ver = std::format("test_{}_{}_{}", min, max, only);
+   std::string input = std::format(templ, ver, min, max, only);
+   std::ofstream("tzdata.zi") << input;
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == ver );
+ 
+   const time_zone* zone  = locate_zone("Test");
+ 
+   // min applies since 1900, check first transition
+   sys_info info = zone->get_info(sys_days(1900y/January/1));
+   VERIFY( info.begin == sys_days(1800y/January/1) );
+   VERIFY( info.end == sys_days(1900y/January/10) );
+ 
+   // Check 2010 only rule does not apply in 2009
+   info = zone->get_info(sys_days(2009y/February/1));
+   VERIFY( info.begin == sys_days(2009y/January/10) );
+   VERIFY( info.end == sys_days(2009y/November/12) );
+ 
+   // Check 2010 only rule in 2010
+   info = zone->get_info(sys_days(2010y/February/1));
+   VERIFY( info.begin == sys_days(2010y/January/10) );
+   VERIFY( info.end == sys_days(2010y/August/11) );
+ 
+   info = zone->get_info(sys_days(2010y/October/1));
+   VERIFY( info.begin == sys_days(2010y/August/11) );
+   VERIFY( info.end == sys_days(2010y/November/12) );
+ 
+   // Check 2010 only rule does not apply in 2011
+   info = zone->get_info(sys_days(2011y/February/1));
+   VERIFY( info.begin == sys_days(2011y/January/10) );
+   VERIFY( info.end == sys_days(2011y/November/12) );
+ 
+   // max rule applies forever
+   info = zone->get_info(sys_days(2500y/February/1));
+   VERIFY( info.begin == sys_days(2500y/January/13) );
+   VERIFY( info.end == sys_days(2500y/November/12) );
+ 
+   info = zone->get_info(sys_days(3000y/December/1));
+   VERIFY( info.begin == sys_days(3000y/November/12) );
+   VERIFY( info.end == sys_days(3001y/January/1) );
+ }
+ 
+ void
+ test_years()
+ {
+   test_year("min", "max", "only");
+   test_year("m", "m", "o");
+   test_year("MIN", "MAX", "ONLY");
+   test_year("M", "M", "O");
+ }
+ 
+ void
+ test_time(char s, char u, char w, char d)
+ {
+   constexpr const char* templ = R"(# version test_time_{0}{1}{2}{3}
+  # Zone  NAME  STDOFF  RULES  FORMAT  [UNTIL]
+  Zone    Test  1       0      Zs    2000 Jan 11 10{0}
+                3       1      Zu    2005 Feb 12 11{1}
+                5       1      Zw    2010 Mar 13 12{2}
+                7       1      Zd    2015 Apr 14 13{3}
+                9       0      Su    2020 May 15 14{1}
+                10      0      Sw    2025 Jun 16 15{2}
+                11      -      Zl
+   )";
+ 
+   std::string input = std::format(templ, s, u, w, d);
+   std::ofstream("tzdata.zi") << input;
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+ 
+   std::string_view ver = db.version;
+   VERIFY( ver.starts_with("test_time_") );
+   VERIFY( ver[10] == s );
+   VERIFY( ver[11] == u );
+   VERIFY( ver[12] == w );
+   VERIFY( ver[13] == d );
+ 
+   const time_zone* zone  = locate_zone("Test");
+   sys_info info = zone->get_info(sys_days(2002y/January/1));
+   VERIFY( info.begin == sys_days(2000y/January/11) + 10h - 1h );
+   VERIFY( info.end == sys_days(2005y/February/12) + 11h );
+ 
+   info = zone->get_info(sys_days(2012y/January/1));
+   VERIFY( info.begin == sys_days(2010y/March/13) + 12h - 6h );
+   VERIFY( info.end == sys_days(2015y/April/14) + 13h - 8h );
+ 
+   info = zone->get_info(sys_days(2022y/January/1));
+   VERIFY( info.begin == sys_days(2020y/May/15) + 14h );
+   VERIFY( info.end == sys_days(2025y/June/16) + 15h - 10h );
+ }
+ 
+ void
+ test_times()
+ {
+   test_time('s', 'u', 'w', 'd');
+   test_time('S', 'U', 'W', 'D');
+   // Alternate spelling for Universal
+   test_time('s', 'g', 'w', 'd');
+   test_time('s', 'G', 'w', 'd');
+   test_time('s', 'z', 'w', 'd');
+   test_time('s', 'Z', 'w', 'd');
+ }
+ 
+ void
+ test_line(std::string_view rule, std::string_view zone, std::string_view link)
+ {
+   constexpr const char* templ = R"(# version {0}
+  # Rule  NAME  FROM  TO   -  IN   ON       AT    SAVE  LETTER/S
+  {1}     Rule  min   max  -  Jan  13       0u    0     D
+  {1}     Rule  min   max  -  Oct  12       0u    1     S
+  # Zone  NAME  STDOFF  RULES  FORMAT  [UNTIL]
+  {2}     Test  0       -      Z1      2000 Jan 13
+                0       Rule   Z%s
+  # Link  TARGET  LINK-NAME
+  {3}     Test    Link
+   )";
+ 
+   const std::string ver = std::format("test_{}_{}_{}", rule, zone, link);
+   std::string input = std::format(templ, ver, rule, zone, link);
+   std::ofstream("tzdata.zi") << input;
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == ver );
+ 
+   sys_info info = locate_zone("Test")->get_info(sys_days(2005y/February/1));
+   VERIFY( info.begin == sys_days(2005y/January/13) );
+   VERIFY( info.end == sys_days(2005y/October/12) );
+ 
+   const time_zone* target  = locate_zone("Link");
+   VERIFY( target->name() == "Test" );
+ }
+ 
+ void
+ test_lines()
+ {
+   test_line("rule", "zone", "link");
+   test_line("r", "z", "l");
+   test_line("RULE", "ZONE", "LINK");
+   test_line("R", "Z", "L");
+ }
+ 
+ int main()
+ {
+   test_days();
+   test_months();
+   test_years();
+   test_times();
+   test_lines();
+ }
