diff -Nrcpad gcc-17-20260510/.editorconfig gcc-17-20260517/.editorconfig
*** gcc-17-20260510/.editorconfig	Sun May 10 22:32:05 2026
--- gcc-17-20260517/.editorconfig	Sun May 17 22:32:04 2026
*************** end_of_line = lf
*** 30,35 ****
--- 30,42 ----
  insert_final_newline = true
  tab_width = 8
  
+ # Git commit messages
+ [COMMIT_EDITMSG]
+ indent_size = 8
+ indent_style = tab
+ max_line_length = 72
+ trim_trailing_whitespace = true
+ 
  # EditorConfig files
  [.editorconfig]
  charset = utf-8
diff -Nrcpad gcc-17-20260510/ChangeLog gcc-17-20260517/ChangeLog
*** gcc-17-20260510/ChangeLog	Sun May 10 22:32:05 2026
--- gcc-17-20260517/ChangeLog	Sun May 17 22:32:04 2026
***************
*** 1,3 ****
--- 1,17 ----
+ 2026-05-15  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* .editorconfig (COMMIT_EDITMSG): New section.
+ 
+ 2026-05-13  Zhongyao Chen  <chen.zhongyao@zte.com.cn>
+ 
+ 	* MAINTAINERS (Write After Approval): Add myself.
+ 	(Contributing under the DCO): Add myself.
+ 
+ 2026-05-11  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	* MAINTAINERS: Update my email and add myself to the DCO
+ 	section.
+ 
  2026-05-04  Vijay Shankar  <vijay@linux.ibm.com>
  
  	* MAINTAINERS: Add myself to write after approval.
diff -Nrcpad gcc-17-20260510/LAST_UPDATED gcc-17-20260517/LAST_UPDATED
*** gcc-17-20260510/LAST_UPDATED	Sun May 10 22:32:20 2026
--- gcc-17-20260517/LAST_UPDATED	Sun May 17 22:32:19 2026
***************
*** 1 ****
! Obtained from git: master revision f48688e0fc3c36f38756277763ee8429c657fbc3
--- 1 ----
! Obtained from git: master revision 6f3c04e20625dee7c32b1ec43cb0812e38f4394b
diff -Nrcpad gcc-17-20260510/MAINTAINERS gcc-17-20260517/MAINTAINERS
*** gcc-17-20260510/MAINTAINERS	Sun May 10 22:32:05 2026
--- gcc-17-20260517/MAINTAINERS	Sun May 17 22:32:04 2026
*************** Arnaud Charlet                  charlet
*** 417,422 ****
--- 417,423 ----
  Chandra Chavva                  -               <cchavva@redhat.com>
  Dhruv Chawla                    dhruvc          <dhruvc@nvidia.com>
  Dehao Chen                      dehao           <dehao@google.com>
+ Zhongyao Chen			-		<chenzhongyao.hit@gmail.com>
  Fabien Chêne                    fabien          <fabien@gcc.gnu.org>
  Bin Cheng                       amker           <bin.cheng@linux.alibaba.com>
  Kito Cheng                      kito            <kito.cheng@gmail.com>
*************** Jiufu Guo                       guojiufu
*** 522,528 ****
  Xuepeng Guo                     xguo            <terry.xpguo@gmail.com>
  Wei Guozhi                      carrot          <carrot@google.com>
  Vineet Gupta                    vineetg         <vineet.gupta@linux.dev>
! Naveen H.S                      naveenh         <naveenh@marvell.com>
  Mostafa Hagog                   hagog           <hagog@gcc.gnu.org>
  Olivier Hainque                 hainque         <hainque@adacore.com>
  Jivan Hakobyan                  -               <jivanhakobyan9@gmail.com>
--- 523,529 ----
  Xuepeng Guo                     xguo            <terry.xpguo@gmail.com>
  Wei Guozhi                      carrot          <carrot@google.com>
  Vineet Gupta                    vineetg         <vineet.gupta@linux.dev>
! Naveen H.S                      naveenh         <naveen.siddegowda@oss.qualcomm.com>
  Mostafa Hagog                   hagog           <hagog@gcc.gnu.org>
  Olivier Hainque                 hainque         <hainque@adacore.com>
  Jivan Hakobyan                  -               <jivanhakobyan9@gmail.com>
*************** Daniel Barboza
*** 964,969 ****
--- 965,972 ----
  Daniel Barboza                                  <dbarboza@ventanamicro.com>
  Peter Bergner                                   <bergner@tenstorrent.com>
  Dhruv Chawla                                    <dhruvc@nvidia.com>
+ Zhongyao Chen					<chenzhongyao.hit@gmail.com>
+ Zhongyao Chen					<chen.zhongyao@zte.com.cn>
  Juergen Christ                                  <jchrist@linux.ibm.com>
  Alejandro Colomar                               <alx@kernel.org>
  Giuseppe D'Angelo                               <giuseppe.dangelo@kdab.com>
*************** Robin Dapp
*** 971,976 ****
--- 974,980 ----
  Robin Dapp                                      <rdapp@qti.qualcomm.com>
  Robin Dapp                                      <rdapp@ventanamicro.com>
  Prachi Godbole                                  <pgodbole@nvidia.com>
+ Naveen Gowda                                    <naveen.siddegowda@oss.qualcomm.com>
  Aldy Hernandez                                  <aldy@quesejoda.com>
  Michal Jires                                    <mjires@suse.cz>
  Matthias Kretz                                  <m.kretz@gsi.de>
diff -Nrcpad gcc-17-20260510/MD5SUMS gcc-17-20260517/MD5SUMS
*** gcc-17-20260510/MD5SUMS	Sun May 10 22:32:26 2026
--- gcc-17-20260517/MD5SUMS	Sun May 17 22:32:24 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260510.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-20260517.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
***************
*** 10,16 ****
  #
  e8eeef33ef071516ce3f689e9c71e0b5  .b4-config
  fd78d02fa55fcdb78ddb2f37a7868dbb  .dir-locals.el
! c83d1c4a8d42642be0511fa89b9c3cf5  .editorconfig
  b91d600742b62d1860809cb184055a3d  .forgejo/PULL_REQUEST_TEMPLATE.md
  9a22a68c0484f3f139296a8e26cdf746  .forgejo/workflows/build-containers.yaml
  4b254279920374351da794ea1ef21fae  .forgejo/workflows/format-checks.yaml
--- 10,16 ----
  #
  e8eeef33ef071516ce3f689e9c71e0b5  .b4-config
  fd78d02fa55fcdb78ddb2f37a7868dbb  .dir-locals.el
! 36adccc3b45bf15b55eca368b1717231  .editorconfig
  b91d600742b62d1860809cb184055a3d  .forgejo/PULL_REQUEST_TEMPLATE.md
  9a22a68c0484f3f139296a8e26cdf746  .forgejo/workflows/build-containers.yaml
  4b254279920374351da794ea1ef21fae  .forgejo/workflows/format-checks.yaml
*************** ac5a8807f431d3dab46a7425b96379e4  .gitig
*** 24,35 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 8115b1f6ca3fb7d3bb009864a9db7c86  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 419401ac58953db8af92f9ef0fc81dd2  LAST_UPDATED
! bb7e26ee8fef34f6962ab5354c249ae9  MAINTAINERS
  af43617880b3cd9c10627c97e639d29e  Makefile.def
  734342371d8ccc2c81cb2d8b3d040f33  Makefile.in
  bd7a6cf48b6a530442ffaee7ea118c2d  Makefile.tpl
--- 24,35 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 5627cdfe28ae661eeeb2d737db3d35e4  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! a30704a12549be4f1ae5344eda98c5ee  LAST_UPDATED
! 61bf72bff3874773b972d926e1ba2360  MAINTAINERS
  af43617880b3cd9c10627c97e639d29e  Makefile.def
  734342371d8ccc2c81cb2d8b3d040f33  Makefile.in
  bd7a6cf48b6a530442ffaee7ea118c2d  Makefile.tpl
*************** dd20b4aa952e750070486e3525cba7bd  config
*** 160,166 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  07f145e2ab73fc50d9557c0c0e8db303  configure
  2950c8550289b6a39cf4fd0697c88aae  configure.ac
! 9f43aba140110eb613dd3a7d12d6810e  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
--- 160,166 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  07f145e2ab73fc50d9557c0c0e8db303  configure
  2950c8550289b6a39cf4fd0697c88aae  configure.ac
! dbe84e88e1242eb2f653b37d906d0361  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
*************** ee0ae327aa0f1870f7f3769378ffe5f3  contri
*** 180,186 ****
  71d1b41247c5c74fb047e13edec7e323  contrib/check-params-in-docs.py
  7718189f09f512492ac48fac60f8ce42  contrib/check_GNU_style.py
  3b3c8f407009373e1539531cbaca4c92  contrib/check_GNU_style.sh
! 6fc056aab34be7fd77f0144eb1b63c28  contrib/check_GNU_style_lib.py
  001bdb1e04e753b9a62f2491c8a25dae  contrib/check_makefile_deps.sh
  428bea7deb96315aeb055a851263a5df  contrib/check_warning_flags.sh
  2521874691b72a437aafa85beaef22aa  contrib/ci-containers/README
--- 180,186 ----
  71d1b41247c5c74fb047e13edec7e323  contrib/check-params-in-docs.py
  7718189f09f512492ac48fac60f8ce42  contrib/check_GNU_style.py
  3b3c8f407009373e1539531cbaca4c92  contrib/check_GNU_style.sh
! bde8448e2c28f4ec9e2d2c757bd72d3f  contrib/check_GNU_style_lib.py
  001bdb1e04e753b9a62f2491c8a25dae  contrib/check_makefile_deps.sh
  428bea7deb96315aeb055a851263a5df  contrib/check_warning_flags.sh
  2521874691b72a437aafa85beaef22aa  contrib/ci-containers/README
*************** ab1ac1854ae7cc1b85223bea29c20188  contri
*** 356,362 ****
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
  3b9eeb97d2c5437bfc3efb83e744efdd  contrib/testsuite-management/validate_failures.py
  0202e4875fa43ec09cf5e8442c873a56  contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail
! a5b89c3173900431abf5c31e7ac83e8d  contrib/texi2pod.pl
  2ce17dcc2954bb28a298854b535a6836  contrib/unicode/DerivedCoreProperties.txt
  b5f1fc2ba1fb561db121adc2f00815a8  contrib/unicode/DerivedGeneralCategory.txt
  7fd74053b3a5907205c161831119db5b  contrib/unicode/DerivedNormalizationProps.txt
--- 356,362 ----
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
  3b9eeb97d2c5437bfc3efb83e744efdd  contrib/testsuite-management/validate_failures.py
  0202e4875fa43ec09cf5e8442c873a56  contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail
! 6638a7f0308b4f6225a28f503e12bad3  contrib/texi2pod.pl
  2ce17dcc2954bb28a298854b535a6836  contrib/unicode/DerivedCoreProperties.txt
  b5f1fc2ba1fb561db121adc2f00815a8  contrib/unicode/DerivedGeneralCategory.txt
  7fd74053b3a5907205c161831119db5b  contrib/unicode/DerivedNormalizationProps.txt
*************** f15bc3c5de22eac0bdd4f611502139a0  gcc/AB
*** 531,537 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! bcdd4952b176ae9d09e5d16ee5caef01  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 531,537 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 3175d93953b64d2640a12f19c3d2891e  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 569,587 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 40a02518f5688aadc9d66b455aa4ae52  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! f9ecff089151871e4021b44174b0b416  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
  cbbaecdd6decdf00007bbdb344d2b282  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! db3d1cc2f3f006f3cc01e534a888c871  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 569,587 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 7a18d5e6ca2a5e059bebce6f99af79b5  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! c9814361c0fa3f33e539c3c2b77e3c6c  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
  cbbaecdd6decdf00007bbdb344d2b282  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 0e32b64210280edde67cd4cdcecf63e1  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** d22c314f3748309f812d78f5217dda61  gcc/ad
*** 3072,3078 ****
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebe64421041bf4ef9153e26a6dc60532  gcc/adjust-alignment.cc
! 41cb3fb5ba00ac6883876df65ee970af  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
  3d3f2f95b917d0f77d57d977f3eb93d8  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
--- 3072,3078 ----
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebe64421041bf4ef9153e26a6dc60532  gcc/adjust-alignment.cc
! 49d2f9f73880ddb015da1f9dc8ac69d9  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
  3d3f2f95b917d0f77d57d977f3eb93d8  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
*************** ebb1ceb69d6cf8ac2cdc227ae45f0eca  gcc/bi
*** 3292,3307 ****
  02723eaf6b51bef2f5c86af989a3a07a  gcc/bitmap.h
  392eecf8142b4edd3c482f461232166f  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
! 4d187b33643d8554f50ad793471e43a2  gcc/builtin-types.def
! cdcd35bde318b22092b0788986b03a47  gcc/builtins.cc
! 4dbe6686097ec6c197a24ac373bb9554  gcc/builtins.def
  99d9ddd60ff804d8e24732db43d38bca  gcc/builtins.h
! 58789ab4ff95fc8e95de30c895b892be  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
  070946aa1b55a55d613bad8af07ad174  gcc/c-family/c-attribs.cc
! f4e6f034c9c0dd30e2457f7b808ba442  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
  a93db167d6d3c021153923ea5398b039  gcc/c-family/c-common.h
  e3a0d862a25764bc4242ad90ba85db86  gcc/c-family/c-cppbuiltin.cc
--- 3292,3307 ----
  02723eaf6b51bef2f5c86af989a3a07a  gcc/bitmap.h
  392eecf8142b4edd3c482f461232166f  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
! 199995f5aa749f6b6a1170f2307d8e3b  gcc/builtin-types.def
! 224330323c2d3335c4db7660b79dd58d  gcc/builtins.cc
! eca54bea4455692736159661d9bb9ea9  gcc/builtins.def
  99d9ddd60ff804d8e24732db43d38bca  gcc/builtins.h
! 3aa2429581698a50fbd141ceb52b2e30  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
  070946aa1b55a55d613bad8af07ad174  gcc/c-family/c-attribs.cc
! 42561a3faabfdfd137738b2311baf58c  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
  a93db167d6d3c021153923ea5398b039  gcc/c-family/c-common.h
  e3a0d862a25764bc4242ad90ba85db86  gcc/c-family/c-cppbuiltin.cc
*************** e3a0d862a25764bc4242ad90ba85db86  gcc/c-
*** 3313,3319 ****
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
  4893d50b962d5e680a44bb72d2097469  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
! 1bbb584fdb4ca00e4ddb78cf700ec54d  gcc/c-family/c-omp.cc
  a93a54bd451fefbd21f9b288d5530d33  gcc/c-family/c-opts.cc
  a7304c009aa63ce6c8e80612b426724a  gcc/c-family/c-pch.cc
  cb9706138b571f810527200a1e24035c  gcc/c-family/c-ppoutput.cc
--- 3313,3319 ----
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
  4893d50b962d5e680a44bb72d2097469  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
! b84620929e53b69a3e41c57809a001ab  gcc/c-family/c-omp.cc
  a93a54bd451fefbd21f9b288d5530d33  gcc/c-family/c-opts.cc
  a7304c009aa63ce6c8e80612b426724a  gcc/c-family/c-pch.cc
  cb9706138b571f810527200a1e24035c  gcc/c-family/c-ppoutput.cc
*************** ea821c9d267c64dd8b74aad9d0189834  gcc/c-
*** 3332,3345 ****
  6f9f322124625df8d051fb8538679e17  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
  29b7425b7315dcfbd0c9f89296e90df0  gcc/c-family/c-warn.cc
! 64f70ea877ef6fdb6e5a9fc36357732d  gcc/c-family/c.opt
! 87cfcd671634399d8a259326c9c4e7c4  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 013b6b355abc5ea011e73a1f08bcbf3b  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
--- 3332,3345 ----
  6f9f322124625df8d051fb8538679e17  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
  29b7425b7315dcfbd0c9f89296e90df0  gcc/c-family/c-warn.cc
! 33cadbf9fb4856643a6a29b3332ca38d  gcc/c-family/c.opt
! e0eb5a70f81cc829fe7d9d9164d0b11f  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! e220408bf5a26cc9bfc8c8ccd37de341  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
*************** a59a5f126151616976b68fde0c703dd4  gcc/c/
*** 3350,3360 ****
  62012039da265ed806754029f67a24a9  gcc/c/c-lang.h
  1c2de79d0807af2a767aa7abefb07c3a  gcc/c/c-objc-common.cc
  cbfdd140f14c43c01a6bdf8b1c24b317  gcc/c/c-objc-common.h
! b270844b1fd859305d4af5a4c3549d5e  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! a70b68de7681a84d5b05b1d3e6f7409b  gcc/c/c-tree.h
! 18687eeba6fc1696860f9c8147ddf7d1  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3ae90e1d8085765b7e7488ac9673a927  gcc/c/gimple-parser.cc
--- 3350,3360 ----
  62012039da265ed806754029f67a24a9  gcc/c/c-lang.h
  1c2de79d0807af2a767aa7abefb07c3a  gcc/c/c-objc-common.cc
  cbfdd140f14c43c01a6bdf8b1c24b317  gcc/c/c-objc-common.h
! b921c85a69b3e9e68f842c402ba13e4d  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! 0e7daedf1e35ced06dd99e10dcc9a68e  gcc/c/c-tree.h
! 2c5fd8545a103843363322c21a54c5f5  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3ae90e1d8085765b7e7488ac9673a927  gcc/c/gimple-parser.cc
*************** d61fe81ae621d346985061a794ecfd03  gcc/cg
*** 3391,3405 ****
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  931fe41c17df7e7a6074418f8e41f010  gcc/cif-code.def
! b576255b7c89d8f4c48ece9eb9f58b69  gcc/cobol/ChangeLog
! 56c564c4cfd3395214baa46684218f3d  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  721fae29d54f2a632cdf024f72b079d3  gcc/cobol/cbldiag.h
  5fdc70643a73d31fa87ca25eb9bca477  gcc/cobol/cdf-copy.cc
  298773ed22793f7c278724d2c7828041  gcc/cobol/cdf.y
  9e2d50bdc3077d698d2cd5c27a02cf08  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! e0f535eda76f91487f21c3b4888404e0  gcc/cobol/cobol1.cc
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
  ba30f28abeaa4beeafc56b80054aad73  gcc/cobol/copybook.h
--- 3391,3407 ----
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  931fe41c17df7e7a6074418f8e41f010  gcc/cif-code.def
! 115a279f2c37e324f8b2996ed7743f66  gcc/cobol/ChangeLog
! 5ba0d0569b8eaeb40ae03caba819f9f7  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  721fae29d54f2a632cdf024f72b079d3  gcc/cobol/cbldiag.h
  5fdc70643a73d31fa87ca25eb9bca477  gcc/cobol/cdf-copy.cc
  298773ed22793f7c278724d2c7828041  gcc/cobol/cdf.y
  9e2d50bdc3077d698d2cd5c27a02cf08  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! 51d1dc13bf0ad345f8ba650f9c99b0fc  gcc/cobol/cobol1.cc
! 1f238db4a80750c0d05f315f230e33e3  gcc/cobol/compare.cc
! 939e7b432922c564a7dd0333e2fa3532  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
  ba30f28abeaa4beeafc56b80054aad73  gcc/cobol/copybook.h
*************** d3e145b932227aa8e5b26dec41c06d6a  gcc/co
*** 3410,3423 ****
  d576006e43938e834a3c93d92bddcc98  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  a0a0120d2e52dd9bbe26a6d64ba9dc64  gcc/cobol/gcobolspec.cc
! d4a241838fc81e1fa500a15ce0e722ff  gcc/cobol/genapi.cc
! b0e08dd5c1b33b9edf9f3c89fc4e118a  gcc/cobol/genapi.h
! f6b49df8f08bde7d55994bd030686afe  gcc/cobol/gengen.cc
! 7a93d507aaf6bc434a5529dd4b599bf9  gcc/cobol/gengen.h
! 02c1973b92cba6c2803b133cd4b16eb0  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 082c11a08ad373c7a277396c5568082f  gcc/cobol/genutil.cc
! 925e4dcdfe1a80d684d2f24b6ea9db56  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
  1d25e20d4c6772646a35ca3fa9e1ed49  gcc/cobol/lang-specs.h
--- 3412,3425 ----
  d576006e43938e834a3c93d92bddcc98  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  a0a0120d2e52dd9bbe26a6d64ba9dc64  gcc/cobol/gcobolspec.cc
! 691c66bf7f9a69773541beaf2187c821  gcc/cobol/genapi.cc
! 33ad1f5d36b0ebf1ffe306350c8d60cc  gcc/cobol/genapi.h
! dfe5d4aa2bbb52c8c78ec370cd1edd11  gcc/cobol/gengen.cc
! 710a70dbaf68006a5e87b42b04de9977  gcc/cobol/gengen.h
! 02ef7b164bb03cd6f9416a7ce973abcd  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 2721cc61ac2a3b66066ee43d09ec1384  gcc/cobol/genutil.cc
! a74337a9bb65a83b27be68a2f06e4986  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
  1d25e20d4c6772646a35ca3fa9e1ed49  gcc/cobol/lang-specs.h
*************** f6b49df8f08bde7d55994bd030686afe  gcc/co
*** 3426,3446 ****
  75383d93bce64f91473c54d1c6a52f98  gcc/cobol/lexio.cc
  c691e8bb52e1a438ce2f510250bbf4d9  gcc/cobol/lexio.h
  64538945adf32d271171e0bda2850338  gcc/cobol/messages.cc
! 49174414380efefeb1fbe5a1ba530f5c  gcc/cobol/parse.y
! 8a51cf3c9693021e14e8e8f77a464c98  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
  52c1a2af86ace48e713840e3d7efa796  gcc/cobol/scan.l
  b0dbe25131552ea89e3c4b817cb51a13  gcc/cobol/scan_ante.h
! fcc394f9d06bbd841472e0b0d69f643d  gcc/cobol/scan_post.h
  74a3f55d7d2740db3d3e1945335d4faa  gcc/cobol/show_parse.h
! 6461e12b84bc54245442466d729743c9  gcc/cobol/structs.cc
! c9b6f7041663377c42969a2d442c95df  gcc/cobol/structs.h
! 19f9021d9a32e6d1588614189c623927  gcc/cobol/symbols.cc
! 0d46dce5de9d1d2448cbeec26081b566  gcc/cobol/symbols.h
  1da102076dc68b2edac18947cbd1c104  gcc/cobol/symfind.cc
  0b45e8af0c2c2f064b378c02368657f3  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! b268c943df2fb6adc86fd796856587cb  gcc/cobol/util.cc
  71a80320dc4c1e02c0aafd48bea98ea4  gcc/cobol/util.h
  c1bcbb8330a34acab1f51487c3d5b89f  gcc/collect-utils.cc
  70025ae15b4018e75f6bfcbaa4db4fca  gcc/collect-utils.h
--- 3428,3448 ----
  75383d93bce64f91473c54d1c6a52f98  gcc/cobol/lexio.cc
  c691e8bb52e1a438ce2f510250bbf4d9  gcc/cobol/lexio.h
  64538945adf32d271171e0bda2850338  gcc/cobol/messages.cc
! 1e6e9792bc5a269d29d66c7c7bde8f8f  gcc/cobol/parse.y
! e4c4f8104abe6aaf78d9130fd228a68b  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
  52c1a2af86ace48e713840e3d7efa796  gcc/cobol/scan.l
  b0dbe25131552ea89e3c4b817cb51a13  gcc/cobol/scan_ante.h
! 77407320fb4e055c83519f2849472460  gcc/cobol/scan_post.h
  74a3f55d7d2740db3d3e1945335d4faa  gcc/cobol/show_parse.h
! 593c47b2e477e389977161c311aee82c  gcc/cobol/structs.cc
! e82b261f1753be53d32fb056a39f498b  gcc/cobol/structs.h
! 5e76f69d26ce71a91aca077da34c0645  gcc/cobol/symbols.cc
! c7f7481ea1935c9022d43a43860a4bf5  gcc/cobol/symbols.h
  1da102076dc68b2edac18947cbd1c104  gcc/cobol/symfind.cc
  0b45e8af0c2c2f064b378c02368657f3  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 06752152103acaeb29c557eea11a7afd  gcc/cobol/util.cc
  71a80320dc4c1e02c0aafd48bea98ea4  gcc/cobol/util.h
  c1bcbb8330a34acab1f51487c3d5b89f  gcc/collect-utils.cc
  70025ae15b4018e75f6bfcbaa4db4fca  gcc/collect-utils.h
*************** a56f67bf9504f1f91df64d23b9ce6f3b  gcc/co
*** 3450,3459 ****
  d48c86bc52a7b8ee38281d6069d3eb6a  gcc/collect2.h
  9b54c6ade2ed5ee11859b498e663936e  gcc/color-macros.h
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
! 744eceed492c1d032583b8b8970d9a46  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
! b82c70a691a0ccf137f58b46e3f35b22  gcc/common.opt
! d2e8132b0f749227249e50a041b512b0  gcc/common.opt.urls
  d3b28fb0d49a8d683dde6011400fd7e7  gcc/common/common-target-def.h
  93cf11d6a27d42f73799ae012d2f876e  gcc/common/common-target.def
  d8f7142c05c4102806a8b26817df17a6  gcc/common/common-target.h
--- 3452,3461 ----
  d48c86bc52a7b8ee38281d6069d3eb6a  gcc/collect2.h
  9b54c6ade2ed5ee11859b498e663936e  gcc/color-macros.h
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
! f8ed62b3d696b90f169cf8a9868f8aad  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
! 3daf39a0da614c7aa3e2007da82b37a4  gcc/common.opt
! 0b6694826773455ec174f3dc52a1a3a1  gcc/common.opt.urls
  d3b28fb0d49a8d683dde6011400fd7e7  gcc/common/common-target-def.h
  93cf11d6a27d42f73799ae012d2f876e  gcc/common/common-target.def
  d8f7142c05c4102806a8b26817df17a6  gcc/common/common-target.h
*************** d3b8ce30c6110489fd0b57d6792f3f29  gcc/co
*** 3514,3520 ****
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! 57a8b574e67ae9b8910506f049d864fc  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
  34da5cde8b9bc078646ece2f7754fa2f  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
--- 3516,3522 ----
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! 121ab97762e23095e2720fde066015b0  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
  34da5cde8b9bc078646ece2f7754fa2f  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
*************** c058178535c874c3d9f517b5db804691  gcc/co
*** 3560,3572 ****
  4ac96a19bb5198741503893e13567775  gcc/config/aarch64/aarch64-option-extensions.def
  1fcf15030f24490613d6a45d6b439e61  gcc/config/aarch64/aarch64-opts.h
  c58a041b3d1a2f2c6c49f13e8ad85fdc  gcc/config/aarch64/aarch64-passes.def
! c7af165f67b5faf5dfd6ca3a24651517  gcc/config/aarch64/aarch64-protos.h
  7beff4ec013b184132d7c933faa51208  gcc/config/aarch64/aarch64-sched-dispatch.cc
  b824341b8f6fdb8eb1667425adf63db8  gcc/config/aarch64/aarch64-sched-dispatch.h
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
  9a92557ac11986ea17d11d6ca82c01e6  gcc/config/aarch64/aarch64-simd-builtins.def
  8f0acfd5455d9572e381b98441bf47a5  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! de47095986c58e8a296dc72de2121d30  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  680d9861c361f5e0db24978600b2a134  gcc/config/aarch64/aarch64-speculation.cc
  b7abc20f0caf90f086591527696134c1  gcc/config/aarch64/aarch64-sve-builtins-base.cc
--- 3562,3574 ----
  4ac96a19bb5198741503893e13567775  gcc/config/aarch64/aarch64-option-extensions.def
  1fcf15030f24490613d6a45d6b439e61  gcc/config/aarch64/aarch64-opts.h
  c58a041b3d1a2f2c6c49f13e8ad85fdc  gcc/config/aarch64/aarch64-passes.def
! 3670977dd8ad3a909c28b9bb1e064af4  gcc/config/aarch64/aarch64-protos.h
  7beff4ec013b184132d7c933faa51208  gcc/config/aarch64/aarch64-sched-dispatch.cc
  b824341b8f6fdb8eb1667425adf63db8  gcc/config/aarch64/aarch64-sched-dispatch.h
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
  9a92557ac11986ea17d11d6ca82c01e6  gcc/config/aarch64/aarch64-simd-builtins.def
  8f0acfd5455d9572e381b98441bf47a5  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 2824d5fdc2090b21b3caba179868aec6  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  680d9861c361f5e0db24978600b2a134  gcc/config/aarch64/aarch64-speculation.cc
  b7abc20f0caf90f086591527696134c1  gcc/config/aarch64/aarch64-sve-builtins-base.cc
*************** f254f4eb5433b6e41d08c6dd0805b7c0  gcc/co
*** 3589,3597 ****
  ce756734c2d086ac2b6f48267acb68ea  gcc/config/aarch64/aarch64-sys-regs.def
  e101bed95b5d0264c364d8bcf1a7705f  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
! 45c6b1a7ca031f6a0af001317cc5e476  gcc/config/aarch64/aarch64-tuning-flags.def
! b2ed7b4c85a1fa71b919148f60e2984f  gcc/config/aarch64/aarch64-vxworks.h
! 56f9545b949da68593695ff99dd0e9da  gcc/config/aarch64/aarch64.cc
  1e57040281ba3f62b216c58733a820f5  gcc/config/aarch64/aarch64.h
  bd813cb7dfa70cb6c970d78d27ead783  gcc/config/aarch64/aarch64.md
  ebc45c78d8d52bdcabec46514f44ad2d  gcc/config/aarch64/aarch64.opt
--- 3591,3599 ----
  ce756734c2d086ac2b6f48267acb68ea  gcc/config/aarch64/aarch64-sys-regs.def
  e101bed95b5d0264c364d8bcf1a7705f  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
! 95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
! 0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! 08c18aa54c61ef559ac8a9785ec2c106  gcc/config/aarch64/aarch64.cc
  1e57040281ba3f62b216c58733a820f5  gcc/config/aarch64/aarch64.h
  bd813cb7dfa70cb6c970d78d27ead783  gcc/config/aarch64/aarch64.md
  ebc45c78d8d52bdcabec46514f44ad2d  gcc/config/aarch64/aarch64.opt
*************** cf1987e5ab132733d06bfee8c03fcb96  gcc/co
*** 3609,3615 ****
  b80cf07c2c72294b3852130ec8c93494  gcc/config/aarch64/biarchilp32.h
  532332ff4f3d492231a7c392cda8d879  gcc/config/aarch64/biarchlp64.h
  eb03dfcd266d8fc8f127a62e436447db  gcc/config/aarch64/check-sve-md.awk
! 73b78efd3b80c813fe75cc2b519996be  gcc/config/aarch64/constraints.md
  3c41ca007a195244b101219701a3bcb0  gcc/config/aarch64/cortex-a57-fma-steering.cc
  dc252994bb63e3b3bb9aa44e233b100d  gcc/config/aarch64/cygming.h
  b6d18d11750027a9e7159f7100cbc2df  gcc/config/aarch64/driver-aarch64.cc
--- 3611,3617 ----
  b80cf07c2c72294b3852130ec8c93494  gcc/config/aarch64/biarchilp32.h
  532332ff4f3d492231a7c392cda8d879  gcc/config/aarch64/biarchlp64.h
  eb03dfcd266d8fc8f127a62e436447db  gcc/config/aarch64/check-sve-md.awk
! 6efe5d18705fa658ddb85f16b87d134d  gcc/config/aarch64/constraints.md
  3c41ca007a195244b101219701a3bcb0  gcc/config/aarch64/cortex-a57-fma-steering.cc
  dc252994bb63e3b3bb9aa44e233b100d  gcc/config/aarch64/cygming.h
  b6d18d11750027a9e7159f7100cbc2df  gcc/config/aarch64/driver-aarch64.cc
*************** b05978bd2969a943265d3549c23b8b59  gcc/co
*** 3885,3891 ****
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
  6033224c6e10fc0028d72d05ef4adc70  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! b573ae5e0c9a5b17804044fa43a5c9e1  gcc/config/avr/avr.cc
  a4c128a5989d02ad75000ddce5204e45  gcc/config/avr/avr.h
  b90ae914b2f6999e93154cd4ee679348  gcc/config/avr/avr.md
  952a12d62229d3077f49f68614cf8be4  gcc/config/avr/avr.opt
--- 3887,3893 ----
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
  6033224c6e10fc0028d72d05ef4adc70  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! a9586cfcef72e5e02e3b584251e6542d  gcc/config/avr/avr.cc
  a4c128a5989d02ad75000ddce5204e45  gcc/config/avr/avr.h
  b90ae914b2f6999e93154cd4ee679348  gcc/config/avr/avr.md
  952a12d62229d3077f49f68614cf8be4  gcc/config/avr/avr.opt
*************** d9c8993192f71fd754cf947dfccacee6  gcc/co
*** 3895,3906 ****
  dcd40301975d7f922b3fc51ba7ab1096  gcc/config/avr/constraints.md
  ec06c3cb0febed0066782b6d9fc52013  gcc/config/avr/driver-avr.cc
  ac632b1dc99f00909fa89603958f6495  gcc/config/avr/elf.h
! c1c7ae14d1c2186be7c197667bd1ef14  gcc/config/avr/gen-avr-mmcu-specs.cc
  54df79db0299d2ad33b18cdba6706e83  gcc/config/avr/gen-avr-mmcu-texi.cc
  1a5c508b77e0fdec3eba4025fad143e4  gcc/config/avr/genmultilib.awk
  3e1985cc514729064bd7289a7a1050a0  gcc/config/avr/predicates.md
  989371a0c0bef067b04f2ca6cab339f8  gcc/config/avr/ranges.h
! b40823c113c4f4c97c7877f00e4f49dd  gcc/config/avr/specs.h
  71f81820bdeb307527c4c7b577e056de  gcc/config/avr/stdfix.h
  c543f228dfe0842eef779abf3c3657a8  gcc/config/avr/t-avr
  adc4a61b44f06a4fbd2f535ba35ef825  gcc/config/bfin/bfin-modes.def
--- 3897,3908 ----
  dcd40301975d7f922b3fc51ba7ab1096  gcc/config/avr/constraints.md
  ec06c3cb0febed0066782b6d9fc52013  gcc/config/avr/driver-avr.cc
  ac632b1dc99f00909fa89603958f6495  gcc/config/avr/elf.h
! 7deab294c9247a181703b204a0b783b8  gcc/config/avr/gen-avr-mmcu-specs.cc
  54df79db0299d2ad33b18cdba6706e83  gcc/config/avr/gen-avr-mmcu-texi.cc
  1a5c508b77e0fdec3eba4025fad143e4  gcc/config/avr/genmultilib.awk
  3e1985cc514729064bd7289a7a1050a0  gcc/config/avr/predicates.md
  989371a0c0bef067b04f2ca6cab339f8  gcc/config/avr/ranges.h
! 95ad97cfa72d237935c2af12b2bd398c  gcc/config/avr/specs.h
  71f81820bdeb307527c4c7b577e056de  gcc/config/avr/stdfix.h
  c543f228dfe0842eef779abf3c3657a8  gcc/config/avr/t-avr
  adc4a61b44f06a4fbd2f535ba35ef825  gcc/config/bfin/bfin-modes.def
*************** e31d20e57fcc6b9a15aa65c66ea05643  gcc/co
*** 4250,4256 ****
  326f51003b15cc03ee3c50435caee6cd  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
! 0a54de31fe93b7be53db20498732681e  gcc/config/i386/cygming.h
  2769aec1ba034a4aeb65b6a57299886f  gcc/config/i386/cygwin-stdint.h
  7a00aae17af7149d2d3b820963bc170f  gcc/config/i386/cygwin-w64.h
  7fa24da4effe0d45e3129f720aef22ab  gcc/config/i386/cygwin.h
--- 4252,4258 ----
  326f51003b15cc03ee3c50435caee6cd  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
! 49eeb60bb4a4e67c0ca57b4e85355822  gcc/config/i386/cygming.h
  2769aec1ba034a4aeb65b6a57299886f  gcc/config/i386/cygwin-stdint.h
  7a00aae17af7149d2d3b820963bc170f  gcc/config/i386/cygwin-w64.h
  7fa24da4effe0d45e3129f720aef22ab  gcc/config/i386/cygwin.h
*************** a0261d6cc006fb86b99f338bdc94ae04  gcc/co
*** 4302,4308 ****
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
  333feb817f8ba42d58167ca5495f50b3  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 8d577de68a1f996a7e1a8eefa256efc9  gcc/config/i386/i386-features.cc
  473c35b162be3bcf222c90a16f72b948  gcc/config/i386/i386-features.h
  dca59d9c03f5b12366f9a926169f396d  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
--- 4304,4310 ----
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
  333feb817f8ba42d58167ca5495f50b3  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 8ffc8b40d0d0ec3efbfafc3b6e069bab  gcc/config/i386/i386-features.cc
  473c35b162be3bcf222c90a16f72b948  gcc/config/i386/i386-features.h
  dca59d9c03f5b12366f9a926169f396d  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
*************** c20b5abeadf9bf0c148bd3cee43dabbf  gcc/co
*** 4316,4324 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 5955a0bcc034084cc9e51d4bc2b9f17b  gcc/config/i386/i386.cc
  ef379db3f4eba90bca6b04e4d5abc753  gcc/config/i386/i386.h
! 3188bbdce3e857394cd2a013b38a4a5b  gcc/config/i386/i386.md
  7f5e2eb20e3b7ca8af1b3ee7416e8eaf  gcc/config/i386/i386.opt
  b9e680863ab278314c1f2990d2d04fcc  gcc/config/i386/i386.opt.urls
  7570cb8763bf53e7144db7d6cd97f846  gcc/config/i386/i386elf.h
--- 4318,4326 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! accb7c9ce90c2c96438bce0121b855b8  gcc/config/i386/i386.cc
  ef379db3f4eba90bca6b04e4d5abc753  gcc/config/i386/i386.h
! c930b483d95e4c0a1b171c4460e5e4e1  gcc/config/i386/i386.md
  7f5e2eb20e3b7ca8af1b3ee7416e8eaf  gcc/config/i386/i386.opt
  b9e680863ab278314c1f2990d2d04fcc  gcc/config/i386/i386.opt.urls
  7570cb8763bf53e7144db7d6cd97f846  gcc/config/i386/i386elf.h
*************** c9fc723c904a1bfdb77efa618ac115e9  gcc/co
*** 4338,4344 ****
  1201700c8e91c71426715ad486ba6a3d  gcc/config/i386/lynx.h
  f6a0cdd108052c6336f54bd29c1ffab5  gcc/config/i386/lzcntintrin.h
  fefe46f8b06de933480400b9f58e9d31  gcc/config/i386/mingw-mcfgthread.h
- 37f0e9e8c26542155ac2d0e2ff88fcae  gcc/config/i386/mingw-pthread.h
  836a605d2014f8c8f399c30408f8956e  gcc/config/i386/mingw-w64.h
  bc129bffab46f1b3f4e8385e129dad2d  gcc/config/i386/mingw-w64.opt
  55b88c976269e37a537664690c4fab53  gcc/config/i386/mingw-w64.opt.urls
--- 4340,4345 ----
*************** db114ac74c87743a142214fddaad2687  gcc/co
*** 4381,4387 ****
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  5b7a5d6bd6f2cbb1ca44a113b598ee56  gcc/config/i386/sol2.h
! da4f398056c251f44d5a65e964a13791  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
--- 4382,4388 ----
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  5b7a5d6bd6f2cbb1ca44a113b598ee56  gcc/config/i386/sol2.h
! bdfd9308cc8d3a24325e9ce1d9671cb7  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
*************** f175c5ef1f791f0dad5e5fc5c260a276  gcc/co
*** 4507,4513 ****
  0e0d7a8230d05f9b8b796bdcfd935d94  gcc/config/linux.opt.urls
  45201b369597c8b9d7611e0d10b3bfce  gcc/config/lm32/constraints.md
  4fa055dfb723db4efd52481aceec3f57  gcc/config/lm32/lm32-protos.h
! feddaec6c8504074495d631ea1cdfbc5  gcc/config/lm32/lm32.cc
  b1836e0202829fb0e97e14094370e1b9  gcc/config/lm32/lm32.h
  cecb6934c760d54e9ad37c9790a48520  gcc/config/lm32/lm32.md
  9f29a81484bcc13c6cb5893b43a2793e  gcc/config/lm32/lm32.opt
--- 4508,4514 ----
  0e0d7a8230d05f9b8b796bdcfd935d94  gcc/config/linux.opt.urls
  45201b369597c8b9d7611e0d10b3bfce  gcc/config/lm32/constraints.md
  4fa055dfb723db4efd52481aceec3f57  gcc/config/lm32/lm32-protos.h
! 98fa8acf46c065de78565ebf06f1382e  gcc/config/lm32/lm32.cc
  b1836e0202829fb0e97e14094370e1b9  gcc/config/lm32/lm32.h
  cecb6934c760d54e9ad37c9790a48520  gcc/config/lm32/lm32.md
  9f29a81484bcc13c6cb5893b43a2793e  gcc/config/lm32/lm32.opt
*************** fc623524d75c7561f85f81615ecad0ac  gcc/co
*** 4555,4561 ****
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
  f4bb410c49842101038ee7fdf2cba0c8  gcc/config/loongarch/loongarch.cc
  44710020cadd48029a693da29d33aaf0  gcc/config/loongarch/loongarch.h
! 5a282fafa8dd7dfaa411a45841c60928  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
  387011bb9dde5e25493f3602b2fd17bb  gcc/config/loongarch/loongarch.opt.urls
  561a66379ab213d1901626005734b467  gcc/config/loongarch/lsx.md
--- 4556,4562 ----
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
  f4bb410c49842101038ee7fdf2cba0c8  gcc/config/loongarch/loongarch.cc
  44710020cadd48029a693da29d33aaf0  gcc/config/loongarch/loongarch.h
! 85a37c8daac160ef96a38bd9a5bc6e7f  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
  387011bb9dde5e25493f3602b2fd17bb  gcc/config/loongarch/loongarch.opt.urls
  561a66379ab213d1901626005734b467  gcc/config/loongarch/lsx.md
*************** a8b08640136e3e7712d2278eb84c21d9  gcc/co
*** 4652,4657 ****
--- 4653,4659 ----
  aab868e13fa11db204b530f90af81029  gcc/config/mingw/cygming.opt
  2cc2835c6b0f3061fc3eae08c6ade557  gcc/config/mingw/cygming.opt.urls
  3a09de115b6947874ec185e5164e8f69  gcc/config/mingw/cygwin-d.cc
+ 37f0e9e8c26542155ac2d0e2ff88fcae  gcc/config/mingw/mingw-pthread.h
  8aa59f703b6d8957ff655113267f7404  gcc/config/mingw/mingw-stdint.h
  dbcb030a5a374a20a894ab55346eb2a0  gcc/config/mingw/mingw.opt
  19d5796358fa93b7d6fe22a02604a407  gcc/config/mingw/mingw.opt.urls
*************** b85e0e83df79d2f49435f8e4a8992866  gcc/co
*** 4663,4669 ****
  3c3dc8be46b778f5ae37e34d464e3671  gcc/config/mingw/winnt-dll.cc
  8d146495102e58eb8547fbe9ddbe3244  gcc/config/mingw/winnt-dll.h
  6c4d1792e7729f1a305e9f345c12693f  gcc/config/mingw/winnt-stubs.cc
! 112a3c159dc847088cfbd1f2ec04d765  gcc/config/mingw/winnt.cc
  d3366b857e20f558be77198d166b068f  gcc/config/mingw/winnt.h
  d67c65c648990c8cc128e82dcf27ee3e  gcc/config/mips/10000.md
  438f714e597ac4900ae547323e93a15b  gcc/config/mips/20kc.md
--- 4665,4671 ----
  3c3dc8be46b778f5ae37e34d464e3671  gcc/config/mingw/winnt-dll.cc
  8d146495102e58eb8547fbe9ddbe3244  gcc/config/mingw/winnt-dll.h
  6c4d1792e7729f1a305e9f345c12693f  gcc/config/mingw/winnt-stubs.cc
! 6fa861f48d6ecdd155488fb6c02c98d7  gcc/config/mingw/winnt.cc
  d3366b857e20f558be77198d166b068f  gcc/config/mingw/winnt.h
  d67c65c648990c8cc128e82dcf27ee3e  gcc/config/mips/10000.md
  438f714e597ac4900ae547323e93a15b  gcc/config/mips/20kc.md
*************** ed3f5ce2f7305137cb7981e5492f421d  gcc/co
*** 4948,4954 ****
  799a8f38f756018d977260ec4dd15af3  gcc/config/pa/pa-opts.h
  8476a9a8e5e9e1c37d95d447ec828c0d  gcc/config/pa/pa-protos.h
  d25f80bbb8de64bd134dc7f65040f919  gcc/config/pa/pa.cc
! aef195401230c3b69b934068b8407088  gcc/config/pa/pa.h
  0280715850409a16b7fe3f8fc9b3bef2  gcc/config/pa/pa.md
  cb75df3acdd704487025273adaa58c9f  gcc/config/pa/pa.opt
  051ba40c6ad77aa43300a9282939c6ae  gcc/config/pa/pa.opt.urls
--- 4950,4956 ----
  799a8f38f756018d977260ec4dd15af3  gcc/config/pa/pa-opts.h
  8476a9a8e5e9e1c37d95d447ec828c0d  gcc/config/pa/pa-protos.h
  d25f80bbb8de64bd134dc7f65040f919  gcc/config/pa/pa.cc
! 48ed3369bdda761db5670fecc39f87bc  gcc/config/pa/pa.h
  0280715850409a16b7fe3f8fc9b3bef2  gcc/config/pa/pa.md
  cb75df3acdd704487025273adaa58c9f  gcc/config/pa/pa.opt
  051ba40c6ad77aa43300a9282939c6ae  gcc/config/pa/pa.opt.urls
*************** cb75df3acdd704487025273adaa58c9f  gcc/co
*** 4956,4962 ****
  e56b7b2e46a62845a9dd3ecc20eb74e6  gcc/config/pa/pa32-netbsd.h
  e967caf5ca8994cebf2a46ce5874966a  gcc/config/pa/pa32-openbsd.h
  046f07631bc7bdf2f6c230b4d13c1b12  gcc/config/pa/pa32-regs.h
! 329f108fe1d534918fbac23797a8b377  gcc/config/pa/pa64-hpux.h
  9ea981ccbc8a874b66f8fdade1caa4cc  gcc/config/pa/pa64-hpux.opt
  b9670a9aa8c6577d9c71118121d7f9a8  gcc/config/pa/pa64-hpux.opt.urls
  f4dc2c81f02f83e7ad59203429b20ada  gcc/config/pa/pa64-linux.h
--- 4958,4964 ----
  e56b7b2e46a62845a9dd3ecc20eb74e6  gcc/config/pa/pa32-netbsd.h
  e967caf5ca8994cebf2a46ce5874966a  gcc/config/pa/pa32-openbsd.h
  046f07631bc7bdf2f6c230b4d13c1b12  gcc/config/pa/pa32-regs.h
! 2cc56f65a9fd153fbc7d32d9fc6d6b55  gcc/config/pa/pa64-hpux.h
  9ea981ccbc8a874b66f8fdade1caa4cc  gcc/config/pa/pa64-hpux.opt
  b9670a9aa8c6577d9c71118121d7f9a8  gcc/config/pa/pa64-hpux.opt.urls
  f4dc2c81f02f83e7ad59203429b20ada  gcc/config/pa/pa64-linux.h
*************** c171108cfab16c74097a841489b04298  gcc/co
*** 5070,5076 ****
  f57a4d1f0a5a49304e07ae38a6990bc8  gcc/config/riscv/riscv-string.cc
  83bc8b8b85874456078c4c683d82a3e6  gcc/config/riscv/riscv-subset.h
  da26032fa71bbdaccc0766633e3f86bb  gcc/config/riscv/riscv-target-attr.cc
! d8e8e4d101990f0cda7e1e6a0b2615ad  gcc/config/riscv/riscv-v.cc
  23f9fe60c9f6f052bd55875310c01b0e  gcc/config/riscv/riscv-v.h
  3d17a86fd1ba10efb8809c613d1eb6cf  gcc/config/riscv/riscv-vect-permconst.cc
  5c3100beef34fe1879075f8cfb95e70e  gcc/config/riscv/riscv-vector-builtins-bases.cc
--- 5072,5078 ----
  f57a4d1f0a5a49304e07ae38a6990bc8  gcc/config/riscv/riscv-string.cc
  83bc8b8b85874456078c4c683d82a3e6  gcc/config/riscv/riscv-subset.h
  da26032fa71bbdaccc0766633e3f86bb  gcc/config/riscv/riscv-target-attr.cc
! 845610fe668c7dee69ccc0586a0638e1  gcc/config/riscv/riscv-v.cc
  23f9fe60c9f6f052bd55875310c01b0e  gcc/config/riscv/riscv-v.h
  3d17a86fd1ba10efb8809c613d1eb6cf  gcc/config/riscv/riscv-vect-permconst.cc
  5c3100beef34fe1879075f8cfb95e70e  gcc/config/riscv/riscv-vector-builtins-bases.cc
*************** f11925c88524d2fd457bf77944da1302  gcc/co
*** 5298,5304 ****
  da79297ad0c4c71553a67c1c8659d7f0  gcc/config/rs6000/tmmintrin.h
  88417b4d808d053378108ca755b5e5ce  gcc/config/rs6000/vec_types.h
  d25d99ecfc5b7d30303b228b0b6b2b9d  gcc/config/rs6000/vector.md
! a8c5b69d2174a02ec5fceaf382d995f4  gcc/config/rs6000/vsx.md
  e01b246a8cdac36ad716112dbba238f9  gcc/config/rs6000/vxworks.h
  879b35d5e026800c40c13e663df8c5f9  gcc/config/rs6000/vxworksae.h
  aa45c89828fac6551d8d57309cf26ec0  gcc/config/rs6000/vxworksmils.h
--- 5300,5306 ----
  da79297ad0c4c71553a67c1c8659d7f0  gcc/config/rs6000/tmmintrin.h
  88417b4d808d053378108ca755b5e5ce  gcc/config/rs6000/vec_types.h
  d25d99ecfc5b7d30303b228b0b6b2b9d  gcc/config/rs6000/vector.md
! be8468d388318201cc9599b2a617425e  gcc/config/rs6000/vsx.md
  e01b246a8cdac36ad716112dbba238f9  gcc/config/rs6000/vxworks.h
  879b35d5e026800c40c13e663df8c5f9  gcc/config/rs6000/vxworksae.h
  aa45c89828fac6551d8d57309cf26ec0  gcc/config/rs6000/vxworksmils.h
*************** c44b381242fc679206eebe3588894489  gcc/co
*** 5321,5330 ****
  be88b902c0fc07fc260a843e527ad245  gcc/config/rx/predicates.md
  59ddeb68971245eee8a59e9be4929548  gcc/config/rx/rx-modes.def
  c7cc18c3c6e80f769c4e27296c120108  gcc/config/rx/rx-opts.h
! cc1176df362777967ec78fe3d96e72a2  gcc/config/rx/rx-protos.h
! ae726748d180fff39a94bdf7ef28615d  gcc/config/rx/rx.cc
! a941959b1d010160d6e46cb0c0688ad7  gcc/config/rx/rx.h
! bfac0e2363492daf4865c134ee21f8e1  gcc/config/rx/rx.md
  0329c06217618ce2a83cd6bbd4458da8  gcc/config/rx/rx.opt
  1823f8ae7b80bcaf2f3428c53ab91c64  gcc/config/rx/rx.opt.urls
  032cf36abc28f171fc24229e32796402  gcc/config/rx/t-linux
--- 5323,5332 ----
  be88b902c0fc07fc260a843e527ad245  gcc/config/rx/predicates.md
  59ddeb68971245eee8a59e9be4929548  gcc/config/rx/rx-modes.def
  c7cc18c3c6e80f769c4e27296c120108  gcc/config/rx/rx-opts.h
! 32245191419a45d03aadb4ced52df7db  gcc/config/rx/rx-protos.h
! d0c6f5a09c1c53eaf8ccf2b5113fce61  gcc/config/rx/rx.cc
! 86ad9c6dae7eb8996bb9acae9eccff8d  gcc/config/rx/rx.h
! b13db7b01f1e7237be69d6d38b7a41a1  gcc/config/rx/rx.md
  0329c06217618ce2a83cd6bbd4458da8  gcc/config/rx/rx.opt
  1823f8ae7b80bcaf2f3428c53ab91c64  gcc/config/rx/rx.opt.urls
  032cf36abc28f171fc24229e32796402  gcc/config/rx/t-linux
*************** dbd5811fcd8a1caf49e4e9091afdc18c  gcc/co
*** 5620,5627 ****
  9a9ea234526c2b6ec2dde5659d16935c  gcc/config/xtensa/xtensa-opts.h
  f11b25bf61cd607f1829b2d5c5d306b9  gcc/config/xtensa/xtensa-passes.def
  eabefa7848e30cb14ae3473ccb4f1c5e  gcc/config/xtensa/xtensa-protos.h
! f63f42f74fb67364359dc3dd9374625b  gcc/config/xtensa/xtensa.cc
! f4bcf6f51210e6c25d738abf93218402  gcc/config/xtensa/xtensa.h
  52f26b165e1fe62791b88ba6e211d921  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
--- 5622,5629 ----
  9a9ea234526c2b6ec2dde5659d16935c  gcc/config/xtensa/xtensa-opts.h
  f11b25bf61cd607f1829b2d5c5d306b9  gcc/config/xtensa/xtensa-passes.def
  eabefa7848e30cb14ae3473ccb4f1c5e  gcc/config/xtensa/xtensa-protos.h
! ecf8e568f92a538f7bd4d2c46437186a  gcc/config/xtensa/xtensa.cc
! 4e822e9f2db0883f124aaa488154ac01  gcc/config/xtensa/xtensa.h
  52f26b165e1fe62791b88ba6e211d921  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
*************** c5ad0142a191862e3e81ecd3573754b3  gcc/co
*** 5637,5643 ****
  55a33ae415bde0fd2e36ba584894e50b  gcc/coroutine-passes.cc
  c10700723a41c720aada0096f369147e  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! 4e302cc4882e42128fc8a3574507d999  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5639,5645 ----
  55a33ae415bde0fd2e36ba584894e50b  gcc/coroutine-passes.cc
  c10700723a41c720aada0096f369147e  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! a2a4f641e4f726e6957801a846f5763c  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** f39635970f98bbc4591f6363fe70504b  gcc/cp
*** 5674,5685 ****
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d9b8a76735523ab737e8778b90397d97  gcc/cp/Make-lang.in
! 689c8a6810ac9e15b64d4e745bda0f11  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
  c4bf6272ee9cceeb6e34829ccb897c20  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! be48e927406ecb7b9aa1c3cca8eb920d  gcc/cp/constexpr.cc
  44493039c741da0cbddb5a8d6d93701a  gcc/cp/constraint.cc
  ab81cc984e2b72c49098e64c4e798924  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
--- 5676,5687 ----
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d9b8a76735523ab737e8778b90397d97  gcc/cp/Make-lang.in
! b1ea0d0ed485b0b4279a7cacc155dd5e  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
  c4bf6272ee9cceeb6e34829ccb897c20  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! ed32e34464fd7bb2f88fd544984a7c96  gcc/cp/constexpr.cc
  44493039c741da0cbddb5a8d6d93701a  gcc/cp/constraint.cc
  ab81cc984e2b72c49098e64c4e798924  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
*************** eba8d8a1725223519fba5d4d69afd5c9  gcc/cp
*** 5692,5698 ****
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
  bc9b29434f2e35fa68caf656161b5c0f  gcc/cp/cp-tree.def
! 9f97170340cbac11d02d481cd543f37f  gcc/cp/cp-tree.h
  e2854dfa428fab45fc41bf58fef71e61  gcc/cp/cp-ubsan.cc
  0f660920514d4f51007f6841a25e3af6  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
--- 5694,5700 ----
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
  bc9b29434f2e35fa68caf656161b5c0f  gcc/cp/cp-tree.def
! 0564f01ad8c6a35c8b8e66de3d08697e  gcc/cp/cp-tree.h
  e2854dfa428fab45fc41bf58fef71e61  gcc/cp/cp-ubsan.cc
  0f660920514d4f51007f6841a25e3af6  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
*************** f067718cf3d629084d8347c4e017afd4  gcc/cp
*** 5700,5708 ****
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
  9d3aede451ced654aa6bf5edddd3a400  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
! 75a9c9dd92636b6d15aa307ba781f18a  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
! b5df3f92afac840c412b1bddf76291d5  gcc/cp/error.cc
  59d3d272a504a462c1f7081637e7f3e5  gcc/cp/except.cc
  70f36ac126d5a18ee7be5d40cf58c2c9  gcc/cp/expr.cc
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
--- 5702,5710 ----
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
  9d3aede451ced654aa6bf5edddd3a400  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
! ba2d3d3cac80668633567991a4d6b77c  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
! e5cd674ba89cede50da369b84db82527  gcc/cp/error.cc
  59d3d272a504a462c1f7081637e7f3e5  gcc/cp/except.cc
  70f36ac126d5a18ee7be5d40cf58c2c9  gcc/cp/expr.cc
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
*************** eb53b711377a0f71ba9361d9eda0ba85  gcc/cp
*** 5725,5743 ****
  b166c2ce3d5ccd4de4e0c5910947ae41  gcc/cp/name-lookup.h
  b98d31c57aa038618db60991b17e0d35  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! b93898641e04fe49fa45c2700f7370c3  gcc/cp/parser.cc
  7973a34c47e3d3c580832655a3a5c3c2  gcc/cp/parser.h
! 0b8908ac3946721429d6518dae55f11c  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 353e3fd1b8d1bc37278f2d4d4f306143  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  0cfaf9712b89bed5d7abc7832ea0bf8b  gcc/cp/search.cc
! ded5af5308fd2e787f4c4e56c854bf18  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! f97f062dd7f7951d852c55a777650ccf  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
! 1e689d5f7a1facc6ce4b51aaa96636aa  gcc/cp/typeck.cc
  40eb09924b1139e6f7994869420c0c98  gcc/cp/typeck2.cc
  12d19e5abc1e436004b8885cde4765f0  gcc/cp/vtable-class-hierarchy.cc
  556f791fb43a25890d32717884f67cd1  gcc/cppbuiltin.cc
--- 5727,5745 ----
  b166c2ce3d5ccd4de4e0c5910947ae41  gcc/cp/name-lookup.h
  b98d31c57aa038618db60991b17e0d35  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! b45715501a78fd237bfa8ce5b0880fb0  gcc/cp/parser.cc
  7973a34c47e3d3c580832655a3a5c3c2  gcc/cp/parser.h
! 4b55194cee4c39f6a32146b667a79b17  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 72fcee9ba0fb3b355f46ca101677c03f  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  0cfaf9712b89bed5d7abc7832ea0bf8b  gcc/cp/search.cc
! bd1dcbac0dc7624ca4cb36430a3c35b9  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! ea0423d5516e1f1e195b6f19be779643  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
! 80d4fbc23f7220108e890ea919dc4ae6  gcc/cp/typeck.cc
  40eb09924b1139e6f7994869420c0c98  gcc/cp/typeck2.cc
  12d19e5abc1e436004b8885cde4765f0  gcc/cp/vtable-class-hierarchy.cc
  556f791fb43a25890d32717884f67cd1  gcc/cppbuiltin.cc
*************** ee65c9e3e7c3fb1fd0128c23f4130e51  gcc/do
*** 6122,6128 ****
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! f962507cadc64aa3fc08f6fc44b94ef8  gcc/doc/extend.texi
  483a7b956113f0370528460e842ff7b0  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  66d5868616d429f3e34b575b3efc6ccc  gcc/doc/gcc.texi
--- 6124,6130 ----
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 6157b0f85cc0d578d6a4711c34ffccd1  gcc/doc/extend.texi
  483a7b956113f0370528460e842ff7b0  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  66d5868616d429f3e34b575b3efc6ccc  gcc/doc/gcc.texi
*************** bde53a0a190c3a74b047eb2b53c080eb  gcc/do
*** 6147,6153 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  32f1a3db712ba5b76d74729eef677eda  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! d2c1a93dfdb9245bbe57a1e365747677  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6149,6155 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  32f1a3db712ba5b76d74729eef677eda  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 0cbe2b9bef34f74917051c77019ea095  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** c2fc9f8e6a1cb39a7237e4ac3d7fcd7f  gcc/do
*** 6185,6191 ****
  b1b6d8120056485e6de69be9493a2129  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  f7e932ab983b28cd4bef523021fa9eb0  gcc/doc/match-and-simplify.texi
! 8f3308b9a8ced064e7e97d6d08db4ff1  gcc/doc/md.texi
  afaf0b9b413500a77920c3963dcd3978  gcc/doc/objc.texi
  79e8babebb4a40553fc011874ac21cbb  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
--- 6187,6193 ----
  b1b6d8120056485e6de69be9493a2129  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  f7e932ab983b28cd4bef523021fa9eb0  gcc/doc/match-and-simplify.texi
! 0bc5fef84d474ecc0069b5d2e841a1e1  gcc/doc/md.texi
  afaf0b9b413500a77920c3963dcd3978  gcc/doc/objc.texi
  79e8babebb4a40553fc011874ac21cbb  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
*************** e54937e427a2584ac4045286c725fab1  gcc/do
*** 6197,6203 ****
  b309bd48592e052da0d197f2de333d20  gcc/doc/riscv-ext.texi
  223ad6aa09ad7d9a5bdba4f529e06349  gcc/doc/riscv-mcpu.texi
  f49c748c83e03c288e9ae95bffd4bfba  gcc/doc/riscv-mtune.texi
! ee1dc9bba1241ba6755d90ce32847e63  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
  f7ed55f72c884c3d87eeef4192401eaf  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
--- 6199,6205 ----
  b309bd48592e052da0d197f2de333d20  gcc/doc/riscv-ext.texi
  223ad6aa09ad7d9a5bdba4f529e06349  gcc/doc/riscv-mcpu.texi
  f49c748c83e03c288e9ae95bffd4bfba  gcc/doc/riscv-mtune.texi
! 3057c119b16a51b960d234c71641cd8c  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
  f7ed55f72c884c3d87eeef4192401eaf  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
*************** d61f76c4b55102abe0d6908ab60489e7  gcc/ex
*** 6243,6250 ****
  9542db78094e70fd18442ce8a2b02264  gcc/explow.h
  a1086b579ca0cf41bca92db8032dd9b7  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! eb75df114e69863f6370174248bbfadd  gcc/expr.cc
! 54b30ae6372ded76e375ade2621552a1  gcc/expr.h
  9f248454f2ad0895075965174d32b045  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
  3c351443d52500c559f1f91eb65b96c2  gcc/fibonacci_heap.h
--- 6245,6252 ----
  9542db78094e70fd18442ce8a2b02264  gcc/explow.h
  a1086b579ca0cf41bca92db8032dd9b7  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! 3f088ab79926ed4fb59cd6ff66a8f29b  gcc/expr.cc
! 69a1518b8526107d4b43d02a5920898b  gcc/expr.h
  9f248454f2ad0895075965174d32b045  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
  3c351443d52500c559f1f91eb65b96c2  gcc/fibonacci_heap.h
*************** f80b38c70a85f9aeae9688b937b028ba  gcc/fi
*** 6255,6268 ****
  b4a18c8d0dacb99b95b772e94f976754  gcc/final.cc
  3f5e6ac132421f17c9c8232626731e46  gcc/fixed-value.cc
  1caa253d024b0e3dcf3e6ba5ca8eeab1  gcc/fixed-value.h
! 57d536e4a123ac5161bf8eae17154030  gcc/flag-types.h
  85741de0b8ea9e109ee1355d60bfd397  gcc/flags.h
! 4c030e20bb385d0d71edd6f9e1b647b0  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 50b999b375e3a5a95a002f592e6d4514  gcc/fold-const.cc
  0ec02a37dbbe9cb267f0ea1263085ed3  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! e5d246d2ac5446d5a4597fad662f330f  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6257,6270 ----
  b4a18c8d0dacb99b95b772e94f976754  gcc/final.cc
  3f5e6ac132421f17c9c8232626731e46  gcc/fixed-value.cc
  1caa253d024b0e3dcf3e6ba5ca8eeab1  gcc/fixed-value.h
! 843d7b61f7ebbdf9b9f6d9eeac9db399  gcc/flag-types.h
  85741de0b8ea9e109ee1355d60bfd397  gcc/flags.h
! ba649054d339863338ad87cb27555a9e  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 2fb6ace934b6ce40a167c32aae14cc4f  gcc/fold-const.cc
  0ec02a37dbbe9cb267f0ea1263085ed3  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! 616875bb874dec6652e03bdcdd790b6d  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** edad5176d72953374d67effefef0a605  gcc/fo
*** 6304,6326 ****
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! 172e32f224badeef54997bdf6521a592  gcc/fortran/decl.cc
  92ac8b7c0f5e7976d4cd1297e9eb18c1  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
! d159d22a53e7b0f3fc49d23c3a112081  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
  8b02343f75ef7cf3f9a4b9e0599abadc  gcc/fortran/expr.cc
  354927f6cb797cd538c0ab8ab0e552bb  gcc/fortran/f95-lang.cc
! a9545d0b0a47cdd6d41ab654ae535ef1  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! 18fe992f97b5381f4af0087a46d7adeb  gcc/fortran/gfortran.h
  4b41c64e656ca5096ae5a265ff7b2116  gcc/fortran/gfortran.texi
! 9da0114ccf35340d3035f21f8a0f3325  gcc/fortran/gfortranspec.cc
! 8cc7ef5f6337072e740ebd904093fcd4  gcc/fortran/interface.cc
  7e06cc5337aba27172fe64c673314c64  gcc/fortran/intrinsic.cc
  285cce3e348dd08fbaf339358ac57d51  gcc/fortran/intrinsic.h
! 3db093e57d8256b248d0bdb6fdaf42b4  gcc/fortran/intrinsic.texi
  c0b28df69feb22bcafd8aac543dd4fba  gcc/fortran/invoke.texi
  381e1132c2b9f3171ccfce24fbd47ba2  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
--- 6306,6328 ----
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! 5a7ed10c5ba4df056e9493db69e95e52  gcc/fortran/decl.cc
  92ac8b7c0f5e7976d4cd1297e9eb18c1  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
! 3d1d73c0ff90501d54be1a709f85d957  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
  8b02343f75ef7cf3f9a4b9e0599abadc  gcc/fortran/expr.cc
  354927f6cb797cd538c0ab8ab0e552bb  gcc/fortran/f95-lang.cc
! 8deeb2cd64fc2b8bf4cf1cd6a550e5da  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! fb340ceb83b10b02014df97dbfc1a623  gcc/fortran/gfortran.h
  4b41c64e656ca5096ae5a265ff7b2116  gcc/fortran/gfortran.texi
! 99d4834014e20be40fdfc7584b7256af  gcc/fortran/gfortranspec.cc
! 71e194a5a481bd98cbc9644668c8cebb  gcc/fortran/interface.cc
  7e06cc5337aba27172fe64c673314c64  gcc/fortran/intrinsic.cc
  285cce3e348dd08fbaf339358ac57d51  gcc/fortran/intrinsic.h
! 84d7151d1a1767da191af24883d28b18  gcc/fortran/intrinsic.texi
  c0b28df69feb22bcafd8aac543dd4fba  gcc/fortran/invoke.texi
  381e1132c2b9f3171ccfce24fbd47ba2  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
*************** c0b28df69feb22bcafd8aac543dd4fba  gcc/fo
*** 6328,6334 ****
  943be43e521f4084734d183ff4a4fe5e  gcc/fortran/iso-c-binding.def
  e5c0565c05cf7375c9978273f2e553e7  gcc/fortran/iso-fortran-env.def
  20a111338bfdbe210a5826e590844f81  gcc/fortran/lang-specs.h
! 6c8e23a76ef7d1e3480d2026a438a31e  gcc/fortran/lang.opt
  d00392d3f6683071d547134f20687f32  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
  65f90f9c2a688a7522b81ce17d81ae93  gcc/fortran/match.cc
--- 6330,6336 ----
  943be43e521f4084734d183ff4a4fe5e  gcc/fortran/iso-c-binding.def
  e5c0565c05cf7375c9978273f2e553e7  gcc/fortran/iso-fortran-env.def
  20a111338bfdbe210a5826e590844f81  gcc/fortran/lang-specs.h
! 60c89ecec65ed7cb49e8feee80963cee  gcc/fortran/lang.opt
  d00392d3f6683071d547134f20687f32  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
  65f90f9c2a688a7522b81ce17d81ae93  gcc/fortran/match.cc
*************** e2a44896b23e988d9494957a8fa9b066  gcc/fo
*** 6342,6348 ****
  22050427a75e58c301664b6859f72718  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  f8f17e966c9b06f3143a910582383fb7  gcc/fortran/primary.cc
! dedd6d4aa4a39577c88ee5dc83018f93  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
--- 6344,6350 ----
  22050427a75e58c301664b6859f72718  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  f8f17e966c9b06f3143a910582383fb7  gcc/fortran/primary.cc
! 8eb968b92162a0e7c50a4b370bc31fd6  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
*************** a0c40b654df0b5c5213047d26e48e97a  gcc/fo
*** 6359,6365 ****
  7587366d5466b3ccf2ecc3152adf9e0c  gcc/fortran/trans-expr.cc
  cf1cd2d936d63b4a12209bc73b627e02  gcc/fortran/trans-intrinsic.cc
  269d2b121570a82898b133a3274071a7  gcc/fortran/trans-io.cc
! 5aae8344983c76e250d5a9804f13e0ad  gcc/fortran/trans-openmp.cc
  974f8aeec761eac4ee1be974addd51d5  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
  f8cac5e2268c177aff676d2dbb690f51  gcc/fortran/trans-types.cc
--- 6361,6367 ----
  7587366d5466b3ccf2ecc3152adf9e0c  gcc/fortran/trans-expr.cc
  cf1cd2d936d63b4a12209bc73b627e02  gcc/fortran/trans-intrinsic.cc
  269d2b121570a82898b133a3274071a7  gcc/fortran/trans-io.cc
! c4ba88375ce7b5ce186cabd6fe8f515b  gcc/fortran/trans-openmp.cc
  974f8aeec761eac4ee1be974addd51d5  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
  f8cac5e2268c177aff676d2dbb690f51  gcc/fortran/trans-types.cc
*************** a5464198aa6b5015fdf27b2e0f276290  gcc/fo
*** 6369,6375 ****
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
  57ebe36e9e77bcb8eab87809d044e0f1  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
! 5bcff9f70e07fe2f3a5f5ef42b82a9bd  gcc/function-abi.cc
  fe144e1c2a0da30ffc9946e5adab7e6f  gcc/function-abi.h
  45679bb0d98b3e87046958f7576b3770  gcc/function-tests.cc
  3dabc996f369bcc83e5cbf5da580f241  gcc/function.cc
--- 6371,6377 ----
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
  57ebe36e9e77bcb8eab87809d044e0f1  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
! f0ee919c2691fdbcbb76cb8c13085a08  gcc/function-abi.cc
  fe144e1c2a0da30ffc9946e5adab7e6f  gcc/function-abi.h
  45679bb0d98b3e87046958f7576b3770  gcc/function-tests.cc
  3dabc996f369bcc83e5cbf5da580f241  gcc/function.cc
*************** c739e2bedd7d49bc7a7c4ae61fe92df6  gcc/ge
*** 6427,6433 ****
  13834fadd1e66741d9f4cfa8ec740173  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
! 9590a53201abdb9f72cef6d94a05db8e  gcc/genmatch.cc
  e4047cfabe80236af3ae74f11e2d60c6  gcc/genmddeps.cc
  07e47d3b20e79c811a134c66e6706df2  gcc/genmddump.cc
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
--- 6429,6435 ----
  13834fadd1e66741d9f4cfa8ec740173  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
! 7b0ac200b150b2f4d1458beb201dbfd8  gcc/genmatch.cc
  e4047cfabe80236af3ae74f11e2d60c6  gcc/genmddeps.cc
  07e47d3b20e79c811a134c66e6706df2  gcc/genmddump.cc
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
*************** c7aaa3764ab30058c5d27da89f166ec2  gcc/gi
*** 6520,6532 ****
  4ada319be66d0fbf4caee7923d5522c9  gcc/gimple-streamer.h
  337ae8a4b25140b56e9b00cc3fdff1b3  gcc/gimple-walk.cc
  fd706cd70d2b5c6a514eef109a117112  gcc/gimple-walk.h
! e35a6083f100e687d2e1c31c46aabecd  gcc/gimple-warn-recursion.cc
  4a43f38776337834415600ed88fb9563  gcc/gimple.cc
  208b5a93bd83c9b24330756189d7f056  gcc/gimple.def
  bdfa24068b8a667b864afec3aab3c472  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
! b8dd4145c1714748ffcfa90cb4937033  gcc/gimplify.cc
  00b4fa5f2537547bcddd508fd61459ca  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  83f82d6779ea9f6500c863169abfca55  gcc/ginclude/float.h
--- 6522,6534 ----
  4ada319be66d0fbf4caee7923d5522c9  gcc/gimple-streamer.h
  337ae8a4b25140b56e9b00cc3fdff1b3  gcc/gimple-walk.cc
  fd706cd70d2b5c6a514eef109a117112  gcc/gimple-walk.h
! 06799abee7825c63248ec83b96f7f7a9  gcc/gimple-warn-recursion.cc
  4a43f38776337834415600ed88fb9563  gcc/gimple.cc
  208b5a93bd83c9b24330756189d7f056  gcc/gimple.def
  bdfa24068b8a667b864afec3aab3c472  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
! c87d3648bc8fa060860e0df18d371aae  gcc/gimplify.cc
  00b4fa5f2537547bcddd508fd61459ca  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  83f82d6779ea9f6500c863169abfca55  gcc/ginclude/float.h
*************** bff71bc7b721a547da3a7ddc6b208fb9  gcc/ip
*** 6676,6682 ****
  0f5f3d9b3c56e80eb4660f2cc0778ff7  gcc/ipa-fnsummary.cc
  179f7c3a6fbca4d8bf253b9fc8e5b21f  gcc/ipa-fnsummary.h
  c4202186d7ed3511a93359f9b276438b  gcc/ipa-free-lang-data.cc
! bd8846ab41db2000eb2e2f0acea327ea  gcc/ipa-icf-gimple.cc
  8afa732b4ae1f08ca41426bc2cb25ff9  gcc/ipa-icf-gimple.h
  cd6daf6036bc08df46ce01ec22dbdba5  gcc/ipa-icf.cc
  d2917be5e45902721d8174996b327a41  gcc/ipa-icf.h
--- 6678,6684 ----
  0f5f3d9b3c56e80eb4660f2cc0778ff7  gcc/ipa-fnsummary.cc
  179f7c3a6fbca4d8bf253b9fc8e5b21f  gcc/ipa-fnsummary.h
  c4202186d7ed3511a93359f9b276438b  gcc/ipa-free-lang-data.cc
! a7d3f8cf31a1f63a4d4506c0667889ff  gcc/ipa-icf-gimple.cc
  8afa732b4ae1f08ca41426bc2cb25ff9  gcc/ipa-icf-gimple.h
  cd6daf6036bc08df46ce01ec22dbdba5  gcc/ipa-icf.cc
  d2917be5e45902721d8174996b327a41  gcc/ipa-icf.h
*************** a38ecd9fec5d4acc059c4cbf0dbeef7c  gcc/js
*** 6824,6831 ****
  f723ae7af6ce8158447120f28eebe476  gcc/json.h
  598bd9cf01e2b97715ef52af5b0f2241  gcc/jump.cc
  db38a11d4dce106f820651752f564683  gcc/langhooks-def.h
! bd54dcceceea2f4e69957be1075e54e8  gcc/langhooks.cc
! 1ad1f65d939a28daa29eab5ed8f2a2d2  gcc/langhooks.h
  e5aaf0926ffa1d66709fdc320212070a  gcc/late-combine.cc
  4d0b64200ad1d5cc3dd88026fa268820  gcc/lazily-created.h
  e8cbb0a4e8793ea30337c86b60f8f64a  gcc/lcm.cc
--- 6826,6833 ----
  f723ae7af6ce8158447120f28eebe476  gcc/json.h
  598bd9cf01e2b97715ef52af5b0f2241  gcc/jump.cc
  db38a11d4dce106f820651752f564683  gcc/langhooks-def.h
! ca1a1029159f67a3e118460330d10031  gcc/langhooks.cc
! 94c1d2790975a583c574869740ec0f0e  gcc/langhooks.h
  e5aaf0926ffa1d66709fdc320212070a  gcc/late-combine.cc
  4d0b64200ad1d5cc3dd88026fa268820  gcc/lazily-created.h
  e8cbb0a4e8793ea30337c86b60f8f64a  gcc/lcm.cc
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7875,7881 ****
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  0c9209452a934f189aa0860038b3a65c  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 5b095e2df95cf37efbe4db5b7fceb695  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  4f86eeea7af520ce0b773c1f2e34b5b4  gcc/mem-stats.h
--- 7877,7884 ----
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  0c9209452a934f189aa0860038b3a65c  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 691acd36e3b6385e31c2985e983dfaf9  gcc/match-sat-alu.pd
! 8dc2333776cc40e0e43d347eaaf95bef  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  4f86eeea7af520ce0b773c1f2e34b5b4  gcc/mem-stats.h
*************** b53e19ed2e5aad878bc3422b5ed77de8  gcc/om
*** 7919,7925 ****
  cdc26bd8ead0ef188e59165e859c822d  gcc/omp-builtins.def
  69a9c2c8d43088e61b046c23efb7f450  gcc/omp-expand.cc
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
! 8b82f3e01be2ffdbcd3f14366979d838  gcc/omp-general.cc
  21041ab3bbd9eb02d136e1856bf2feb4  gcc/omp-general.h
  5d74c55d460ae0aeed5cce6c65b59974  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
--- 7922,7928 ----
  cdc26bd8ead0ef188e59165e859c822d  gcc/omp-builtins.def
  69a9c2c8d43088e61b046c23efb7f450  gcc/omp-expand.cc
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
! b558942a55a437de9828beb484fb8d75  gcc/omp-general.cc
  21041ab3bbd9eb02d136e1856bf2feb4  gcc/omp-general.h
  5d74c55d460ae0aeed5cce6c65b59974  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
*************** df4d718a9c9934a10272384f58351e0f  gcc/op
*** 7944,7951 ****
  e45c50053d2064312ea73720cdb8e5d9  gcc/optabs-query.h
  0135b6d221cd61d59fecebf7206e304e  gcc/optabs-tree.cc
  201b2569727bf062f908121f208a860f  gcc/optabs-tree.h
! 5ba2e11c36901a4bc86611a69cf37e72  gcc/optabs.cc
! c5f46ef2e21b33c46222e08c7533480c  gcc/optabs.def
  81371a1b977075ff9a2b9637ac88cfa3  gcc/optabs.h
  10284dae2b1b50618cee778ef473c34c  gcc/optc-gen.awk
  a7feb127a9364786f997ccacfe9fece2  gcc/optc-save-gen.awk
--- 7947,7954 ----
  e45c50053d2064312ea73720cdb8e5d9  gcc/optabs-query.h
  0135b6d221cd61d59fecebf7206e304e  gcc/optabs-tree.cc
  201b2569727bf062f908121f208a860f  gcc/optabs-tree.h
! 2dc916dc48ce46ffc6bc1a284dd8c473  gcc/optabs.cc
! e41b2d12060d81ec0196a849b4956aab  gcc/optabs.def
  81371a1b977075ff9a2b9637ac88cfa3  gcc/optabs.h
  10284dae2b1b50618cee778ef473c34c  gcc/optc-gen.awk
  a7feb127a9364786f997ccacfe9fece2  gcc/optc-save-gen.awk
*************** eab7365dceccf86b8e9a8ccbb365afc3  gcc/rt
*** 8099,8105 ****
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
  a9ad8cbba3c33e3fbc0b79c6938a0295  gcc/rtl.def
! e93c98527e742dc249b0cd8b10211bd8  gcc/rtl.h
  78a6761be9094aabb776bbba41b1906f  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
--- 8102,8108 ----
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
  a9ad8cbba3c33e3fbc0b79c6938a0295  gcc/rtl.def
! 647077b169fd2430f1b8fc33677d4fa3  gcc/rtl.h
  78a6761be9094aabb776bbba41b1906f  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
*************** c5e97158cfb2af3204a5d8562aefaf85  gcc/sh
*** 8668,8674 ****
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! 71e8ba2d7056924dad4727e578cd297c  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
--- 8671,8677 ----
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! b4f3c96fc9bc460be2478501c60e51b8  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
*************** f24751f278bee1ac8dc861467d9f96a3  gcc/ta
*** 8722,8728 ****
  2b5ed5f473de31fccbd53235aa79d207  gcc/targhooks.cc
  b1068b0d3d77d5a55802a29a9f8a08d7  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! ec1541633273956b7b9a57bea6ac6654  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8725,8731 ----
  2b5ed5f473de31fccbd53235aa79d207  gcc/targhooks.cc
  b1068b0d3d77d5a55802a29a9f8a08d7  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 0c04814c740c1a1cae4b81f08471cac7  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** f2f147da469690b30dd805170ff61ecc  gcc/te
*** 17819,17824 ****
--- 17822,17829 ----
  61802d2a2cafd866447c5949a369597e  gcc/testsuite/c-c++-common/Wcast-align.c
  98cecf8090d75699cd8da32680430f0a  gcc/testsuite/c-c++-common/Wcast-function-type.c
  ca0f9328a3d035930d143d8a411eac87  gcc/testsuite/c-c++-common/Wcast-qual-1.c
+ e54fd80ad28cde76b7d408a2841e82f7  gcc/testsuite/c-c++-common/Wconstant-logical-operand-1.c
+ 18db8d8074a57e0f5be2856305e25975  gcc/testsuite/c-c++-common/Wconstant-logical-operand-2.c
  c4fe13572fd4a3286d2bb6c0e8c6a08d  gcc/testsuite/c-c++-common/Wconversion-1.c
  1d38351fe1071b2ef958b41c05ca820e  gcc/testsuite/c-c++-common/Wconversion-pr40752.c
  2e4a0b1e36380af2fa8d3c763dd4836d  gcc/testsuite/c-c++-common/Wconversion-pr40752a.c
*************** cab7710efed273c604884629ac042306  gcc/te
*** 19639,19656 ****
  4a818b745d1f8704ddb0479a4cad1ca2  gcc/testsuite/c-c++-common/gomp/combined-3.c
  bfb7ec61cc1300767edd2730dd158b24  gcc/testsuite/c-c++-common/gomp/critical-1.c
  c572ac0bc0904c15b451df6870cc393d  gcc/testsuite/c-c++-common/gomp/critical-2.c
! cb01db9e31422d2aeabb9b538ed127e4  gcc/testsuite/c-c++-common/gomp/declare-mapper-10.c
! 5c9c560c086262d32a4f6b30aee2d54b  gcc/testsuite/c-c++-common/gomp/declare-mapper-11.c
  9ff51a41887aad9526944e993a5a0a19  gcc/testsuite/c-c++-common/gomp/declare-mapper-12.c
! 193369d11385d45ab1ed0e70ea8c48b5  gcc/testsuite/c-c++-common/gomp/declare-mapper-15.c
! af79ad1d76a10cf43e8a130b61f9a296  gcc/testsuite/c-c++-common/gomp/declare-mapper-16.c
! 71ef2f37cadeab4baf5501bbdd2241f4  gcc/testsuite/c-c++-common/gomp/declare-mapper-3.c
! 2619b0487cae48530ad103fbc2632fc3  gcc/testsuite/c-c++-common/gomp/declare-mapper-4.c
! 230e3c87df45ddf84188f7b5a5a4bb0e  gcc/testsuite/c-c++-common/gomp/declare-mapper-5.c
! dcd1e9ab9770a159f8a1f17c76bd1b03  gcc/testsuite/c-c++-common/gomp/declare-mapper-6.c
! da6887a595231a43cf61133bb43acdb5  gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c
! ff19abdaca7330b11f4fe567c52cdd16  gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c
! b3db7e455b5c08954578749d93304a57  gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c
  c78f87c3b228d477e18288e37caca1c1  gcc/testsuite/c-c++-common/gomp/declare-target-1.c
  916fd6ef6eeb6926f284142e6cb708f4  gcc/testsuite/c-c++-common/gomp/declare-target-2.c
  c4c81261ab4127b6a0bbe971b9acbc34  gcc/testsuite/c-c++-common/gomp/declare-target-3.c
--- 19644,19663 ----
  4a818b745d1f8704ddb0479a4cad1ca2  gcc/testsuite/c-c++-common/gomp/combined-3.c
  bfb7ec61cc1300767edd2730dd158b24  gcc/testsuite/c-c++-common/gomp/critical-1.c
  c572ac0bc0904c15b451df6870cc393d  gcc/testsuite/c-c++-common/gomp/critical-2.c
! de8b721b2a72aa22dcc85aab85b9358f  gcc/testsuite/c-c++-common/gomp/declare-mapper-10.c
! 51cb354a5ae53ecfa2d262e1d2b156f7  gcc/testsuite/c-c++-common/gomp/declare-mapper-11.c
  9ff51a41887aad9526944e993a5a0a19  gcc/testsuite/c-c++-common/gomp/declare-mapper-12.c
! 08b164fcd91a58e04297c1e8c91a8f0a  gcc/testsuite/c-c++-common/gomp/declare-mapper-15.c
! 0d02d0e8e17b4fefe4b09fbe081e9ecf  gcc/testsuite/c-c++-common/gomp/declare-mapper-16.c
! 3251583f6af9d77fcf59ecb8690e9b0a  gcc/testsuite/c-c++-common/gomp/declare-mapper-17.c
! 7322f7e0eb4982ddf131f0e6172d0f23  gcc/testsuite/c-c++-common/gomp/declare-mapper-18.c
! 82cfee0d130968ddf4974bc29da1aa48  gcc/testsuite/c-c++-common/gomp/declare-mapper-3.c
! dc978c04bd962929e54d5abee2d5bb67  gcc/testsuite/c-c++-common/gomp/declare-mapper-4.c
! f8dc659137869e2f5861c7755d376cfc  gcc/testsuite/c-c++-common/gomp/declare-mapper-5.c
! 8ca6a339321c1fd663a25fe8cc020d7f  gcc/testsuite/c-c++-common/gomp/declare-mapper-6.c
! e88cf83167ea7f84514442a7b88a7fdb  gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c
! d5a9bafdffe339a2eb7f76c8f0cb84ad  gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c
! bc80178e967ba93ce4a99f080b928ab2  gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c
  c78f87c3b228d477e18288e37caca1c1  gcc/testsuite/c-c++-common/gomp/declare-target-1.c
  916fd6ef6eeb6926f284142e6cb708f4  gcc/testsuite/c-c++-common/gomp/declare-target-2.c
  c4c81261ab4127b6a0bbe971b9acbc34  gcc/testsuite/c-c++-common/gomp/declare-target-3.c
*************** d6f3e72d7fc95edbabd5b36d39abf504  gcc/te
*** 19877,19883 ****
  c315375dde6dfd35915ac372415190a8  gcc/testsuite/c-c++-common/gomp/pr120564.c
  5a0fc856eddf5869c1607a51a511b91b  gcc/testsuite/c-c++-common/gomp/pr121452-1.c
  25357ab83549c772c7f308537e5445cf  gcc/testsuite/c-c++-common/gomp/pr121452-2.c
! e237cffddf611dba2776c6e54f0719b6  gcc/testsuite/c-c++-common/gomp/pr122866.c
  e16ef156ad193ef1f3cba60ad16e57ab  gcc/testsuite/c-c++-common/gomp/pr51360.c
  84c977571aeb43c0224137efe7f5b213  gcc/testsuite/c-c++-common/gomp/pr53580.c
  28bfd873981083756a16f70fdb0b86db  gcc/testsuite/c-c++-common/gomp/pr54017.c
--- 19884,19890 ----
  c315375dde6dfd35915ac372415190a8  gcc/testsuite/c-c++-common/gomp/pr120564.c
  5a0fc856eddf5869c1607a51a511b91b  gcc/testsuite/c-c++-common/gomp/pr121452-1.c
  25357ab83549c772c7f308537e5445cf  gcc/testsuite/c-c++-common/gomp/pr121452-2.c
! caa1e1fdbda31d58e98e939eff74b757  gcc/testsuite/c-c++-common/gomp/pr122866.c
  e16ef156ad193ef1f3cba60ad16e57ab  gcc/testsuite/c-c++-common/gomp/pr51360.c
  84c977571aeb43c0224137efe7f5b213  gcc/testsuite/c-c++-common/gomp/pr53580.c
  28bfd873981083756a16f70fdb0b86db  gcc/testsuite/c-c++-common/gomp/pr54017.c
*************** e82c7b7752e66456db57ee27e9f0dea7  gcc/te
*** 20291,20296 ****
--- 20298,20304 ----
  c9f6665aa9cce2133e7c5f9edba34076  gcc/testsuite/c-c++-common/pr121159.c
  f938d650e5405e1ae04ff131a9239d66  gcc/testsuite/c-c++-common/pr122188.c
  9644c5632092fc15f618c4092e7e502f  gcc/testsuite/c-c++-common/pr123437.c
+ 4d076347f661059e251ba973750b8ed5  gcc/testsuite/c-c++-common/pr124532.c
  f5dce8e27cfb8a6bfffe57596fecb796  gcc/testsuite/c-c++-common/pr19807-1.c
  8a7d9a8dd4af1ada80ca6a4b3201e073  gcc/testsuite/c-c++-common/pr19807-2.c
  39c0873a2c1c7f951e8b2f90ebc9e12d  gcc/testsuite/c-c++-common/pr19807-3.c
*************** c04168a2acd1bc44234f01ab517cfb97  gcc/te
*** 21311,21317 ****
  889ec5fde47e76be7c971e6deca40cd0  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
  c5cf04eb9938774927bb9fc355958f13  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
  40ee71e6000b91748c4cd8f864a83cd2  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
! 51d5769dbd81a9e375bce8bcd01a3840  gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
  e3cc25d3e34c98b2bc1d9014612f3464  gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob
  5a5abbc24fc75759207ca6686fa86a79  gcc/testsuite/cobol.dg/group2/Compare_COMP-2_with_floating-point_literal.cob
  f7e4a3f2c5c85ddeb645aecc5792a186  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.cob
--- 21319,21325 ----
  889ec5fde47e76be7c971e6deca40cd0  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
  c5cf04eb9938774927bb9fc355958f13  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
  40ee71e6000b91748c4cd8f864a83cd2  gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
! 91c93fb8a04c38feb9175daebc96f60c  gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
  e3cc25d3e34c98b2bc1d9014612f3464  gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob
  5a5abbc24fc75759207ca6686fa86a79  gcc/testsuite/cobol.dg/group2/Compare_COMP-2_with_floating-point_literal.cob
  f7e4a3f2c5c85ddeb645aecc5792a186  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.cob
*************** dd8c6393c06b4230c216b0d2985c7d04  gcc/te
*** 21383,21390 ****
  71114c6e947dbc572836dc13b66e981d  gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out
  b2ddfc5676452eaa657c53fed65d0c04  gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob
  b190c55e6f544248ffcabacd76c76fc8  gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out
! b247cae0c434dc8fa1b7c0e96d5ae1a1  gcc/testsuite/cobol.dg/group2/ENTRY_statement.cob
! a29540cccd0a2b8f240a2f1afba8f406  gcc/testsuite/cobol.dg/group2/ENTRY_statement.out
  dc52fd3893842d57477c07b7ab30b016  gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob
  612112a8ffee04167daaa2bc2a1c9631  gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out
  dc4b83e02b1974ba837265ea5ef01291  gcc/testsuite/cobol.dg/group2/EVALUATE__A__OR__a_.cob
--- 21391,21398 ----
  71114c6e947dbc572836dc13b66e981d  gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out
  b2ddfc5676452eaa657c53fed65d0c04  gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob
  b190c55e6f544248ffcabacd76c76fc8  gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out
! e1c456631c74d2fc4c2a39e83b76670a  gcc/testsuite/cobol.dg/group2/ENTRY_statement.cob
! f24a1316671a7613abd102386a8f044f  gcc/testsuite/cobol.dg/group2/ENTRY_statement.out
  dc52fd3893842d57477c07b7ab30b016  gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob
  612112a8ffee04167daaa2bc2a1c9631  gcc/testsuite/cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out
  dc4b83e02b1974ba837265ea5ef01291  gcc/testsuite/cobol.dg/group2/EVALUATE__A__OR__a_.cob
*************** a19de812e87b5578a6a15abd41c7d45a  gcc/te
*** 21440,21446 ****
  6cd7ebc8aedad12736b72743c46b506c  gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob
  354b0f9ee82914d81ffcc8cb34984d3b  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob
  c481daf6786a601dbb8ebd9a48ff9322  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob
! ace7cb22a40e1e5018df95f4edf85868  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
  1309189851fee6dc1ba1bebf5399612e  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob
  7183c16a31e41cbf8e027c2e5a6e2d6c  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob
  1237c3e824a48b7ee7e38a3d1763dfb0  gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob
--- 21448,21454 ----
  6cd7ebc8aedad12736b72743c46b506c  gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob
  354b0f9ee82914d81ffcc8cb34984d3b  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob
  c481daf6786a601dbb8ebd9a48ff9322  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob
! 6c3904ffaef1d5360a3f6c40131214ec  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
  1309189851fee6dc1ba1bebf5399612e  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob
  7183c16a31e41cbf8e027c2e5a6e2d6c  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob
  1237c3e824a48b7ee7e38a3d1763dfb0  gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob
*************** d2d4e47ab4b15463020b17f88d268eca  gcc/te
*** 21549,21554 ****
--- 21557,21564 ----
  7f4b9d2fe08f4f6a1753e62ce1e991b3  gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob
  8184043b22e82ab95d6fa5814d9f6358  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.cob
  0d1ed3ff5755c0ce7a5b5d081463c10f  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.out
+ 490d9d7ce2642968f4f81a80a710f879  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob
+ 9801747a0c4835b6dd61b6a9197476f8  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out
  da5445b0b5e32621f6b08121b02011fb  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.cob
  c184403404ecf91e26212dbe205a0ede  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.out
  f422d9dd42e0668a122c09c49cedf374  gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.cob
*************** eac533e1d20c6fc3182209d89d95dce1  gcc/te
*** 21644,21650 ****
  d36f8f9425c4a8000ad9c4a97185aca5  gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out
  5f5ef3353680e2b791ea5a108b7f3876  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.cob
  85a1b4e081b0827d61acd2b576f8e44d  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.out
! deaa567cdb6da15a2deb656d027de727  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ABS.cob
  a232de1aac78a4e371769072e88acf40  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ACOS.cob
  05c1921281b723614d0aaae673fa9379  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ANNUITY.cob
  8978ba5d8b437c9717d7d721469acf1f  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_DATE-YYYYMMDD.cob
--- 21654,21660 ----
  d36f8f9425c4a8000ad9c4a97185aca5  gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out
  5f5ef3353680e2b791ea5a108b7f3876  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.cob
  85a1b4e081b0827d61acd2b576f8e44d  gcc/testsuite/cobol.dg/group2/Indicators_______________-____D__.out
! 34675d2bf23845196ac0c50322e535e1  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ABS.cob
  a232de1aac78a4e371769072e88acf40  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ACOS.cob
  05c1921281b723614d0aaae673fa9379  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ANNUITY.cob
  8978ba5d8b437c9717d7d721469acf1f  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_DATE-YYYYMMDD.cob
*************** f750c5313f8839990ad8464f01bac4c8  gcc/te
*** 21658,21663 ****
--- 21668,21675 ----
  b7b5c0b13c0986bd9870b8774c94506f  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out
  1673dc1d35fc0941c252aa3d338886b7  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob
  b7b5c0b13c0986bd9870b8774c94506f  gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out
+ 9be487317aeb02174336a9e2c28f196c  gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.cob
+ fafded91a8a4c114fe3d81a345b3eefe  gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.out
  23e5d4acb2cfe1daabc7c1196edf48e9  gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob
  60b725f10c9c85c70d97880dfe8191b3  gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out
  4ca8d1c9c513d53c80702fd0b0d90ff9  gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob
*************** b75fa9b5629b3032c8c34644bd817121  gcc/te
*** 21702,21707 ****
--- 21714,21721 ----
  e4d2b73b0c96c1dfe3d000329bb8874f  gcc/testsuite/cobol.dg/group2/N-Queens_algorithm.out
  860bb03d750b0e6019c8c327424cfe69  gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.cob
  4138538135757cec647177acf7df8383  gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out
+ f34c9056a1d17e04c048e0d33e3693a8  gcc/testsuite/cobol.dg/group2/Nested_PERFORM.cob
+ 1ab98bfe6cbef69dac2f301c94c9c93b  gcc/testsuite/cobol.dg/group2/Nested_PERFORM.out
  74218fe0c6b8b43e4de4bc3003808fd7  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
  1ca492b7a58e4937f96a4f5658dd5109  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
  740fb7081d5c02c36fa612769882980d  gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob
*************** e01cd9a3d1291517c38ded7e69c286db  gcc/te
*** 21725,21730 ****
--- 21739,21746 ----
  60b725f10c9c85c70d97880dfe8191b3  gcc/testsuite/cobol.dg/group2/Offset_overflow.out
  9c84934cecd7d57e9badb90f27ae5490  gcc/testsuite/cobol.dg/group2/Offset_underflow.cob
  60b725f10c9c85c70d97880dfe8191b3  gcc/testsuite/cobol.dg/group2/Offset_underflow.out
+ 0411047bd3d56742ab5191a994ed4ce2  gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.cob
+ 8f640049de0587cbd0b7514497c20ed2  gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.out
  2391a13c48a4188ca206651e9e33fcbb  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_arithmetic.cob
  619cf3092002e36ac56fc9b86c476063  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_arithmetic.out
  6dd4161b6a5683af405667780e77b3b8  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__1_.cob
*************** dcd8593c5a4b24a84b102089db6380bb  gcc/te
*** 21744,21749 ****
--- 21760,21769 ----
  b300246edd93d2e432dc797364e34d4f  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_used_with_MOVE.cob
  ff6a0c9a67d9d8da4dc2990fd3c74ca5  gcc/testsuite/cobol.dg/group2/PACKED-DECIMAL_used_with_MOVE.out
  3c471fd2bf3ab723cf0d9de45db50eb8  gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob
+ 3d61aa17b0430ac45f56575a643e74a8  gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.cob
+ d65b751d633b9438528c295c75e09811  gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.out
+ 3d8f4ed92009dd2e95cdbcb93e74a3a3  gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.cob
+ 79adac8c671790504a142ab2392cf927  gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.out
  ff9955b77b5d71505880b825a02d148d  gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob
  e3cbddf76f9632ea000d7a5beec1b0ea  gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob
  f447900f3d80fb422f0e33541a0a216c  gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob
*************** ddc1206a8eee9490055e91297ef1f969  gcc/te
*** 21758,21767 ****
  3808cca0e34b8c45520af32017d2be67  gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out
  038d6a02037bfd4730dd1a5d0e6fa0e5  gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob
  86aff1382616475acd4027fc4a483952  gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out
  75dfdc364dc4cb8d9203030c20a0193a  gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob
  306b917492c853025f4e121e140dee5c  gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out
! 63942f0ff41772f2daab394bd71d459f  gcc/testsuite/cobol.dg/group2/RETURN-CODE_moving.cob
  54b41b458eb4799b6183a1e215501f90  gcc/testsuite/cobol.dg/group2/RETURN-CODE_nested.cob
  448a75a2b6dd9b774660282c8eb9b9db  gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.cob
  01fa1923d7242ef724d4c43d1ded0d40  gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.out
  bd5f52542e3c7acb921b24bc4f5a7c1d  gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.cob
--- 21778,21791 ----
  3808cca0e34b8c45520af32017d2be67  gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out
  038d6a02037bfd4730dd1a5d0e6fa0e5  gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob
  86aff1382616475acd4027fc4a483952  gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out
+ 1ef3525c2428a1bfb76ab890ab989e97  gcc/testsuite/cobol.dg/group2/REDEFINES__chained.cob
+ 6dbf23b2bc64cf280a89b451a2fb7aaa  gcc/testsuite/cobol.dg/group2/REDEFINES__chained.out
  75dfdc364dc4cb8d9203030c20a0193a  gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob
  306b917492c853025f4e121e140dee5c  gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out
! 66d20bf2dbef3a1890646657f98cc26f  gcc/testsuite/cobol.dg/group2/RETURN-CODE_moving.cob
  54b41b458eb4799b6183a1e215501f90  gcc/testsuite/cobol.dg/group2/RETURN-CODE_nested.cob
+ dc2f69d5116f2dc619fe3221715eac4b  gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.cob
+ 3207a7055ae924f18129d7308122d1f1  gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.out
  448a75a2b6dd9b774660282c8eb9b9db  gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.cob
  01fa1923d7242ef724d4c43d1ded0d40  gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.out
  bd5f52542e3c7acb921b24bc4f5a7c1d  gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.cob
*************** bfe9a0e1b08273f3d0f06b4b69cff91b  gcc/te
*** 21814,21823 ****
--- 21838,21851 ----
  9e9aafcfe8f4f958de32e91230e49790  gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob
  431cfffda18b4925568723730bb76095  gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out
  53ea64d68396f6b00adec1fc82ac8a37  gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob
+ 88d510e2646a3b0da79da4f51a609514  gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.cob
+ 6ceecbbfcfd56f3344943904984253d7  gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.out
  404f41d00a6cdadc15664ec7458639f4  gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.cob
  5cde5131bc03a36e9d12bccadc6a28a0  gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.out
  f5fd4be048d78f148c18cc810bf4e8f5  gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.cob
  3600adb8ebbf8edcf3186ed5624861a2  gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.out
+ a0c41877eeebaf7413f5791e9e0d6b38  gcc/testsuite/cobol.dg/group2/Simple_COMP-X.cob
+ 2c49339f6cfa0f7c0b44291b07271d5a  gcc/testsuite/cobol.dg/group2/Simple_COMP-X.out
  c30a8753d1658e5b32d74441b6840499  gcc/testsuite/cobol.dg/group2/Simple_DEBUG-ITEM.cob
  80ccd5f8bda90af88380181bb13d8208  gcc/testsuite/cobol.dg/group2/Simple_DEBUG-ITEM.out
  f5d5fca25edf5df29fc8b724f75d6f2c  gcc/testsuite/cobol.dg/group2/Simple_ENVIRONMENT-NAME_with_exception.cob
*************** a75f94d635d6f81fcf6e666df78229f2  gcc/te
*** 21891,21896 ****
--- 21919,21930 ----
  5bc38b398042105e78868858a0adf5fd  gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.out
  caf587aa2806bd2fe7496ca58c88ba7c  gcc/testsuite/cobol.dg/group2/command-line.cob
  ae3b6ce13c9250f0ab012d801c07d172  gcc/testsuite/cobol.dg/group2/command-line.out
+ fbbad213aa004e2ac9524af74c84a427  gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.cob
+ fb787429ca42cb8685738ef89bcd4f2c  gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.out
+ f652621ad9a30366338da4e4ca2f7247  gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob
+ 8cae6e5de9d4512dfc0233e08100d8c7  gcc/testsuite/cobol.dg/group2/compare_national_to_display.out
+ cf848acea038b3ccc0e234831bb19a88  gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob
+ 271a68f8b1f2b07b63849c6abeb23b13  gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.out
  5ee523a5b423e4957df5452b15a66ba1  gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.cob
  7abd1cea9afc680263418e1915b26370  gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.out
  ad1379c3b794819e6ecc87d906b13ec2  gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.cob
*************** d23088a98a20d2069d7fb0cad5a416f7  gcc/te
*** 21922,21928 ****
--- 21956,21966 ----
  5eb817262236b0ba59a5015d171025fb  gcc/testsuite/cobol.dg/group2/length_of_ODO_Rules_7__8A__and_8B.out
  285be9aed0693bd7a17971c0b0d45f14  gcc/testsuite/cobol.dg/group2/length_of_ODO_w_-_reference_modification.cob
  a9be62b5e367d9e2cd063a29e035d62f  gcc/testsuite/cobol.dg/group2/procedure_division_using_by.cob
+ b3770e519b9e35fc37d2bfb704502b37  gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.cob
+ 68f048a675b888cb7c2d0e432621ce7e  gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.out
  821fb53474f319c2a9d352f2d55b8d70  gcc/testsuite/cobol.dg/group2/repository.cob
+ c3fcc2c16388cc8aa4bdf358cd35428c  gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.cob
+ 8c70220811cbb6563c61cd8ad7612628  gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.out
  935040fe79bf2b3104a97902f5b7223f  gcc/testsuite/cobol.dg/group2/skipping_at_the_top.cob
  e99fe7f719e04d1150008f60cd282d48  gcc/testsuite/cobol.dg/group2/source-computer_object-computer_repository__2_.cob
  c834ffdd674f78d7b72f01018a77ff6a  gcc/testsuite/cobol.dg/literal1.cob
*************** cf95adc386869ec65ad50be2ca554a82  gcc/te
*** 23682,23688 ****
  3cb463541c587f530b2fe2ed4c7109f0  gcc/testsuite/g++.dg/cpp0x/attr-likely1.C
  424974f8c915df0c51232daf4602915e  gcc/testsuite/g++.dg/cpp0x/attr-maybe_unused1.C
  0417d076d868ddf9d8aed7b8ef46a65c  gcc/testsuite/g++.dg/cpp0x/attr-no_unique_address1.C
! 428abc3950a60770507bf08ca2c8f981  gcc/testsuite/g++.dg/cpp0x/attr-nodiscard1.C
  b03e6a43a7e9cf64dab0d6195147e9b5  gcc/testsuite/g++.dg/cpp0x/attr-noreturn1.C
  ed0097e779e9a72a31133b42bb0cd827  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi1.C
  7352c0771dbd4295ad0ef9ee6378f39d  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi2.C
--- 23720,23726 ----
  3cb463541c587f530b2fe2ed4c7109f0  gcc/testsuite/g++.dg/cpp0x/attr-likely1.C
  424974f8c915df0c51232daf4602915e  gcc/testsuite/g++.dg/cpp0x/attr-maybe_unused1.C
  0417d076d868ddf9d8aed7b8ef46a65c  gcc/testsuite/g++.dg/cpp0x/attr-no_unique_address1.C
! 5b72ece56881b0ec52c85aec0d5d361b  gcc/testsuite/g++.dg/cpp0x/attr-nodiscard1.C
  b03e6a43a7e9cf64dab0d6195147e9b5  gcc/testsuite/g++.dg/cpp0x/attr-noreturn1.C
  ed0097e779e9a72a31133b42bb0cd827  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi1.C
  7352c0771dbd4295ad0ef9ee6378f39d  gcc/testsuite/g++.dg/cpp0x/attr-trivial_abi2.C
*************** e95698a38fe4cc0a60b4857fa65742ca  gcc/te
*** 29380,29385 ****
--- 29418,29424 ----
  dd49d8873bb047040bf7f60deb8f644f  gcc/testsuite/g++.dg/cpp2a/no_unique_address13.C
  10563ae733ee31b86846cfb852d66d9d  gcc/testsuite/g++.dg/cpp2a/no_unique_address14.C
  9c8ff2d9f37699b8813711a0c20c7e07  gcc/testsuite/g++.dg/cpp2a/no_unique_address15.C
+ 46008c21cb7f7725a5bfe2a87f3b255d  gcc/testsuite/g++.dg/cpp2a/no_unique_address16.C
  c94ac6fb1a99bf541b66d604620fa09b  gcc/testsuite/g++.dg/cpp2a/no_unique_address2.C
  67a61649264fea12fb7cc5c31bc5313e  gcc/testsuite/g++.dg/cpp2a/no_unique_address3.C
  ca2c81baf4111b5e8e15980b5237a344  gcc/testsuite/g++.dg/cpp2a/no_unique_address4.C
*************** db3ce0a3a66a8608a8e090b8c9d765e9  gcc/te
*** 29635,29640 ****
--- 29674,29680 ----
  15d8852abeec5772820ae98eb7eaba47  gcc/testsuite/g++.dg/cpp2a/spaceship-union1.C
  894dc2618d8240d82bbbd6fa81e459f0  gcc/testsuite/g++.dg/cpp2a/spaceship-vec1.C
  0970f285ffbf72900993c2240e49583b  gcc/testsuite/g++.dg/cpp2a/spaceship-virtual1.C
+ db98c6a381b6d600ac7fd82ef0ccb5c7  gcc/testsuite/g++.dg/cpp2a/spaceship-warn1.C
  bca03d65e166f32cbeed0699c7c57e41  gcc/testsuite/g++.dg/cpp2a/spaceship-weak1.C
  450162c9df6c789ff19c8cbd1f169756  gcc/testsuite/g++.dg/cpp2a/srcloc1.C
  8222403f1fb2288f8690d23e3822c9a6  gcc/testsuite/g++.dg/cpp2a/srcloc10.C
*************** fe6047f5ca7e2eac34792a3acc1193c2  gcc/te
*** 31718,31726 ****
  73dc4c4897395dc7c307860e0c371fe1  gcc/testsuite/g++.dg/gomp/critical-1.C
  67c49c3ef2f12e8a48820530d769fbd8  gcc/testsuite/g++.dg/gomp/critical-2.C
  d51c209a538c8e7658a85ca99d8eb17b  gcc/testsuite/g++.dg/gomp/critical-3.C
! 070c66f175c3b0b15d6657959e7bde26  gcc/testsuite/g++.dg/gomp/declare-mapper-1.C
! 4930d47281726e54daf3369e41c792a4  gcc/testsuite/g++.dg/gomp/declare-mapper-2.C
! ba4a8a9f66e6db7ad17cae2882bb6ca2  gcc/testsuite/g++.dg/gomp/declare-mapper-3.C
  c33309167faeafe5c8b09666ffbcb15d  gcc/testsuite/g++.dg/gomp/declare-simd-1.C
  6363ff64193eeb8db033202fd0e140f2  gcc/testsuite/g++.dg/gomp/declare-simd-2.C
  6103070bd607234bd1604269508e617f  gcc/testsuite/g++.dg/gomp/declare-simd-3.C
--- 31758,31768 ----
  73dc4c4897395dc7c307860e0c371fe1  gcc/testsuite/g++.dg/gomp/critical-1.C
  67c49c3ef2f12e8a48820530d769fbd8  gcc/testsuite/g++.dg/gomp/critical-2.C
  d51c209a538c8e7658a85ca99d8eb17b  gcc/testsuite/g++.dg/gomp/critical-3.C
! 7224af7a72f4b099bc23b398d5ca53ad  gcc/testsuite/g++.dg/gomp/declare-mapper-1.C
! b9406ba8b09384714fe371881c92ec15  gcc/testsuite/g++.dg/gomp/declare-mapper-2.C
! 100d8b805d031d1b3f5bc4e980c13904  gcc/testsuite/g++.dg/gomp/declare-mapper-3.C
! 90ba8d935cc7c99544dc6dffe62f1815  gcc/testsuite/g++.dg/gomp/declare-mapper-4.C
! 56274202059cf0be1e21cc7fc7807a53  gcc/testsuite/g++.dg/gomp/declare-mapper-5.C
  c33309167faeafe5c8b09666ffbcb15d  gcc/testsuite/g++.dg/gomp/declare-simd-1.C
  6363ff64193eeb8db033202fd0e140f2  gcc/testsuite/g++.dg/gomp/declare-simd-2.C
  6103070bd607234bd1604269508e617f  gcc/testsuite/g++.dg/gomp/declare-simd-3.C
*************** c4144e09bf19fa4b0932506c5eb3e8ee  gcc/te
*** 36664,36669 ****
--- 36706,36716 ----
  1bff48df8c11aeda15e3471bf1a33226  gcc/testsuite/g++.dg/parse/defarg2.C
  391992d48b82b49e8ff1682a5e58d837  gcc/testsuite/g++.dg/parse/defarg20.C
  4990ad714b5ae28d0c5eec0a10489f26  gcc/testsuite/g++.dg/parse/defarg21.C
+ 5fd4e1f34a656dc943de2e0596ec65e5  gcc/testsuite/g++.dg/parse/defarg22.C
+ 60b3b14febf94b7c545f2ada2419d742  gcc/testsuite/g++.dg/parse/defarg23.C
+ 3fcfec05e8254e9c23d62ecd3012e899  gcc/testsuite/g++.dg/parse/defarg24.C
+ a5bc444109a687e7c4d5a07ba68af950  gcc/testsuite/g++.dg/parse/defarg25.C
+ 3acfe28d9a6c517c1596aa064cf714b6  gcc/testsuite/g++.dg/parse/defarg26.C
  09fddda5e825bb04b1493087728c9162  gcc/testsuite/g++.dg/parse/defarg3.C
  0385e46623d8f7f6c4993e05a03c73fd  gcc/testsuite/g++.dg/parse/defarg4.C
  3dd23b6818ff46d947d8229efad73d5c  gcc/testsuite/g++.dg/parse/defarg5.C
*************** ba996bbdd4fa7d29eb83826ce56286db  gcc/te
*** 37472,37477 ****
--- 37519,37525 ----
  79b6c11dad254773021e78868fb03cbb  gcc/testsuite/g++.dg/reflect/adl1.C
  5c46e879dd2e662303fadc44a009d5a0  gcc/testsuite/g++.dg/reflect/alias1.C
  b6b6837c9c6945d15aae1007c9655611  gcc/testsuite/g++.dg/reflect/alias2.C
+ 38a421a55fc2792d218194eb7fec422e  gcc/testsuite/g++.dg/reflect/alias3.C
  a1fd3a6a97a773f4f193235ad05dca1c  gcc/testsuite/g++.dg/reflect/alignment_of1.C
  db186235554be9b7c4c4cd1d64102448  gcc/testsuite/g++.dg/reflect/alignment_of2.C
  11bc606636185e720abfec102a446450  gcc/testsuite/g++.dg/reflect/annotations1.C
*************** c38c5ec06f234c9f6702e4c3ac079d6e  gcc/te
*** 37484,37489 ****
--- 37532,37538 ----
  c0110e1b5cd947792635c901d4495d19  gcc/testsuite/g++.dg/reflect/annotations16.C
  56cf933eba135a5f5d3be35d021e7135  gcc/testsuite/g++.dg/reflect/annotations17.C
  68421d9fea46dcde0540a2edbeb3750b  gcc/testsuite/g++.dg/reflect/annotations18.C
+ 98a61d8e91cd6ec1ac9cc5f73b66d762  gcc/testsuite/g++.dg/reflect/annotations19.C
  cde9ad9488133ece9333eb048f65f1e1  gcc/testsuite/g++.dg/reflect/annotations2.C
  b31ed4442038ed211b83481f0c6b097f  gcc/testsuite/g++.dg/reflect/annotations3.C
  95036b72f565c8ac8e22eb21a94626f1  gcc/testsuite/g++.dg/reflect/annotations4.C
*************** c43e40fe08389dac58e1fabc0937b315  gcc/te
*** 37501,37510 ****
--- 37550,37561 ----
  50d204becc5a564d003524bbda54d480  gcc/testsuite/g++.dg/reflect/bases_of2.C
  a3ca02798bae6834626899e3f48626d9  gcc/testsuite/g++.dg/reflect/bases_of3.C
  f31771b6d142554bef46d22e7ebe37ed  gcc/testsuite/g++.dg/reflect/bases_of4.C
+ 8d37e56fd9c7ad7b03647b9d62cfd01e  gcc/testsuite/g++.dg/reflect/bases_of5.C
  817512416d8343f0871b4548743aabf7  gcc/testsuite/g++.dg/reflect/bit_cast.C
  118a467750da473b2ad68973e520b6c9  gcc/testsuite/g++.dg/reflect/bit_size_of1.C
  cdfee9c92cd1c39030b9538abaa0bbc0  gcc/testsuite/g++.dg/reflect/bitfield1.C
  26489e1481d28e38679c10fb0945c3d0  gcc/testsuite/g++.dg/reflect/can_substitute1.C
+ 495b5815adcc239b485058f793eac47e  gcc/testsuite/g++.dg/reflect/can_substitute2.C
  cf1ce97bd56b5845905e4696d6e21793  gcc/testsuite/g++.dg/reflect/class1.C
  7e1297bc870fe6904620a1d784bd3929  gcc/testsuite/g++.dg/reflect/class2.C
  92d9b5b1bf8f84c19d0b739b4cf4482c  gcc/testsuite/g++.dg/reflect/common_reference1.C
*************** aa8f04eae840cf292352166e158cfd5c  gcc/te
*** 37712,37717 ****
--- 37763,37769 ----
  8e50886b33b97c105f268ac4464d550c  gcc/testsuite/g++.dg/reflect/init16.C
  d90fcc99ddaeb5505678c7c407e0ab75  gcc/testsuite/g++.dg/reflect/init17.C
  dabe4ff7939752efdbbb1268dec52d43  gcc/testsuite/g++.dg/reflect/init18.C
+ ad250c99277937010b4bff3a40b50e9e  gcc/testsuite/g++.dg/reflect/init19.C
  314f62be0110f9e0a46fdc1b7585aebd  gcc/testsuite/g++.dg/reflect/init2.C
  0512b3bdec0b0fd28051477e9423aa67  gcc/testsuite/g++.dg/reflect/init3.C
  d46e1560ddd6be61c86743909c517b4e  gcc/testsuite/g++.dg/reflect/init4.C
*************** d1fd504ae938ad7e3b0edbf6834ec3b4  gcc/te
*** 37841,37846 ****
--- 37893,37899 ----
  c44e1d6dfaecfb4f263c78b17ed1b8c7  gcc/testsuite/g++.dg/reflect/members_of11.C
  623575016974295708d960e75d733062  gcc/testsuite/g++.dg/reflect/members_of12.C
  a2c5daff71c5cc0345db4bd0e912e669  gcc/testsuite/g++.dg/reflect/members_of13.C
+ 07a4631eea7fe0c6bdb296ca77c1d3a2  gcc/testsuite/g++.dg/reflect/members_of14.C
  689453102e4425f8d2c4ff89cb939595  gcc/testsuite/g++.dg/reflect/members_of2.C
  80a032eb31d0998f2d288e303356773a  gcc/testsuite/g++.dg/reflect/members_of3.C
  5ececa99994de569abffae1671b71870  gcc/testsuite/g++.dg/reflect/members_of4.C
*************** d769c20d76953f9e88aaec8b648608d2  gcc/te
*** 37908,37914 ****
  a51ba46fac5afc88adb4713e3d136a72  gcc/testsuite/g++.dg/reflect/parameters_of7.C
  0ee2cee54b894b3d12f09f8a07bc93e0  gcc/testsuite/g++.dg/reflect/parameters_of8.C
  d6715d284c87d041e08a5fbebff9821e  gcc/testsuite/g++.dg/reflect/parent_of1.C
! 55769fcd329e50bcfdf1c40931b35db5  gcc/testsuite/g++.dg/reflect/parm1.C
  ee2a5065f194d0c1d1360c2d2a8f5d8b  gcc/testsuite/g++.dg/reflect/parm2.C
  20137ba8760da5d42ba55a0ab0d862fe  gcc/testsuite/g++.dg/reflect/parm3.C
  092c4aaf815b9da7b48dab330b6ce09d  gcc/testsuite/g++.dg/reflect/parm4.C
--- 37961,37967 ----
  a51ba46fac5afc88adb4713e3d136a72  gcc/testsuite/g++.dg/reflect/parameters_of7.C
  0ee2cee54b894b3d12f09f8a07bc93e0  gcc/testsuite/g++.dg/reflect/parameters_of8.C
  d6715d284c87d041e08a5fbebff9821e  gcc/testsuite/g++.dg/reflect/parent_of1.C
! 1447cf1a75f2e700c39efe43ea9ba17c  gcc/testsuite/g++.dg/reflect/parm1.C
  ee2a5065f194d0c1d1360c2d2a8f5d8b  gcc/testsuite/g++.dg/reflect/parm2.C
  20137ba8760da5d42ba55a0ab0d862fe  gcc/testsuite/g++.dg/reflect/parm3.C
  092c4aaf815b9da7b48dab330b6ce09d  gcc/testsuite/g++.dg/reflect/parm4.C
*************** bcea9ee60707a95dc9fe1a749981578a  gcc/te
*** 37928,37934 ****
  21163d77f163d23e3dc80cd1c30a9ae5  gcc/testsuite/g++.dg/reflect/pr124689.C
  d1618ed5affc804f7f8cda302ecd3b2e  gcc/testsuite/g++.dg/reflect/pr124790.C
  121fa58431980b8ab5bd16473ccf8c21  gcc/testsuite/g++.dg/reflect/pr124792.C
! 46ef5d1fe4f16ccc7109ecfe84f64b11  gcc/testsuite/g++.dg/reflect/pr125007.C
  e6404856d4cc9cc02aa5ebec3e5ecb82  gcc/testsuite/g++.dg/reflect/qrn1.C
  4ef5fc49aed920d8bfc3bc57a9ddef71  gcc/testsuite/g++.dg/reflect/qrn2.C
  8a49e7b1ad0cad9ac48fdcf37ad900cf  gcc/testsuite/g++.dg/reflect/range_args.C
--- 37981,37988 ----
  21163d77f163d23e3dc80cd1c30a9ae5  gcc/testsuite/g++.dg/reflect/pr124689.C
  d1618ed5affc804f7f8cda302ecd3b2e  gcc/testsuite/g++.dg/reflect/pr124790.C
  121fa58431980b8ab5bd16473ccf8c21  gcc/testsuite/g++.dg/reflect/pr124792.C
! 0bfe2b4b0d52d493a24af0d81d278986  gcc/testsuite/g++.dg/reflect/pr125007.C
! ccc4415ba1de4b5fda2f4d61583fab4c  gcc/testsuite/g++.dg/reflect/pr125179.C
  e6404856d4cc9cc02aa5ebec3e5ecb82  gcc/testsuite/g++.dg/reflect/qrn1.C
  4ef5fc49aed920d8bfc3bc57a9ddef71  gcc/testsuite/g++.dg/reflect/qrn2.C
  8a49e7b1ad0cad9ac48fdcf37ad900cf  gcc/testsuite/g++.dg/reflect/range_args.C
*************** f95ce0044b4db49d5f146e5fbe45875c  gcc/te
*** 37944,37950 ****
  61d0a64ce5f607baeb67ce80bb50f4d7  gcc/testsuite/g++.dg/reflect/reflect_constant_array1.C
  dadda107af5d7dd69715a4f20236adcf  gcc/testsuite/g++.dg/reflect/reflect_constant_array10.C
  0e1fde754081d183f9fa8134f9e44c84  gcc/testsuite/g++.dg/reflect/reflect_constant_array11.C
! b1917b5ba841920599e01cb07bcd5bbe  gcc/testsuite/g++.dg/reflect/reflect_constant_array2.C
  50112030f94d83d432e32d44f823fcb3  gcc/testsuite/g++.dg/reflect/reflect_constant_array3.C
  5142cc73273428503aa2dbaf27e9128d  gcc/testsuite/g++.dg/reflect/reflect_constant_array4.C
  b29f09bce5fedc3211b6eb400cc62e72  gcc/testsuite/g++.dg/reflect/reflect_constant_array5.C
--- 37998,38004 ----
  61d0a64ce5f607baeb67ce80bb50f4d7  gcc/testsuite/g++.dg/reflect/reflect_constant_array1.C
  dadda107af5d7dd69715a4f20236adcf  gcc/testsuite/g++.dg/reflect/reflect_constant_array10.C
  0e1fde754081d183f9fa8134f9e44c84  gcc/testsuite/g++.dg/reflect/reflect_constant_array11.C
! 09ceacbf2f5d74e5d767a857a0200b64  gcc/testsuite/g++.dg/reflect/reflect_constant_array2.C
  50112030f94d83d432e32d44f823fcb3  gcc/testsuite/g++.dg/reflect/reflect_constant_array3.C
  5142cc73273428503aa2dbaf27e9128d  gcc/testsuite/g++.dg/reflect/reflect_constant_array4.C
  b29f09bce5fedc3211b6eb400cc62e72  gcc/testsuite/g++.dg/reflect/reflect_constant_array5.C
*************** ef83de902dee2f6fe942c29156f8503f  gcc/te
*** 37992,37998 ****
  deddb1584f584cf686cd42b793483827  gcc/testsuite/g++.dg/reflect/subobjects_of1.C
  61f47186bb7769959e6cbcf0b286ddbe  gcc/testsuite/g++.dg/reflect/substitute1.C
  7412640ef90c2fa539ef91699f15ed14  gcc/testsuite/g++.dg/reflect/substitute2.C
! fb988bd3ed4b676491a6a1bc94c867aa  gcc/testsuite/g++.dg/reflect/substitute3.C
  e24c084d73cca9b28a4c473c5918117f  gcc/testsuite/g++.dg/reflect/substitute4.C
  127280869c2a6dcc31194aacecdbe006  gcc/testsuite/g++.dg/reflect/substitute5.C
  38ca28226f1eeb270c2ef69782415db2  gcc/testsuite/g++.dg/reflect/substitute6.C
--- 38046,38052 ----
  deddb1584f584cf686cd42b793483827  gcc/testsuite/g++.dg/reflect/subobjects_of1.C
  61f47186bb7769959e6cbcf0b286ddbe  gcc/testsuite/g++.dg/reflect/substitute1.C
  7412640ef90c2fa539ef91699f15ed14  gcc/testsuite/g++.dg/reflect/substitute2.C
! 61c9964eb5a189346222b6f24cda019f  gcc/testsuite/g++.dg/reflect/substitute3.C
  e24c084d73cca9b28a4c473c5918117f  gcc/testsuite/g++.dg/reflect/substitute4.C
  127280869c2a6dcc31194aacecdbe006  gcc/testsuite/g++.dg/reflect/substitute5.C
  38ca28226f1eeb270c2ef69782415db2  gcc/testsuite/g++.dg/reflect/substitute6.C
*************** ff49ad2327b77188c9be7008d37b0fa1  gcc/te
*** 38011,38016 ****
--- 38065,38072 ----
  108c9f28791a9fec38b31b04cf7ec18f  gcc/testsuite/g++.dg/reflect/type1.C
  7ddd44fc3b31dc7a9800814c464043fa  gcc/testsuite/g++.dg/reflect/type10.C
  9c43b4082295c4623ff424298cbfe7f6  gcc/testsuite/g++.dg/reflect/type11.C
+ 193b9ee859ea109db1d83dd7ea88e4b4  gcc/testsuite/g++.dg/reflect/type12.C
+ 9d76d02bf58fe7d868b80aa5c0dc3814  gcc/testsuite/g++.dg/reflect/type13.C
  b468479b1feb70e677c72b4fb0612f94  gcc/testsuite/g++.dg/reflect/type2.C
  d8a3c8c16d619e634a0ac785558d78a3  gcc/testsuite/g++.dg/reflect/type3.C
  1ea86d8cc75b073a21cfdfda5218f35e  gcc/testsuite/g++.dg/reflect/type4.C
*************** d8a3c8c16d619e634a0ac785558d78a3  gcc/te
*** 38021,38027 ****
  98a989c6fb8148edbb681b3c4d3ec69b  gcc/testsuite/g++.dg/reflect/type9.C
  a97f51af196e9b66ef9d840989598a75  gcc/testsuite/g++.dg/reflect/type_of1.C
  2cbbc76b7de463f6b1d9d308ec90a956  gcc/testsuite/g++.dg/reflect/type_of2.C
! 04ceff367fd1cae985265e6d71d444db  gcc/testsuite/g++.dg/reflect/type_of3.C
  923b99a2592b5b36ddaef3f2fa7327dd  gcc/testsuite/g++.dg/reflect/type_rels1.C
  9180e7348d8521febdaba8e0dee848e6  gcc/testsuite/g++.dg/reflect/type_trait1.C
  a66e1dc9964c7702e9ecdb5be8553fb5  gcc/testsuite/g++.dg/reflect/type_trait10.C
--- 38077,38083 ----
  98a989c6fb8148edbb681b3c4d3ec69b  gcc/testsuite/g++.dg/reflect/type9.C
  a97f51af196e9b66ef9d840989598a75  gcc/testsuite/g++.dg/reflect/type_of1.C
  2cbbc76b7de463f6b1d9d308ec90a956  gcc/testsuite/g++.dg/reflect/type_of2.C
! 24dc64c48f4e9d3ba07570c5edc8cc47  gcc/testsuite/g++.dg/reflect/type_of3.C
  923b99a2592b5b36ddaef3f2fa7327dd  gcc/testsuite/g++.dg/reflect/type_rels1.C
  9180e7348d8521febdaba8e0dee848e6  gcc/testsuite/g++.dg/reflect/type_trait1.C
  a66e1dc9964c7702e9ecdb5be8553fb5  gcc/testsuite/g++.dg/reflect/type_trait10.C
*************** be5b47714ba41b25933660896d6c7427  gcc/te
*** 41750,41756 ****
  39473618f9d65a4934a59f824d12279a  gcc/testsuite/g++.dg/warn/Wuninitialized-7.C
  9499c4dafb0ba272277b5ed41c0cf76b  gcc/testsuite/g++.dg/warn/Wuninitialized-8.C
  cbc63320f1b9587eb653a962d61c8945  gcc/testsuite/g++.dg/warn/Wuninitialized-9.C
! 3f1d008635671f4ca156987bbb52df4f  gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
  e8651e5eee4fc815deb4568177437a39  gcc/testsuite/g++.dg/warn/Wuninitialized-pr111123-1.C
  d08f8f4d2f55349741193b20c16afa1a  gcc/testsuite/g++.dg/warn/Wunused-1.C
  09723811a7331dcc7580068bdfe05710  gcc/testsuite/g++.dg/warn/Wunused-10.C
--- 41806,41812 ----
  39473618f9d65a4934a59f824d12279a  gcc/testsuite/g++.dg/warn/Wuninitialized-7.C
  9499c4dafb0ba272277b5ed41c0cf76b  gcc/testsuite/g++.dg/warn/Wuninitialized-8.C
  cbc63320f1b9587eb653a962d61c8945  gcc/testsuite/g++.dg/warn/Wuninitialized-9.C
! 1d2ca19290d5a28b069c984da7726ece  gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
  e8651e5eee4fc815deb4568177437a39  gcc/testsuite/g++.dg/warn/Wuninitialized-pr111123-1.C
  d08f8f4d2f55349741193b20c16afa1a  gcc/testsuite/g++.dg/warn/Wunused-1.C
  09723811a7331dcc7580068bdfe05710  gcc/testsuite/g++.dg/warn/Wunused-10.C
*************** afb8b6ab7d54fa8eab8865a52a46caa4  gcc/te
*** 45977,45982 ****
--- 46033,46039 ----
  eafc363e633aef7542e621d7ecaa914e  gcc/testsuite/g++.target/i386/pr99108.C
  3660db29974db1f63f1a1f458c8894db  gcc/testsuite/g++.target/i386/pr99679-1.C
  b3fdfe2866e1905292894d815f1fa291  gcc/testsuite/g++.target/i386/pr99679-2.C
+ 55f97129aefe6b10946f6b5fff1a3391  gcc/testsuite/g++.target/i386/seh-sysvabi-wrap1.C
  34f905a0359d6dd61671b90ee3d5a45a  gcc/testsuite/g++.target/i386/shrink_wrap_separate.C
  a621b799eff193996043d9d5462e5c27  gcc/testsuite/g++.target/i386/sse4_1-check.h
  8ac3bf43a1ce0277ed295c7ff1cc85fc  gcc/testsuite/g++.target/i386/sse4_1-pr100637-1b.C
*************** d41fd1ea09327fdf9b68f657aea5661c  gcc/te
*** 49537,49542 ****
--- 49594,49600 ----
  cb4c82184137c0933c1bae60a7df15bc  gcc/testsuite/gcc.c-torture/execute/pr123864.c
  95b7f2d687a5a5e2df1e09fad845a195  gcc/testsuite/gcc.c-torture/execute/pr123978.c
  256e8d04f36f265861609fbe23468388  gcc/testsuite/gcc.c-torture/execute/pr124358.c
+ 2dbc141227c879172c1b89d0bc7d747a  gcc/testsuite/gcc.c-torture/execute/pr125291.c
  80c02c70a0b6b91b06942e395c34960f  gcc/testsuite/gcc.c-torture/execute/pr15262-1.c
  987c511633ad57d9f08d352eb9512819  gcc/testsuite/gcc.c-torture/execute/pr15262-2.c
  f7f514cfbd791b0c828e0710493b0910  gcc/testsuite/gcc.c-torture/execute/pr15262.c
*************** d573cbba3ca2a25fc89d2a7473c5f423  gcc/te
*** 51517,51523 ****
  fc3cb70c2399af08002b58c02ec7dc52  gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c
  71e14b0eb6517785cd3528d5ac0105a8  gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c
  790595ae06a5a0381144fc786922f71e  gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c
! 7228d7b34c4f6867f77fda68257e26e2  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
--- 51575,51581 ----
  fc3cb70c2399af08002b58c02ec7dc52  gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c
  71e14b0eb6517785cd3528d5ac0105a8  gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c
  790595ae06a5a0381144fc786922f71e  gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c
! 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
*************** d040792d1dd4c9dd03defd6b33b73ca3  gcc/te
*** 52302,52307 ****
--- 52360,52369 ----
  57438e502d4a94ddefa57cc49b25f836  gcc/testsuite/gcc.dg/builtin-arith-overflow-5.c
  e1b404ff3b34ca8f09597bbb3eaff8bb  gcc/testsuite/gcc.dg/builtin-assume-aligned-1.c
  81addba5c0e1838ae8925847f9549ba9  gcc/testsuite/gcc.dg/builtin-assume-aligned-2.c
+ cc40c0416c18523670c53c6055ab0ae6  gcc/testsuite/gcc.dg/builtin-bitreverse-1.c
+ df78809a032feb3dbd25fdeb182c2652  gcc/testsuite/gcc.dg/builtin-bitreverse-2.c
+ a336dc31ea8309dddd692f972b2a0536  gcc/testsuite/gcc.dg/builtin-bitreverse-3.c
+ 8a860a52d2b41b8ae1fa021cae3c5181  gcc/testsuite/gcc.dg/builtin-bitreverse-4.c
  e37f4aca281a2c82829d2bf1650d5193  gcc/testsuite/gcc.dg/builtin-bswap-1.c
  8c6c4e4a58a4f180971e576b4fabe804  gcc/testsuite/gcc.dg/builtin-bswap-10.c
  999414d3fa6e5bfeb2e073f6ae328e91  gcc/testsuite/gcc.dg/builtin-bswap-11.c
*************** ffaf2de00670ec1bcfd9c05f306e16c3  gcc/te
*** 52718,52723 ****
--- 52780,52802 ----
  1116de49b5f2a7c0923551f1b58a18a9  gcc/testsuite/gcc.dg/c23-empty-init-3.c
  e97a636eb53553266b792d09229136cd  gcc/testsuite/gcc.dg/c23-empty-init-4.c
  52dd98b39f09f54981f1349463ec1b2d  gcc/testsuite/gcc.dg/c23-empty-init-5.c
+ b5309f3cdf7d8f971e4f2c773bd2c8b8  gcc/testsuite/gcc.dg/c23-empty-init-warn-1.c
+ c703d2ed9bcc5621a4dd7741f87bce87  gcc/testsuite/gcc.dg/c23-empty-init-warn-10.c
+ 3f230e81fb7694e00aa02790905d3086  gcc/testsuite/gcc.dg/c23-empty-init-warn-11.c
+ a12d1e4845b34caece6eb6b47a6b9c9a  gcc/testsuite/gcc.dg/c23-empty-init-warn-12.c
+ d2be38d53de0d885be179fcacd18f686  gcc/testsuite/gcc.dg/c23-empty-init-warn-13.c
+ 04fcaf4a5d95db71ee6f1360973c60ea  gcc/testsuite/gcc.dg/c23-empty-init-warn-14.c
+ ef3826a4fc6dc37a5f246117176bca18  gcc/testsuite/gcc.dg/c23-empty-init-warn-15.c
+ 3821c1bab18a688411ac43078e955caf  gcc/testsuite/gcc.dg/c23-empty-init-warn-16.c
+ 1409702b86142bcd1f797b15c5c999c2  gcc/testsuite/gcc.dg/c23-empty-init-warn-17.c
+ 7de8325c516ad8497bf39185e90ebaa5  gcc/testsuite/gcc.dg/c23-empty-init-warn-2.c
+ d457ba7f5b1642779a4ccd41b34ed8d2  gcc/testsuite/gcc.dg/c23-empty-init-warn-3.c
+ 8c1ff0e0dd1070343575ad1629927af2  gcc/testsuite/gcc.dg/c23-empty-init-warn-4.c
+ 05c91bf5d889c7a95092ebd85e42c82e  gcc/testsuite/gcc.dg/c23-empty-init-warn-5.c
+ b2282792adf5f05d71c230b619530093  gcc/testsuite/gcc.dg/c23-empty-init-warn-6.c
+ a7d0802c09f260065adcbd24f8816b11  gcc/testsuite/gcc.dg/c23-empty-init-warn-7.c
+ a5b0968f6f7a5055b66c411834726d0e  gcc/testsuite/gcc.dg/c23-empty-init-warn-8.c
+ a38524c0a1cb7d75dcf61adf238c8f7e  gcc/testsuite/gcc.dg/c23-empty-init-warn-9.c
  dc52d4a4df4bc142bba5c3beadd4981f  gcc/testsuite/gcc.dg/c23-enum-1.c
  2ca675c75231eb5ade1153c0b8b0d32a  gcc/testsuite/gcc.dg/c23-enum-10.c
  ed9819fd2268c8f2f24fef8c006f9fbf  gcc/testsuite/gcc.dg/c23-enum-2.c
*************** cfff87aa3fe61ca0975eef3fa6fba250  gcc/te
*** 55575,55580 ****
--- 55654,55676 ----
  1e9dded6ad5de0efe6b4984ffe53866b  gcc/testsuite/gcc.dg/gnu11-empty-init-2.c
  a16a8e69d8d9a55a5cf0a9d5f6f300ed  gcc/testsuite/gcc.dg/gnu11-empty-init-3.c
  e690ee91d3ae06cb709d40641ea3adab  gcc/testsuite/gcc.dg/gnu11-empty-init-4.c
+ 124fddbdae9e38a635c5ca6586a4b537  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-1.c
+ b7d78283ac5bcac9ad73c42607902eb9  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-10.c
+ 6d0d2bc5d865d0e69dcaf4f284518dd6  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-11.c
+ 8af4f492289513e6ae75a8995267cd49  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-12.c
+ 9cc908bc120ea750fb62cb80b74c41ff  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-13.c
+ c12092a4c10107636e8c21193a8aa834  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-14.c
+ 62d050a90c0c5c2050a31274d5dc58a6  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-15.c
+ 960f1076119a2f0241c140077440e52d  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-16.c
+ ecc5e32b84d3ff0cdd8eaba2e5123013  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-17.c
+ 5205c658bd971067747d834c2a4601e3  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-2.c
+ 4d0860f492657f00fa73734f397c8e23  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-3.c
+ 21126690a4a64d1765cfb06c8728f9a5  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-4.c
+ bc1245dd91af4d2a320d2f65a3450277  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-5.c
+ e125cb93d345e2c4762e82530e547c6a  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-6.c
+ 26110208dc00c2ca49d83a14fb898a94  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-7.c
+ 4f91c79cd536f83ad48f2c55c22c85f2  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-8.c
+ d4e530aa773ee40fd79b1763f82c4cd2  gcc/testsuite/gcc.dg/gnu11-empty-init-warn-9.c
  3a332e39fec6e68a2d4507ccd5c20199  gcc/testsuite/gcc.dg/gnu11-typeof-1.c
  f63e3315a5589f87a501301af189ea1c  gcc/testsuite/gcc.dg/gnu11-typeof-2.c
  bcac9a124b918a50171000947ed79c44  gcc/testsuite/gcc.dg/gnu11-typeof-3.c
*************** ee48fe70797eb5503b9b8767efccd315  gcc/te
*** 58787,58792 ****
--- 58883,58891 ----
  7de6d79dfadd35bbdff0e2c5faa767a3  gcc/testsuite/gcc.dg/pr124985.c
  4ac96a747a32d5c51b5be5c05cdd21c5  gcc/testsuite/gcc.dg/pr125019.c
  192df6769f6f110bb8f33708a1ceeea9  gcc/testsuite/gcc.dg/pr125117.c
+ 39e77ec3d93c3445ad8a73fa3d9fab87  gcc/testsuite/gcc.dg/pr125206.c
+ 402e7c0c2fa603af9c7bac556e8d71a8  gcc/testsuite/gcc.dg/pr125209.c
+ 8fcad4427391662fae9297f1c3447a78  gcc/testsuite/gcc.dg/pr125261.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** a5b9e215eaee30cede04135bd18b6a59  gcc/te
*** 62665,62670 ****
--- 62764,62771 ----
  1380b111d91a82b39e2bcbae4eab1160  gcc/testsuite/gcc.dg/torture/pr125156.c
  f04a0ca1134a2f6b7f28283527f4394b  gcc/testsuite/gcc.dg/torture/pr125185.c
  4f9a7c7f22e75df6c54df1e67ad75557  gcc/testsuite/gcc.dg/torture/pr125234-1.c
+ 97b1645c0c31a99b15b63ae9e310caed  gcc/testsuite/gcc.dg/torture/pr125250.c
+ 9ef627b78ab64a9e96e5c32fca00b504  gcc/testsuite/gcc.dg/torture/pr125290-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
*************** f62ac8c6a6ff1517485b4579f8a00f33  gcc/te
*** 64920,64925 ****
--- 65021,65030 ----
  ecd327087ec5129f4762a83c6c58bb42  gcc/testsuite/gcc.dg/tree-ssa/popcount5ll.c
  4256e7f2af59a698439adecd1790d9ca  gcc/testsuite/gcc.dg/tree-ssa/popcount6.c
  b2197879c497a963508f367b026baebe  gcc/testsuite/gcc.dg/tree-ssa/popcount6b.c
+ 2bdfc79ce29d7b31523068d28175ec84  gcc/testsuite/gcc.dg/tree-ssa/popcount7.c
+ 5a82d4b6ef6e408ce103092798c8d392  gcc/testsuite/gcc.dg/tree-ssa/popcount7_2.c
+ 2e24fb4b176d75a51807a2c3795f94e4  gcc/testsuite/gcc.dg/tree-ssa/popcount8.c
+ a211a9c1cd0756c891529a0c55b5513a  gcc/testsuite/gcc.dg/tree-ssa/popcount9.c
  f0d0f5ce7e02f1935c0890532a1e742e  gcc/testsuite/gcc.dg/tree-ssa/pow-to-ldexp.c
  716a24cb96a9a81fe87f8660900098d4  gcc/testsuite/gcc.dg/tree-ssa/pow_fold_1.c
  0341d659d040511e18c036b7dd477420  gcc/testsuite/gcc.dg/tree-ssa/pr100359.c
*************** eed236f4c0a3dab3cadb4c5cbce403da  gcc/te
*** 65039,65044 ****
--- 65144,65150 ----
  44119a9898cb07aa07b7491d0a643353  gcc/testsuite/gcc.dg/tree-ssa/pr111583-2.c
  30191e7f04d08f0b42092e36965a3c63  gcc/testsuite/gcc.dg/tree-ssa/pr111967.c
  f5a620ca99a1fc9e267beab2ad387ade  gcc/testsuite/gcc.dg/tree-ssa/pr111972-1.c
+ 5811601acaf252f2b50291bd70a20a05  gcc/testsuite/gcc.dg/tree-ssa/pr112095.c
  beccfabbbe0e25820c8a0bf1789cad24  gcc/testsuite/gcc.dg/tree-ssa/pr112706.c
  19ee66e2ab8d0fdea9f3e335e4a8fa86  gcc/testsuite/gcc.dg/tree-ssa/pr112721.c
  4eb8c3fc22eb21c2ea6d58e0ea78f8fc  gcc/testsuite/gcc.dg/tree-ssa/pr112767.c
*************** f0a08ed77be180f8c72684f8274f2548  gcc/te
*** 65105,65114 ****
--- 65211,65222 ----
  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
  5283f91d0eefda6d127eab3dcbb26458  gcc/testsuite/gcc.dg/tree-ssa/pr124560.c
  0054e44a9d7f98f16363e68bc8142e0f  gcc/testsuite/gcc.dg/tree-ssa/pr124746-1.c
  f5cfea6a1b6fc4b038b869d0d5b623f1  gcc/testsuite/gcc.dg/tree-ssa/pr124886.c
  20283de4958877c9f56821eb4c2d19cd  gcc/testsuite/gcc.dg/tree-ssa/pr125214.c
+ fff67bd84df25cc9f3265a2fd89436d9  gcc/testsuite/gcc.dg/tree-ssa/pr125259.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
  9945ed7002a5f7d4918e8ff5eb4cb647  gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c
*************** c360d0e291a0b0b1640d028e462e524c  gcc/te
*** 67968,67974 ****
  cac1837db0f18d03c9d1b37ac3d31796  gcc/testsuite/gcc.dg/vect/pr94443.c
  0d318897a6d7512255fe0dac2261264c  gcc/testsuite/gcc.dg/vect/pr94606.c
  2b1272d98c0843cb34b0b6bca44e86ee  gcc/testsuite/gcc.dg/vect/pr94727.c
! 40eb851466ea6c193bbfc2bc1df7832b  gcc/testsuite/gcc.dg/vect/pr94994.c
  4b69df6d5e35024255da4e4e966901bd  gcc/testsuite/gcc.dg/vect/pr95272.c
  69c694c08bc9a4d9994f78a8f8288607  gcc/testsuite/gcc.dg/vect/pr95495.c
  c07ae476dce0a5d5f03034001a1f07a9  gcc/testsuite/gcc.dg/vect/pr95539.c
--- 68076,68082 ----
  cac1837db0f18d03c9d1b37ac3d31796  gcc/testsuite/gcc.dg/vect/pr94443.c
  0d318897a6d7512255fe0dac2261264c  gcc/testsuite/gcc.dg/vect/pr94606.c
  2b1272d98c0843cb34b0b6bca44e86ee  gcc/testsuite/gcc.dg/vect/pr94727.c
! 3db50d4f555a1ff1164e18d41878b8dd  gcc/testsuite/gcc.dg/vect/pr94994.c
  4b69df6d5e35024255da4e4e966901bd  gcc/testsuite/gcc.dg/vect/pr95272.c
  69c694c08bc9a4d9994f78a8f8288607  gcc/testsuite/gcc.dg/vect/pr95495.c
  c07ae476dce0a5d5f03034001a1f07a9  gcc/testsuite/gcc.dg/vect/pr95539.c
*************** f611850bdcf6c79cc21bf0f12c5469e8  gcc/te
*** 68127,68132 ****
--- 68235,68241 ----
  2b55baa2aeb47417a231e321d018033f  gcc/testsuite/gcc.dg/vect/slp-reduc-12.c
  efeaa043d177e194cd96123499e925b1  gcc/testsuite/gcc.dg/vect/slp-reduc-13.c
  6eed17012acaa278bddfae1307bc5559  gcc/testsuite/gcc.dg/vect/slp-reduc-14.c
+ 2fc5f8a21494584aeaec94bc6c98cd37  gcc/testsuite/gcc.dg/vect/slp-reduc-15.c
  13f8e9309546363711eaedb177e2c8b9  gcc/testsuite/gcc.dg/vect/slp-reduc-2.c
  f51f95ff41057eaf23cde404d8d413fa  gcc/testsuite/gcc.dg/vect/slp-reduc-3.c
  89c86f9f96410c8bc70b4ce593a92d1e  gcc/testsuite/gcc.dg/vect/slp-reduc-4.c
*************** e09d0611313202af9ed401131b732f60  gcc/te
*** 69112,69117 ****
--- 69221,69227 ----
  5d24ff9975021460fe20c032e9e6f33a  gcc/testsuite/gcc.dg/vect/vect-rounding-nearbyintf.c
  0f9bae66d5cefd017d87eed08f3abe1b  gcc/testsuite/gcc.dg/vect/vect-rounding-round.c
  e2c1b1e126604d8abd27603de94e25b3  gcc/testsuite/gcc.dg/vect/vect-rounding-roundf.c
+ 3dcfcfd5bc70c6d2dcd9e66d4a138eb2  gcc/testsuite/gcc.dg/vect/vect-scev-affine_1.c
  9165bd7fc0ed20274b617efd2bed28eb  gcc/testsuite/gcc.dg/vect/vect-sdiv-pow2-1.c
  cfa8fc9b80bd9eebe3d4cc410769556e  gcc/testsuite/gcc.dg/vect/vect-sdivmod-1.c
  3ad6e8864726bb33d18d1f129d077740  gcc/testsuite/gcc.dg/vect/vect-shift-1.c
*************** a041d79193cf5904e847d0b04f865370  gcc/te
*** 70905,70926 ****
  2818d548f4447845f5e9a6ff272a8403  gcc/testsuite/gcc.target/aarch64/eh_return.c
  0d0e2a489d3255344941fbdef5cd849a  gcc/testsuite/gcc.target/aarch64/eon_1.c
  f2c4a1c8449840e049da3e2b01f2ee85  gcc/testsuite/gcc.target/aarch64/eor3-opt.c
! e2b939847435466ae5f175860d954925  gcc/testsuite/gcc.target/aarch64/erratas_opt_0.c
! 1d4d9b9dfc6a10337e12db3aeed04473  gcc/testsuite/gcc.target/aarch64/erratas_opt_1.c
! 5c2a6e6584904f92e18e528293ff7c83  gcc/testsuite/gcc.target/aarch64/erratas_opt_10.c
! dc83763b6362cdb39a4cc881b91963fb  gcc/testsuite/gcc.target/aarch64/erratas_opt_11.c
! 278a4af9ef102a6c75dc38347e0d7fe7  gcc/testsuite/gcc.target/aarch64/erratas_opt_12.c
! a44b525a45e7e6a70406f7e460f58f3e  gcc/testsuite/gcc.target/aarch64/erratas_opt_13.c
! 2177753ba642bbf3c0c3d99711a5b96a  gcc/testsuite/gcc.target/aarch64/erratas_opt_14.c
! 71d221a43d814e1e24417319c2f56b05  gcc/testsuite/gcc.target/aarch64/erratas_opt_15.c
! 963336466ec106da872cb7f403ff17a6  gcc/testsuite/gcc.target/aarch64/erratas_opt_2.c
! e316515df3925eeea508e98eaf4d36cf  gcc/testsuite/gcc.target/aarch64/erratas_opt_3.c
! 11dc64ff66ba9a03832fc8a174141b3a  gcc/testsuite/gcc.target/aarch64/erratas_opt_4.c
! 5663efc9e4355d7937c40712df15ed26  gcc/testsuite/gcc.target/aarch64/erratas_opt_5.c
! c4a779c0dfad47cc3c94584c8284f007  gcc/testsuite/gcc.target/aarch64/erratas_opt_6.c
! c1d4beaa57ab1d5d3ad0e7504bfcfb77  gcc/testsuite/gcc.target/aarch64/erratas_opt_7.c
! 50f5bb1fb7a8cdb83bd2fc246c19d107  gcc/testsuite/gcc.target/aarch64/erratas_opt_8.c
! 08f48c3de5be979d8fe151c8ab964092  gcc/testsuite/gcc.target/aarch64/erratas_opt_9.c
  8dac5a05d1eca8860b3df16bc7b03f2a  gcc/testsuite/gcc.target/aarch64/extend-syntax.c
  2891c499ed6535aa72a2a9a39cba281f  gcc/testsuite/gcc.target/aarch64/extend-vec.c
  4703bff993ef8bad5cc876cd178c66da  gcc/testsuite/gcc.target/aarch64/extend.c
--- 71015,71036 ----
  2818d548f4447845f5e9a6ff272a8403  gcc/testsuite/gcc.target/aarch64/eh_return.c
  0d0e2a489d3255344941fbdef5cd849a  gcc/testsuite/gcc.target/aarch64/eon_1.c
  f2c4a1c8449840e049da3e2b01f2ee85  gcc/testsuite/gcc.target/aarch64/eor3-opt.c
! ab4543be4fc35ae17010a3cdca208333  gcc/testsuite/gcc.target/aarch64/erratas_opt_0.c
! 229d27c4ae1a695d0bda0c8639c06245  gcc/testsuite/gcc.target/aarch64/erratas_opt_1.c
! 18f377729ebeaa5cb3cea428597def56  gcc/testsuite/gcc.target/aarch64/erratas_opt_10.c
! 33f13c0c6587b0dc46fe7c1ddf7eb664  gcc/testsuite/gcc.target/aarch64/erratas_opt_11.c
! c867cc980050a10e208b852b915bdbdf  gcc/testsuite/gcc.target/aarch64/erratas_opt_12.c
! 260cd1834ef5ea6536daf230fd6bd20c  gcc/testsuite/gcc.target/aarch64/erratas_opt_13.c
! 84207fad763f05185d4025dfdaee31d9  gcc/testsuite/gcc.target/aarch64/erratas_opt_14.c
! d16c2a2134f9c7c82954bab23c9968d1  gcc/testsuite/gcc.target/aarch64/erratas_opt_15.c
! 9c96e7a5cc579beded293b3cdd02a9bd  gcc/testsuite/gcc.target/aarch64/erratas_opt_2.c
! 01be163975ab6c86e0cfbbf91f937da3  gcc/testsuite/gcc.target/aarch64/erratas_opt_3.c
! 83f675cec8b0498d9ef4c973b0d6779e  gcc/testsuite/gcc.target/aarch64/erratas_opt_4.c
! f882a3bcf76769d2283cd4e0d6a2e78e  gcc/testsuite/gcc.target/aarch64/erratas_opt_5.c
! 96654ee1ee4bb745ee1b58f47f2904ee  gcc/testsuite/gcc.target/aarch64/erratas_opt_6.c
! 9c119f8df44ce77ecfc28a65abf8a65d  gcc/testsuite/gcc.target/aarch64/erratas_opt_7.c
! 22c29db8b0e375d1103b7babe7f2fcac  gcc/testsuite/gcc.target/aarch64/erratas_opt_8.c
! e97b955f204e1a0d3642543b55763bb6  gcc/testsuite/gcc.target/aarch64/erratas_opt_9.c
  8dac5a05d1eca8860b3df16bc7b03f2a  gcc/testsuite/gcc.target/aarch64/extend-syntax.c
  2891c499ed6535aa72a2a9a39cba281f  gcc/testsuite/gcc.target/aarch64/extend-vec.c
  4703bff993ef8bad5cc876cd178c66da  gcc/testsuite/gcc.target/aarch64/extend.c
*************** f12479eade051fc653baa3b9e92457a8  gcc/te
*** 71541,71546 ****
--- 71651,71657 ----
  a3303d7dc6b509471d4e18418c9de113  gcc/testsuite/gcc.target/aarch64/pr113573.c
  5e8481e02f3cfad1b565c1fcf18a51b0  gcc/testsuite/gcc.target/aarch64/pr113613.c
  c3b3090c8cc6b28f90027aceb08f6ad7  gcc/testsuite/gcc.target/aarch64/pr113618.c
+ 78cb6c933e394e5b18e7d7fe34b8c790  gcc/testsuite/gcc.target/aarch64/pr113856.c
  65b79dfa682a9ae7b9e39d7180ffd699  gcc/testsuite/gcc.target/aarch64/pr114196.c
  36053cf59cb8f7ed3c6851b00c7a8da0  gcc/testsuite/gcc.target/aarch64/pr114528.c
  88db9b527d6d24f272fa2ecc6aa6a21c  gcc/testsuite/gcc.target/aarch64/pr114674.c
*************** c07ef6a79a7748d8a1cd83670cbc3173  gcc/te
*** 71600,71605 ****
--- 71711,71717 ----
  98a4eb67a4078cb117ea1c80d44fee14  gcc/testsuite/gcc.target/aarch64/pr123206.c
  f278ce8788e95ff6c4d2d30e0e50237e  gcc/testsuite/gcc.target/aarch64/pr123238.c
  95306727ea8db0e2fdb8e199f754c587  gcc/testsuite/gcc.target/aarch64/pr123285-1.c
+ 8c0ffc4245119027029238d923b96313  gcc/testsuite/gcc.target/aarch64/pr123286.c
  3525a5777032197cdd1e39b2aad94c29  gcc/testsuite/gcc.target/aarch64/pr123294-1.c
  085f7e2087fb0cf8d5d9a44259bb616c  gcc/testsuite/gcc.target/aarch64/pr123548.c
  def5c2749854b129e22c1e5c9a817159  gcc/testsuite/gcc.target/aarch64/pr123786.c
*************** f4c4689027fa4974f2d03abe27971460  gcc/te
*** 76063,76068 ****
--- 76175,76181 ----
  87cec4ed8085253e81cbb56604ac7d2f  gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_4.c
  0926d8033ee319a31e8380647299d9cd  gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_5.c
  321ab23efa97fd79ba7096856581ba95  gcc/testsuite/gcc.target/aarch64/sve/fneg_1.c
+ 9b0e6f17b9bf861030b14ad2cee1bcd2  gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c
  d7286c7d7044caf530eb51c8265882bf  gcc/testsuite/gcc.target/aarch64/sve/fnmad_1.c
  0a35e1341e09452548284613ce871aab  gcc/testsuite/gcc.target/aarch64/sve/fnmla_1.c
  b1f34999111510e2f313342976d93991  gcc/testsuite/gcc.target/aarch64/sve/fnmls_1.c
*************** d4ac7a84edd49408935038ba429c4a6d  gcc/te
*** 76586,76592 ****
  aab87b2d9daa75eaf07f2f4e47d63c11  gcc/testsuite/gcc.target/aarch64/sve/pr122749_9.c
  806909efa49b7a7a797b079996626314  gcc/testsuite/gcc.target/aarch64/sve/pr123697.c
  8d516514d55b6987b8c79e9e3ce2bdb1  gcc/testsuite/gcc.target/aarch64/sve/pr123767.c
! 777fa618dc2e814b8354442c6286d350  gcc/testsuite/gcc.target/aarch64/sve/pr123897.c
  91a4ca000e76de583f0631d5cb19a12a  gcc/testsuite/gcc.target/aarch64/sve/pr123898.c
  7e2aaf0806edd37415079b5c2e48b66c  gcc/testsuite/gcc.target/aarch64/sve/pr81003.c
  00b752a6e175de8b1a300df08f275461  gcc/testsuite/gcc.target/aarch64/sve/pr87563.c
--- 76699,76705 ----
  aab87b2d9daa75eaf07f2f4e47d63c11  gcc/testsuite/gcc.target/aarch64/sve/pr122749_9.c
  806909efa49b7a7a797b079996626314  gcc/testsuite/gcc.target/aarch64/sve/pr123697.c
  8d516514d55b6987b8c79e9e3ce2bdb1  gcc/testsuite/gcc.target/aarch64/sve/pr123767.c
! 2f20cf370ca6fbaebfa9f5d929b67a4c  gcc/testsuite/gcc.target/aarch64/sve/pr123897.c
  91a4ca000e76de583f0631d5cb19a12a  gcc/testsuite/gcc.target/aarch64/sve/pr123898.c
  7e2aaf0806edd37415079b5c2e48b66c  gcc/testsuite/gcc.target/aarch64/sve/pr81003.c
  00b752a6e175de8b1a300df08f275461  gcc/testsuite/gcc.target/aarch64/sve/pr87563.c
*************** aa168ab73051b82a62ea3739df9b7948  gcc/te
*** 79820,79826 ****
  4628a42c2e310a954f19233c1d879c44  gcc/testsuite/gcc.target/arm/mtp_2.c
  3b7858b6609587453b138fe196229f01  gcc/testsuite/gcc.target/arm/mtp_3.c
  dd181d86d78e4af9dc8a97924e0e82c1  gcc/testsuite/gcc.target/arm/mtp_4.c
! ad096e777940305029a708fb7ac1af21  gcc/testsuite/gcc.target/arm/muldi-1.c
  245115ae7c12633599d874a25657d9cb  gcc/testsuite/gcc.target/arm/multilib.exp
  1c6df99c167e122c3ce87f610c408a1e  gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-1.c
  77d3814c02278cb525be3b9b8ff07d7a  gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c
--- 79933,79939 ----
  4628a42c2e310a954f19233c1d879c44  gcc/testsuite/gcc.target/arm/mtp_2.c
  3b7858b6609587453b138fe196229f01  gcc/testsuite/gcc.target/arm/mtp_3.c
  dd181d86d78e4af9dc8a97924e0e82c1  gcc/testsuite/gcc.target/arm/mtp_4.c
! 81b7705bfd682218f1bb362e9d658af0  gcc/testsuite/gcc.target/arm/muldi-1.c
  245115ae7c12633599d874a25657d9cb  gcc/testsuite/gcc.target/arm/multilib.exp
  1c6df99c167e122c3ce87f610c408a1e  gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-1.c
  77d3814c02278cb525be3b9b8ff07d7a  gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c
*************** c1f2f58ff01ac0af9bac1540222140eb  gcc/te
*** 84125,84130 ****
--- 84238,84245 ----
  5788c901799e460b8e5c429a23b94ebe  gcc/testsuite/gcc.target/h8300/pr17306-1.c
  5b147cea3517b62e755b86aafee99229  gcc/testsuite/gcc.target/h8300/pr17306-2.c
  53258035613911ab480f77cbaf0dc10c  gcc/testsuite/gcc.target/h8300/pr58400.c
+ f6f8f7cabb18d5d75ce2ca8cfd9edf4e  gcc/testsuite/gcc.target/h8300/pr80770-2.c
+ 4e9d327bd4137f26cf440cfa80b30c4e  gcc/testsuite/gcc.target/h8300/pr80770.c
  344a21000f3cf05f2baaf02b2c346cd5  gcc/testsuite/gcc.target/h8300/pragma-isr.c
  aaaadf978237931983f712ab447eeff0  gcc/testsuite/gcc.target/h8300/pragma-isr2.c
  520d992d481a80dfc60ea32b9335b583  gcc/testsuite/gcc.target/h8300/sub-2.c
*************** cc308e03970fb41ca863bd4650d48891  gcc/te
*** 84544,84549 ****
--- 84659,84665 ----
  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
  d523b3f47fa58cc0883378457357193f  gcc/testsuite/gcc.target/i386/avx-truncf-vec.c
  8bb1321c015650c8121c7675779fd273  gcc/testsuite/gcc.target/i386/avx-typecast-1.c
*************** c1a42e6abf341c78082c17c60365086c  gcc/te
*** 90492,90497 ****
--- 90608,90615 ----
  b69eb677daef92be04da1f0e0218c44e  gcc/testsuite/gcc.target/i386/pr120840-1b.c
  90c426e3f9f68074b3688e77c0a85c20  gcc/testsuite/gcc.target/i386/pr120840-1c.c
  b157fbe2632de5156079590d5faadfd7  gcc/testsuite/gcc.target/i386/pr120840-1d.c
+ 6979b4f62a85eb25fa82f68592ad363d  gcc/testsuite/gcc.target/i386/pr120870-1.c
+ 2677cc36e093bf45fb4067a0538b07c0  gcc/testsuite/gcc.target/i386/pr120870-2.c
  4b9fcb69739d672e799c27a972aaf97d  gcc/testsuite/gcc.target/i386/pr120881-1a.c
  be5b82c04ee4bc5470f2a54c12758197  gcc/testsuite/gcc.target/i386/pr120881-1b.c
  dc5699b1ed908f2743344eb7eccdf1b4  gcc/testsuite/gcc.target/i386/pr120881-1c.c
*************** fd0c95fcad577a49c3553f21604c3b61  gcc/te
*** 90618,90623 ****
--- 90736,90742 ----
  fbfd31ba28ddc5c31ac2fd9d714443bb  gcc/testsuite/gcc.target/i386/pr124056.c
  d27914ddcfa1d9a135c3e7189bd6af10  gcc/testsuite/gcc.target/i386/pr124098.c
  47cf91db1dea0c9b92db6c1fae08c91e  gcc/testsuite/gcc.target/i386/pr124194.c
+ d9ed650f309dc0e24daeb25d90c34fa0  gcc/testsuite/gcc.target/i386/pr124316.c
  2b4c9300861033dc1756ecbfd425f3c6  gcc/testsuite/gcc.target/i386/pr124407-1.c
  101572df1dd23dde5382be2d1a1478fe  gcc/testsuite/gcc.target/i386/pr124407-2.c
  20438ee87f52efda141c43d1f08416e1  gcc/testsuite/gcc.target/i386/pr124696.c
*************** a7914bedf774cd238c5877b4c741b754  gcc/te
*** 90646,90651 ****
--- 90765,90771 ----
  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
  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
*************** d165bed09148366aaa31f611e7089751  gcc/te
*** 90738,90743 ****
--- 90858,90865 ----
  02e79699ad467b9119ab95ea95ce85de  gcc/testsuite/gcc.target/i386/pr32708-1.c
  1457182604136ad18ad40e4bef334417  gcc/testsuite/gcc.target/i386/pr32708-2.c
  d5028e8e553339a683dbfee344302b99  gcc/testsuite/gcc.target/i386/pr32708-3.c
+ 8f026c3553101ba8b337bcd3e9d60451  gcc/testsuite/gcc.target/i386/pr32803-2.c
+ 7565cd12ab46133176876d123b9bea2b  gcc/testsuite/gcc.target/i386/pr32803-3.c
  6dd4900360a5441e9509bb1c857b412e  gcc/testsuite/gcc.target/i386/pr32803.c
  10dc3d7f8f6698d02fa13e80847ac4a7  gcc/testsuite/gcc.target/i386/pr32961.c
  be0daa5b8fa10de50855aa2820b347ec  gcc/testsuite/gcc.target/i386/pr33329.c
*************** e3c923013c80e125486648e3307d19ca  gcc/te
*** 93186,93191 ****
--- 93308,93316 ----
  7db644ccdd175cb179b38dae92b1ab88  gcc/testsuite/gcc.target/i386/sse2-store-multi.c
  64142495fd35f30a44b73fe33e81d06a  gcc/testsuite/gcc.target/i386/sse2-stv-1.c
  eb452255da68355f880cada63c730531  gcc/testsuite/gcc.target/i386/sse2-stv-2.c
+ 81934d79e6df6c7fd43f1e2978ac3281  gcc/testsuite/gcc.target/i386/sse2-stv-3.c
+ 6da4abc673844a6c4f7943be5a464569  gcc/testsuite/gcc.target/i386/sse2-stv-4.c
+ 51975bf6c7ba6a98f8965708c1f07b8e  gcc/testsuite/gcc.target/i386/sse2-stv-5.c
  9be13acc473ad924e8c8d9361b6bb102  gcc/testsuite/gcc.target/i386/sse2-subpd-1.c
  27c775be57a4cec6ca0c692df6b7b073  gcc/testsuite/gcc.target/i386/sse2-subsd-1.c
  29e42097b8a8d6b6700b13e1bd99e89d  gcc/testsuite/gcc.target/i386/sse2-ucomisd-1.c
*************** ff53d68fc0f97e1b389fbdfc6b733d9e  gcc/te
*** 94093,94098 ****
--- 94218,94224 ----
  6f84ea4a3d11d3be47a589d544ec42f5  gcc/testsuite/gcc.target/loongarch/la64/sign_extend_ashift.c
  969f8c63d5313b0ef2802d00df27886a  gcc/testsuite/gcc.target/loongarch/la64/slt-sign-extend.c
  bf64f97d74ef11f20bfde63932d56667  gcc/testsuite/gcc.target/loongarch/la64/smuldi3_highpart.c
+ 4f87cb6f9c5cdacdb37781a7dd147e38  gcc/testsuite/gcc.target/loongarch/la64/spaceship.c
  2f74f2f5fe892da58b8f6baf6aa297c8  gcc/testsuite/gcc.target/loongarch/la64/spill-less.c
  803ffb89ba4bbdbdb90c999bf781d4cc  gcc/testsuite/gcc.target/loongarch/la64/sqrtf.c
  5c59a0f71afe5e1247603961548ac0fc  gcc/testsuite/gcc.target/loongarch/la64/switch-qi.c
*************** dde2cba27bc4292492e4c0dd492a70e0  gcc/te
*** 94120,94125 ****
--- 94246,94252 ----
  fb640df1e5eb969859e5c360f608dec4  gcc/testsuite/gcc.target/loongarch/pr122695-2.c
  a7b8424d31ff38e61388847501535b2d  gcc/testsuite/gcc.target/loongarch/pr123171.c
  8784ee3164375854ef7b1ffc0c536b5e  gcc/testsuite/gcc.target/loongarch/pr125049.c
+ 05cbdabe2200d4ae375dbf0dc4ff4e55  gcc/testsuite/gcc.target/loongarch/pr96692.c
  d8ba98681e844aa3cab41dadb293ad62  gcc/testsuite/gcc.target/loongarch/pragma-la64V1_1-2.c
  94f43e2ce509bac58eba454a85dd7a33  gcc/testsuite/gcc.target/loongarch/pragma-la64V1_1.c
  596c5238ab0cc321a3b51db7071941d8  gcc/testsuite/gcc.target/loongarch/regname-float-abi.c
*************** f69135840e05c772e53aa1bd017926c5  gcc/te
*** 99626,99632 ****
  9d70c1379c63763252909de831509855  gcc/testsuite/gcc.target/riscv/pr113715.c
  9bb9353191b107cdeaf920a4e0796e31  gcc/testsuite/gcc.target/riscv/pr113742.c
  bba0977f2acac23e269d463cd1b7ba52  gcc/testsuite/gcc.target/riscv/pr114087-1.c
! 3a13abdacb2f605296c9cdde148a27b7  gcc/testsuite/gcc.target/riscv/pr114139.c
  a7b01bd6393c053eb2052773c0ca4b69  gcc/testsuite/gcc.target/riscv/pr114277.c
  55a41664e9844961c91357e97dc9ba27  gcc/testsuite/gcc.target/riscv/pr114442.c
  5bbe0709a8dfddcf22a4bc65aa5e494e  gcc/testsuite/gcc.target/riscv/pr114512.c
--- 99753,99759 ----
  9d70c1379c63763252909de831509855  gcc/testsuite/gcc.target/riscv/pr113715.c
  9bb9353191b107cdeaf920a4e0796e31  gcc/testsuite/gcc.target/riscv/pr113742.c
  bba0977f2acac23e269d463cd1b7ba52  gcc/testsuite/gcc.target/riscv/pr114087-1.c
! 75e0fa8898da8525725b822c9d48fb36  gcc/testsuite/gcc.target/riscv/pr114139.c
  a7b01bd6393c053eb2052773c0ca4b69  gcc/testsuite/gcc.target/riscv/pr114277.c
  55a41664e9844961c91357e97dc9ba27  gcc/testsuite/gcc.target/riscv/pr114442.c
  5bbe0709a8dfddcf22a4bc65aa5e494e  gcc/testsuite/gcc.target/riscv/pr114512.c
*************** c89116d62c198e5c6cfee06b2eab1fe4  gcc/te
*** 99678,99684 ****
  a7cdfe664ef8616a70af588b3a79aa27  gcc/testsuite/gcc.target/riscv/pr118122.c
  8c4f6b44c5539860ac14e0e52ee563cd  gcc/testsuite/gcc.target/riscv/pr118146-1.c
  b22a15e86fb70037feb383a055b6e153  gcc/testsuite/gcc.target/riscv/pr118146-2.c
! a04df1bb92934d34ced7a6c04371bd15  gcc/testsuite/gcc.target/riscv/pr118170.c
  2bc8f4e965541e4fc96271a069a25fb6  gcc/testsuite/gcc.target/riscv/pr118241-b.cc
  a0414657daa6221b34457b2d257d1cf3  gcc/testsuite/gcc.target/riscv/pr118241.c
  8c91cf2796ff0e2ea816e9d35b520e8d  gcc/testsuite/gcc.target/riscv/pr118248.c
--- 99805,99811 ----
  a7cdfe664ef8616a70af588b3a79aa27  gcc/testsuite/gcc.target/riscv/pr118122.c
  8c4f6b44c5539860ac14e0e52ee563cd  gcc/testsuite/gcc.target/riscv/pr118146-1.c
  b22a15e86fb70037feb383a055b6e153  gcc/testsuite/gcc.target/riscv/pr118146-2.c
! 2d6d697a781fa7307a795d510300a0dc  gcc/testsuite/gcc.target/riscv/pr118170.c
  2bc8f4e965541e4fc96271a069a25fb6  gcc/testsuite/gcc.target/riscv/pr118241-b.cc
  a0414657daa6221b34457b2d257d1cf3  gcc/testsuite/gcc.target/riscv/pr118241.c
  8c91cf2796ff0e2ea816e9d35b520e8d  gcc/testsuite/gcc.target/riscv/pr118248.c
*************** f035fac0dc9b5f42ec0a469a8391163c  gcc/te
*** 99751,99756 ****
--- 99878,99885 ----
  db206807e7e87fc388e039471812c6e0  gcc/testsuite/gcc.target/riscv/pr58727.c
  ae7832d0dbfbabb51f555f2e9c3138bc  gcc/testsuite/gcc.target/riscv/pr64345.c
  9a44cd39f0fe595fcf632b001e4b7d12  gcc/testsuite/gcc.target/riscv/pr67731.c
+ 4652135af633fda87e51a6ef8d505b6d  gcc/testsuite/gcc.target/riscv/pr80770-2.c
+ e3bfbe592522e285c497fdc836c58ed3  gcc/testsuite/gcc.target/riscv/pr80770.c
  10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
  0de80b47fe4987561bbabd21726f22d9  gcc/testsuite/gcc.target/riscv/pr91420.c
  c2ac0b53d6af56f5ec5bded3d252dddc  gcc/testsuite/gcc.target/riscv/pr93202.c
*************** f2ec98071ccfe1a1f2bdf4df284cc4bf  gcc/te
*** 100643,100648 ****
--- 100772,100778 ----
  081d884e59fdb4543c2fe6b2860dada3  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123925.c
  7d8cbc2b37ba78b4c9e24546d49e35a9  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123940.c
  bae2267e4176e92d1e66908110f5381f  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr124448.c
+ 7efbbc8153da873eb1b0fe1ac3321b7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125215.c
  ee8bcba5f6876f2027f0f263f81465aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-1.c
  7ff884bfa2e6cf9bc4c6172466538515  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-10.c
  b2792e9264dcd6fa2e88f495d51677e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-11.c
*************** d64c9f6fe7344abd3299437c1ef4dfb7  gcc/te
*** 101217,101227 ****
  2ba53da72c8581d9539b778945f4cf48  gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slide-run.h
  f8dab1a5e995006acd7b3ef2dc4f2bcd  gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slidedown-run.c
  1663e10813b7026e0300785ca2de3ca6  gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slideup-run.c
- 8e40a987eb306df9e33adf3d96c885ad  gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c
- e361b814d6c1a2db0378e33bb0f45a2d  gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c
- 3576af7e98c5aa20081a56bb4b37c74d  gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c
- 3d8ed1d2f663f89bdf3b5d3e429f27f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c
- 98f34d1492ede5a23aba03f93b18969b  gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-5.c
  a0280909abc5f9c752512011a8bb99d0  gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-1.c
  7b06d48b2780f8f240246b297efe511f  gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-run-1.c
  a42b2c8e5fe521d8703afdc69ca232a8  gcc/testsuite/gcc.target/riscv/rvv/autovec/strided/strided_ld_st-1-f16.c
--- 101347,101352 ----
*************** a8f53ad5180333afb72d569d125c3922  gcc/te
*** 104468,104474 ****
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! db6ff9d4e85186271359188a0b365a35  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
--- 104593,104599 ----
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! a386969bb05f0b25b6858b649fbdf79e  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
*************** e9bcdbd172215088daea1a3b507b73b3  gcc/te
*** 104830,104835 ****
--- 104955,104968 ----
  88f7e512a5ea7d2342403292b9b1e63c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u16.c
  705eba5d5ba747ca0ed8d33d118caa0a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u32.c
  8f5b49f79c449509292db41d9e65eb55  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-1-u8-from-u64.c
+ 19ba705d80586d3db0bb4448a1c26a33  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u16.c
+ 06dfe8c4661d0ced18e6ed097b3f1e89  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u32.c
+ 2c93df5e6b7137323613ee644a63cb6a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u64.c
+ ce1f5a8c1be42c75ccca5343fdb18ad0  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u8.c
+ 634e4a4df2de63b7d07c94f303ad5625  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u16.c
+ c5af1c4d69acb1899c4adaa4e4e54343  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u32.c
+ 7a4bbe7058bc2057e480f43a1509d516  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u64.c
+ c0b5f302acd535ba23111b71087742c1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u8.c
  251cfaed4fc07574d958d0681d1dfec5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u16-from-u64.c
  5b0850fbdfe60f0c7b2f6b7451708398  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u32-from-u64.c
  6543eb493f3a5de8524d7043324fb135  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u8-from-u64.c
*************** a21a9ff681920f425633f9f241745446  gcc/te
*** 104902,104907 ****
--- 105035,105053 ----
  90a05cb7c861dbd31c9679d150765a44  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-8-u8-from-u32.c
  00c0815377e8ef9343a5e3ef13bbfc84  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-8-u8-from-u64.rv32.c
  f13ed051f5f3f0dfdd47c846125bfba1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-8-u8-from-u64.rv64.c
+ 58bc480ffe58863ff326e8cfd5b8caf1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u128.c
+ e70c7128f08c43020af981173a5f19bb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u32.c
+ 84ce4996b8a273b1f226a8d3cf775030  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv32.c
+ f512ab4ec67692341d4ac01d4b7c1e73  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv64.c
+ 67da592eb00dc0cfaef570aef5e735ce  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u128.c
+ 519375d602203553215b148e3393b31b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv32.c
+ ebd2e555be1712662090e2e49134e76d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv64.c
+ c1fdad08a7f5de2331b110ee51ca1e1c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u64-from-u128.c
+ 334bda74b06e610e52d3bdb53105aff4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u128.c
+ eeefd4dd9417ed982a3d3e6b72469e01  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u16.c
+ 1c3db9c50830a46547db584c5b8f8d15  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u32.c
+ 878606a3668b92f18f7ad8642fad0330  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv32.c
+ 05f626d468b44f0cf77d7c02102b77f6  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv64.c
  bf3cc27ddc2ea3d61c508c988cc37520  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u128.c
  e532a922f2b1c193ca39bdfa1e70bdba  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u32.c
  b343a3fe775fb03e665506a088734673  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u16-from-u64.c
*************** f7d9d657759a7857b9a1ffa3acee4898  gcc/te
*** 104912,104917 ****
--- 105058,105071 ----
  454d165b2d142ec005388001913be36b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u16.c
  631a6cbb82be1a736c10114ddc36aba7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u32.c
  2b833161e8665020db80afff90181f22  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-1-u8-from-u64.c
+ 2cf99873966294417a2879e19a767fb7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u16.c
+ 4fc32ee4ca33c4f03035d3754cf4a0b8  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u32.c
+ 24526b655105de935cfea203a2f3e0bd  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u64.c
+ e0b23d8f36e34204d803dd95ca3e4b1f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u8.c
+ 2efad29c1fa41432f799f36db723682f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u16.c
+ 93b6537da58eb066d471bb18f5e3859c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u32.c
+ d095e04dc69da9ab251a0a82497b0147  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u64.c
+ 6468a037e6bbb17ec4a42eaace9e0a40  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u8.c
  6e4e3e7e8157d61d92fd2d57b879983c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u16.c
  7c4b9349b8740bc9b8a5febcbb96897c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u32.c
  4c1f4994dcf2fb5cd55247f60b8383f3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u64.c
*************** b966a034644b939e81689459ecccac53  gcc/te
*** 104969,104974 ****
--- 105123,105138 ----
  96194d20c5d70e9b0ff95678e738305d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-8-u8-from-u16.c
  5a9f95c1554125bff5ce431a0f74a4e9  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-8-u8-from-u32.c
  601fbb518a0377a1fabd7cf270cfe3cf  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-8-u8-from-u64.c
+ e03c8bc4b5d6ab1908f00ffece51d0ad  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u128.c
+ dbbe54bceacc202bcd4dc19871852acb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u32.c
+ 8635907432fcd9738f6d1caf34c676c3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u64.c
+ 5157772e64f3ead35e33190e1d7a901b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u128.c
+ e572a7f920d586efa966b871575a3f21  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u64.c
+ c45fce028644724f2a8a7050048dd4b4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u64-from-u128.c
+ e03c8bc4b5d6ab1908f00ffece51d0ad  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u128.c
+ a2b84d9fa2095b3df223e13acb0c7283  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u16.c
+ a402aad4e4903503195a78d73c3f93bf  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u32.c
+ d5435237e4baf2c4390349825b1a8a21  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u64.c
  fdd9d0d3a36236e0472d000f8833d982  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u16.c
  e3e2bd9a544f75219a218a5520d41e4e  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u32.c
  7239f33d03967abfe59724a5530c6c52  gcc/testsuite/gcc.target/riscv/sat/sat_u_sub-1-u64.c
*************** f625b520634625396ff614b2d30226c3  gcc/te
*** 107504,107510 ****
  82b5ec1f9d9ffbe01b02c82df162e7a5  gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c
  59a988433ac941267aef52e6721b866d  gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c
  f1eebb736461b5a966e9f19ca27855c5  gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c
! 553083855fb266d0dde46053f5331304  gcc/testsuite/gcc.target/xtensa/elim_callee_saved.c
  67f6bc3272f355380928a1c0a5bf2049  gcc/testsuite/gcc.target/xtensa/funnel_shifter.c
  5dd88a67050813a2722e394515530667  gcc/testsuite/gcc.target/xtensa/mabi-call0.c
  55cb36db164b6243fa3041628937695c  gcc/testsuite/gcc.target/xtensa/mabi-windowed.c
--- 107668,107674 ----
  82b5ec1f9d9ffbe01b02c82df162e7a5  gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c
  59a988433ac941267aef52e6721b866d  gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c
  f1eebb736461b5a966e9f19ca27855c5  gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c
! 855b61e3a665e53594fcf2d64393c6a1  gcc/testsuite/gcc.target/xtensa/elim_callee_saved.c
  67f6bc3272f355380928a1c0a5bf2049  gcc/testsuite/gcc.target/xtensa/funnel_shifter.c
  5dd88a67050813a2722e394515530667  gcc/testsuite/gcc.target/xtensa/mabi-call0.c
  55cb36db164b6243fa3041628937695c  gcc/testsuite/gcc.target/xtensa/mabi-windowed.c
*************** b57006fa0a1329365a93526a47af1b48  gcc/te
*** 112091,112103 ****
  e4d3c523324e00f5ab10bffefb1a7961  gcc/testsuite/gfortran.dg/PR10018.f90
  6999a567af5689945feacbc26380e000  gcc/testsuite/gfortran.dg/PR100245.f90
  4d5838f10553515cce93c4e016158093  gcc/testsuite/gfortran.dg/PR100906.c
! d6e75fc08ee52f13c0de6ce3da087f1f  gcc/testsuite/gfortran.dg/PR100906.f90
  371d3195ffed521d08ec283c2ee1c592  gcc/testsuite/gfortran.dg/PR100911.c
! 75ed0cc3d18f054acada48afe21e0851  gcc/testsuite/gfortran.dg/PR100911.f90
  dec037af65c7ffffad780f0faaa0445b  gcc/testsuite/gfortran.dg/PR100914.c
  d02f2847d696739bb549c248f2f5c0e0  gcc/testsuite/gfortran.dg/PR100914.f90
  1f38ca1825a8f27a3875628f4e8e8a1a  gcc/testsuite/gfortran.dg/PR100915.c
! 9b9e03c9455339de9f75dc20eb5d1277  gcc/testsuite/gfortran.dg/PR100915.f90
  11916021066381562b52aae402882f24  gcc/testsuite/gfortran.dg/PR105658.f90
  17a1c9942404bfc80912fe4e937bd2c3  gcc/testsuite/gfortran.dg/PR113061.f90
  36cd9c1e3875c80db22097b9c2ad49b3  gcc/testsuite/gfortran.dg/PR19754_1.f90
--- 112255,112267 ----
  e4d3c523324e00f5ab10bffefb1a7961  gcc/testsuite/gfortran.dg/PR10018.f90
  6999a567af5689945feacbc26380e000  gcc/testsuite/gfortran.dg/PR100245.f90
  4d5838f10553515cce93c4e016158093  gcc/testsuite/gfortran.dg/PR100906.c
! 0e67008b51e349e874955708fbd760e8  gcc/testsuite/gfortran.dg/PR100906.f90
  371d3195ffed521d08ec283c2ee1c592  gcc/testsuite/gfortran.dg/PR100911.c
! 2bc05f6f01669daa6328cdfcd4e6c8c1  gcc/testsuite/gfortran.dg/PR100911.f90
  dec037af65c7ffffad780f0faaa0445b  gcc/testsuite/gfortran.dg/PR100914.c
  d02f2847d696739bb549c248f2f5c0e0  gcc/testsuite/gfortran.dg/PR100914.f90
  1f38ca1825a8f27a3875628f4e8e8a1a  gcc/testsuite/gfortran.dg/PR100915.c
! 70c703fbba8f5e3161784504833f73dc  gcc/testsuite/gfortran.dg/PR100915.f90
  11916021066381562b52aae402882f24  gcc/testsuite/gfortran.dg/PR105658.f90
  17a1c9942404bfc80912fe4e937bd2c3  gcc/testsuite/gfortran.dg/PR113061.f90
  36cd9c1e3875c80db22097b9c2ad49b3  gcc/testsuite/gfortran.dg/PR19754_1.f90
*************** c0a1896429d4819837949d22da25a4df  gcc/te
*** 112119,112127 ****
  d26f25abad3640876a175e7d83b3913d  gcc/testsuite/gfortran.dg/PR94110.f90
  0f9e38e102733af4116f60c9e27b2e43  gcc/testsuite/gfortran.dg/PR94289.f90
  ec6c2627e248e7cd023630ebd5c579e6  gcc/testsuite/gfortran.dg/PR94327.c
! 4a176ee795d68fc5126fd68994479911  gcc/testsuite/gfortran.dg/PR94327.f90
  7baef74107a5c3bc3a5d8732ab421fd2  gcc/testsuite/gfortran.dg/PR94331.c
! 93993286066f0fcc83b190890f9dc0d3  gcc/testsuite/gfortran.dg/PR94331.f90
  e15d6e343d1c32112df704ea80f4828c  gcc/testsuite/gfortran.dg/PR95196.f90
  305e1d1e4f61ec5310b18e7e89ab0af0  gcc/testsuite/gfortran.dg/PR95214.f90
  2e5825199102c5678c8a2e1cc1c02e86  gcc/testsuite/gfortran.dg/PR95331.f90
--- 112283,112291 ----
  d26f25abad3640876a175e7d83b3913d  gcc/testsuite/gfortran.dg/PR94110.f90
  0f9e38e102733af4116f60c9e27b2e43  gcc/testsuite/gfortran.dg/PR94289.f90
  ec6c2627e248e7cd023630ebd5c579e6  gcc/testsuite/gfortran.dg/PR94327.c
! 64bc3a3b891fcfc446c20a9af3ab3c11  gcc/testsuite/gfortran.dg/PR94327.f90
  7baef74107a5c3bc3a5d8732ab421fd2  gcc/testsuite/gfortran.dg/PR94331.c
! f0957a92ebb0eaeabed48d90b99f170d  gcc/testsuite/gfortran.dg/PR94331.f90
  e15d6e343d1c32112df704ea80f4828c  gcc/testsuite/gfortran.dg/PR95196.f90
  305e1d1e4f61ec5310b18e7e89ab0af0  gcc/testsuite/gfortran.dg/PR95214.f90
  2e5825199102c5678c8a2e1cc1c02e86  gcc/testsuite/gfortran.dg/PR95331.f90
*************** cb9ccf001da2d7d1cf77a7d2e9ebeed2  gcc/te
*** 112921,112927 ****
  fe8c5e542693077295c21e4aaab6c998  gcc/testsuite/gfortran.dg/bind_c_procs.f03
  55687585265263f1b2e68929e4c12de3  gcc/testsuite/gfortran.dg/bind_c_procs_2.f90
  67f38e9de2f12b98af2d4078c0fbac44  gcc/testsuite/gfortran.dg/bind_c_procs_3.f90
! 78b1fc6968a79c7bb681dddb89a57e29  gcc/testsuite/gfortran.dg/bind_c_procs_4.f90
  2cc63ce957c741a528e61122b04f0d1e  gcc/testsuite/gfortran.dg/bind_c_usage_10.f03
  a36b44815629dbcd75c464bc0fa19b07  gcc/testsuite/gfortran.dg/bind_c_usage_10_c.c
  8dafefdc5a4061f2510ef215d2b663ff  gcc/testsuite/gfortran.dg/bind_c_usage_11.f03
--- 113085,113091 ----
  fe8c5e542693077295c21e4aaab6c998  gcc/testsuite/gfortran.dg/bind_c_procs.f03
  55687585265263f1b2e68929e4c12de3  gcc/testsuite/gfortran.dg/bind_c_procs_2.f90
  67f38e9de2f12b98af2d4078c0fbac44  gcc/testsuite/gfortran.dg/bind_c_procs_3.f90
! 9048be345f2faa0107c6225fb4089888  gcc/testsuite/gfortran.dg/bind_c_procs_4.f90
  2cc63ce957c741a528e61122b04f0d1e  gcc/testsuite/gfortran.dg/bind_c_usage_10.f03
  a36b44815629dbcd75c464bc0fa19b07  gcc/testsuite/gfortran.dg/bind_c_usage_10_c.c
  8dafefdc5a4061f2510ef215d2b663ff  gcc/testsuite/gfortran.dg/bind_c_usage_11.f03
*************** f72ecac7fbcaaf2324089933afd1cb6a  gcc/te
*** 112982,113000 ****
  09d3da234a8db85d0e4b41b8d2503f9e  gcc/testsuite/gfortran.dg/binding_label_tests_22.f90
  7144a90f04af4d6a1a7e075e45988352  gcc/testsuite/gfortran.dg/binding_label_tests_23.f90
  ea7e9688dec298fa61eef31972b6c8cd  gcc/testsuite/gfortran.dg/binding_label_tests_24.f90
! 5cef22ffdd6b58d13bbab02ae5e85195  gcc/testsuite/gfortran.dg/binding_label_tests_25.f90
  ec29931f9b3f84e65c0addc59ccb39bf  gcc/testsuite/gfortran.dg/binding_label_tests_26a.f90
  9de1d1836cd7a4874225d7d11c49ce36  gcc/testsuite/gfortran.dg/binding_label_tests_26b.f90
  9dfb6e19dab1724fd7bc6c7ddd36dfeb  gcc/testsuite/gfortran.dg/binding_label_tests_27.f90
  0cc03e2fd3571908f49f70d6dabaa128  gcc/testsuite/gfortran.dg/binding_label_tests_28.f90
  fbe4a90945f5cbcde230db8b880a4d7a  gcc/testsuite/gfortran.dg/binding_label_tests_29.f90
! 3da0c43e404ea44650ab9a963fa41bee  gcc/testsuite/gfortran.dg/binding_label_tests_3.f03
  e9eb0ce619abe6c5f23f938496878cff  gcc/testsuite/gfortran.dg/binding_label_tests_30.f90
  c0d788f5fa3898fea232e169e1b1fbd0  gcc/testsuite/gfortran.dg/binding_label_tests_31.f90
  d2102c94673affc257d3e7376d873240  gcc/testsuite/gfortran.dg/binding_label_tests_32.f90
  71cba30c6667a8dc0eed115b1e1f658d  gcc/testsuite/gfortran.dg/binding_label_tests_33.f90
! 0ea77c375a124a9cf3c87ab488e29638  gcc/testsuite/gfortran.dg/binding_label_tests_34.f90
  25e8c9238196849a558c35ff0fc853f7  gcc/testsuite/gfortran.dg/binding_label_tests_35.f90
  30bf7172a6348994b72ba6a37d0e1844  gcc/testsuite/gfortran.dg/binding_label_tests_4.f03
  27695dee78547e7050f28a42fe933cf4  gcc/testsuite/gfortran.dg/binding_label_tests_5.f03
  07f203142fb7f0e2e9ab4fdd1b57c16f  gcc/testsuite/gfortran.dg/binding_label_tests_6.f03
--- 113146,113166 ----
  09d3da234a8db85d0e4b41b8d2503f9e  gcc/testsuite/gfortran.dg/binding_label_tests_22.f90
  7144a90f04af4d6a1a7e075e45988352  gcc/testsuite/gfortran.dg/binding_label_tests_23.f90
  ea7e9688dec298fa61eef31972b6c8cd  gcc/testsuite/gfortran.dg/binding_label_tests_24.f90
! cb11a9a67947514c556c7bd6bc628076  gcc/testsuite/gfortran.dg/binding_label_tests_25.f90
  ec29931f9b3f84e65c0addc59ccb39bf  gcc/testsuite/gfortran.dg/binding_label_tests_26a.f90
  9de1d1836cd7a4874225d7d11c49ce36  gcc/testsuite/gfortran.dg/binding_label_tests_26b.f90
  9dfb6e19dab1724fd7bc6c7ddd36dfeb  gcc/testsuite/gfortran.dg/binding_label_tests_27.f90
  0cc03e2fd3571908f49f70d6dabaa128  gcc/testsuite/gfortran.dg/binding_label_tests_28.f90
  fbe4a90945f5cbcde230db8b880a4d7a  gcc/testsuite/gfortran.dg/binding_label_tests_29.f90
! 92dd1fe60c6a7beadda67b88ed5954a9  gcc/testsuite/gfortran.dg/binding_label_tests_3.f03
  e9eb0ce619abe6c5f23f938496878cff  gcc/testsuite/gfortran.dg/binding_label_tests_30.f90
  c0d788f5fa3898fea232e169e1b1fbd0  gcc/testsuite/gfortran.dg/binding_label_tests_31.f90
  d2102c94673affc257d3e7376d873240  gcc/testsuite/gfortran.dg/binding_label_tests_32.f90
  71cba30c6667a8dc0eed115b1e1f658d  gcc/testsuite/gfortran.dg/binding_label_tests_33.f90
! d82ed154b6725c2bdc6ca8598e397162  gcc/testsuite/gfortran.dg/binding_label_tests_34.f90
  25e8c9238196849a558c35ff0fc853f7  gcc/testsuite/gfortran.dg/binding_label_tests_35.f90
+ 0305b1b284520ed3a5eea6c54b76d66c  gcc/testsuite/gfortran.dg/binding_label_tests_36.f90
+ 6217ed89f30703648de1cf1a0f54a5ed  gcc/testsuite/gfortran.dg/binding_label_tests_37.f90
  30bf7172a6348994b72ba6a37d0e1844  gcc/testsuite/gfortran.dg/binding_label_tests_4.f03
  27695dee78547e7050f28a42fe933cf4  gcc/testsuite/gfortran.dg/binding_label_tests_5.f03
  07f203142fb7f0e2e9ab4fdd1b57c16f  gcc/testsuite/gfortran.dg/binding_label_tests_6.f03
*************** bacc3e482af5248b7f44b5ea0c8d320b  gcc/te
*** 113362,113369 ****
  d8bc762babe74d57d0fb247c2e5852c6  gcc/testsuite/gfortran.dg/c_char_tests_2.f03
  3817f8a02101f8150abf9b047c24b5ec  gcc/testsuite/gfortran.dg/c_char_tests_3.f90
  b1a15a10e459f09791423087320a2726  gcc/testsuite/gfortran.dg/c_char_tests_3_c.c
! 8b9443962a5d756ad319eda818147b64  gcc/testsuite/gfortran.dg/c_char_tests_4.f90
! 45d76f41f3bb92d2b9a6b0586128bfaa  gcc/testsuite/gfortran.dg/c_char_tests_5.f90
  9d232d8c034e13b77a9fae602ea40c00  gcc/testsuite/gfortran.dg/c_f_pointer_complex.f03
  f1171b22010cb5ffdc5f3d7a3370bdcf  gcc/testsuite/gfortran.dg/c_f_pointer_complex_driver.c
  29c532057814482ac15d86376b90909b  gcc/testsuite/gfortran.dg/c_f_pointer_logical.f03
--- 113528,113535 ----
  d8bc762babe74d57d0fb247c2e5852c6  gcc/testsuite/gfortran.dg/c_char_tests_2.f03
  3817f8a02101f8150abf9b047c24b5ec  gcc/testsuite/gfortran.dg/c_char_tests_3.f90
  b1a15a10e459f09791423087320a2726  gcc/testsuite/gfortran.dg/c_char_tests_3_c.c
! 3900e26b9bea5675e72bb6b50fa5b354  gcc/testsuite/gfortran.dg/c_char_tests_4.f90
! 4b61b9fcc58d1062b37a54e727f85e8a  gcc/testsuite/gfortran.dg/c_char_tests_5.f90
  9d232d8c034e13b77a9fae602ea40c00  gcc/testsuite/gfortran.dg/c_f_pointer_complex.f03
  f1171b22010cb5ffdc5f3d7a3370bdcf  gcc/testsuite/gfortran.dg/c_f_pointer_complex_driver.c
  29c532057814482ac15d86376b90909b  gcc/testsuite/gfortran.dg/c_f_pointer_logical.f03
*************** beb9cfc34928bcf678412adc977ccc22  gcc/te
*** 113826,113832 ****
  d5151e59e2e1e14dc716281be617a2b7  gcc/testsuite/gfortran.dg/coarray/fail_image_1.f08
  f2e0d8eab800c2440470c47e27dbc818  gcc/testsuite/gfortran.dg/coarray/fail_image_2.f08
  f640ccf3bcb851ae00c2af7ff4249314  gcc/testsuite/gfortran.dg/coarray/failed_images_1.f08
! e8cbe43e934a13234b4f3cc1ba408856  gcc/testsuite/gfortran.dg/coarray/failed_images_2.f08
  700b4ae6eb731834c7556eefdd686a6c  gcc/testsuite/gfortran.dg/coarray/form_team_1.f90
  88d10faf7f4df40c6602b0e2d7316de4  gcc/testsuite/gfortran.dg/coarray/get_array.f90
  9f0caaf4a22d534f9336939b49630c8e  gcc/testsuite/gfortran.dg/coarray/get_team_1.f90
--- 113992,113998 ----
  d5151e59e2e1e14dc716281be617a2b7  gcc/testsuite/gfortran.dg/coarray/fail_image_1.f08
  f2e0d8eab800c2440470c47e27dbc818  gcc/testsuite/gfortran.dg/coarray/fail_image_2.f08
  f640ccf3bcb851ae00c2af7ff4249314  gcc/testsuite/gfortran.dg/coarray/failed_images_1.f08
! c4079b0b31d87982fc99bbb3ee952312  gcc/testsuite/gfortran.dg/coarray/failed_images_2.f08
  700b4ae6eb731834c7556eefdd686a6c  gcc/testsuite/gfortran.dg/coarray/form_team_1.f90
  88d10faf7f4df40c6602b0e2d7316de4  gcc/testsuite/gfortran.dg/coarray/get_array.f90
  9f0caaf4a22d534f9336939b49630c8e  gcc/testsuite/gfortran.dg/coarray/get_team_1.f90
*************** c6f860136fe695a933bc71d65019f925  gcc/te
*** 113838,113844 ****
  733aa7c8343bbc5aaaa63a38f663a43d  gcc/testsuite/gfortran.dg/coarray/image_index_2.f90
  f53ac06d9bda6a69841a8fb389e20622  gcc/testsuite/gfortran.dg/coarray/image_index_3.f90
  0e6a1e4e8399885b27ed0fa94a042e72  gcc/testsuite/gfortran.dg/coarray/image_status_1.f08
! 42bcc5933156d55c563ac2f69826f293  gcc/testsuite/gfortran.dg/coarray/image_status_2.f08
  39fd5d0aa5cb6030accb3b9880487667  gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90
  abcf811b80d48e38511f05c9f9c35ff6  gcc/testsuite/gfortran.dg/coarray/lock_1.f90
  9a1264ff54bf211495a7b8076e0a5d7c  gcc/testsuite/gfortran.dg/coarray/lock_2.f90
--- 114004,114010 ----
  733aa7c8343bbc5aaaa63a38f663a43d  gcc/testsuite/gfortran.dg/coarray/image_index_2.f90
  f53ac06d9bda6a69841a8fb389e20622  gcc/testsuite/gfortran.dg/coarray/image_index_3.f90
  0e6a1e4e8399885b27ed0fa94a042e72  gcc/testsuite/gfortran.dg/coarray/image_status_1.f08
! a33644ff49df880a86f961a6714bdb42  gcc/testsuite/gfortran.dg/coarray/image_status_2.f08
  39fd5d0aa5cb6030accb3b9880487667  gcc/testsuite/gfortran.dg/coarray/lib_realloc_1.f90
  abcf811b80d48e38511f05c9f9c35ff6  gcc/testsuite/gfortran.dg/coarray/lock_1.f90
  9a1264ff54bf211495a7b8076e0a5d7c  gcc/testsuite/gfortran.dg/coarray/lock_2.f90
*************** ddb95e7c8d989cc785d7148fe2c7ef35  gcc/te
*** 113872,113878 ****
  284655b85e1918e14f547da9c373682d  gcc/testsuite/gfortran.dg/coarray/sendget_array.f90
  08fe426f090b2a9128b4e1f3ec1a1c96  gcc/testsuite/gfortran.dg/coarray/sizeof_1.f90
  3f2217914d71b86268be06d9aa2bba67  gcc/testsuite/gfortran.dg/coarray/stopped_images_1.f08
! bf7a2fa1f93b2aeb6923c232104f3b0d  gcc/testsuite/gfortran.dg/coarray/stopped_images_2.f08
  65014d11788ada7beab1f3d854639e53  gcc/testsuite/gfortran.dg/coarray/submodule_1.f90
  7c2291ce8741b3d7e4f420982ab8a504  gcc/testsuite/gfortran.dg/coarray/subobject_1.f90
  417b7a845e117b1bb544dab90a47011c  gcc/testsuite/gfortran.dg/coarray/substring_1.f90
--- 114038,114044 ----
  284655b85e1918e14f547da9c373682d  gcc/testsuite/gfortran.dg/coarray/sendget_array.f90
  08fe426f090b2a9128b4e1f3ec1a1c96  gcc/testsuite/gfortran.dg/coarray/sizeof_1.f90
  3f2217914d71b86268be06d9aa2bba67  gcc/testsuite/gfortran.dg/coarray/stopped_images_1.f08
! d7d36cde73bbffacd89d6522c066b2b4  gcc/testsuite/gfortran.dg/coarray/stopped_images_2.f08
  65014d11788ada7beab1f3d854639e53  gcc/testsuite/gfortran.dg/coarray/submodule_1.f90
  7c2291ce8741b3d7e4f420982ab8a504  gcc/testsuite/gfortran.dg/coarray/subobject_1.f90
  417b7a845e117b1bb544dab90a47011c  gcc/testsuite/gfortran.dg/coarray/substring_1.f90
*************** bdfb211ff859c6346ab45b3805256ba0  gcc/te
*** 113929,113934 ****
--- 114095,114101 ----
  d738202832446496c200e0608392b6b9  gcc/testsuite/gfortran.dg/coarray_49.f90
  ef172e1d19584d7e55648b555dbf8fa3  gcc/testsuite/gfortran.dg/coarray_5.f90
  4d55736255408e9194fe072b21934cf9  gcc/testsuite/gfortran.dg/coarray_50.f90
+ 0b409844ed7df2f50680073de7e218bf  gcc/testsuite/gfortran.dg/coarray_51.f90
  337935b709715398df39ee0eeaaec67b  gcc/testsuite/gfortran.dg/coarray_6.f90
  8c9859e53f0764f4cc3872bb5b76dd41  gcc/testsuite/gfortran.dg/coarray_7.f90
  8ee88d8049750d443475d7289d4c08f2  gcc/testsuite/gfortran.dg/coarray_8.f90
*************** de9eeadec9703aff96169206e31a3a22  gcc/te
*** 128356,128362 ****
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! 9f7ce810d5eb057c94bcb6e692ecd40e  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
--- 128523,128529 ----
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! 7339d227a50dceaca1653d797f3f9d2d  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
*************** a4340dde4019e28f9fad54b2a7770c74  gcc/tr
*** 131134,131144 ****
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  bc74f92323ee5636997f0c03aec16115  gcc/tree-assume.cc
  a0c02d542dbd50cb44704b2ffce2739c  gcc/tree-call-cdce.cc
! 4c6383dea2657d6c52b37b717b5589db  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  004be06477b671feecb3c825f52a13d9  gcc/tree-cfgcleanup.cc
  645c34c74323c655a1d20f8f76e64b27  gcc/tree-cfgcleanup.h
! 87926ca0e9c5b40ce5574d6aa2ce245a  gcc/tree-chrec.cc
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
  a3fd0a3b7cf7687811c2d140c14f489d  gcc/tree-complex.cc
  dea74d5dd62de97a94d9f3e749f5bd06  gcc/tree-core.h
--- 131301,131311 ----
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  bc74f92323ee5636997f0c03aec16115  gcc/tree-assume.cc
  a0c02d542dbd50cb44704b2ffce2739c  gcc/tree-call-cdce.cc
! f0c9b0e9b5fa2c5658faa665fb0a2272  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  004be06477b671feecb3c825f52a13d9  gcc/tree-cfgcleanup.cc
  645c34c74323c655a1d20f8f76e64b27  gcc/tree-cfgcleanup.h
! 77991ea87c738f435f58edb91daefd74  gcc/tree-chrec.cc
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
  a3fd0a3b7cf7687811c2d140c14f489d  gcc/tree-complex.cc
  dea74d5dd62de97a94d9f3e749f5bd06  gcc/tree-core.h
*************** a24cff30baef257a999b4fac3ca47d5a  gcc/tr
*** 131186,131217 ****
  45c5e55c37764fad83ea33411f4eb348  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
  1ad5e1ab19c4386e24d5679133ee5502  gcc/tree-profile.cc
! af4bef009f21ec72eb6b4852bfde6407  gcc/tree-scalar-evolution.cc
  0ac41331ad8cbe754ee005d5ef9aff94  gcc/tree-scalar-evolution.h
! 6386c2ac578a3794d245342b702f721e  gcc/tree-sra.cc
  3c8e89a03a1e2e77a99e5b05bb2976ae  gcc/tree-sra.h
  39f64c2e1c6ae742ac610f096aa9e013  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
  fcb7975097b4ee08d301f6de516fdd62  gcc/tree-ssa-alias-compare.h
  9c20916ac2e4fdfc859f243e764d56db  gcc/tree-ssa-alias.cc
  05510947cfea397a44870db7a92b253c  gcc/tree-ssa-alias.h
! 2437152cc41a96136b237347fd24b05a  gcc/tree-ssa-ccp.cc
  00bd4ac9fa4538263509ec504e606320  gcc/tree-ssa-ccp.h
  b36c3bd52f9df56746196a0cf2b3ac14  gcc/tree-ssa-coalesce.cc
  7de85a2bd407435f95828a5c4e12f826  gcc/tree-ssa-coalesce.h
  121090f76aa83f677c00129216885e7e  gcc/tree-ssa-copy.cc
  397fa8587be3541feae34aee955f9229  gcc/tree-ssa-dce.cc
  34546de59e69d1a125c3fa7747d7f0e2  gcc/tree-ssa-dce.h
! c1c4fe85c3abe80948e72eb9950ff189  gcc/tree-ssa-dom.cc
  ec31925fe8431d27258939fc79f1f02e  gcc/tree-ssa-dom.h
  b0752286b16612fce67b55c8b0bdbdbc  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
! bde3557a4a4ed5d14b6a5136ec256ac0  gcc/tree-ssa-forwprop.cc
  bb90d30f7c6176fd9edf8b10cc7803b6  gcc/tree-ssa-ifcombine.cc
  96b11e029c398aaecd1c642c41c88884  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
  dcaeaaad1469ccb53d09d0c3975284d7  gcc/tree-ssa-loop-ch.cc
! 2b7917b8cadbc3f3b3807f67ee57a48b  gcc/tree-ssa-loop-im.cc
  f8b96abb98adf78d9bf9645ec4529541  gcc/tree-ssa-loop-ivcanon.cc
  d24792a2959758d0e543ff78a3449773  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
--- 131353,131384 ----
  45c5e55c37764fad83ea33411f4eb348  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
  1ad5e1ab19c4386e24d5679133ee5502  gcc/tree-profile.cc
! 8def679c7023ae2080f9f39c7cf30cd3  gcc/tree-scalar-evolution.cc
  0ac41331ad8cbe754ee005d5ef9aff94  gcc/tree-scalar-evolution.h
! ce9274119122c3cd5ea7c58552f62d21  gcc/tree-sra.cc
  3c8e89a03a1e2e77a99e5b05bb2976ae  gcc/tree-sra.h
  39f64c2e1c6ae742ac610f096aa9e013  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
  fcb7975097b4ee08d301f6de516fdd62  gcc/tree-ssa-alias-compare.h
  9c20916ac2e4fdfc859f243e764d56db  gcc/tree-ssa-alias.cc
  05510947cfea397a44870db7a92b253c  gcc/tree-ssa-alias.h
! 24e11f1ed0e2bb7810093e5a8d37fd61  gcc/tree-ssa-ccp.cc
  00bd4ac9fa4538263509ec504e606320  gcc/tree-ssa-ccp.h
  b36c3bd52f9df56746196a0cf2b3ac14  gcc/tree-ssa-coalesce.cc
  7de85a2bd407435f95828a5c4e12f826  gcc/tree-ssa-coalesce.h
  121090f76aa83f677c00129216885e7e  gcc/tree-ssa-copy.cc
  397fa8587be3541feae34aee955f9229  gcc/tree-ssa-dce.cc
  34546de59e69d1a125c3fa7747d7f0e2  gcc/tree-ssa-dce.h
! 0f4c141491f78cda131cc59551623f12  gcc/tree-ssa-dom.cc
  ec31925fe8431d27258939fc79f1f02e  gcc/tree-ssa-dom.h
  b0752286b16612fce67b55c8b0bdbdbc  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
! 82d1147e003412dabe820e815cdf2eed  gcc/tree-ssa-forwprop.cc
  bb90d30f7c6176fd9edf8b10cc7803b6  gcc/tree-ssa-ifcombine.cc
  96b11e029c398aaecd1c642c41c88884  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
  dcaeaaad1469ccb53d09d0c3975284d7  gcc/tree-ssa-loop-ch.cc
! 2b00d0f0fd67365a2e05a25f3a784111  gcc/tree-ssa-loop-im.cc
  f8b96abb98adf78d9bf9645ec4529541  gcc/tree-ssa-loop-ivcanon.cc
  d24792a2959758d0e543ff78a3449773  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
*************** faa18178392bba086edee765e464318c  gcc/tr
*** 131226,131234 ****
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
  895ec87fac3252b3f3cf780e31ae7020  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
! 9b5221bc2087b040736afeb799949b04  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! 3f9ddde6942294b6dc34b670fdaab66f  gcc/tree-ssa-phiopt.cc
  92ad5cbf538d0838f11679a2c649a672  gcc/tree-ssa-phiprop.cc
  e356f4c7b22c3759a86c782d5e99d1a8  gcc/tree-ssa-pre.cc
  5d6622629ccbf56551beb5cb3cc8684a  gcc/tree-ssa-propagate.cc
--- 131393,131401 ----
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
  895ec87fac3252b3f3cf780e31ae7020  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
! 56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! 93fc2d8d4a975720fc373c7c277cba39  gcc/tree-ssa-phiopt.cc
  92ad5cbf538d0838f11679a2c649a672  gcc/tree-ssa-phiprop.cc
  e356f4c7b22c3759a86c782d5e99d1a8  gcc/tree-ssa-pre.cc
  5d6622629ccbf56551beb5cb3cc8684a  gcc/tree-ssa-propagate.cc
*************** ad70c411b7d21101dac0ae7123f4d652  gcc/tr
*** 131252,131258 ****
  68901eab6fa42a8561fa69c7ce55bf1d  gcc/tree-ssa-threadedge.h
  5eaf91b9a03861ce39b4478c6bb848e9  gcc/tree-ssa-threadupdate.cc
  9a23dad40361ccf83cef995bf6f1eb7f  gcc/tree-ssa-threadupdate.h
! 1ce33c3fcece5cc997c68f1a016493d4  gcc/tree-ssa-uncprop.cc
  193675ff54e34d6c9e3f9ed273875065  gcc/tree-ssa-uninit.cc
  c85c70b5c1b24e1b76b814ae799a7ded  gcc/tree-ssa.cc
  070343f0d359685a1e4b6492f3a41e29  gcc/tree-ssa.h
--- 131419,131425 ----
  68901eab6fa42a8561fa69c7ce55bf1d  gcc/tree-ssa-threadedge.h
  5eaf91b9a03861ce39b4478c6bb848e9  gcc/tree-ssa-threadupdate.cc
  9a23dad40361ccf83cef995bf6f1eb7f  gcc/tree-ssa-threadupdate.h
! 0b038be05a994656b633b1dad37e5247  gcc/tree-ssa-uncprop.cc
  193675ff54e34d6c9e3f9ed273875065  gcc/tree-ssa-uninit.cc
  c85c70b5c1b24e1b76b814ae799a7ded  gcc/tree-ssa.cc
  070343f0d359685a1e4b6492f3a41e29  gcc/tree-ssa.h
*************** a423c268d5ba9ac563732fd6d038c572  gcc/tr
*** 131273,131284 ****
  624e853033600b79b38e595705354ec3  gcc/tree-vect-loop.cc
  ea563f2f1f50f0980e0888d5fb188c39  gcc/tree-vect-patterns.cc
  e530cc3aafb91a29f53ad4826859fa85  gcc/tree-vect-slp-patterns.cc
! aa27925f514de9edea8010a6bce18960  gcc/tree-vect-slp.cc
! 32d79b2b1344adcae6a41a02977d78ef  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
! 81d28f6819c1567e669e6b16e316ba24  gcc/tree-vectorizer.cc
! 1312d9ee5b3b4de2539f3de73db6b8c7  gcc/tree-vectorizer.h
  366e0ed463591e966ced4d1fd421282d  gcc/tree-vrp.cc
  d7273e63988959e17e61bc75f7f0cf29  gcc/tree-vrp.h
  0ce4fc85b0fe37d68fb37a7e2d4c56a8  gcc/tree.cc
--- 131440,131451 ----
  624e853033600b79b38e595705354ec3  gcc/tree-vect-loop.cc
  ea563f2f1f50f0980e0888d5fb188c39  gcc/tree-vect-patterns.cc
  e530cc3aafb91a29f53ad4826859fa85  gcc/tree-vect-slp-patterns.cc
! 71139909bba27465cd822be8bc2bf6dc  gcc/tree-vect-slp.cc
! 7aa4b46994d785b73e9a762ae8062809  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
! f0d1488584aa7165744ddc40b3d98e30  gcc/tree-vectorizer.cc
! 1c4ff57c2d14795783b43ada68bc9165  gcc/tree-vectorizer.h
  366e0ed463591e966ced4d1fd421282d  gcc/tree-vrp.cc
  d7273e63988959e17e61bc75f7f0cf29  gcc/tree-vrp.h
  0ce4fc85b0fe37d68fb37a7e2d4c56a8  gcc/tree.cc
*************** b43850588531a10c92f2edb3db6ca034  gcc/wi
*** 131338,131344 ****
  9bbcc6c5fc2143d227f9bb62f34ddaed  gcc/xml-printer.h
  36083181908ce997d5ccb6a13d6a0420  gcc/xml.cc
  d3b8c9cd116758ef43c7e9f5026f80ad  gcc/xml.h
! 16b269105785ad40c1839dea7bf507a8  gnattools/ChangeLog
  dd45099c09c4c5c5ef999f453c372b06  gnattools/Makefile.in
  69a1a2005bd16d110bd6195bdbc8bafd  gnattools/configure
  b3ae75a952de14701af7879366182965  gnattools/configure.ac
--- 131505,131511 ----
  9bbcc6c5fc2143d227f9bb62f34ddaed  gcc/xml-printer.h
  36083181908ce997d5ccb6a13d6a0420  gcc/xml.cc
  d3b8c9cd116758ef43c7e9f5026f80ad  gcc/xml.h
! dcf3f2f4e4ffd33fb3ff5cc277513014  gnattools/ChangeLog
  dd45099c09c4c5c5ef999f453c372b06  gnattools/Makefile.in
  69a1a2005bd16d110bd6195bdbc8bafd  gnattools/configure
  b3ae75a952de14701af7879366182965  gnattools/configure.ac
*************** fc49680d0c6e77e437523ea496a6b8c4  libga6
*** 132165,132173 ****
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! 572530c225979676f4e365fe651047d6  libgcc/ChangeLog
  9ce0b8c50fec68eb0555ae800e4e457e  libgcc/Makefile.in
! 4798f09612f0160996045fd2b89bb45e  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  453dd2d1f5f7e9b0683ae1c960ef7eac  libgcc/config/aarch64/__aarch64_have_sme.c
  aee2000eefb98b188a6cd051fd4e1e72  libgcc/config/aarch64/__arm_get_current_vg.S
--- 132332,132340 ----
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! 81f9ee22682d13697142774aa9d2fcaf  libgcc/ChangeLog
  9ce0b8c50fec68eb0555ae800e4e457e  libgcc/Makefile.in
! ba1ecf5f6e509462d341532b3bf23177  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  453dd2d1f5f7e9b0683ae1c960ef7eac  libgcc/config/aarch64/__aarch64_have_sme.c
  aee2000eefb98b188a6cd051fd4e1e72  libgcc/config/aarch64/__arm_get_current_vg.S
*************** d8c0cf3327ffe0d187c4b4196a025135  libgcc
*** 133161,133166 ****
--- 133328,133334 ----
  f274e1b54fc3bba9a902b6b0af5b9756  libgcc/config/pa/gthr-dce.h
  14e7d9ffefa5bee28e71d83e08d27f39  libgcc/config/pa/hpux-unwind.h
  7a1f592d3a6ac475266f16c9d21c58b6  libgcc/config/pa/lib2funcs.S
+ c10c7c3a1cef72d718114f4e0722b19c  libgcc/config/pa/libgcc-hpux.ver
  2abf2516b24fec1f4162ee3f6ea7c490  libgcc/config/pa/linux-atomic.c
  67457d355ef432c004aa26222e511eab  libgcc/config/pa/linux-unwind.h
  508ba32ca716d1f12ae4b339c1877b11  libgcc/config/pa/milli64.S
*************** be1d29d3044d55ee3e60d3e74a9e98fe  libgcc
*** 133181,133187 ****
  cb3abad4947b17ef27c99d92fdcb14ae  libgcc/config/pa/t-pa64-hpux
  8b6e1d4848a895dd9e8e030f638c68bc  libgcc/config/pa/t-pa64-linux
  6b7616abedce76aaa866d73b08ea3a07  libgcc/config/pa/t-slibgcc-dwarf-ver
! 905cd0eab77d3a7e4dfa8eec34a774c1  libgcc/config/pa/t-slibgcc-hpux
  463a4121da251ad8e53013810a31914a  libgcc/config/pa/t-slibgcc-sjlj-ver
  ce4b287e3a507cf1707205fb5c6adfe3  libgcc/config/pa/t-softfp-sfdftf
  964be72d0cacc353ffda1509b63add90  libgcc/config/pa/t-stublib
--- 133349,133356 ----
  cb3abad4947b17ef27c99d92fdcb14ae  libgcc/config/pa/t-pa64-hpux
  8b6e1d4848a895dd9e8e030f638c68bc  libgcc/config/pa/t-pa64-linux
  6b7616abedce76aaa866d73b08ea3a07  libgcc/config/pa/t-slibgcc-dwarf-ver
! eee1e89fd6468b2e087c910989e394ad  libgcc/config/pa/t-slibgcc-gld
! c8e333715ded68c9506f2bc060fb0d1b  libgcc/config/pa/t-slibgcc-hpux
  463a4121da251ad8e53013810a31914a  libgcc/config/pa/t-slibgcc-sjlj-ver
  ce4b287e3a507cf1707205fb5c6adfe3  libgcc/config/pa/t-softfp-sfdftf
  964be72d0cacc353ffda1509b63add90  libgcc/config/pa/t-stublib
*************** b7bdc64c03d62f87f61d3d8a61a75d2d  libgcc
*** 133739,133745 ****
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 293035c73298e07d852cd8f386328afa  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  2b9a0eb22401937836af2167cf0d5250  libgcobol/Makefile.am
  2f7b3f483bbf4e5b4e472e3a381cecd1  libgcobol/Makefile.in
--- 133908,133914 ----
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 9fb91cc2dbbc22a810110dae50e65082  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  2b9a0eb22401937836af2167cf0d5250  libgcobol/Makefile.am
  2f7b3f483bbf4e5b4e472e3a381cecd1  libgcobol/Makefile.in
*************** ff016a65ce3c24bdd22207044f2a126e  libgco
*** 133747,133754 ****
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  edff1d46cc8f5e3fa2007d8fede32717  libgcobol/aclocal.m4
  bc35eb1a51484849b97f6fdb7c63051e  libgcobol/charmaps.cc
! 9bd2a0017587943bc8bd8e28ff500e44  libgcobol/charmaps.h
! ff10a08007fb6269ffb47eb004d15d1e  libgcobol/common-defs.h
  6f92fa32eabcfff6e25b59104fbd9a6a  libgcobol/compat/README.md
  9724ffdf971bebe59c8b2e8708a371b3  libgcobol/compat/gnu/lib/CBL_ALLOC_MEM.cbl
  848d2a16eb4e04f66947f0a4f3388039  libgcobol/compat/gnu/lib/CBL_CHECK_FILE_EXIST.cbl
--- 133916,133923 ----
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  edff1d46cc8f5e3fa2007d8fede32717  libgcobol/aclocal.m4
  bc35eb1a51484849b97f6fdb7c63051e  libgcobol/charmaps.cc
! de778fe75c8450ce8efcd576e5775ccf  libgcobol/charmaps.h
! 1dcf42fc9d7c561272acfb97737b49bf  libgcobol/common-defs.h
  6f92fa32eabcfff6e25b59104fbd9a6a  libgcobol/compat/README.md
  9724ffdf971bebe59c8b2e8708a371b3  libgcobol/compat/gnu/lib/CBL_ALLOC_MEM.cbl
  848d2a16eb4e04f66947f0a4f3388039  libgcobol/compat/gnu/lib/CBL_CHECK_FILE_EXIST.cbl
*************** ee9716a45633fbc51fcf882ae2a28ae7  libgco
*** 133765,133781 ****
  f2c3cff1bc18796f966af4f4144b8a45  libgcobol/ec.h
  ccd6b9ba0e615b569343d61602258dad  libgcobol/encodings.h
  b3961d8aa907be49adced89cb2a1f63f  libgcobol/exceptl.h
! 3f7c50a5700055909b83076877609dbf  libgcobol/gcobolio.h
  25cd066424f46a0ff417b69c75f02c0d  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 49681d3d74ab81c08f8ab0070b881c5f  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! 63a55e7eceaeb78f4b352defaaeb429d  libgcobol/inspect.cc
! bab7c1bcf2f8983f738815d1d394b85a  libgcobol/intrinsic.cc
  2b355d9cab0ba548b859425b4149b157  libgcobol/io.cc
  e56dd1238c5d2a7eb655018f1b536b0a  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! 51572b39d0e6ea298c5bf66e376eb07c  libgcobol/libgcobol.cc
  afb8e9e7c276f9360fc31ed2e57cbbc9  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  96b721e88c5f79776cedad463373ad78  libgcobol/posix/README.md
--- 133934,133950 ----
  f2c3cff1bc18796f966af4f4144b8a45  libgcobol/ec.h
  ccd6b9ba0e615b569343d61602258dad  libgcobol/encodings.h
  b3961d8aa907be49adced89cb2a1f63f  libgcobol/exceptl.h
! 31a521e05ab21b32438d903f9b38fcad  libgcobol/gcobolio.h
  25cd066424f46a0ff417b69c75f02c0d  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 00897430ea1b64e97f25b81f45fcb4d4  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! 6331c900d11c339fd8bc0267cdf20771  libgcobol/inspect.cc
! d3ffa07ef9e8948e09339580b89f1e9c  libgcobol/intrinsic.cc
  2b355d9cab0ba548b859425b4149b157  libgcobol/io.cc
  e56dd1238c5d2a7eb655018f1b536b0a  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! 9993e9aa1f9cd10320d7b3545bc39d20  libgcobol/libgcobol.cc
  afb8e9e7c276f9360fc31ed2e57cbbc9  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  96b721e88c5f79776cedad463373ad78  libgcobol/posix/README.md
*************** b19197a360b91a408994e0794c230d8c  libgco
*** 133811,133822 ****
  b596ffc38045755f7ef0c54f1d5555a1  libgcobol/posix/udf/posix-stat.cbl
  d5f038474fd5faad3f79701cbb81bf30  libgcobol/posix/udf/posix-unlink.cbl
  22033717613b11dd6cb636ed41f4a1ad  libgcobol/posix/udf/posix-write.cbl
! 1e458f7ebad93e7bd3920c4cce7a24a2  libgcobol/stringbin.cc
  89dfd764956cfbc2affbf93a401839c9  libgcobol/stringbin.h
  9486776ee88dd841ac94aa73290a74bf  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  db95b8e503515d7615559adc1be6164a  libgcobol/xmlparse.cc
! 1d421568e1ce220b7871e6b538f2bdb4  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
--- 133980,133991 ----
  b596ffc38045755f7ef0c54f1d5555a1  libgcobol/posix/udf/posix-stat.cbl
  d5f038474fd5faad3f79701cbb81bf30  libgcobol/posix/udf/posix-unlink.cbl
  22033717613b11dd6cb636ed41f4a1ad  libgcobol/posix/udf/posix-write.cbl
! df0869fbdcd7a132ac266d2b365bf481  libgcobol/stringbin.cc
  89dfd764956cfbc2affbf93a401839c9  libgcobol/stringbin.h
  9486776ee88dd841ac94aa73290a74bf  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  db95b8e503515d7615559adc1be6164a  libgcobol/xmlparse.cc
! c3355e3ca29502e5f1ba7d967db4e000  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
*************** f19a2f7e21d9c27c667b2b50004edf9b  libgfo
*** 133851,133857 ****
  e184137391bc3069808e32155144d2ae  libgfortran/caf/caf_error.h
  6fff77d7036cbcb654bf998e6f610948  libgfortran/caf/libcaf.h
  a65e659c6604a4a7282acf69f4785519  libgfortran/caf/mpi.c
! 41b04fd6a6bdb7610c165dae58ab8276  libgfortran/caf/shmem.c
  8996a74bd946e72fa4a2088b1431661b  libgfortran/caf/shmem/alloc.c
  6f37f0a018efce4051dc559dee63e2db  libgfortran/caf/shmem/alloc.h
  3a3e2211031c2d5d1fa19a718153e14d  libgfortran/caf/shmem/allocator.c
--- 134020,134026 ----
  e184137391bc3069808e32155144d2ae  libgfortran/caf/caf_error.h
  6fff77d7036cbcb654bf998e6f610948  libgfortran/caf/libcaf.h
  a65e659c6604a4a7282acf69f4785519  libgfortran/caf/mpi.c
! 8c8cb9b2119ac512c1404c6a863e710f  libgfortran/caf/shmem.c
  8996a74bd946e72fa4a2088b1431661b  libgfortran/caf/shmem/alloc.c
  6f37f0a018efce4051dc559dee63e2db  libgfortran/caf/shmem/alloc.h
  3a3e2211031c2d5d1fa19a718153e14d  libgfortran/caf/shmem/allocator.c
*************** ac03c96ad4b3cbfce74b31610170e681  libgfo
*** 133867,133873 ****
  e9be1397d0da3e3f08e6d83986128990  libgfortran/caf/shmem/supervisor.c
  db01f2637ed2e41d8d6ed00948dec908  libgfortran/caf/shmem/supervisor.h
  c39aaa0900c27c5e6d92245f822c0dbb  libgfortran/caf/shmem/sync.c
! 52739b468071f1350f84cce9ba280624  libgfortran/caf/shmem/sync.h
  5bc507eff4211dcfd30e8c5b39b9bb89  libgfortran/caf/shmem/teams_mgmt.c
  16d5016bdd691a4b23799faf247786e1  libgfortran/caf/shmem/teams_mgmt.h
  eda47643efe7014bcad84596ff05688c  libgfortran/caf/shmem/thread_support.c
--- 134036,134042 ----
  e9be1397d0da3e3f08e6d83986128990  libgfortran/caf/shmem/supervisor.c
  db01f2637ed2e41d8d6ed00948dec908  libgfortran/caf/shmem/supervisor.h
  c39aaa0900c27c5e6d92245f822c0dbb  libgfortran/caf/shmem/sync.c
! 04d5d6e61d96dd8fc313400fb0c72bb8  libgfortran/caf/shmem/sync.h
  5bc507eff4211dcfd30e8c5b39b9bb89  libgfortran/caf/shmem/teams_mgmt.c
  16d5016bdd691a4b23799faf247786e1  libgfortran/caf/shmem/teams_mgmt.h
  eda47643efe7014bcad84596ff05688c  libgfortran/caf/shmem/thread_support.c
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 140404,140410 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! fe383f3766f970e214c2db31ce075572  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  3d8bbdea66244a10e715c52717f8a88a  libgomp/Makefile.in
--- 140573,140579 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! ecc927cf2b0bde04923d4e1599db0e85  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  3d8bbdea66244a10e715c52717f8a88a  libgomp/Makefile.in
*************** af41d1d04a4112345554ca8b8a072ed9  libgom
*** 140535,140543 ****
  907661a423c189b9a0caa0cf988acbce  libgomp/configure.ac
  0eb9aa41c92e30c6fb1494575b1c8daa  libgomp/configure.tgt
  32ee987623cb1d4e924d40431df6168d  libgomp/critical.c
! 13bc1e0c97e6d8b895e4765ba3f94df2  libgomp/env.c
  93acc4d17ce91729e01212d518bafca0  libgomp/error.c
! 7fdef7a5c3989730b49337fd7b45145e  libgomp/fortran.c
  46849b5af1169f593c12afeebfac9940  libgomp/hashtab.h
  a1605e6bc0999c90a1c4e966af584f1c  libgomp/icv-device.c
  a4cc1480c8ee441a3ccf2c250c7c0cad  libgomp/icv.c
--- 140704,140712 ----
  907661a423c189b9a0caa0cf988acbce  libgomp/configure.ac
  0eb9aa41c92e30c6fb1494575b1c8daa  libgomp/configure.tgt
  32ee987623cb1d4e924d40431df6168d  libgomp/critical.c
! 7fb84aa53b1800305cbb26a16fdc6a32  libgomp/env.c
  93acc4d17ce91729e01212d518bafca0  libgomp/error.c
! 1a8ce2ac98b5113a23ab57a7ccdd9e32  libgomp/fortran.c
  46849b5af1169f593c12afeebfac9940  libgomp/hashtab.h
  a1605e6bc0999c90a1c4e966af584f1c  libgomp/icv-device.c
  a4cc1480c8ee441a3ccf2c250c7c0cad  libgomp/icv.c
*************** e40f7f1dbaf7de3643dec21493aed6b5  libgom
*** 140546,140554 ****
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
  d766cc495352ae2f48d322e276741b80  libgomp/libgomp-plugin.h
  b2aca0a9ddcb7f277bb3b49a277b30af  libgomp/libgomp.h
! cd6a22eaa3c99a58084ad32602f087b4  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 3c638859057dd89a1a4ddd447ca58564  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
  ff283838501e7dccd0306ec2feeb4452  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
--- 140715,140723 ----
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
  d766cc495352ae2f48d322e276741b80  libgomp/libgomp-plugin.h
  b2aca0a9ddcb7f277bb3b49a277b30af  libgomp/libgomp.h
! 43269ed7f389c468d89e33445e5d1e0f  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! e8fcea77f06abd1d972facab70494b03  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
  ff283838501e7dccd0306ec2feeb4452  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
*************** cc375c43f1e535347ef5267cdbdacdab  libgom
*** 140565,140573 ****
  a09ede7d3d21d275ef33da3aeef727b7  libgomp/oacc-plugin.h
  ccc59a273af5bb87bc4287e838131e91  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! afed940a4249259fd8d66f13fd107b72  libgomp/omp.h.in
! f68a94336679cae325d7d1efd2a21587  libgomp/omp_lib.f90.in
! feb4cd5170bb13a4b22485abdc9eb761  libgomp/omp_lib.h.in
  3a0b904af6b419d48883939e83c1150c  libgomp/openacc.f90
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
--- 140734,140742 ----
  a09ede7d3d21d275ef33da3aeef727b7  libgomp/oacc-plugin.h
  ccc59a273af5bb87bc4287e838131e91  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! 536deacfb1be236f1fa616a7701f5561  libgomp/omp.h.in
! 25dabc538fd6b197e354d49a325b5e32  libgomp/omp_lib.f90.in
! 36f01be7e8af6b4ebd7c35928d5157f4  libgomp/omp_lib.h.in
  3a0b904af6b419d48883939e83c1150c  libgomp/openacc.f90
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
*************** b077f988f391c816b0a921bdc5ee6cc9  libgom
*** 141682,141687 ****
--- 141851,141857 ----
  7bcacbdfa081a8d1af605b984229645c  libgomp/testsuite/libgomp.c/nestedfn-5.c
  f7c21b673a353f09b2f8780a2e2cf556  libgomp/testsuite/libgomp.c/nestedfn-6.c
  9d67435bb7d23f87eb2527398f46dabe  libgomp/testsuite/libgomp.c/nqueens-1.c
+ 39ca1acef9d993585722946591256509  libgomp/testsuite/libgomp.c/omp-control-tools-1.c
  b2840419f7f70553698eb41dcd3bd6c6  libgomp/testsuite/libgomp.c/omp-loop01.c
  0e7290bdd83005d8b57e48c8fdbeee31  libgomp/testsuite/libgomp.c/omp-loop02.c
  8a9572f97bc43759a0119831329e9616  libgomp/testsuite/libgomp.c/omp-loop03.c
*************** bc67f38e5b5b1d2e0bceb6481561db59  libgom
*** 142272,142277 ****
--- 142442,142449 ----
  450d27c40e577d44326373374aa78fa8  libgomp/testsuite/libgomp.fortran/non-rectangular-loop-5.f90
  e55e4d88039e45885286f5121fff1fba  libgomp/testsuite/libgomp.fortran/non-rectangular-loop-6.f90
  e9e866d28e0c8de7982725a2b2235266  libgomp/testsuite/libgomp.fortran/omp-atv-seq-dep.f90
+ 8cedec7df37950bdeba4b745c84695e1  libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f
+ 7b7659b1a064db3024d26805adb356e1  libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f90
  308e04cf45923f0a4dc041fb8a3dd54c  libgomp/testsuite/libgomp.fortran/omp-default-device.f90
  3ae700ee989ce700da4bcf6ebd575e7d  libgomp/testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90
  b674994b25171d5d1759c43b2277a422  libgomp/testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90
*************** a73d560a3ba317c5ad0a7919d87b4b6d  libssp
*** 146039,146045 ****
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! fa0c6cbe53df34851a70fbca8aefefde  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 146211,146217 ----
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 90185a25ca40be9ae9c4195304d86c57  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a94321c8d0dbbc71741ebf0f1cc9828c  libstd
*** 146071,146077 ****
  9161085c79a8bf8d60641b5525f28bd7  libstdc++-v3/Makefile.am
  dbe6646c8cac125dd885d66a4fd4ce40  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 81d842b8de8e587a7d5fb793e0ee7373  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  2345fca717fc01f8c1494241d6a88e94  libstdc++-v3/config/abi/compatibility.h
--- 146243,146249 ----
  9161085c79a8bf8d60641b5525f28bd7  libstdc++-v3/Makefile.am
  dbe6646c8cac125dd885d66a4fd4ce40  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 6bf7eb4b22c3585541b19f34d787f4a2  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  2345fca717fc01f8c1494241d6a88e94  libstdc++-v3/config/abi/compatibility.h
*************** f7e6afd3479309813624b96ba52e9f11  libstd
*** 146106,146112 ****
  64c7ddb3ee44b0d3bc4a83995c1f0d96  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  d8fba4e72b3bac4b2fa939d9ec589c51  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! a24cad29110b2f3a3c21694199f177c4  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
  a2a19bba90a6663d180d5d9f7b28b623  libstdc++-v3/config/allocator/malloc_allocator_base.h
  92afc718fea5d5748cbf18f969414917  libstdc++-v3/config/allocator/new_allocator_base.h
--- 146278,146284 ----
  64c7ddb3ee44b0d3bc4a83995c1f0d96  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  d8fba4e72b3bac4b2fa939d9ec589c51  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! a52799d35af179aa140198d41ab81659  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
  a2a19bba90a6663d180d5d9f7b28b623  libstdc++-v3/config/allocator/malloc_allocator_base.h
  92afc718fea5d5748cbf18f969414917  libstdc++-v3/config/allocator/new_allocator_base.h
*************** a144795bdde388f89eb6222f0c2e4932  libstd
*** 146265,146271 ****
  53df82982400fd3d426f3fd0e0c37b54  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  a3f907fa7f71dc9eb08755c9c438accc  libstdc++-v3/config/os/vxworks/ctype_inline.h
  309bdcfd61ec9ca44671057524c081f1  libstdc++-v3/config/os/vxworks/os_defines.h
! c51771137f2cb160f9c70d9e9da2905d  libstdc++-v3/configure
  ef7d4ee8dfc656b2511fdab05020e10d  libstdc++-v3/configure.ac
  ac3c5c4c31f1e2c1f6e793bafb5f3931  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
--- 146437,146443 ----
  53df82982400fd3d426f3fd0e0c37b54  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  a3f907fa7f71dc9eb08755c9c438accc  libstdc++-v3/config/os/vxworks/ctype_inline.h
  309bdcfd61ec9ca44671057524c081f1  libstdc++-v3/config/os/vxworks/os_defines.h
! c007399a4bc5377817f8ba58875445f7  libstdc++-v3/configure
  ef7d4ee8dfc656b2511fdab05020e10d  libstdc++-v3/configure.ac
  ac3c5c4c31f1e2c1f6e793bafb5f3931  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
*************** fa05c4e39f6430965ffaf3e65ed36b7b  libstd
*** 146795,146802 ****
  b07bdc6c6cec90e9cf7a74c52af0e9fc  libstdc++-v3/include/bits/print.h
  097b3f6fff8834167e5a5eb29dc9a79c  libstdc++-v3/include/bits/ptr_traits.h
  e9057d3a64660954bf7134e2fb721b51  libstdc++-v3/include/bits/quoted_string.h
! b745abd5614b31045999aba98b3d30c4  libstdc++-v3/include/bits/random.h
! 28c93e0aed9526e3f5092fe17092e92a  libstdc++-v3/include/bits/random.tcc
  6bece5966bf565303831f4ab2d03e64f  libstdc++-v3/include/bits/range_access.h
  91a3a127b4d8b0d05094dd720c6074ae  libstdc++-v3/include/bits/ranges_algo.h
  2376637350495a1dbd9c27901ed68027  libstdc++-v3/include/bits/ranges_algobase.h
--- 146967,146974 ----
  b07bdc6c6cec90e9cf7a74c52af0e9fc  libstdc++-v3/include/bits/print.h
  097b3f6fff8834167e5a5eb29dc9a79c  libstdc++-v3/include/bits/ptr_traits.h
  e9057d3a64660954bf7134e2fb721b51  libstdc++-v3/include/bits/quoted_string.h
! 1212e8ec1e592e1298a3e4b209282cbe  libstdc++-v3/include/bits/random.h
! 9cf24bfc0529d75ef0e80efe6b8a49a9  libstdc++-v3/include/bits/random.tcc
  6bece5966bf565303831f4ab2d03e64f  libstdc++-v3/include/bits/range_access.h
  91a3a127b4d8b0d05094dd720c6074ae  libstdc++-v3/include/bits/ranges_algo.h
  2376637350495a1dbd9c27901ed68027  libstdc++-v3/include/bits/ranges_algobase.h
*************** cbd44f9447b308b0901004443db53e93  libstd
*** 146821,146827 ****
  0a8f60f26dfea4bfea0ec71fe4a45ee8  libstdc++-v3/include/bits/sat_arith.h
  39e2988a6581d891172e27c28e87c62f  libstdc++-v3/include/bits/semaphore_base.h
  b7a12ec2370990cc1497acc595d1d860  libstdc++-v3/include/bits/shared_ptr.h
! 06d870671ae35152d9e8442900c80215  libstdc++-v3/include/bits/shared_ptr_atomic.h
  1cc9b97ad3b4daebc9ebe312f1406415  libstdc++-v3/include/bits/shared_ptr_base.h
  a3287036233bd3e6387160d82f75e7dd  libstdc++-v3/include/bits/simd_alg.h
  f8b1a070b2932ca8805b08178cbccf75  libstdc++-v3/include/bits/simd_details.h
--- 146993,146999 ----
  0a8f60f26dfea4bfea0ec71fe4a45ee8  libstdc++-v3/include/bits/sat_arith.h
  39e2988a6581d891172e27c28e87c62f  libstdc++-v3/include/bits/semaphore_base.h
  b7a12ec2370990cc1497acc595d1d860  libstdc++-v3/include/bits/shared_ptr.h
! 3464ab6bcb3ccff1cae5bcff7a6eb9ca  libstdc++-v3/include/bits/shared_ptr_atomic.h
  1cc9b97ad3b4daebc9ebe312f1406415  libstdc++-v3/include/bits/shared_ptr_base.h
  a3287036233bd3e6387160d82f75e7dd  libstdc++-v3/include/bits/simd_alg.h
  f8b1a070b2932ca8805b08178cbccf75  libstdc++-v3/include/bits/simd_details.h
*************** f1c08a4c9a736109edfd3c39c60c1669  libstd
*** 147447,147453 ****
  085ec2d298f0be079b303330b81b05d1  libstdc++-v3/include/std/bit
  2f7194edee13481e4e56129caf4cc769  libstdc++-v3/include/std/bitset
  221c225c0ffb7ac1a214c4da510bfdcc  libstdc++-v3/include/std/charconv
! 98989e611da9205387d085e43e1c0604  libstdc++-v3/include/std/chrono
  6250fdc57cc9fcf4c5cc699808a8871f  libstdc++-v3/include/std/codecvt
  841a79fbef033cbe8ca8c554dc66d5b9  libstdc++-v3/include/std/complex
  48a40100ca3cd85337d3b2f0c27e0862  libstdc++-v3/include/std/concepts
--- 147619,147625 ----
  085ec2d298f0be079b303330b81b05d1  libstdc++-v3/include/std/bit
  2f7194edee13481e4e56129caf4cc769  libstdc++-v3/include/std/bitset
  221c225c0ffb7ac1a214c4da510bfdcc  libstdc++-v3/include/std/charconv
! 14b6d91c13fb07b8ce2bdcf49753a183  libstdc++-v3/include/std/chrono
  6250fdc57cc9fcf4c5cc699808a8871f  libstdc++-v3/include/std/codecvt
  841a79fbef033cbe8ca8c554dc66d5b9  libstdc++-v3/include/std/complex
  48a40100ca3cd85337d3b2f0c27e0862  libstdc++-v3/include/std/concepts
*************** a8e79cb6c591611cd6113eed355c3de6  libstd
*** 147461,147467 ****
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  f004e380db68bad2f1a8548323345a5c  libstdc++-v3/include/std/flat_map
  b384f6e8eb77f0d5747534b3ed9a89cb  libstdc++-v3/include/std/flat_set
! 4a7723bd79b4395cd143b72f24c1c5ae  libstdc++-v3/include/std/format
  7e1c7765d1205d0a0571065e7e1f111d  libstdc++-v3/include/std/forward_list
  c85826e5073be733076e4825a96a991c  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
--- 147633,147639 ----
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  f004e380db68bad2f1a8548323345a5c  libstdc++-v3/include/std/flat_map
  b384f6e8eb77f0d5747534b3ed9a89cb  libstdc++-v3/include/std/flat_set
! a5851608f400f6bf608e45d480108434  libstdc++-v3/include/std/format
  7e1c7765d1205d0a0571065e7e1f111d  libstdc++-v3/include/std/forward_list
  c85826e5073be733076e4825a96a991c  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
*************** ea0d67f29f1a73f1ccdade0115646a1c  libstd
*** 147486,147492 ****
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  98a3e25011c5fb2383b3824b1c349d43  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
! 4c6572052a559e3e5457692a1d0088fe  libstdc++-v3/include/std/optional
  bcf1c0b79e2efd9cd34763d368f40966  libstdc++-v3/include/std/ostream
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  879fbfbd4d520dc45943e6e1c095a2e7  libstdc++-v3/include/std/queue
--- 147658,147664 ----
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  98a3e25011c5fb2383b3824b1c349d43  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
! dade5ac9bf7612aceeff9e47aec2ce60  libstdc++-v3/include/std/optional
  bcf1c0b79e2efd9cd34763d368f40966  libstdc++-v3/include/std/ostream
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  879fbfbd4d520dc45943e6e1c095a2e7  libstdc++-v3/include/std/queue
*************** b3171714703fcfc5d8fe69ffe22d9cc8  libstd
*** 147504,147522 ****
  efdde6d8d883a91854d4ae616b627e53  libstdc++-v3/include/std/spanstream
  f00ff992c96a4a6422d964aad9315664  libstdc++-v3/include/std/sstream
  f5a5ebc7b6133572f8f361cde93ec52f  libstdc++-v3/include/std/stack
! 11dbc7eaf7ffced493f65f6bc3b423b1  libstdc++-v3/include/std/stacktrace
  5a01cfa5d80dcfd00d0912607effe056  libstdc++-v3/include/std/stdexcept
  1172bfca0fe1fdb144e0d95b173239d1  libstdc++-v3/include/std/stdfloat
  8000144a02174c1b4e859b4cc4af6301  libstdc++-v3/include/std/stop_token
  3773b676d041cd3a500431ae737f5859  libstdc++-v3/include/std/streambuf
  76bd18b5fc744472aa3988d57a5928c5  libstdc++-v3/include/std/string
! f1890d5dbe9c9ef672c11e6397c881b9  libstdc++-v3/include/std/string_view
  2357e8bc64ed236c453da02aa0eab3ea  libstdc++-v3/include/std/syncstream
  0574b134b5132494e9294186a6a4511c  libstdc++-v3/include/std/system_error
  3de44f0df6167a88cbfda331087cb3e8  libstdc++-v3/include/std/text_encoding
  0e55da688cfae6ed254c1328fad9c8ad  libstdc++-v3/include/std/thread
  8ef30587757a1234aab215609f1a2e45  libstdc++-v3/include/std/tuple
! 6012bdc37182602278786360b36e503b  libstdc++-v3/include/std/type_traits
  66a7939bfcb3a6f5966552f3fb49a384  libstdc++-v3/include/std/typeindex
  994522acd96f1b6084469da322d17c19  libstdc++-v3/include/std/unordered_map
  5393bc9d8b494917b25afd3714e8014a  libstdc++-v3/include/std/unordered_set
--- 147676,147694 ----
  efdde6d8d883a91854d4ae616b627e53  libstdc++-v3/include/std/spanstream
  f00ff992c96a4a6422d964aad9315664  libstdc++-v3/include/std/sstream
  f5a5ebc7b6133572f8f361cde93ec52f  libstdc++-v3/include/std/stack
! abc871e0e4ec8d271568e8ed15436075  libstdc++-v3/include/std/stacktrace
  5a01cfa5d80dcfd00d0912607effe056  libstdc++-v3/include/std/stdexcept
  1172bfca0fe1fdb144e0d95b173239d1  libstdc++-v3/include/std/stdfloat
  8000144a02174c1b4e859b4cc4af6301  libstdc++-v3/include/std/stop_token
  3773b676d041cd3a500431ae737f5859  libstdc++-v3/include/std/streambuf
  76bd18b5fc744472aa3988d57a5928c5  libstdc++-v3/include/std/string
! 509491e5cac8a7013e5627d8f49eb580  libstdc++-v3/include/std/string_view
  2357e8bc64ed236c453da02aa0eab3ea  libstdc++-v3/include/std/syncstream
  0574b134b5132494e9294186a6a4511c  libstdc++-v3/include/std/system_error
  3de44f0df6167a88cbfda331087cb3e8  libstdc++-v3/include/std/text_encoding
  0e55da688cfae6ed254c1328fad9c8ad  libstdc++-v3/include/std/thread
  8ef30587757a1234aab215609f1a2e45  libstdc++-v3/include/std/tuple
! b99e4c8ad37dc8e679d2d265354d549b  libstdc++-v3/include/std/type_traits
  66a7939bfcb3a6f5966552f3fb49a384  libstdc++-v3/include/std/typeindex
  994522acd96f1b6084469da322d17c19  libstdc++-v3/include/std/unordered_map
  5393bc9d8b494917b25afd3714e8014a  libstdc++-v3/include/std/unordered_set
*************** ce66644b3691c04e697aa707358542a6  libstd
*** 147741,147747 ****
  25a3b81b4b5eb971a8d8470bd47fbe8e  libstdc++-v3/src/c++11/cxx11-shim_facets.cc
  600b1346b044d2eb07589f44cb7698f0  libstdc++-v3/src/c++11/cxx11-stdexcept.cc
  6e32382ffd80bb5bbbbc156ee2861f1d  libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc
! e21846a4b8e55e889a574088036c66eb  libstdc++-v3/src/c++11/debug.cc
  202cfbf8413c3baa4b3db17f59b01abb  libstdc++-v3/src/c++11/ext11-inst.cc
  ba1e398802c7793fc33131cddac099d5  libstdc++-v3/src/c++11/facet_inst_macros.h
  97194c02937129aeed6783ae3c4bdb5a  libstdc++-v3/src/c++11/fstream-inst.cc
--- 147913,147919 ----
  25a3b81b4b5eb971a8d8470bd47fbe8e  libstdc++-v3/src/c++11/cxx11-shim_facets.cc
  600b1346b044d2eb07589f44cb7698f0  libstdc++-v3/src/c++11/cxx11-stdexcept.cc
  6e32382ffd80bb5bbbbc156ee2861f1d  libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc
! 9f315fa6b6d20e9eced0bcb83c0d690b  libstdc++-v3/src/c++11/debug.cc
  202cfbf8413c3baa4b3db17f59b01abb  libstdc++-v3/src/c++11/ext11-inst.cc
  ba1e398802c7793fc33131cddac099d5  libstdc++-v3/src/c++11/facet_inst_macros.h
  97194c02937129aeed6783ae3c4bdb5a  libstdc++-v3/src/c++11/fstream-inst.cc
*************** cdf9c54ab7ea85aa42bbf32b2e749913  libstd
*** 147791,147797 ****
  88af13a4cebd3e9f44449b09304147d9  libstdc++-v3/src/c++17/fast_float/README.md
  c9dcdd9b0b5c806e787dc702505f57e1  libstdc++-v3/src/c++17/fast_float/fast_float.h
  8fccfe420c4b99cdf08023a4fc8ab137  libstdc++-v3/src/c++17/floating_from_chars.cc
! deb1f4d1d9cd6c05167daf4631b56267  libstdc++-v3/src/c++17/floating_to_chars.cc
  ab713104bd5f979c12c01a7037584aa9  libstdc++-v3/src/c++17/fs_dir.cc
  22566e9052cc60799b49194e4a2296be  libstdc++-v3/src/c++17/fs_ops.cc
  9246ac24ff18dcedf681fb7ccbaa8cd5  libstdc++-v3/src/c++17/fs_path.cc
--- 147963,147969 ----
  88af13a4cebd3e9f44449b09304147d9  libstdc++-v3/src/c++17/fast_float/README.md
  c9dcdd9b0b5c806e787dc702505f57e1  libstdc++-v3/src/c++17/fast_float/fast_float.h
  8fccfe420c4b99cdf08023a4fc8ab137  libstdc++-v3/src/c++17/floating_from_chars.cc
! 66709d03438eb17097ae45fa2a7b4d0b  libstdc++-v3/src/c++17/floating_to_chars.cc
  ab713104bd5f979c12c01a7037584aa9  libstdc++-v3/src/c++17/fs_dir.cc
  22566e9052cc60799b49194e4a2296be  libstdc++-v3/src/c++17/fs_ops.cc
  9246ac24ff18dcedf681fb7ccbaa8cd5  libstdc++-v3/src/c++17/fs_path.cc
*************** c2bd27af25e57adce5807e0f01a2d0dc  libstd
*** 147824,147830 ****
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  e868493d039d86bca105c23a24b87383  libstdc++-v3/src/c++20/tzdata.zi
! d73167acef44648f9b3bbfe18e4d1b8b  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
  7c8cb4e8c454557197d2d63ced1992bb  libstdc++-v3/src/c++23/Makefile.am
  b00f9570f9f027f375c731351ae64403  libstdc++-v3/src/c++23/Makefile.in
--- 147996,148002 ----
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  e868493d039d86bca105c23a24b87383  libstdc++-v3/src/c++20/tzdata.zi
! 4526d5b5727f712b2023dd9249fd0974  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
  7c8cb4e8c454557197d2d63ced1992bb  libstdc++-v3/src/c++23/Makefile.am
  b00f9570f9f027f375c731351ae64403  libstdc++-v3/src/c++23/Makefile.in
*************** d95f197d88f9e993126e8bceebdcd7d9  libstd
*** 149540,149546 ****
  23d208ed5b68f4c9b549bc14fe374bd4  libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc
  c72624e57107b29f1eb13c16eb2177c2  libstdc++-v3/testsuite/20_util/to_chars/double.cc
  77b9817d9f7a5e3dca39a0a2eea53935  libstdc++-v3/testsuite/20_util/to_chars/float.cc
! f2e3bff0dc95d1fc0252377d79c6bfab  libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc
  21552f25095c302c5cb2c19a7b2bdb7b  libstdc++-v3/testsuite/20_util/to_chars/float16_c++23.cc
  acb76eb7a72980cee5b7227a279edcf0  libstdc++-v3/testsuite/20_util/to_chars/long_double.cc
  c92f207dea25c0cccab6330d0e64daca  libstdc++-v3/testsuite/20_util/to_chars/lwg3266.cc
--- 149712,149718 ----
  23d208ed5b68f4c9b549bc14fe374bd4  libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc
  c72624e57107b29f1eb13c16eb2177c2  libstdc++-v3/testsuite/20_util/to_chars/double.cc
  77b9817d9f7a5e3dca39a0a2eea53935  libstdc++-v3/testsuite/20_util/to_chars/float.cc
! 30e1b7674c05b51aa755a18e3d80046d  libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc
  21552f25095c302c5cb2c19a7b2bdb7b  libstdc++-v3/testsuite/20_util/to_chars/float16_c++23.cc
  acb76eb7a72980cee5b7227a279edcf0  libstdc++-v3/testsuite/20_util/to_chars/long_double.cc
  c92f207dea25c0cccab6330d0e64daca  libstdc++-v3/testsuite/20_util/to_chars/lwg3266.cc
*************** aa00adf50c193a2b13b2ebf5aa1f5858  libstd
*** 154059,154067 ****
  a8b98cfabb68398f2afafff0416479c1  libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/constants.cc
  cbc4cea209f5ae35db8b0c6b8629a43e  libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/typedefs.cc
  f1f4ab0ed3810cd825bd204d0dbc49b9  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/default.cc
  03444d296f763a2acb0e7d98052b30ce  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/initlist_fun.cc
  dd4a3cc0b7def8feaffc206507a96921  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/num_xbound_fun.cc
! d17dab8ffd2e842c2cb77f91319b2114  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc
  f6c2b36fecacfa2276753fc24e4144f1  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/call-default.cc
  ef5f5d1b895894921233f9e3cfa90cce  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/equal.cc
  cdbf0d0142e6cc9bb51bf7ecc1445b0b  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/inequal.cc
--- 154231,154240 ----
  a8b98cfabb68398f2afafff0416479c1  libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/constants.cc
  cbc4cea209f5ae35db8b0c6b8629a43e  libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/typedefs.cc
  f1f4ab0ed3810cd825bd204d0dbc49b9  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/default.cc
+ a658dadee7b50915a89760342c4b42dd  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/fallback.cc
  03444d296f763a2acb0e7d98052b30ce  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/initlist_fun.cc
  dd4a3cc0b7def8feaffc206507a96921  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/num_xbound_fun.cc
! 91fdf23221b11c2fd6e196f06fcc18b4  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc
  f6c2b36fecacfa2276753fc24e4144f1  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/call-default.cc
  ef5f5d1b895894921233f9e3cfa90cce  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/equal.cc
  cdbf0d0142e6cc9bb51bf7ecc1445b0b  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/inequal.cc
*************** f2c872e24f8164354f8bff8c6c3af918  libstd
*** 154070,154078 ****
  36f30b4c9fae68677fb2d6a08e58a181  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
  c6b9a866c77dbfde316664357479e98d  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc
  598855ac4b0d3c6499262fb43a1e0769  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/default.cc
  a9be44f1a462d60ab4b9a8b878519b0e  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/initlist_fun.cc
  f9cddab3073895c5a21c9a804f241c29  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/num_xbound_fun.cc
! 69b21ed0916209ad639baed4b1b6787a  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc
  c0eaaac68e38d63aa1bbee1838a3f166  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/call-default.cc
  9e23ce0cfe6be702a574ad1cbc36eea7  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/equal.cc
  b4ef50df6dea01750543f8888be44431  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/inequal.cc
--- 154243,154252 ----
  36f30b4c9fae68677fb2d6a08e58a181  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
  c6b9a866c77dbfde316664357479e98d  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc
  598855ac4b0d3c6499262fb43a1e0769  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/default.cc
+ a29f814eeea2d23fb92e48e0eb7d0e9e  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/fallback.cc
  a9be44f1a462d60ab4b9a8b878519b0e  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/initlist_fun.cc
  f9cddab3073895c5a21c9a804f241c29  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/num_xbound_fun.cc
! a2a6a288b97e687753bb1eee3402c8aa  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc
  c0eaaac68e38d63aa1bbee1838a3f166  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/call-default.cc
  9e23ce0cfe6be702a574ad1cbc36eea7  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/equal.cc
  b4ef50df6dea01750543f8888be44431  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/inequal.cc
*************** efcb84be5a12aa91b3606ed0a050de2f  libstd
*** 154157,154162 ****
--- 154331,154337 ----
  ba065f15aed902b5215a94e08fdd6eaa  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/equal.cc
  f1203b06f7dcfbac57b7e074233ba8fb  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon.cc
  316869129064e3da75b4d3639c05a9ff  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng.cc
+ 46d30ca8db45d6da606937c1f4916293  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng_neg.cc
  5a4f033756610029c09db4bcce859646  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/inequal.cc
  47a1c582eeebb3f94b058bb87f680102  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/serialize.cc
  05056e2e83ea550ed009a5e0b86b6894  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/explicit_instantiation/1.cc
*************** a228a2340ca9de5350db67f736edcd0b  libstd
*** 157303,157313 ****
  0ae0aa3194832d790df652a9ef7d17c7  libstdc++-v3/testsuite/std/format/arguments/lwg3810.cc
  088e48d84af728cffa21af00b37e3c04  libstdc++-v3/testsuite/std/format/context.cc
  8f6b20493386ac083a968add9dea93ac  libstdc++-v3/testsuite/std/format/debug.cc
! 4e1e1bd1eb1b2db2e9f55215527ebcd0  libstdc++-v3/testsuite/std/format/debug_nonunicode.cc
  4a9e40b038da4f2b5da7c5172bf22f04  libstdc++-v3/testsuite/std/format/dynamic_format.cc
  3f84148bfc5153a2278f3c8c413dad98  libstdc++-v3/testsuite/std/format/error.cc
  6483a22120f0c0c4849413aa1a3ab0d1  libstdc++-v3/testsuite/std/format/fill.cc
! 825c9732faf7acdc5e109278b625fd98  libstdc++-v3/testsuite/std/format/fill_nonunicode.cc
  6425de3f85b700ce40dd3b11d934ee43  libstdc++-v3/testsuite/std/format/format_string.cc
  6fa5a2c92632d72f763333e89659d4a5  libstdc++-v3/testsuite/std/format/formatter/112832.cc
  45280a2212e6fb520cb8b7465d640540  libstdc++-v3/testsuite/std/format/formatter/120625.cc
--- 157478,157488 ----
  0ae0aa3194832d790df652a9ef7d17c7  libstdc++-v3/testsuite/std/format/arguments/lwg3810.cc
  088e48d84af728cffa21af00b37e3c04  libstdc++-v3/testsuite/std/format/context.cc
  8f6b20493386ac083a968add9dea93ac  libstdc++-v3/testsuite/std/format/debug.cc
! e3df31262c7d8753a3773bc8a7289da6  libstdc++-v3/testsuite/std/format/debug_nonunicode.cc
  4a9e40b038da4f2b5da7c5172bf22f04  libstdc++-v3/testsuite/std/format/dynamic_format.cc
  3f84148bfc5153a2278f3c8c413dad98  libstdc++-v3/testsuite/std/format/error.cc
  6483a22120f0c0c4849413aa1a3ab0d1  libstdc++-v3/testsuite/std/format/fill.cc
! b5726319c3426ce133608077cf867e28  libstdc++-v3/testsuite/std/format/fill_nonunicode.cc
  6425de3f85b700ce40dd3b11d934ee43  libstdc++-v3/testsuite/std/format/format_string.cc
  6fa5a2c92632d72f763333e89659d4a5  libstdc++-v3/testsuite/std/format/formatter/112832.cc
  45280a2212e6fb520cb8b7465d640540  libstdc++-v3/testsuite/std/format/formatter/120625.cc
*************** e9ef3f2b572f799b265913487f27690b  libstd
*** 157503,157514 ****
  61f0379e50ce0e3eb792ed9d20b4460d  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
  811bf06fb6123b7a4dc922fa36ba8a06  libstdc++-v3/testsuite/std/time/clock/gps/1.cc
  e9c8ba287435179e8670bb6951a6b4fa  libstdc++-v3/testsuite/std/time/clock/gps/io.cc
! 941a1907ab341b162b852bb6373f7705  libstdc++-v3/testsuite/std/time/clock/local/io.cc
  13ae31163906c8eda2c2021c882bdc89  libstdc++-v3/testsuite/std/time/clock/system/io.cc
  b3cda48993495a5d2ff69f7f1ad2c695  libstdc++-v3/testsuite/std/time/clock/tai/1.cc
  a87e1152f6bc2804b93ce070a51eeb54  libstdc++-v3/testsuite/std/time/clock/tai/io.cc
  33b0f61f2113641c61ba5cd53d9a52a3  libstdc++-v3/testsuite/std/time/clock/utc/1.cc
  91c1a13a9f62d24541dc87bd44c15db4  libstdc++-v3/testsuite/std/time/clock/utc/io.cc
  01f8f5b7e0644716179c7a0f95af5d9d  libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc
  225275a54c046285affc36a80ea7383b  libstdc++-v3/testsuite/std/time/day/1.cc
  9b5b79c912b11d4f48e1fb35fb111742  libstdc++-v3/testsuite/std/time/day/io.cc
--- 157678,157690 ----
  61f0379e50ce0e3eb792ed9d20b4460d  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
  811bf06fb6123b7a4dc922fa36ba8a06  libstdc++-v3/testsuite/std/time/clock/gps/1.cc
  e9c8ba287435179e8670bb6951a6b4fa  libstdc++-v3/testsuite/std/time/clock/gps/io.cc
! 77ec93cc080ccfd457715516af416388  libstdc++-v3/testsuite/std/time/clock/local/io.cc
  13ae31163906c8eda2c2021c882bdc89  libstdc++-v3/testsuite/std/time/clock/system/io.cc
  b3cda48993495a5d2ff69f7f1ad2c695  libstdc++-v3/testsuite/std/time/clock/tai/1.cc
  a87e1152f6bc2804b93ce070a51eeb54  libstdc++-v3/testsuite/std/time/clock/tai/io.cc
  33b0f61f2113641c61ba5cd53d9a52a3  libstdc++-v3/testsuite/std/time/clock/utc/1.cc
  91c1a13a9f62d24541dc87bd44c15db4  libstdc++-v3/testsuite/std/time/clock/utc/io.cc
+ 16860b826f6b737af0061c60ff7736ee  libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc
  01f8f5b7e0644716179c7a0f95af5d9d  libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info.cc
  225275a54c046285affc36a80ea7383b  libstdc++-v3/testsuite/std/time/day/1.cc
  9b5b79c912b11d4f48e1fb35fb111742  libstdc++-v3/testsuite/std/time/day/io.cc
*************** f16dd4eb7915f1558b6ae75425ab2987  libstd
*** 157556,157563 ****
--- 157732,157741 ----
  e5f71dc7f2292314c0c9b06c3b8acf2e  libstdc++-v3/testsuite/std/time/time_zone/124513.cc
  f9d9d1cb483f1731762a8e5787c8020b  libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc
  5c55d9e35cb8c9c5e0a207bd53fa37d2  libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc
+ 1e7ccd27fe0a3cf8d6428f6f2710fcb9  libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc
  efdc68d548df15089ce510e6bf1c33c7  libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
  105f0ca3c8074ef3b2c1751d37ec2b96  libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
+ 57d3f5cb0b34d16a612546952b82dafa  libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc
  62c56a128f0d03b2e348296c7a54ee3f  libstdc++-v3/testsuite/std/time/traits/is_clock.cc
  3c922068cf98b21e732c0de16c319289  libstdc++-v3/testsuite/std/time/tzdb/1.cc
  c142573e06d5c52d53f0f20e1e72e973  libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
*************** f780e2fc46810f6679eec84f2dd1cf9b  libstd
*** 158292,158298 ****
  3a1096531268d7e3514024bb1e260114  libstdc++-v3/testsuite/util/statistic/sample_mean.hpp
  385ba811a55809bf13c1dab8d86fcc56  libstdc++-v3/testsuite/util/statistic/sample_mean_confidence_checker.hpp
  f030a30143a9640ad719d16f68d9bc10  libstdc++-v3/testsuite/util/statistic/sample_variance.hpp
! 8bc980f96fee411fcc6fec306068dc33  libstdc++-v3/testsuite/util/testsuite_abi.cc
  54f2a8dfb9fbcdb569726ffbe6370f23  libstdc++-v3/testsuite/util/testsuite_abi.h
  db5d5717075b7e1c4eb267257b1ee418  libstdc++-v3/testsuite/util/testsuite_abi_check.cc
  aac284c59df58716bba32e67d322c2a8  libstdc++-v3/testsuite/util/testsuite_allocator.cc
--- 158470,158476 ----
  3a1096531268d7e3514024bb1e260114  libstdc++-v3/testsuite/util/statistic/sample_mean.hpp
  385ba811a55809bf13c1dab8d86fcc56  libstdc++-v3/testsuite/util/statistic/sample_mean_confidence_checker.hpp
  f030a30143a9640ad719d16f68d9bc10  libstdc++-v3/testsuite/util/statistic/sample_variance.hpp
! d46265f9ed949404e1c5119354b95ac4  libstdc++-v3/testsuite/util/testsuite_abi.cc
  54f2a8dfb9fbcdb569726ffbe6370f23  libstdc++-v3/testsuite/util/testsuite_abi.h
  db5d5717075b7e1c4eb267257b1ee418  libstdc++-v3/testsuite/util/testsuite_abi_check.cc
  aac284c59df58716bba32e67d322c2a8  libstdc++-v3/testsuite/util/testsuite_allocator.cc
diff -Nrcpad gcc-17-20260510/contrib/ChangeLog gcc-17-20260517/contrib/ChangeLog
*** gcc-17-20260510/contrib/ChangeLog	Sun May 10 22:32:05 2026
--- gcc-17-20260517/contrib/ChangeLog	Sun May 17 22:32:04 2026
***************
*** 1,3 ****
--- 1,14 ----
+ 2026-05-12  Léo Hardt  <leom.hardt@inf.ufrgs.br>
+ 
+ 	* texi2pod.pl: Remove rule to parse the defunct @gol macro.
+ 
+ 2026-05-11  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR other/125275
+ 	* check_GNU_style_lib.py (LineLengthCheck.check): Ignore
+ 	filenames that end with .opt.
+ 	(FunctionParenthesisCheck.check): Likewise.
+ 
  2026-05-04  Iain Buclaw  <ibuclaw@gdcproject.org>
  
  	* compare-all-tests: Remove references to m32c.
diff -Nrcpad gcc-17-20260510/contrib/check_GNU_style_lib.py gcc-17-20260517/contrib/check_GNU_style_lib.py
*** gcc-17-20260510/contrib/check_GNU_style_lib.py	Sun May 10 22:32:05 2026
--- gcc-17-20260517/contrib/check_GNU_style_lib.py	Sun May 17 22:32:04 2026
*************** class LineLengthCheck:
*** 82,88 ****
  
      def check(self, filename, lineno, line):
          line_expanded = line.replace('\t', self.expanded_tab)
!         if len(line_expanded) > self.limit:
              return CheckError(filename, lineno,
                  line_expanded[:self.limit]
                      + error_string(line_expanded[self.limit:]),
--- 82,88 ----
  
      def check(self, filename, lineno, line):
          line_expanded = line.replace('\t', self.expanded_tab)
!         if not filename.endswith(".opt") and len(line_expanded) > self.limit:
              return CheckError(filename, lineno,
                  line_expanded[:self.limit]
                      + error_string(line_expanded[self.limit:]),
*************** class FunctionParenthesisCheck:
*** 167,172 ****
--- 167,175 ----
          self.re = re.compile(r'\w(\s{2,})?(\()')
  
      def check(self, filename, lineno, line):
+         if filename.endswith(".opt"):
+             return None
+ 
          if '#define' in line:
              return None
  
diff -Nrcpad gcc-17-20260510/contrib/texi2pod.pl gcc-17-20260517/contrib/texi2pod.pl
*** gcc-17-20260510/contrib/texi2pod.pl	Sun May 10 22:32:05 2026
--- gcc-17-20260517/contrib/texi2pod.pl	Sun May 17 22:32:04 2026
*************** sub postprocess
*** 416,429 ****
      # Cross references are thrown away, as are @noindent and @refill.
      # (@noindent is impossible in .pod, and @refill is unnecessary.)
      # @* is also impossible in .pod; we discard it and any newline that
!     # follows it.  Similarly, our macro @gol must be discarded.
  
      s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
      s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
      s/;\s+\@pxref\{(?:[^\}]*)\}//g;
      s/\@noindent\s*//g;
      s/\@refill//g;
-     s/\@gol//g;
      s/\@\*\s*\n?//g;
  
      # Anchors are thrown away
--- 416,428 ----
      # Cross references are thrown away, as are @noindent and @refill.
      # (@noindent is impossible in .pod, and @refill is unnecessary.)
      # @* is also impossible in .pod; we discard it and any newline that
!     # follows it.
  
      s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
      s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
      s/;\s+\@pxref\{(?:[^\}]*)\}//g;
      s/\@noindent\s*//g;
      s/\@refill//g;
      s/\@\*\s*\n?//g;
  
      # Anchors are thrown away
diff -Nrcpad gcc-17-20260510/gcc/ChangeLog gcc-17-20260517/gcc/ChangeLog
*** gcc-17-20260510/gcc/ChangeLog	Sun May 10 22:32:05 2026
--- gcc-17-20260517/gcc/ChangeLog	Sun May 17 22:32:04 2026
***************
*** 1,3 ****
--- 1,494 ----
+ 2026-05-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* match.pd (BITREVERSE): New define_operator_list.  Use it next to
+ 	BSWAP for a subset of bswap simplifications.
+ 
+ 2026-05-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* doc/extend.texi (__builtin_bitreverse32, __builtin_bitreverse64):
+ 	Tweak wording for consistency with __builtin_bswap*.
+ 	(__builtin_bitreverse128): Document.
+ 	* builtins.def (BUILT_IN_BITREVERSE128): New.
+ 	* builtins.cc (expand_builtin): Handle also BUILT_IN_BITREVERSE128.
+ 	(is_inexpensive_builtin): Likewise.
+ 	* fold-const-call.cc (fold_const_call_ss): Handle also
+ 	CFN_BUILT_IN_BITREVERSE128.
+ 	* fold-const.cc (tree_call_nonnegative_warnv_p): Likewise.
+ 	* tree-ssa-ccp.cc (evaluate_stmt): Handle also BUILT_IN_BITREVERSE128.
+ 	* tree-ssa-phiopt.cc (empty_bb_or_one_feeding_into_p): Handle also
+ 	CFN_BUILT_IN_BITREVERSE128.
+ 	(cond_removal_in_builtin_zero_pattern): Likewise.
+ 
+ 2026-05-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* tree-ssa-ccp.cc (evaluate_stmt): Fix up
+ 	BUILT_IN_BITREVERSE{8,16,32,64} handling.
+ 
+ 2026-05-16  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-features.cc (scalar_chain): If the chain
+ 	starts with a register-to-register move from a hard register,
+ 	then the hard register's defs don't need to converted.
+ 	(timode_scalar_chain::compute_convert_gain): Provide costs
+ 	for hard_reg-to-pseudo and pseudo-to-hard_reg moves.
+ 	Tweak speed cost of timode_concatdi_p moves.
+ 	(timode_scalar_chain::convert_insn): Add support for
+ 	hard_reg-to-pseudo and pseudo-to-hard_reg TImode transfers.
+ 	(timode_scalar_to_vector_candidate_p): Likewise.
+ 
+ 2026-05-16  Shivam Gupta  <shivam98.tkg@gmail.com>
+ 
+ 	PR tree-optimization/112095
+ 	* match.pd: Simplify ((~x) & y) ^ (x | y)
+ 	to x and ((~x) | y) ^ (x & y) to ~x.
+ 
+ 2026-05-16  Timo Rothenpieler  <timo@rothenpieler.org>
+ 
+ 	* config/i386/mingw-pthread.h:
+ 	rename to generic config/mingw/mingw-pthread.h
+ 	* config.gcc [aarch64-*-mingw*]:
+ 	Fix support for posix threading on aarch64 mingw targets.
+ 	* config/mingw/mingw-pthread.h: New file.
+ 
+ 2026-05-15  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-operands.cc (operands_scanner::parse_ssa_operands):
+ 	Process index of the gswitch only.
+ 
+ 2026-05-15  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125290
+ 	* tree-cfg.cc (group_case_labels_stmt): Remove code that was
+ 	added to remove `cases` that goto blocks of unreachable.
+ 	* tree-ssa-forwprop.cc (optimize_unreachable): Remove the
+ 	comment about switch cases being handled.
+ 
+ 2026-05-15  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.h (ASM_PREFERRED_EH_DATA_FORMAT): Use
+ 	DW_EH_PE_aligned encoding on 64-bit HP-UX.
+ 
+ 2026-05-15  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR rtl-optimization/125321
+ 	* function-abi.cc (function_abi_aggregator::caller_save_regs):
+ 	Return the enabled registers.
+ 
+ 2026-05-15  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR tree-optimization/125291
+ 	* tree-scalar-evolution.cc (simplify_peeled_chrec): Sign-extend
+ 	the step for peeled converted IV.
+ 
+ 2026-05-15  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/loongarch.md (spaceship<mode>4): New
+ 	define_expand.
+ 
+ 2026-05-15  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	PR target/123924
+ 	* match.pd: Allow conversions in FMA-to-FNMA fold.
+ 
+ 2026-05-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vector_costs::add_slp_cost): New.
+ 	* tree-vectorizer.cc (vector_costs::add_slp_cost): New
+ 	default version.
+ 	* tree-vect-slp.cc (add_slp_costs): Helper for dispatching
+ 	a cost vector in SLP chunks.
+ 	(vect_slp_analyze_operations): Adjust.
+ 	(li_cost_vec_cmp): Likewise.
+ 	(vect_bb_vectorization_profitable_p): Likewise.
+ 
+ 2026-05-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125296
+ 	* tree-ssa-forwprop.cc (forward_propagate_addr_expr_1):
+ 	Preserve alignment of the original access.
+ 
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/125308
+ 	* config/i386/sse.md (*minmax<mode>3_4): Force also
+ 	operands[2] into a REG.
+ 
+ 2026-05-15  Disservin  <disservin.social@gmail.com>
+ 	    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* builtin-types.def (BT_FN_UINT8_UINT8): New.
+ 	* builtins.def (BUILT_IN_BITREVERSE8, BUILT_IN_BITREVERSE16,
+ 	BUILT_IN_BITREVERSE32, BUILT_IN_BITREVERSE64): New builtins.
+ 	* builtins.cc (expand_builtin, is_inexpensive_builtin): Handle
+ 	bitreverse builtins.
+ 	* fold-const-call.cc (fold_const_call_ss): Fold bitreverse builtins.
+ 	* fold-const.cc (tree_call_nonnegative_warnv_p): Handle
+ 	bitreverse builtins.
+ 	* optabs.def (bitreverse_optab): New.
+ 	* optabs.cc (expand_bitreverse): New function.
+ 	(expand_unop): Use it for bitreverse_optab.
+ 	* tree-ssa-ccp.cc (evaluate_stmt): Handle bitreverse builtins.
+ 	* tree-ssa-phiopt.cc (empty_bb_or_one_feeding_into_p,
+ 	cond_removal_in_builtin_zero_pattern): Likewise.
+ 	* doc/extend.texi: Document __builtin_bitreverse{8,16,32,64}.
+ 	* doc/md.texi (bitreverse<mode>2): Document.
+ 
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125081
+ 	* doc/invoke.texi (Wconstant-logical-operand): Document.
+ 
+ 2026-05-14  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR target/124316
+ 	* config/i386/i386.md (ptwrite): Add explicit mode to
+ 	instruction.
+ 
+ 2026-05-14  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR rtl-optimization/96692
+ 	* config/loongarch/loongarch.md (define_split): New splitters
+ 	turning a ^ b ^ (a | c) => (c &~ a) ^ b.
+ 
+ 2026-05-14  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv-v.cc (expand_const_vector_stepped): Drop unused
+ 	SRC parameter. All callers changed.
+ 	(expand_const_vector_interleaved_stepped_npatterns): Likewise.
+ 	(expand_const_vector): Corresponding changes.
+ 
+ 2026-05-14  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	* doc/rtl.texi (Machine Modes): Update description of
+ 	GET_MODE_MASK to use HOST_BITS_PER_WIDE_INT instead of
+ 	HOST_BITS_PER_INT as the upper limit of the input mode's bitsize.
+ 
+ 2026-05-14  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* langhooks.cc (lhd_omp_deep_mapping_p, lhd_omp_deep_mapping_cnt,
+ 	lhd_omp_deep_mapping): Improve interface comment.
+ 	* langhooks.h (lhd_omp_deep_mapping_p, lhd_omp_deep_mapping_cnt,
+ 	lhd_omp_deep_mapping): Likewise
+ 
+ 2026-05-14  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/125194
+ 	* config/avr/avr.cc (avr_no_call_main_p): Remove variable...
+ 	(avr_file_end): ...and code that uses it.
+ 	(avr_insert_attributes): Same.  Add "used" to main attributes
+ 	when -mno-call-main.
+ 	* config/avr/gen-avr-mmcu-specs.cc (print_mcu): Emit code
+ 	for link_no_call_main specs.
+ 	* config/avr/specs.h (LINK_SPEC): Add %(link_no_call_main).
+ 
+ 2026-05-13  Zhongyao Chen  <chen.zhongyao@zte.com.cn>
+ 
+ 	PR target/125215
+ 	* config/riscv/riscv-v.cc (expand_const_vector_interleaved_stepped_npatterns):
+ 	Remove hi/lo optimization and always use the merge fallback.
+ 
+ 2026-05-13  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-chrec.cc (chrec_convert_1): Fold unsigned CHREC converts.
+ 
+ 2026-05-13  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/32803
+ 	* config/i386/i386.md (peephole2): Don't transform xorl;movb into
+ 	movzb with -Oz.
+ 	(peephole2): Convert movl into xorl;movb (strict_low_part) with -Oz.
+ 	(peephole2): Likewise, convert movl into xorl;movb [abcd]h with -Oz.
+ 
+ 2026-05-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.cc (vectorizable_store): Record ls_type
+ 	for VMAT_STRIDED_SLP.
+ 	(vectorizable_load): Likewise.
+ 
+ 2026-05-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.cc (vectorizable_store): Set slp_node->data
+ 	and SLP_TREE_TYPE only on success.
+ 	(vectorizable_load): Likewise.  Move one validity check early.
+ 
+ 2026-05-13  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
+ 
+ 	PR target/122665
+ 	* config/rs6000/vsx.md (smul<mode>3_highpart, umul<mode>3_highpart):
+ 	Replace shift-based patterns with smul_highpart and umul_highpart RTL
+ 	codes and use altivec_register_operand.
+ 
+ 2026-05-13  Reshma Roy  <Reshma.Roy@amd.com>
+ 
+ 	* match.pd: Add new popcount pattern variants from Hacker's Delight.
+ 
+ 2026-05-13  H.J. Lu  <hjl.tools@gmail.com>
+ 	    Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/120870
+ 	* config/i386/i386.cc (ix86_save_reg): Return true for DRAP
+ 	register early at entry.
+ 	(find_drap_reg): Use R11_REG in preserve_none functions in
+ 	64-bit mode.
+ 
+ 2026-05-13  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* omp-general.cc (omp_runtime_api_procname): Add omp_control_tool.
+ 
+ 2026-05-12  Heiko Eißfeldt  <heiko.Eissfeldt@hexco.de>
+ 
+ 	PR middle-end/124651
+ 	* gimple-warn-recursion.cc (find_function_exit):
+ 	replace recursive calls with iteration for lower stack usage
+ 
+ 2026-05-12  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa64-hpux.h (MD_EXEC_PREFIX): Define to empty
+ 	string.
+ 
+ 2026-05-12  Christopher Bazley  <chris.bazley@arm.com>
+ 
+ 	* common.opt: Add Wzero-init-padding-bits=.
+ 	* common.opt.urls: Regenerated.
+ 	* doc/invoke.texi: Document Wzero-init-padding-bits=.
+ 	* expr.cc (categorize_ctor_elements_1): Update new struct type
+ 	ctor_completeness instead of an integer to indicate presence of
+ 	padding or missing fields in a constructor. Instead of setting -1
+ 	upon discovery of padding bits in both structs and unions,
+ 	set separate flags to indicate the type of padding bits.
+ 	(categorize_ctor_elements): Update the type and documentation of
+ 	the p_complete parameter.
+ 	(mostly_zeros_p): Use new struct type ctor_completeness when
+ 	calling categorize_ctor_elements.
+ 	(all_zeros_p): Use new struct type ctor_completeness when
+ 	calling categorize_ctor_elements.
+ 	* expr.h (struct ctor_completeness): New struct type to replace an
+ 	an integer that could take the value -1 ('all fields are
+ 	initialized, but there's padding'), 0 ('fields are missing') or
+ 	1 ('all fields are initialized, and there's no padding'). Named
+ 	bool members make the code easier to understand and make room to
+ 	disambiguate struct padding bits from union padding bits.
+ 	(categorize_ctor_elements): Update the function declaration to use
+ 	the new struct type in the last parameter declaration.
+ 	* gimplify.cc (gimplify_init_constructor): Replace use of
+ 	complete_p != 0 ('all fields are initialized') with !sparse,
+ 	replace use of complete == 0 ('fields are missing') with sparse, and
+ 	replace use of complete <= 0 ('fields are missing' or 'all fields are
+ 	initialized, but there's padding') with sparse || padded_union or
+ 	padded_non_union. Trigger new warnings if storage for the object
+ 	is not zeroed but padded_union or padded_non_union is set
+ 	(because this combination implies possible non-zero padding bits).
+ 
+ 2026-05-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/124151
+ 	* tree-sra.cc (build_user_friendly_ref_for_offset): Added parameters
+ 	CUR_SIZE and EXP_SIZE.  Added code passing the correct CUR_SIZE and
+ 	checking it against EXP_SIZE.  Removed unused code for the case when
+ 	EXP_TYPE was NULL_TREE.
+ 	(create_artificial_child_access): Adjusted the call to
+ 	build_user_friendly_ref_for_offset.
+ 	(propagate_subaccesses_from_rhs): Likewise.
+ 	(propagate_subaccesses_from_rhs): Removed a check that the size of
+ 	lchild is a multiple of BITS_PER_UNIT.
+ 	(propagate_subaccesses_from_lhs): Likewise.
+ 
+ 2026-05-12  Yoshinori Sato  <yoshinori.sato@nifty.com>
+ 
+ 	PR target/113948
+ 	* config/rx/rx-protos.h (rx_split_double_move): New helper prototype.
+ 	(rx_relax_double_operands): Likewise.
+ 	* config/rx/rx.cc (rx_legitimize_address): Add expand complex case.
+ 	(rx_is_legitimate_address): Add double word case.
+ 	(rx_gen_move_template): Fix operation size in unsigned extend.
+ 	(rx_gen_move_template): Remove DImode and DFmode.
+ 	(rx_get_stack_layout): Fix for frame size calculation.
+ 	(rx_initial_elimination_offset): The calculation method has been
+ 	changed to one that supports LRA.
+ 	(rx_hard_regno_nregs): Use CEIL.
+ 	(rx_hard_regno_mode_ok): Add ATTRIBUTE_UNUSED.
+ 	(rx_get_subword): New. Double word move helper.
+ 	(rx_split_double_move): Likewise.
+ 	(rx_relax_double_operands): Likewise.
+ 	* config/rx/rx.h (reg_class): Add CC for all regsisters.
+ 	(CLASS_MAX_NREGS): Remove.
+ 	* config/rx/rx.md (mov<register_modes:mode>):
+ 	Replace copy_to_mode_reg to force_reg.
+ 	(movdi): Limit the arguments to make register allocation easier.
+ 	(movdf): Likewise.
+ 	(movdi_internal): New.
+ 	(movdf_internal): New.
+ 	(addsi3_pid): New. Handling UNSPEC_PID_ADDR.
+ 	(addsi3_lra): New. alternative addptrsi3.
+ 	(ashlsi3_lra): Likewise.
+ 
+ 2026-05-12  Lili Cui  <lili.cui@intel.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	* tree-vect-slp.cc (vect_analyze_slp_reduction): Don't bail out
+ 	early when SLP discovery limit is exhausted; only guard the chain
+ 	analysis which may build multi-lane trees.  Single-lane fallback
+ 	does not consume limit and should always be attempted.
+ 
+ 2026-05-12  Lili Cui  <lili.cui@intel.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	* tree-vect-slp.cc (vect_build_slp_tree_1): Use unified
+ 	first_commutative_argument interface to allow commutative
+ 	operand swap for both tree codes and internal functions
+ 	(e.g. .COND_ADD) in SLP reduction matching.
+ 
+ 2026-05-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.cc (get_load_store_type): Pass
+ 	temporary to vect_use_grouped_gather, only set ls_type
+ 	when that succeeded.
+ 
+ 2026-05-12  Artemiy Volkov  <artemiy.volkov@arm.com>
+ 
+ 	PR middle-end/125259
+ 	* match.pd: Fix the view_convert (BIT_FIELD_REF) pattern.
+ 
+ 2026-05-12  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* config.gcc [aarch64*-wrs-vxworks*] (tm_file): Add
+ 	aarch64/aarch64-errata.h.
+ 	* config/aarch64/aarch64-vxworks.h (LINK_SPEC): Add
+ 	AARCH64_ERRATA_LINK_SPEC.
+ 	(CC1_SPEC, CC1PLUS_SPEC): Add AARCH64_ERRATA_COMPILE_SPEC.
+ 
+ 2026-05-12  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	* fold-const-call.cc (fold_internal_fn_sat_add): New function.
+ 	(fold_const_call): Handle CFN_SAT_ADD.
+ 	* match.pd: Add simplifications for x SAT_ADD 0 == x.
+ 	* genmatch.cc (commutative_op): Add CFN_SAT_ADD.
+ 
+ 2026-05-12  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (aarch64_output_simd_mov_imm_low):
+ 	Change return type to const char *.
+ 	* config/aarch64/aarch64.cc (aarch64_output_simd_mov_imm_low): Likewise.
+ 
+ 2026-05-11  William D. Jones  <thor0505@comcast.net>
+ 
+ 	PR target/120077
+ 	* config/lm32/lm32.cc: Enable LRA after diff testing showed minimal issues.
+ 
+ 2026-05-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	* flag-types.h (gfc_fcoarray): Add GFC_FCOARRAY_SHARED.
+ 
+ 2026-05-11  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* config/xtensa/xtensa.cc
+ 	(FPreg_neg_scaled_simm12b, convert_SF_const, constantsynth_pass1,
+ 	litpool_set_src_1, litpool_set_src):
+ 	Change each call to validate_change() and apply_change_group() to
+ 	trigger an ICE if the result is not true.
+ 
+ 2026-05-11  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* config/xtensa/xtensa.cc
+ 	(xtensa_can_eliminate_callee_saved_reg_p):
+ 	Change the arguments that return values from being passed by pointer
+ 	to C++ reference.
+ 	(xtensa_expand_prologue):
+ 	Adjust the call to xtensa_can_eliminate_callee_saved_reg_p() to
+ 	match the above changes.
+ 
+ 2026-05-11  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* config/xtensa/xtensa.h (HONOR_REG_ALLOC_ORDER):
+ 	New macro definition.
+ 
+ 2026-05-11  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-tuning-flags.def
+ 	(AARCH64_EXTRA_TUNE_BASE): Add AARCH64_EXTRA_TUNE_NARROW_GP_WRITES.
+ 
+ 2026-05-11  Pan Li  <pan2.li@intel.com>
+ 
+ 	* Makefile.in: Add match-sat-alu.pd as dependency.
+ 	* match.pd: Remove saturation alu related patterns.
+ 	* match-sat-alu.pd: Add new file for saturation alu patterns.
+ 
+ 2026-05-11  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
+ 
+ 	* config/i386/cygming.h (TARGET_SEH): Keep SEH enabled for all
+ 	64-bit Windows functions when unwind tables are requested.
+ 
+ 2026-05-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125250
+ 	* tree-ssa-loop-im.cc (execute_sm): For modes that cannot
+ 	transfer bits, _Bool and bitfield accesses force the
+ 	multi-threaded model.
+ 
+ 2026-05-11  LIU Hao  <lh_mouse@126.com>
+ 
+ 	PR target/53929
+ 	* config/mingw/winnt.cc (mingw_pe_file_end): Use `ASM_OUTPUT_LABELREF`
+ 	to emit `name`.
+ 
+ 2026-05-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/125174
+ 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
+ 	Cost calls as 10 times FMA.
+ 
+ 2026-05-11  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR rtl-optimization/121426
+ 	* combine.cc (recog_for_combine_1): Reject insns which make use
+ 	of hard register constraints.
+ 
+ 2026-05-11  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h
+ 	(aarch64_output_simd_mov_imm_low): New.
+ 	(aarch64_const_vec_fmov_p): New.
+ 	* config/aarch64/aarch64-simd.md (mov<mode>): Do not expand constant
+ 	vectors handled by aarch64_const_vec_fmov_p into VDUP.
+ 	(*aarch64_simd_mov<VDMOV:mode>): Add Dc alternatives for FMOV based
+ 	SIMD constant moves.
+ 	(*aarch64_simd_mov<VQMOV:mode>): Likewise.
+ 	* config/aarch64/aarch64.cc (aarch64_const_vec_fmov_p): New function.
+ 	(aarch64_output_simd_mov_imm_low): New function.
+ 	* config/aarch64/constraints.md (Dc): New constraint.
+ 
+ 2026-05-11  Boudewijn van der Heide  <boudewijn@delta-utec.com>
+ 
+ 	PR rtl-optimization/125209
+ 	* combine.cc (make_compound_operation_int): Return NULL_RTX if we got CLOBBER.
+ 
+ 2026-05-11  Shreya Munnangi  <smunnang@qti.qualcomm.com>
+ 	    Jeff Law   <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/80770
+ 	* rtl.h (simplify_context::simplify_ior_with_common_term): Add
+ 	new method.
+ 	(simplify_context::simplify_binary_operation_1): Use new method.
+ 	* simplify-rtx.cc (simplify_context::simplify_ior_with_common_term):
+ 	New method.
+ 
+ 2026-05-10  Jørgen Kvalsvik  <j@lambda.is>
+ 
+ 	* gcov.cc (json_set_prime_path_coverage): Read arc.true_value.
+ 
+ 2026-05-10  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125238
+ 	* config/i386/i386-features.cc (ix86_broadcast_inner): Set kind
+ 	to X86_CSE_CONST_VECTOR if the vector load can be converted to
+ 	constant integer load.
+ 
  2026-05-09  Michiel Derhaeg  <Michiel.Derhaeg@synopsys.com>
  
  	PR target/125217
diff -Nrcpad gcc-17-20260510/gcc/DATESTAMP gcc-17-20260517/gcc/DATESTAMP
*** gcc-17-20260510/gcc/DATESTAMP	Sun May 10 22:32:05 2026
--- gcc-17-20260517/gcc/DATESTAMP	Sun May 17 22:32:05 2026
***************
*** 1 ****
! 20260510
--- 1 ----
! 20260517
diff -Nrcpad gcc-17-20260510/gcc/Makefile.in gcc-17-20260517/gcc/Makefile.in
*** gcc-17-20260510/gcc/Makefile.in	Sun May 10 22:32:05 2026
--- gcc-17-20260517/gcc/Makefile.in	Sun May 17 22:32:05 2026
*************** $(GENERIC_MATCH_PD_SEQ_SRC): s-generic-m
*** 3056,3062 ****
  generic-match-auto.h: s-generic-match; @true
  
  s-gimple-match: build/genmatch$(build_exeext) \
! 	    $(srcdir)/match.pd cfn-operators.pd
  	$(RUN_GEN) build/genmatch$(build_exeext) --gimple \
  	    --header=tmp-gimple-match-auto.h --include=gimple-match-auto.h \
  	    $(srcdir)/match.pd $(patsubst %, tmp-%, $(GIMPLE_MATCH_PD_SEQ_SRC))
--- 3056,3062 ----
  generic-match-auto.h: s-generic-match; @true
  
  s-gimple-match: build/genmatch$(build_exeext) \
! 	    $(srcdir)/match.pd $(srcdir)/match-sat-alu.pd cfn-operators.pd
  	$(RUN_GEN) build/genmatch$(build_exeext) --gimple \
  	    --header=tmp-gimple-match-auto.h --include=gimple-match-auto.h \
  	    $(srcdir)/match.pd $(patsubst %, tmp-%, $(GIMPLE_MATCH_PD_SEQ_SRC))
diff -Nrcpad gcc-17-20260510/gcc/ada/ChangeLog gcc-17-20260517/gcc/ada/ChangeLog
*** gcc-17-20260510/gcc/ada/ChangeLog	Sun May 10 22:32:05 2026
--- gcc-17-20260517/gcc/ada/ChangeLog	Sun May 17 22:32:05 2026
***************
*** 1,3 ****
--- 1,15 ----
+ 2026-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/125240
+ 	* gen_il-gen-gen_entities.adb (Enumeration_Kind): Make
+ 	Lit_Indexes and Lit_Strings be defined for root types only.
+ 	* einfo.ads (Lit_Hash): Adjust description.
+ 	(Lit_Indexes): Likewise.
+ 	(Lit_Strings): Likewise.
+ 	(E_Enumeration_Type): Likewise.
+ 	* exp_imgv.adb (Expand_Image_Attribute): Do not fetch the root type
+ 	for enumeration types, except for character types, and adjust.
+ 
  2026-05-03  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/125168
diff -Nrcpad gcc-17-20260510/gcc/algol68/ChangeLog gcc-17-20260517/gcc/algol68/ChangeLog
*** gcc-17-20260510/gcc/algol68/ChangeLog	Sun May 10 22:32:05 2026
--- gcc-17-20260517/gcc/algol68/ChangeLog	Sun May 17 22:32:05 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-05-10  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-parser-taxes.cc (is_mappable_routine): Remove handling of
+ 	non-implemented math functions.
+ 
  2026-05-01  Peter Damianov  <peter0x44@disroot.org>
  
  	* Make-lang.in: Correct typo exeect -> exeext
diff -Nrcpad gcc-17-20260510/gcc/builtin-types.def gcc-17-20260517/gcc/builtin-types.def
*** gcc-17-20260510/gcc/builtin-types.def	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/builtin-types.def	Sun May 17 22:32:05 2026
*************** DEF_FUNCTION_TYPE_1 (BT_FN_INT16_FLOAT,
*** 412,417 ****
--- 412,418 ----
  DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_FLOAT, BT_UINT32, BT_FLOAT)
  DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_FLOAT, BT_UINT16, BT_FLOAT)
  DEF_FUNCTION_TYPE_1 (BT_FN_UINT8_FLOAT, BT_UINT8, BT_FLOAT)
+ DEF_FUNCTION_TYPE_1 (BT_FN_UINT8_UINT8, BT_UINT8, BT_UINT8)
  DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_UINT16, BT_UINT16, BT_UINT16)
  DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_UINT32, BT_UINT32, BT_UINT32)
  DEF_FUNCTION_TYPE_1 (BT_FN_UINT64_UINT64, BT_UINT64, BT_UINT64)
diff -Nrcpad gcc-17-20260510/gcc/builtins.cc gcc-17-20260517/gcc/builtins.cc
*** gcc-17-20260510/gcc/builtins.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/builtins.cc	Sun May 17 22:32:05 2026
*************** expand_builtin (tree exp, rtx target, rt
*** 8184,8189 ****
--- 8184,8200 ----
  	return target;
        break;
  
+     case BUILT_IN_BITREVERSE8:
+     case BUILT_IN_BITREVERSE16:
+     case BUILT_IN_BITREVERSE32:
+     case BUILT_IN_BITREVERSE64:
+     case BUILT_IN_BITREVERSE128:
+       target = expand_builtin_unop (target_mode, exp, target, subtarget,
+ 				    bitreverse_optab);
+       if (target)
+ 	return target;
+       break;
+ 
      CASE_INT_FN (BUILT_IN_FFS):
        target = expand_builtin_unop (target_mode, exp, target,
  				    subtarget, ffs_optab);
*************** is_inexpensive_builtin (tree decl)
*** 12343,12348 ****
--- 12354,12364 ----
        case BUILT_IN_BSWAP32:
        case BUILT_IN_BSWAP64:
        case BUILT_IN_BSWAP128:
+       case BUILT_IN_BITREVERSE8:
+       case BUILT_IN_BITREVERSE16:
+       case BUILT_IN_BITREVERSE32:
+       case BUILT_IN_BITREVERSE64:
+       case BUILT_IN_BITREVERSE128:
        case BUILT_IN_CLZ:
        case BUILT_IN_CLZIMAX:
        case BUILT_IN_CLZL:
diff -Nrcpad gcc-17-20260510/gcc/builtins.def gcc-17-20260517/gcc/builtins.def
*** gcc-17-20260510/gcc/builtins.def	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/builtins.def	Sun May 17 22:32:05 2026
*************** DEF_GCC_BUILTIN        (BUILT_IN_BSWAP16
*** 1024,1029 ****
--- 1024,1034 ----
  DEF_GCC_BUILTIN        (BUILT_IN_BSWAP32, "bswap32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_BSWAP64, "bswap64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
  DEF_GCC_BUILTIN        (BUILT_IN_BSWAP128, "bswap128", BT_FN_UINT128_UINT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN        (BUILT_IN_BITREVERSE8, "bitreverse8", BT_FN_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN        (BUILT_IN_BITREVERSE16, "bitreverse16", BT_FN_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN        (BUILT_IN_BITREVERSE32, "bitreverse32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN        (BUILT_IN_BITREVERSE64, "bitreverse64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN        (BUILT_IN_BITREVERSE128, "bitreverse128", BT_FN_UINT128_UINT128, ATTR_CONST_NOTHROW_LEAF_LIST)
  
  DEF_EXT_LIB_BUILTIN    (BUILT_IN_CLEAR_CACHE, "__clear_cache", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
  /* [trans-mem]: Adjust BUILT_IN_TM_CALLOC if BUILT_IN_CALLOC is changed.  */
diff -Nrcpad gcc-17-20260510/gcc/c/ChangeLog gcc-17-20260517/gcc/c/ChangeLog
*** gcc-17-20260510/gcc/c/ChangeLog	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c/ChangeLog	Sun May 17 22:32:05 2026
***************
*** 1,3 ****
--- 1,32 ----
+ 2026-05-15  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR c/124532
+ 	* c-parser.cc (struct attr_state): Add reset method.
+ 	(c_parser_compound_statement_nostart): Rename a to astate.
+ 	Reset state before iterating statements.
+ 
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125081
+ 	* c-tree.h (parser_build_binary_op): Add ORIG_ARG1 argument.
+ 	* c-typeck.cc (parser_build_binary_op): Likewise.  Emit
+ 	-Wconstant-logical-operand warnings.
+ 	* c-parser.cc (c_parser_binary_expression): Adjust
+ 	parser_build_binary_op caller, pass to it the original
+ 	stack[sp - 1].expr.value before c_objc_common_truthvalue_conversion.
+ 
+ 2026-05-14  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* c-parser.cc (c_parser_omp_declare_mapper): Check that the
+ 	struct var is actually used by at least one map clause.
+ 
+ 2026-05-13  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/125261
+ 	* c-parser.cc (c_parser_generic_selection): Modify logic for
+ 	c_inhibit_evaluation_warnings.
+ 	* c-typeck.cc (build_c_cast): Use c_inhibit_evaluation_warnings.
+ 
  2026-05-06  Martin Uecker  <uecker@tugraz.at>
  
  	PR c/124985
diff -Nrcpad gcc-17-20260510/gcc/c/c-parser.cc gcc-17-20260517/gcc/c/c-parser.cc
*** gcc-17-20260510/gcc/c/c-parser.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c/c-parser.cc	Sun May 17 22:32:05 2026
*************** struct attr_state
*** 1795,1800 ****
--- 1795,1802 ----
  {
    /* True if we parsed a musttail attribute for return.  */
    bool musttail_p;
+ 
+   void reset () { musttail_p = false; }
  };
  
  static bool c_parser_nth_token_starts_std_attributes (c_parser *,
*************** c_parser_compound_statement_nostart (c_p
*** 7648,7654 ****
    bool in_omp_loop_block
      = omp_for_parse_state ? omp_for_parse_state->want_nested_loop : false;
    tree sl = NULL_TREE;
!   attr_state a = {};
  
    if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
      {
--- 7650,7656 ----
    bool in_omp_loop_block
      = omp_for_parse_state ? omp_for_parse_state->want_nested_loop : false;
    tree sl = NULL_TREE;
!   attr_state astate = {};
  
    if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
      {
*************** c_parser_compound_statement_nostart (c_p
*** 7740,7745 ****
--- 7742,7748 ----
  	      sl = push_stmt_list ();
  	      parser->error = false;
  	      before_labels = get_before_labels ();
+ 	      astate.reset ();
  	      continue;
  	    }
  	  else if (want_nested_loop
*************** c_parser_compound_statement_nostart (c_p
*** 7773,7778 ****
--- 7776,7782 ----
  		}
  	      parser->error = false;
  	      before_labels = get_before_labels ();
+ 	      astate.reset ();
  	      continue;
  	    }
  	  else if (c_parser_next_token_is (parser, CPP_SEMICOLON))
*************** c_parser_compound_statement_nostart (c_p
*** 7784,7789 ****
--- 7788,7794 ----
  	      /* FIXME:  Maybe issue a warning or something here?  */
  	      c_parser_consume_token (parser);
  	      before_labels = get_before_labels ();
+ 	      astate.reset ();
  	      continue;
  	    }
  	}
*************** c_parser_compound_statement_nostart (c_p
*** 7795,7801 ****
        if (have_std_attrs)
  	{
  	  std_attrs = c_parser_std_attribute_specifier_sequence (parser);
! 	  std_attrs = c_parser_handle_musttail (parser, std_attrs, a);
  	}
        if (c_parser_next_token_is_keyword (parser, RID_CASE)
  	  || c_parser_next_token_is_keyword (parser, RID_DEFAULT)
--- 7800,7806 ----
        if (have_std_attrs)
  	{
  	  std_attrs = c_parser_std_attribute_specifier_sequence (parser);
! 	  std_attrs = c_parser_handle_musttail (parser, std_attrs, astate);
  	}
        if (c_parser_next_token_is_keyword (parser, RID_CASE)
  	  || c_parser_next_token_is_keyword (parser, RID_DEFAULT)
*************** c_parser_compound_statement_nostart (c_p
*** 7937,7942 ****
--- 7942,7948 ----
                error_at (loc, "%<else%> without a previous %<if%>");
                c_parser_consume_token (parser);
  	      before_labels = get_before_labels ();
+ 	      astate.reset ();
                continue;
              }
          }
*************** c_parser_compound_statement_nostart (c_p
*** 7949,7955 ****
  	  mark_valid_location_for_stdc_pragma (false);
  	  if (!omp_for_parse_state)
  	    c_parser_statement_after_labels (parser, NULL, before_labels,
! 					     NULL, a);
  	  else
  	    {
  	      /* In canonical loop nest form, nested loops can only appear
--- 7955,7961 ----
  	  mark_valid_location_for_stdc_pragma (false);
  	  if (!omp_for_parse_state)
  	    c_parser_statement_after_labels (parser, NULL, before_labels,
! 					     NULL, astate);
  	  else
  	    {
  	      /* In canonical loop nest form, nested loops can only appear
*************** c_parser_compound_statement_nostart (c_p
*** 7966,7971 ****
--- 7972,7978 ----
  	}
  
        parser->error = false;
+       astate.reset ();
      }
    if (last_label)
      pedwarn_c11 (label_loc, OPT_Wfree_labels,
*************** c_parser_binary_expression (c_parser *pa
*** 10304,10309 ****
--- 10311,10319 ----
      location_t loc;
      /* The sizeof argument if expr.original_code == {PAREN_,}SIZEOF_EXPR.  */
      tree sizeof_arg;
+     /* The original expr.value before c_objc_common_truthvalue_conversion
+        for TRUTH_{AND,OR}*_EXPR lhs operands.  */
+     tree orig_expr;
    } stack[NUM_PRECS];
    int sp;
    /* Location of the binary operator.  */
*************** c_parser_binary_expression (c_parser *pa
*** 10399,10405 ****
        stack[sp - 1].expr = parser_build_binary_op (stack[sp].loc,	      \
  						   stack[sp].op,	      \
  						   stack[sp - 1].expr,	      \
! 						   stack[sp].expr);	      \
      sp--;								      \
    } while (0)
    gcc_assert (!after || c_dialect_objc ());
--- 10409,10417 ----
        stack[sp - 1].expr = parser_build_binary_op (stack[sp].loc,	      \
  						   stack[sp].op,	      \
  						   stack[sp - 1].expr,	      \
! 						   stack[sp].expr,	      \
! 						   stack[sp - 1].orig_expr);  \
!     stack[sp - 1].orig_expr = NULL_TREE;				      \
      sp--;								      \
    } while (0)
    gcc_assert (!after || c_dialect_objc ());
*************** c_parser_binary_expression (c_parser *pa
*** 10407,10412 ****
--- 10419,10425 ----
    stack[0].expr = c_parser_cast_expression (parser, after);
    stack[0].prec = PREC_NONE;
    stack[0].sizeof_arg = c_last_sizeof_arg;
+   stack[0].orig_expr = NULL_TREE;
    sp = 0;
    while (true)
      {
*************** c_parser_binary_expression (c_parser *pa
*** 10505,10510 ****
--- 10518,10524 ----
  	  stack[sp].expr
  	    = convert_lvalue_to_rvalue (stack[sp].loc,
  					stack[sp].expr, true, true);
+ 	  stack[sp].orig_expr = stack[sp].expr.value;
  	  stack[sp].expr.value = c_objc_common_truthvalue_conversion
  	    (stack[sp].loc, default_conversion (stack[sp].expr.value));
  	  c_inhibit_evaluation_warnings += (stack[sp].expr.value
*************** c_parser_binary_expression (c_parser *pa
*** 10516,10521 ****
--- 10530,10536 ----
  	  stack[sp].expr
  	    = convert_lvalue_to_rvalue (stack[sp].loc,
  					stack[sp].expr, true, true);
+ 	  stack[sp].orig_expr = stack[sp].expr.value;
  	  stack[sp].expr.value = c_objc_common_truthvalue_conversion
  	    (stack[sp].loc, default_conversion (stack[sp].expr.value));
  	  c_inhibit_evaluation_warnings += (stack[sp].expr.value
*************** c_parser_binary_expression (c_parser *pa
*** 10531,10536 ****
--- 10546,10552 ----
        stack[sp].prec = oprec;
        stack[sp].op = ocode;
        stack[sp].sizeof_arg = c_last_sizeof_arg;
+       stack[sp].orig_expr = NULL_TREE;
      }
   out:
    while (sp > 0)
*************** c_parser_generic_selection (c_parser *pa
*** 11469,11482 ****
        bool match = assoc.type == NULL_TREE
  		   || comptypes (assoc.type, selector_type);
  
!       if (!match)
  	c_inhibit_evaluation_warnings++;
        in_generic++;
  
        assoc.expression = c_parser_expr_no_commas (parser, NULL);
  
!       if (!match)
! 	  c_inhibit_evaluation_warnings--;
        in_generic--;
        if (!match)
  	pop_maybe_used (!flag_isoc23);
--- 11485,11498 ----
        bool match = assoc.type == NULL_TREE
  		   || comptypes (assoc.type, selector_type);
  
!       if (!match || matched_assoc.type != NULL_TREE)
  	c_inhibit_evaluation_warnings++;
        in_generic++;
  
        assoc.expression = c_parser_expr_no_commas (parser, NULL);
  
!       if (!match || matched_assoc.type != NULL_TREE)
! 	c_inhibit_evaluation_warnings--;
        in_generic--;
        if (!match)
  	pop_maybe_used (!flag_isoc23);
*************** c_parser_omp_declare_mapper (c_parser *p
*** 29219,29224 ****
--- 29235,29252 ----
        error_at (input_location, "missing %<map%> clause");
        goto fail;
      }
+   tree list;
+   for (list = maplist; list; list = OMP_CLAUSE_CHAIN (list))
+     {
+       tree dvar = OMP_CLAUSE_DECL (list);
+       while (!DECL_P (dvar) && TREE_OPERAND_LENGTH (dvar))
+ 	dvar = TREE_OPERAND (dvar, 0);
+       if (dvar == var)
+ 	break;
+     }
+   if (!list)
+     error_at (input_location, "at least one %<map%> clause must map %qD or an "
+ 			      "element of it", var);
  
    stmt = make_node (OMP_DECLARE_MAPPER);
    TREE_TYPE (stmt) = type;
diff -Nrcpad gcc-17-20260510/gcc/c/c-tree.h gcc-17-20260517/gcc/c/c-tree.h
*** gcc-17-20260510/gcc/c/c-tree.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c/c-tree.h	Sun May 17 22:32:05 2026
*************** extern struct c_expr parser_build_unary_
*** 890,896 ****
      					    struct c_expr);
  extern struct c_expr parser_build_binary_op (location_t,
      					     enum tree_code, struct c_expr,
! 					     struct c_expr);
  extern tree build_conditional_expr (location_t, tree, bool, tree, tree,
  				    location_t, tree, tree, location_t);
  extern tree build_compound_expr (location_t, tree, tree);
--- 890,896 ----
      					    struct c_expr);
  extern struct c_expr parser_build_binary_op (location_t,
      					     enum tree_code, struct c_expr,
! 					     struct c_expr, tree);
  extern tree build_conditional_expr (location_t, tree, bool, tree, tree,
  				    location_t, tree, tree, location_t);
  extern tree build_compound_expr (location_t, tree, tree);
diff -Nrcpad gcc-17-20260510/gcc/c/c-typeck.cc gcc-17-20260517/gcc/c/c-typeck.cc
*** gcc-17-20260510/gcc/c/c-typeck.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c/c-typeck.cc	Sun May 17 22:32:05 2026
*************** char_type_p (tree type)
*** 5112,5124 ****
     in the input.  CODE, a tree_code, specifies the binary operator, and
     ARG1 and ARG2 are the operands.  In addition to constructing the
     expression, we check for operands that were written with other binary
!    operators in a way that is likely to confuse the user.
  
     LOCATION is the location of the binary operator.  */
  
  struct c_expr
  parser_build_binary_op (location_t location, enum tree_code code,
! 			struct c_expr arg1, struct c_expr arg2)
  {
    struct c_expr result;
    result.m_decimal = 0;
--- 5112,5126 ----
     in the input.  CODE, a tree_code, specifies the binary operator, and
     ARG1 and ARG2 are the operands.  In addition to constructing the
     expression, we check for operands that were written with other binary
!    operators in a way that is likely to confuse the user.  ORIG_ARG1 is
!    the original first operand for TRUTH_{AND,OR}IF_EXPR before it is
!    converted to truth value, otherwise NULL_TREE.
  
     LOCATION is the location of the binary operator.  */
  
  struct c_expr
  parser_build_binary_op (location_t location, enum tree_code code,
! 			struct c_expr arg1, struct c_expr arg2, tree orig_arg1)
  {
    struct c_expr result;
    result.m_decimal = 0;
*************** parser_build_binary_op (location_t locat
*** 5163,5168 ****
--- 5165,5207 ----
      warn_logical_operator (location, code, TREE_TYPE (result.value),
  			   code1, arg1.value, code2, arg2.value);
  
+   if (warn_constant_logical_operand
+       && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
+       && INTEGRAL_NB_TYPE_P (type1)
+       && INTEGRAL_NB_TYPE_P (type2))
+     {
+       const char *name = code == TRUTH_ANDIF_EXPR ? "&&" : "||";
+       if (orig_arg1 == NULL_TREE)
+ 	orig_arg1 = arg1.value;
+       auto enum_other_than_0_1 = [] (tree type) {
+ 	if (TREE_CODE (type) != ENUMERAL_TYPE)
+ 	  return false;
+ 	for (tree l = TYPE_VALUES (type); l; l = TREE_CHAIN (l))
+ 	  {
+ 	    tree v = DECL_INITIAL (TREE_VALUE (l));
+ 	    if (!integer_zerop (v) && !integer_onep (v))
+ 	      return true;
+ 	  }
+ 	return false;
+       };
+       auto diagnose_constant_logical_operand = [=] (tree val, tree type) {
+ 	if (TREE_CODE (val) != INTEGER_CST || integer_zerop (val))
+ 	  return false;
+ 	if (integer_onep (val) && !enum_other_than_0_1 (type))
+ 	  return false;
+ 	gcc_rich_location richloc (location);
+ 	richloc.add_fixit_replace (name + 1);
+ 	auto_diagnostic_group d;
+ 	if (warning_at (location, OPT_Wconstant_logical_operand,
+ 			"use of logical %qs with constant operand %qE",
+ 			name, val))
+ 	  inform (&richloc, "use %qs for bitwise operation", name + 1);
+ 	return true;
+       };
+       if (!diagnose_constant_logical_operand (arg2.value, type2))
+ 	diagnose_constant_logical_operand (orig_arg1, type1);
+     }
+ 
    if (warn_tautological_compare)
      {
        tree lhs = arg1.value;
*************** build_c_cast (location_t loc, tree type,
*** 7417,7423 ****
  	  && pedwarn (loc, OPT_Wpedantic,
  		      "ISO C forbids casting nonscalar to the same type"))
  	      ;
!       else if (warn_useless_cast)
  	warning_at (loc, OPT_Wuseless_cast,
  		    "useless cast to type %qT", type);
  
--- 7456,7462 ----
  	  && pedwarn (loc, OPT_Wpedantic,
  		      "ISO C forbids casting nonscalar to the same type"))
  	      ;
!       else if (warn_useless_cast && c_inhibit_evaluation_warnings == 0)
  	warning_at (loc, OPT_Wuseless_cast,
  		    "useless cast to type %qT", type);
  
diff -Nrcpad gcc-17-20260510/gcc/c-family/ChangeLog gcc-17-20260517/gcc/c-family/ChangeLog
*** gcc-17-20260510/gcc/c-family/ChangeLog	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c-family/ChangeLog	Sun May 17 22:32:05 2026
***************
*** 1,3 ****
--- 1,19 ----
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125081
+ 	* c.opt (Wconstant-logical-operand): New option.
+ 	* c.opt.urls: Regenerate.
+ 
+ 2026-05-14  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* c-omp.cc (omp_map_decayed_kind): Handle map modifiers
+ 	also for declare-mapper's map clauses.
+ 
+ 2026-05-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/124621
+ 	* c-common.cc (user_facing_original_type_p): Recurse.
+ 
  2026-05-04  H.J. Lu  <hjl.tools@gmail.com>
  
  	PR c/121911
diff -Nrcpad gcc-17-20260510/gcc/c-family/c-common.cc gcc-17-20260517/gcc/c-family/c-common.cc
*** gcc-17-20260510/gcc/c-family/c-common.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c-family/c-common.cc	Sun May 17 22:32:05 2026
*************** user_facing_original_type_p (const_tree
*** 9066,9071 ****
--- 9066,9074 ----
      if (!name_reserved_for_implementation_p (IDENTIFIER_POINTER (orig_id)))
        return true;
  
+   if (typedef_variant_p (orig_type))
+     return user_facing_original_type_p (orig_type);
+ 
    switch (TREE_CODE (orig_type))
      {
      /* Don't look through to an anonymous vector type, since the syntax
diff -Nrcpad gcc-17-20260510/gcc/c-family/c-omp.cc gcc-17-20260517/gcc/c-family/c-omp.cc
*** gcc-17-20260510/gcc/c-family/c-omp.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c-family/c-omp.cc	Sun May 17 22:32:05 2026
*************** omp_map_decayed_kind (enum gomp_map_kind
*** 4517,4524 ****
--- 4517,4526 ----
    if (invoked_as == GOMP_MAP_RELEASE || invoked_as == GOMP_MAP_DELETE)
      return invoked_as;
  
+   bool m_force_p, m_always_p, m_present_p;
    bool force_p, always_p, present_p;
  
+   mapper_kind = omp_split_map_kind (mapper_kind, &m_force_p, &m_always_p, &m_present_p);
    invoked_as = omp_split_map_kind (invoked_as, &force_p, &always_p, &present_p);
    gomp_map_kind decay_to;
  
*************** omp_map_decayed_kind (enum gomp_map_kind
*** 4556,4562 ****
        gcc_unreachable ();
      }
  
!   return omp_join_map_kind (decay_to, force_p, always_p, present_p);
  }
  
  /* Instantiate a mapper MAPPER for expression EXPR, adding new clauses to
--- 4558,4565 ----
        gcc_unreachable ();
      }
  
!   return omp_join_map_kind (decay_to, m_force_p | force_p,
! 			    m_always_p | always_p, m_present_p | present_p);
  }
  
  /* Instantiate a mapper MAPPER for expression EXPR, adding new clauses to
diff -Nrcpad gcc-17-20260510/gcc/c-family/c.opt gcc-17-20260517/gcc/c-family/c.opt
*** gcc-17-20260510/gcc/c-family/c.opt	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c-family/c.opt	Sun May 17 22:32:05 2026
*************** Wconditionally-supported
*** 595,600 ****
--- 595,604 ----
  C++ ObjC++ Var(warn_conditionally_supported) Warning
  Warn for conditionally-supported constructs.
  
+ Wconstant-logical-operand
+ C ObjC C++ ObjC++ Var(warn_constant_logical_operand) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
+ Warn for constant operands of logical operators other than 0 or 1.
+ 
  Wconversion
  C ObjC C++ ObjC++ Var(warn_conversion) Warning
  Warn for implicit type conversions that may change a value.
diff -Nrcpad gcc-17-20260510/gcc/c-family/c.opt.urls gcc-17-20260517/gcc/c-family/c.opt.urls
*** gcc-17-20260510/gcc/c-family/c.opt.urls	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/c-family/c.opt.urls	Sun May 17 22:32:05 2026
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 415,420 ****
--- 415,423 ----
  Wconditionally-supported
  UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconditionally-supported)
  
+ Wconstant-logical-operand
+ UrlSuffix(gcc/Warning-Options.html#index-Wconstant-logical-operand)
+ 
  Wconversion
  UrlSuffix(gcc/Warning-Options.html#index-Wconversion) LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wconversion)
  
diff -Nrcpad gcc-17-20260510/gcc/cobol/ChangeLog gcc-17-20260517/gcc/cobol/ChangeLog
*** gcc-17-20260510/gcc/cobol/ChangeLog	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/ChangeLog	Sun May 17 22:32:05 2026
***************
*** 1,3 ****
--- 1,132 ----
+ 2026-05-12  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* Make-lang.in: Incorporate new gcc/cobol/compare.cc file.
+ 	* cobol1.cc (ATTR_CONST_NOTHROW_LEAF): Incorporate __builtin_swap16,
+ 	__builtin_swap32, __builtin_swap64, and __builtin_swap128.
+ 	(cobol_langhook_init): Likewise.
+ 	* genapi.cc (treeplet_fill_source): Improve speed.
+ 	(get_binary_value_from_float): Spelling.
+ 	(normal_normal_compare): Eliminate.
+ 	(compare_binary_binary): Eliminate.
+ 	(DEBUG_COMPARE): Eliminate.
+ 	(cobol_compare): Eliminate.
+ 	(parser_enter_file): Eliminate obsolete variables.
+ 	(data_decl_type_for): New function.
+ 	(parser_alphabet_use): Flag altered alphabets for speed.
+ 	(parser_display): Environment switch for putting comments into
+ 	the assembly language.
+ 	(program_end_stuff): Change "hijack" to "hijack_h".
+ 	(parser_division): Repair RETURN-CODE logic.
+ 	(parser_logop): Improve GENERIC for logical operations.
+ 	(parser_relop): Use new cobol_compare_relop() routine.
+ 	(parser_relop_long): Elminate unnecessary static variable.
+ 	(inspect_tally): Improve parameter passing to library routine.
+ 	(inspect_replacing): Likewise.
+ 	(parser_intrinsic_subst): Likewise.
+ 	(parser_intrinsic_callv): Likewise.
+ 	(parser_intrinsic_call_1): Likewise.
+ 	(parser_bsearch_start): Likewise.
+ 	(parser_bsearch_when): Use new comparison routine; simplify logic.
+ 	(parser_unstring): Improve parameter passing to library routine.
+ 	(parser_string): Likewise.
+ 	(create_and_call): Repair RETURN-CODE logic.
+ 	(parser_call): Adjust exception processing when the target cannot be
+ 	found.
+ 	(build_temporaryN): Constructor for cblc_field_t::data.
+ 	(hijack_for_development): Change hijacking name to "dubner_h".
+ 	(hijacker): Change hijacking name to "hijack_h".
+ 	(get_reference_to_data): New function.
+ 	(mh_identical): Improve speed when sender and receiver have the same
+ 	structure.
+ 	(mh_source_is_literalN): Eliminate leading plus/minus when moving a
+ 	numeric to an alphanumeric.
+ 	(move_helper): Adjust logic for mh_identical and mh_source_is_group.
+ 	(actually_create_the_static_field): Use constructor for data member.
+ 	(psa_new_var_decl): Typo in comment.
+ 	(parser_symbol_add): Make the generated data type more consistent
+ 	with the COBOL variable type.
+ 	* genapi.h (parser_bsearch_when): Change declaration.
+ 	(parser_bsearch_start): Formatting.
+ 	(parser_sort): Formatting.
+ 	* gengen.cc (gg_show_type): Expand for ARRAY_TYPE and ARRAY_REF.
+ 	(gg_define_from_declaration): Use void type for DECL_EXPR.
+ 	(gg_define_volatile_variable): New function.
+ 	(gg_get_address): New function.
+ 	(gg_array_value): Use fold_convert().
+ 	(gg_bswap): New function.
+ 	(gg_memcmp): New function.
+ 	* gengen.h (SCHAR_P): New and changed declarations.
+ 	(struct gg_function_t): Add alphabet_in_use flag.
+ 	(gg_define_volatile_variable): New declaration.
+ 	(gg_get_address_of): Comment.
+ 	(gg_pointer_to_array): Comment.
+ 	(gg_get_address): New declaration.
+ 	(gg_bswap): New declaration.
+ 	(gg_memcmp):  New declaration.
+ 	(gg_insert_into_assemblerf): Formatting.
+ 	* genmath.cc (arithmetic_operation): Improved handling of
+ 	parameters.
+ 	(fast_add): Improved handling of locations.
+ 	(parser_add): Formatting.
+ 	* genutil.cc (tree_type_from_digits): Correct parameter.
+ 	(get_data_offset): Correct exception handling.
+ 	(get_binary_value_tree): Improve location handling.
+ 	(tree_type_from_field): Correct logic.
+ 	(tree_type_from_size): Correct signs for returned type.
+ 	(build_array_of_treeplets): Eliminated.
+ 	(build_array_of_referlets): New function.
+ 	(build_array_of_fourplets): Eliminated.
+ 	(build_array_of_refers): New function.
+ 	(refer_is_clean): Improved logic.
+ 	(refer_is_super_clean): New function.
+ 	(refer_is_working_storage): New function.
+ 	(refer_offset): Formatting.
+ 	(binary_from_FldNumericBin5): New function.
+ 	(binary_from_FldNumericBinary): New function.
+ 	(d_and_q_num_disp): New function.
+ 	(binary_from_FldNumericDisplay): New function.
+ 	(make_dp2bin_decl): New function.
+ 	(d_and_q_packed): New function.
+ 	(binary_from_comp_3): New function.
+ 	(binary_from_comp_6): New function.
+ 	(binary_from_FldPacked): New function.
+ 	(binary_from_FldFloat): New function.
+ 	(get_binary_value): New function.
+ 	(get_location): New function.
+ 	(get_length): New function.
+ 	* genutil.h (tree_type_from_digits): New declaration.
+ 	(tree_type_from_size): Changed declaration.
+ 	(refer_is_super_clean): New declaration.
+ 	(refer_is_working_storage): New declaration.
+ 	(refer_offset): Changed declaration.
+ 	(build_array_of_treeplets): Remove declaration.
+ 	(build_array_of_referlets): New declaration.
+ 	(build_array_of_fourplets): Remove declaration.
+ 	(build_array_of_refers): New declaration.
+ 	(tree_type_from_field): New declaration.
+ 	(get_binary_value): New declaration.
+ 	(get_location): New declaration.
+ 	(get_length): New declaration.
+ 	* parse.y: Mysterious changes. All changes to YACC rules are
+ 	mysterious.
+ 	* parse_ante.h (class log_expr_t): Changes to logop() invocation.
+ 	* scan_post.h (yylex): Remove unnecessary trailing semicolon.
+ 	* structs.cc (create_cblc_file_t): Change cblc_file_t declaration.
+ 	(create_referlet_t): New function.
+ 	(create_refer_t): New function.
+ 	(create_our_type_nodes): Add cblc_referlet_type_node and
+ 	cblc_refer_type_node.
+ 	* structs.h (member2): New declaration.
+ 	(GTY): Type for cblc_referlet_type_node and cblc_refer_type_node.
+ 	* symbols.cc (temporaries_t::add): Remove unnecessary trailing
+ 	semicolon.
+ 	* symbols.h (struct cbl_bsearch_t): Remove obsolete member.
+ 	(ENABLE_HIJACKING): Compilation switch for enabling dubner_h and
+ 	hijack_h code-generation hijacking.
+ 	* util.cc (symbol_field_type_update): Comment.
+ 	* compare.cc: New file.
+ 	* compare.h: New file.
+ 
  2026-04-02  Robert Dubner  <rdubner@symas.com>
  
  	* cobol1.cc (cobol_langhook_handle_option): Handle OPT_Wrecording_mode.
diff -Nrcpad gcc-17-20260510/gcc/cobol/Make-lang.in gcc-17-20260517/gcc/cobol/Make-lang.in
*** gcc-17-20260510/gcc/cobol/Make-lang.in	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/Make-lang.in	Sun May 17 22:32:05 2026
*************** cobol1_OBJS =    \
*** 64,69 ****
--- 64,70 ----
   cobol/cdf.o        \
   cobol/cdf-copy.o   \
   cobol/cobol1.o     \
+  cobol/compare.o    \
   cobol/convert.o    \
   cobol/except.o     \
   cobol/genutil.o    \
diff -Nrcpad gcc-17-20260510/gcc/cobol/cobol1.cc gcc-17-20260517/gcc/cobol/cobol1.cc
*** gcc-17-20260510/gcc/cobol/cobol1.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/cobol1.cc	Sun May 17 22:32:05 2026
*************** struct GTY (()) language_function
*** 127,132 ****
--- 127,133 ----
  #define ATTR_TMPURE_NORETURN_NOTHROW_LEAF_COLD_LIST (ECF_TM_PURE|ECF_NORETURN|ECF_NOTHROW|ECF_LEAF|ECF_COLD)
  #define ATTR_NORETURN_NOTHROW_LIST (ECF_NORETURN|ECF_NOTHROW)
  #define ATTR_NOTHROW_NONNULL_LEAF (ECF_NOTHROW|ECF_LEAF)
+ #define ATTR_CONST_NOTHROW_LEAF (ECF_CONST | ECF_NOTHROW | ECF_LEAF)
  
  static void
  gfc_define_builtin (const char *name, tree type, enum built_in_function code,
*************** cobol_langhook_init (void)
*** 266,271 ****
--- 267,310 ----
      gfc_define_builtin ("__builtin_strcpy", ftype, BUILT_IN_STRCPY,
              "strcpy", ATTR_NOTHROW_NONNULL_LEAF);
  
+ 
+     ftype = build_function_type_list (uint16_type_node,
+                                       uint16_type_node,
+                                       NULL_TREE);
+     gfc_define_builtin ("__builtin_bswap16",
+                         ftype,
+                         BUILT_IN_BSWAP16,
+                         NULL,
+                         ATTR_CONST_NOTHROW_LEAF);
+ 
+     ftype = build_function_type_list (uint32_type_node,
+                                       uint32_type_node,
+                                       NULL_TREE);
+     gfc_define_builtin ("__builtin_bswap32",
+                         ftype,
+                         BUILT_IN_BSWAP32,
+                         NULL,
+                         ATTR_CONST_NOTHROW_LEAF);
+ 
+     ftype = build_function_type_list (uint64_type_node,
+                                       uint64_type_node,
+                                       NULL_TREE);
+     gfc_define_builtin ("__builtin_bswap64",
+                         ftype,
+                         BUILT_IN_BSWAP64,
+                         NULL,
+                         ATTR_CONST_NOTHROW_LEAF);
+ 
+     ftype = build_function_type_list (unsigned_intTI_type_node,
+                                       unsigned_intTI_type_node,
+                                       NULL_TREE);
+     gfc_define_builtin ("__builtin_bswap128",
+                         ftype,
+                         BUILT_IN_BSWAP128,
+                         NULL,
+                         ATTR_CONST_NOTHROW_LEAF);
+ 
+ 
      build_common_builtin_nodes ();
  
      // Make sure this is a supported configuration.
diff -Nrcpad gcc-17-20260510/gcc/cobol/compare.cc gcc-17-20260517/gcc/cobol/compare.cc
*** gcc-17-20260510/gcc/cobol/compare.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/cobol/compare.cc	Sun May 17 22:32:05 2026
***************
*** 0 ****
--- 1,1465 ----
+ /*
+  * Copyright (c) 2021-2026 Symas Corporation
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions are
+  * met:
+  *
+  * * Redistributions of source code must retain the above copyright
+  *   notice, this list of conditions and the following disclaimer.
+  * * Redistributions in binary form must reproduce the above
+  *   copyright notice, this list of conditions and the following disclaimer
+  *   in the documentation and/or other materials provided with the
+  *   distribution.
+  * * Neither the name of the Symas Corporation nor the names of its
+  *   contributors may be used to endorse or promote products derived from
+  *   this software without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
+ #include "cobol-system.h"
+ 
+ #include "coretypes.h"
+ #include "tree.h"
+ #include "tree-iterator.h"
+ #include "stringpool.h"
+ #include "diagnostic-core.h"
+ #include "target.h"
+ 
+ #include "../../libgcobol/ec.h"
+ #include "../../libgcobol/common-defs.h"
+ #include "util.h"
+ #include "cbldiag.h"
+ #include "symbols.h"
+ #include "gengen.h"
+ #include "inspect.h"
+ #include "../../libgcobol/io.h"
+ #include "genapi.h"
+ #include "genutil.h"
+ #include "genmath.h"
+ #include "structs.h"
+ #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/charmaps.h"
+ #include "../../libgcobol/valconv.h"
+ #include "show_parse.h"
+ #include "fold-const.h"
+ #include "realmpfr.h"
+ #include "compare.h"
+ 
+ static bool
+ comparably_numeric(const cbl_refer_t &refer)
+   {
+   // This routine returns TRUE for refers that can be treated as binary
+   // integers for the purpose of comparisons.  We handle CHAR through INT128;
+   // floats are broken out separately.
+   bool retval;
+ 
+   if( refer.refmod.from )
+     {
+     // Anything with a refmod is treated like an alphanumeric, not a number.
+     retval = false;
+     }
+   else
+     {
+     switch(refer.field->type)
+       {
+       case FldNumericBinary:
+       case FldNumericDisplay:
+       case FldPacked:
+       case FldNumericBin5:
+       case FldLiteralN:
+       case FldIndex:
+       case FldPointer:
+         retval = true;
+         break;
+ 
+       case FldAlphanumeric:
+         {
+         // An FldAlphanumeric flagged as ZERO is a number.
+         retval = (cbl_figconst_t)(refer.field->attr & FIGCONST_MASK) ==
+                                                                 zero_value_e;
+         }
+       break;
+ 
+       default:
+         retval = false;
+         break;
+       }
+     }
+ 
+   return retval;
+   }
+ 
+ static bool
+ comparably_alpha(const cbl_refer_t &refer)
+   {
+   // This routine returns TRUE for refers that can be treated as alphanumeric
+   // strings the purpose of comparisons.
+ 
+   bool retval;
+ 
+   switch(refer.field->type)
+     {
+     case FldGroup:
+     case FldAlphanumeric:
+     case FldLiteralA:
+     case FldNumericEdited:
+     case FldAlphaEdited:
+       retval = true;
+       break;
+ 
+     default:
+       if( refer.refmod.from )
+         {
+         retval = true;
+         }
+      else
+         {
+         retval = false;
+         }
+       break;
+     }
+   return retval;
+   }
+ 
+ enum {MAX_INT128_DIGITS = 38};
+ 
+ static void
+ digiter(int &digits, int &rdigits, const cbl_refer_t &refer)
+   {
+   digits  = refer.field->data.digits;
+   rdigits = refer.field->data.rdigits;
+ 
+   if( digits == 0 )
+     {
+     // We are dealing with a pure binary type:
+     switch(refer.field->data.capacity())
+       {
+       case 1:
+         digits = 2;
+         break;
+       case 2:
+         digits = 4;
+         break;
+       case 4:
+         digits = 9;
+         break;
+       case 8:
+         digits = 19;
+         break;
+       case 16:
+         digits = 38;
+         break;
+       default:
+         gcc_unreachable();
+         break;
+       }
+     }
+   if( refer.field->attr & scaled_e )
+     {
+     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
+       {
+       // This is like PPP9999.  Digits stays 3, and rdigits becomes 7
+       rdigits += digits;
+       }
+     }
+   }
+ 
+ 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
+ total_digits_tree( tree &left_rdigits,
+                    tree &right_rdigits,
+                    const cbl_refer_t &left_side,
+                    const cbl_refer_t &right_side)
+   {
+   // This routine is used when we might have to use the run-time values:
+   left_rdigits = gg_define_int();
+   right_rdigits = gg_define_int();
+ 
+   if( left_side.field->attr & intermediate_e )
+     {
+     gg_assign( left_rdigits,
+                gg_cast(INT,
+                        member(left_side.field->var_decl_node,
+                               "rdigits")));
+     }
+   else
+     {
+     gg_assign(left_rdigits,
+               build_int_cst_type(INT,
+                                  left_side.field->data.rdigits));
+     }
+ 
+   if( right_side.field->attr & intermediate_e )
+     {
+     gg_assign(right_rdigits,
+               gg_cast(INT,
+                       member(right_side.field->var_decl_node,
+                              "rdigits")));
+     }
+   else
+     {
+     gg_assign(right_rdigits,
+               build_int_cst_type(INT,
+                                  right_side.field->data.rdigits));
+     }
+ 
+   if( (left_side.field->attr & scaled_e) && left_side.field->data.rdigits < 0)
+     {
+     // Left rdigits becomes zero; right_rdigits is augmented to the negative of
+     // left rdigits
+     gg_assign(left_rdigits, integer_zero_node);
+     gg_assign(right_rdigits,
+               gg_add(right_rdigits,
+                      build_int_cst_type(INT,
+                                         -left_side.field->data.rdigits)));
+     }
+   if( (left_side.field->attr & scaled_e) && left_side.field->data.rdigits > 0)
+     {
+     // left_rdigits is augmented by left_digits
+     gg_assign(left_rdigits,
+               gg_add(left_rdigits,
+                      build_int_cst_type(INT,
+                                         left_side.field->data.digits)));
+     }
+ 
+   if( (right_side.field->attr & scaled_e) && right_side.field->data.rdigits < 0)
+     {
+     // Right rdigits becomes zero; left_rdigits is augmented by the negative of
+     // right_rdigits
+     gg_assign(right_rdigits, integer_zero_node);
+     gg_assign(left_rdigits,
+               gg_add(left_rdigits,
+                      build_int_cst_type(INT,
+                                         -right_side.field->data.rdigits)));
+     }
+   if( (right_side.field->attr & scaled_e) && right_side.field->data.rdigits > 0)
+     {
+     // right_rdigits is augmented by right_digits
+     gg_assign(right_rdigits,
+               gg_add(right_rdigits,
+                      build_int_cst_type(INT,
+                                         right_side.field->data.digits)));
+     }
+ 
+   // gg_printf("KILROY  LEFT %d\n", left_rdigits, NULL_TREE);
+   // gg_printf("KILROY RIGHT %d\n", right_rdigits, NULL_TREE);
+ 
+   // We can reduce the two rdigits values by the common portion of both.  This
+   // will leave one of them at zero
+   IF( left_rdigits, gt_op, right_rdigits )
+     {
+     gg_assign(left_rdigits, gg_subtract(left_rdigits, right_rdigits));
+     gg_assign(right_rdigits, integer_zero_node);
+     }
+   ELSE
+     {
+     gg_assign(right_rdigits, gg_subtract(right_rdigits, left_rdigits));
+     gg_assign(left_rdigits, integer_zero_node);
+     }
+   ENDIF
+   }
+ 
+ static tree
+ type_based_on_digits(int digits, bool signable)
+   {
+   tree retval;
+   if( signable )
+     {
+     // if(digits <= 2)
+       // {
+       // retval = SCHAR;
+       // }
+     // else
+     if(digits <= 4)
+       {
+       retval = SHORT;
+       }
+     else if(digits <= 9)
+       {
+       retval = INT;
+       }
+     else if(digits <= 19)
+       {
+       retval = LONG;
+       }
+     else
+       {
+       retval = INT128;
+       }
+     }
+   else
+     {
+     if(digits <= 2)
+       {
+       retval = UCHAR;
+       }
+     else if(digits <= 4)
+       {
+       retval = USHORT;
+       }
+     else if(digits <= 9)
+       {
+       retval = UINT;
+       }
+     else if(digits <= 19)
+       {
+       retval = ULONG;
+       }
+     else
+       {
+       retval = UINT128;
+       }
+     }
+ 
+   return retval;
+   }
+ 
+ static bool
+ numeric_compare(tree        &left,
+                 tree        &right,
+           const cbl_refer_t &left_side,
+           const cbl_refer_t &right_side)
+   {
+   /* This routine handles binary integer values that can fit into one, two,
+      four, eight, or sixteen bytes.
+ 
+      In order to do that, we have to make sure that the normalized comparable
+      values both fit.
+ 
+      Nomenclature: for short, I will treat a 9(8)v9(3) as 8.3.
+ 
+      So consider comparing a 32.0 to a 1.9.  To normalize them, I would have to
+      multiply the 32.0 by 10^9, which would mean I would be comparing a
+      32.9 to a 1.9 .  This is mathematically correct; the problem is that an
+      int128 can hold only only 38 digits, and thus can't handle the 41 digits
+      of a 32.9.
+ 
+      So, in this routine I make sure the two values can be normalized into no
+      more than INT128.  Values that are too large fall through to a library
+      routine that can handle them, albeit in a slower fashion than we aspire to
+      here.     */
+ 
+   bool compared = false;
+ 
+   if( refer_is_super_clean(left_side) && refer_is_super_clean(right_side) )
+     {
+     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;
+     }
+   else
+     {
+     // One or both are not in working-storage, so we have to use run-time
+     // capacities and rdigits.
+ 
+     // We will be needing the run-time left_rdigits and right_rdigits
+     tree left_rdigits;
+     tree right_rdigits;
+     total_digits_tree(left_rdigits,
+                       right_rdigits,
+                       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;
+     }
+ 
+   return compared;
+   }
+ 
+ static void
+ alpha_compare_figconst( tree        &left,
+                         tree        &right,
+                   const cbl_refer_t &left_side,
+                   const cbl_refer_t &right_side)
+   {
+   // Call this when you know the right side is a figconst or refer.all
+   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);
+   cbl_char_t char_right = charmap_right->figconst_character(figconst_right);
+ 
+   size_t nbytes;
+   char *converted;
+   if( figconst_right )
+     {
+     // 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,
+                                  &nbytes);
+     }
+   else
+     {
+     // Comparing an alphanumeric to ALL <literal>
+     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_define_int();
+   right = gg_define_int(0);
+   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
+ alpha_compare(tree        &left,
+               tree        &right,
+         const cbl_refer_t &left_side,
+         const cbl_refer_t &right_side)
+   {
+   /* This routine handles these cases:
+ 
+         alpha1 op alpha2
+         national1 op display2
+         display1 op national2  ***
+         alpha op literal
+         literal op alpha       ***
+         alpha op all literal
+         all literal op alpha   ***
+         alpha op figconst
+         figconst op alpha      ***
+         figconst op figconst
+ 
+      The four cases marked *** are handled by this routine being called a
+      second time with the parameters swapped.  */
+ 
+   bool retval = false;
+ 
+   charmap_t *charmap_left  = __gg__get_charmap(left_side.field->codeset.encoding);
+   cbl_figconst_t figconst_left
+                    = (cbl_figconst_t)(left_side.field->attr & FIGCONST_MASK);
+   cbl_char_t char_left  = charmap_left->figconst_character(figconst_left);
+ 
+   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);
+   cbl_char_t char_right = charmap_right->figconst_character(figconst_right);
+ 
+   tree location_left;
+   tree location_right;
+   tree length_left;
+   tree length_right;
+ 
+   if( figconst_left && figconst_right )
+     {
+     // This is a degenerate case.  Technically it isn't allowed; ISO says that
+     // comparing two literals is a syntax error.  But that's not my department.
+     if( char_left < char_right )
+       {
+       left = integer_minus_one_node;
+       }
+     else if( char_left > char_right)
+       {
+       left = integer_one_node;
+       }
+     else
+       {
+       left = integer_zero_node;
+       }
+     right = integer_zero_node;
+     retval = true;
+     goto done;
+     }
+   else if( figconst_right || right_side.all )
+     {
+     alpha_compare_figconst(left, right, left_side, right_side);
+     retval = true;
+     goto done;
+     }
+   else if(    !figconst_left
+           &&  !figconst_right
+           &&   left_side.field->codeset.encoding
+              != right_side.field->codeset.encoding )
+     {
+     /* We have two different encodings.  The logic chain is:
+        If they have different strides, we convert to the larger one, else
+        If one is national, we convert to it, else
+        If one is display, we convert to it, else
+        We pick one at random.
+ 
+        In this chain, the winner has to be on the left.  If the winner is on
+        the right, we don't do it now.  It will get caught during the second
+        call to this routine, with the parameters flipped left-for-right.  */
+     bool do_it = false;
+     if( charmap_left->stride() != charmap_right->stride() )
+       {
+       // The strides are different.  Convert when the bigger one is on the
+       // left.
+       do_it = charmap_left->stride() > charmap_right->stride();
+       }
+     else if(   left_side.field->codeset.encoding  == __gg__national_encoding
+             || right_side.field->codeset.encoding == __gg__national_encoding )
+       {
+       // One or the other is national.  We convert when the left one is
+       // national.
+       do_it = left_side.field->codeset.encoding  == __gg__national_encoding;
+       }
+     else if(   left_side.field->codeset.encoding  == __gg__display_encoding
+             || right_side.field->codeset.encoding == __gg__display_encoding )
+       {
+       // One or the other is display.  We convert when the left one is
+       // display.
+       do_it = left_side.field->codeset.encoding  == __gg__display_encoding;
+       }
+     else
+       {
+       // They are the same size, and neither is national or display.  This is
+       // highly weird.  The only thing I can think causing it would be two
+       // files with different speci fied encodings.  Just have the left side
+       // win.
+       do_it = true;
+       }
+     if( do_it )
+       {
+       // 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_int();
+       right = gg_define_int(0);
+       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;
+       }
+     }
+   else if(    !figconst_left
+           &&  !figconst_right
+           &&   left_side.field->codeset.encoding
+              == right_side.field->codeset.encoding )
+     {
+     /* The two encodings are the same. */
+ 
+     // When the difference in lengths of the two strings is bigger than the
+     // magic number, we call the library routine.  The library routine uses
+     // a const string of spaces and memcmp to handle the inferred trailing
+     // spaces of the shorter string.  So, the magic number represents the
+     // crossover of the time for a loop here versus the time for a call to
+     // the library.  I haven't made any effort to find the best value.
+     // R.J.Dubner; 2026-05-08
+     static const long MAGIC_NUMBER = 16;
+ 
+     // We are going to need the space character in this encoding space:
+     cbl_char_t space_char = charmap_left->mapped_character(ascii_space);
+     const char *the_routine;
+     switch( charmap_left->stride() )
+       {
+       case 1:
+         {
+         // We are single-byte-coded.
+         if( current_function->alphabet_in_use  )
+           {
+           // Call the routine that uses the collation table.
+           the_routine = "__gg__compare_string_1";
+           }
+         else
+           {
+           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_int();
+             right = gg_define_int(0);
+             size_t length = std::min(length_l, length_r);
+             gg_assign(left,
+                       gg_memcmp(location_left,
+                                 location_right,
+                                 build_int_cst_type(SIZE_T,
+                                                    length)));
+             if( length_l > length_r )
+               {
+               // We have a LEFT excess that needs to be compared to the space
+               // char.
+               IF( left, eq_op, integer_zero_node )
+                 {
+                 tree count = gg_define_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),
+                       ne_op,
+                       build_int_cst_type(UCHAR, space_char) )
+                     {
+                     // We have a difference.  We need to calculate +1/-1
+                     IF( gg_indirect(location_left, count),
+                         gt_op,
+                         build_int_cst_type(UCHAR, space_char) )
+                       {
+                       gg_assign(left, integer_one_node);
+                       }
+                     ELSE
+                       {
+                       gg_assign(left, integer_minus_one_node);
+                       }
+                     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
+                 }
+               ELSE
+                 {
+                 }
+               ENDIF
+               }
+ 
+             if( length_l < length_r )
+               {
+               // We have a RIGHT excess that needs to be compared to the space
+               // char.
+               IF( left, eq_op, integer_zero_node )
+                 {
+                 tree count = gg_define_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),
+                       ne_op,
+                       build_int_cst_type(UCHAR, space_char) )
+                     {
+                     // We have a difference.  We need to calculate +1/-1
+                     IF( gg_indirect(location_right, count),
+                         lt_op,
+                         build_int_cst_type(UCHAR, space_char) )
+                       {
+                       gg_assign(left, integer_one_node);
+                       }
+                     ELSE
+                       {
+                       gg_assign(left, integer_minus_one_node);
+                       }
+                     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
+                 }
+               ELSE
+                 {
+                 }
+               ENDIF
+               }
+ 
+             retval = true;
+             goto done;
+             }
+           // Call the routine that uses does straight byte comparison
+           if( charmap_left->is_like_ebcdic() )
+             {
+             the_routine = "__gg__compare_string_1e";
+             }
+           else
+             {
+             the_routine = "__gg__compare_string_1a";
+             }
+           }
+         break;
+         }
+       case 2:
+         {
+         if( current_function->alphabet_in_use  )
+           {
+           // Call the routine that uses the collation table.
+           the_routine = "__gg__compare_string_2";
+           }
+         else
+           {
+           // Call the routine that uses does straight short comparison
+           the_routine = "__gg__compare_string_2a";
+           }
+         break;
+         }
+       case 4:
+         {
+         if( current_function->alphabet_in_use  )
+           {
+           // Call the routine that uses the collation table.
+           the_routine = "__gg__compare_string_4";
+           }
+         else
+           {
+           // Call the routine that uses does straight short comparison
+           the_routine = "__gg__compare_string_4a";
+           }
+         break;
+         }
+       default:
+         {
+         the_routine = nullptr;
+         gcc_unreachable();
+         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_int();
+     right = gg_define_int(0);
+     gg_call(VOID,
+             the_routine,
+             gg_get_address_of(left),
+             location_left,
+             length_left,
+             location_right,
+             length_right,
+             build_int_cst_type(INT, space_char),
+             NULL_TREE);
+     retval = true;
+     goto done;
+     }
+ 
+   done:
+   return retval;
+   }
+ 
+ static bool
+ numeric_alpha_compare(tree        &left,
+                       tree        &right,
+                 const cbl_refer_t &left_side,
+                 const cbl_refer_t &right_side)
+   {
+   /* The ISO specification says
+ 
+     The integer operand is treated as though it were moved, according to the
+     rules of the MOVE statement, to an elementary data item of the same length
+     in terms of character positions as the number of digits in the integer and
+     after that it is compared to the string.   */
+ 
+   bool compared = false;
+ 
+   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);
+   cbl_char_t char_right = charmap_right->figconst_character(figconst_right);
+ 
+   if( left_side.field->type == FldLiteralN )
+     {
+     // On the left side, we have data.original.  On the right side, we have
+     // some kind of string.
+ 
+     const char *left_data = left_side.field->data.original();
+     if( *left_data == ascii_minus || *left_data == ascii_plus )
+       {
+       // The rule for moving a numeric to an alphanumeric is that sign
+       // information is discarded.
+       left_data += 1;
+       }
+ 
+     tree location_left = gg_string_literal(left_data);
+     tree length_left   = build_int_cst_type(
+                                    SIZE_T,
+                                    strlen(left_data));
+ 
+     if( figconst_right || right_side.all )
+       {
+       size_t nbytes;
+       char *converted;
+       if( figconst_right )
+         {
+         // 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,
+                                      &nbytes);
+         }
+       else
+         {
+         // Comparing an alphanumeric to ALL <literal>
+         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_define_int();
+       right = gg_define_int(0);
+       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_int();
+       right = gg_define_int(0);
+       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;
+       }
+     }
+   if( !compared )
+     {
+     // The left side is a fixed-point numeric of some kind.  First, we pick
+     // up the actual numeric value.
+ 
+     // The type of the variable should be straightforward.  It is not.  There
+     // are various considerations in determining the type.
+     tree type;
+     size_t digits = left_side.field->data.digits;
+     tree value;
+     if( digits == 0 )
+       {
+       // This is a pure binary type.
+       type = tree_type_from_size(left_side.field->data.capacity(),
+                                  left_side.field->attr & signable_e);
+       }
+     else
+       {
+       // There is some specified number of digits in the variable:
+       // But if the variable is scaled, we have to multiply by 10^N, where
+       // N is the number of zeroed P digits:
+       if( left_side.field->data.rdigits < 0 )
+         {
+         digits += -left_side.field->data.rdigits;
+         }
+       type = tree_type_from_digits(digits, left_side.field->attr&signable_e);
+       }
+ 
+     // 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
+     // as a numeric zero.
+ 
+     if( figconst_right == zero_value_e )
+       {
+       left  = gg_define_int();
+       right = gg_define_int(0);
+       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
+       {
+       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_int();
+       right = gg_define_int(0);
+ 
+       if( figconst_right || right_side.all )
+         {
+         size_t nbytes;
+         char *converted;
+         if( figconst_right )
+           {
+           converted = __gg__iconverter(right_side.field->codeset.encoding,
+                                        left_side.field->codeset.encoding,
+                                        &char_right,
+                                        1,
+                                        &nbytes);
+           }
+         else
+           {
+           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_int();
+         right = gg_define_int(0);
+         gg_call(VOID,
+                 "__gg__compare_numeric_all",
+                 gg_get_address_of(left),
+                 gg_cast(UINT128, value),
+                 build_int_cst_type(SIZE_T, 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, digits),
+                 location_right,
+                 length_right,
+                 build_int_cst_type(INT, right_side.field->codeset.encoding),
+                 NULL_TREE);
+         }
+       compared = true;
+       }
+     }
+ 
+   return compared;
+   }
+ 
+ static bool
+ addr_of_compare(tree        &left,
+                 tree        &right,
+           const cbl_refer_t &left_side,
+           const cbl_refer_t &right_side)
+   {
+   // One or the other is addr_of
+   tree type = SIZE_T;
+   tree l;
+   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_int();
+   right = gg_define_int(0);
+ 
+   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;
+   }
+ 
+ static bool
+ float_compare(tree        &left,
+               tree        &right,
+         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
+   get_binary_value(left, left_side);
+   tree type = TREE_TYPE(left);
+   tree rightv;
+   get_binary_value(rightv, right_side, type);
+   right = gg_define_variable(type);
+   gg_assign(right, gg_cast(type, rightv));
+ 
+ //  gg_printf("KILROY %f %f\n",
+ //            gg_cast(DOUBLE, left),
+ //            gg_cast(DOUBLE, right),
+ //            NULL_TREE);
+ 
+   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))));
+       }
+     }
+ 
+   return true;
+   }
+ 
+ static bool
+ compare_class( tree        &left,
+                tree        &right,
+          const cbl_refer_t &left_side,
+          const cbl_refer_t &right_side)
+   {
+   // Left side is FldClass
+   left  = gg_define_int();
+   right = gg_define_int(0);
+   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;
+   }
+ 
+ void
+ cobol_compare_relop(tree        &left,
+                     tree        &right,
+               const cbl_refer_t &left_side,
+               const cbl_refer_t &right_side)
+   {
+   // This routine figures out how to compare left_side to right_side, and
+   // returns the trees 'left' and 'right' in numeric form that can be turned
+   // into a conditional expression.
+ 
+   bool compared = false;
+ 
+   if( left_side.field->type == FldClass )
+     {
+     compared = compare_class(left, right, left_side, right_side);
+     }
+ 
+   if( !compared && right_side.field->type == FldClass )
+     {
+     compared = compare_class(right, left, right_side, left_side);
+     }
+ 
+   if(!compared && (left_side.addr_of || right_side.addr_of) )
+     {
+     compared = addr_of_compare(left, right, left_side, right_side);
+     }
+ 
+   if(    !compared
+       && comparably_numeric(left_side) && comparably_numeric(right_side) )
+     {
+     compared = numeric_compare(left, right, left_side, right_side);
+     }
+ 
+   if(    !compared
+       && comparably_alpha(left_side) && comparably_alpha(right_side) )
+     {
+     compared = alpha_compare(left, right, left_side, right_side);
+     if( !compared )
+       {
+       compared = alpha_compare(right, left, right_side, left_side);
+       }
+     }
+ 
+   if(  !compared
+      && comparably_numeric(left_side) && comparably_alpha(right_side) )
+     {
+     compared = numeric_alpha_compare(left, right, left_side, right_side);
+     }
+ 
+   if(  !compared
+      && comparably_numeric(right_side) && comparably_alpha(left_side) )
+     {
+     compared = numeric_alpha_compare(right, left, right_side, left_side);
+     }
+ 
+   if(   !compared
+      && left_side.field->type == FldFloat
+      && right_side.field->type == FldFloat)
+     {
+     if( left_side.field->data.capacity() >= right_side.field->data.capacity() )
+       {
+       compared = float_compare(left, right, left_side, right_side);
+       }
+     else
+       {
+       compared = float_compare(right, left, right_side, left_side);
+       }
+     }
+ 
+   if(   !compared
+      &&    (left_side.field->type == FldFloat
+         || right_side.field->type == FldFloat) )
+     {
+     if( left_side.field->type == FldFloat )
+       {
+       compared = float_compare(left, right, left_side, right_side);
+       }
+     else
+       {
+       compared = float_compare(right, left, right_side, left_side);
+       }
+     }
+ 
+   if( !compared )
+     {
+     gcc_unreachable();
+     }
+   }
diff -Nrcpad gcc-17-20260510/gcc/cobol/compare.h gcc-17-20260517/gcc/cobol/compare.h
*** gcc-17-20260510/gcc/cobol/compare.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/cobol/compare.h	Sun May 17 22:32:05 2026
***************
*** 0 ****
--- 1,42 ----
+ /*
+  * Copyright (c) 2021-2026 Symas Corporation
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions are
+  * met:
+  *
+  * * Redistributions of source code must retain the above copyright
+  *   notice, this list of conditions and the following disclaimer.
+  * * Redistributions in binary form must reproduce the above`
+  *   copyright notice, this list of conditions and the following disclaimer
+  *   in the documentation and/or other materials provided with the
+  *   distribution.
+  * * Neither the name of the Symas Corporation nor the names of its
+  *   contributors may be used to endorse or promote products derived from
+  *   this software without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ #ifndef _COMPARE_H_
+ #define _COMPARE_H_
+ 
+ /*  The following routine looks at the two_refers. It creates and returns the
+     "left" and "right" var_decl trees, which can be fed directly into one of
+     the six relational expressions like EQ_EXPR, LT_EXPR, and so on. */
+ 
+ void cobol_compare_relop( tree        &left,
+                           tree        &right,
+                     const cbl_refer_t &left_side,
+                     const cbl_refer_t &right_side);
+ 
+ #endif
diff -Nrcpad gcc-17-20260510/gcc/cobol/genapi.cc gcc-17-20260517/gcc/cobol/genapi.cc
*** gcc-17-20260510/gcc/cobol/genapi.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/genapi.cc	Sun May 17 22:32:05 2026
***************
*** 55,60 ****
--- 55,61 ----
  #include "show_parse.h"
  #include "fold-const.h"
  #include "realmpfr.h"
+ #include "compare.h"
  
  extern int yylineno;
  
*************** static tree label_list_back_goto;
*** 70,76 ****
  static tree label_list_back_label;
  
  #ifdef ENABLE_HIJACKING
! #pragma message "HIJACKING IS ENABLED - It should be disabled for release"
  static bool hijacked = false;  // Indicates a DUBNER hijacking is in progress.
  static void hijack_for_development(const char *funcname);
  static void hijacker();
--- 71,77 ----
  static tree label_list_back_label;
  
  #ifdef ENABLE_HIJACKING
! //#pragma message "HIJACKING IS ENABLED - It should be disabled for release"
  static bool hijacked = false;  // Indicates a DUBNER hijacking is in progress.
  static void hijack_for_development(const char *funcname);
  static void hijacker();
*************** static
*** 128,136 ****
  void
  treeplet_fill_source(TREEPLET &treeplet, const cbl_refer_t &refer)
    {
!   treeplet.pfield = gg_get_address_of(refer.field->var_decl_node);
!   treeplet.offset = refer_offset(refer);
!   treeplet.length = refer_size_source(refer);
    }
  
  tree file_static_variable(tree type, const char *v)
--- 129,146 ----
  void
  treeplet_fill_source(TREEPLET &treeplet, const cbl_refer_t &refer)
    {
!   if( refer_is_clean(refer) )
!     {
!     treeplet.pfield = gg_get_address_of(refer.field->var_decl_node);
!     treeplet.offset = size_t_zero_node;
!     treeplet.length = refer_size_source(refer);
!     }
!   else
!     {
!     treeplet.pfield = gg_get_address_of(refer.field->var_decl_node);
!     treeplet.offset = refer_offset(refer);
!     treeplet.length = refer_size_source(refer);
!     }
    }
  
  tree file_static_variable(tree type, const char *v)
*************** get_binary_value_from_float(tree
*** 1674,1680 ****
                                                    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 principl.  I am deferring this problem until
    // I understand it better.
  
    // We now have a floating point value that has been multiplied by 10**rdigits
--- 1684,1690 ----
                                                    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
*************** get_bytes_needed(cbl_field_t *field)
*** 1843,2096 ****
    return retval;
    }
  
! static void
! normal_normal_compare(bool debugging,
!                       tree return_int,
!                       cbl_refer_t *left_side_ref,
!                       cbl_refer_t *right_side_ref,
!                       tree left_side,
!                       tree right_side )
!   {
!   Analyze();
! 
!   // If a value is intermediate_e, then the rdigits can vary at run-time, so
!   // we can't rely on the compile-time rdigits.
! 
!   bool left_intermediate  = (left_side_ref->field->attr & intermediate_e);
!   bool right_intermediate = (right_side_ref->field->attr & intermediate_e);
! 
!   if( debugging )
!     {
!     gg_printf("normal_normal_compare(): left_intermediate/right_intermediate %d/%d\n",
!               left_intermediate ? integer_one_node : integer_zero_node ,
!               right_intermediate ? integer_one_node : integer_zero_node ,
!               NULL_TREE);
!     }
! 
!   if( !left_intermediate && !right_intermediate )
!     {
!     // Yay!  Both sides have fixed rdigit values.
! 
!     int adjust =   get_scaled_rdigits(left_side_ref->field)
!                  - get_scaled_rdigits(right_side_ref->field);
!     if( adjust > 0 )
!       {
!       // We need to make right_side bigger to match the scale of left_side
!       scale_by_power_of_ten_N(right_side, adjust);
!       }
!     else if( adjust < 0 )
!       {
!       // We need to make left_side bigger to match the scale of right_side
!       scale_by_power_of_ten_N(left_side, -adjust);
!       }
!     }
!   else
!     {
!     // At least one side is right_intermediate
!     bool needs_adjusting;
! 
!     tree adjust;
!     if( !left_intermediate && right_intermediate )
!       {
!       // left is fixed, right is intermediate
!       adjust = gg_define_int();
!       gg_assign(adjust,
!                 build_int_cst_type( INT,
!                                     get_scaled_rdigits(left_side_ref->field)));
! 
!       gg_assign(adjust,
!                 gg_subtract(adjust,
!                             gg_cast(INT,
!                                     member(right_side_ref->field->var_decl_node,
!                                            "rdigits"))));
!       needs_adjusting = true;
!       }
!     else if( left_intermediate && !right_intermediate )
!       {
!       // left is intermediate, right is fixed
!       adjust = gg_define_int();
!       gg_assign(adjust, gg_cast(INT, member(left_side_ref->field, "rdigits")));
!       gg_assign(adjust,
!                 gg_subtract(adjust,
!                             build_int_cst_type( INT,
!                                    get_scaled_rdigits(right_side_ref->field))));
!       needs_adjusting = true;
!       }
!     else // if( left_intermediate && right_intermediate )
!       {
!       // Both sides are intermediate_e
!       adjust = gg_define_int();
!       gg_assign(adjust, gg_cast(INT, member(left_side_ref->field, "rdigits")));
!       gg_assign(adjust,
!                 gg_subtract(adjust,
!                             gg_cast(INT,
!                                     member(right_side_ref->field, "rdigits"))));
!       needs_adjusting = true;
!       }
! 
!     if( needs_adjusting )
!       {
!       if( debugging )
!         {
!         gg_printf("normal_normal_compare(): The value of adjust is %d\n",
!                   adjust,
!                   NULL_TREE);
!         }
!       IF( adjust, gt_op, integer_zero_node )
!         {
!         // The right side needs to be scaled up
!         scale_by_power_of_ten(right_side, adjust);
!         }
!       ELSE
!         {
!         IF( adjust, lt_op, integer_zero_node )
!           {
!           // The left side needs to be scaled up
!           scale_by_power_of_ten(left_side, gg_negate(adjust));
!           }
!         ELSE
!           ENDIF
!         }
!         ENDIF
!       }
!     }
! 
!   if( TREE_TYPE(left_side) != TREE_TYPE(right_side) )
!     {
!     // One is signed, the other isn't:
!     if( left_side_ref->field->attr & signable_e )
!       {
!       // The left side can be negative.  If it is, the return value has to be
!       // -1 for left < right
!       IF( left_side, lt_op, gg_cast(TREE_TYPE(left_side), integer_zero_node) )
!         {
!         if( debugging )
!           {
!           gg_printf("normal_normal_compare(): different types returning -1\n",
!                     NULL_TREE);
!           }
!         gg_assign( return_int, integer_minusone_node);
!         }
!       ELSE
!         {
!         // Both sides are positive, allowing a direct comparison.
!         IF( gg_cast(TREE_TYPE(right_side), left_side), lt_op, right_side )
!           {
!           if( debugging )
!             {
!             gg_printf("normal_normal_compare(): returning -1\n", NULL_TREE);
!             }
!           gg_assign( return_int, integer_minusone_node);
!           }
!         ELSE
!           {
!           IF( gg_cast(TREE_TYPE(right_side), left_side), gt_op, right_side)
!             {
!             if( debugging )
!               {
!               gg_printf("normal_normal_compare(): returning +1\n", NULL_TREE);
!               }
!             gg_assign( return_int, integer_one_node);
!             }
!           ELSE
!             {
!             if( debugging )
!               {
!               gg_printf("normal_normal_compare(): returning zero\n", NULL_TREE);
!               }
!             gg_assign( return_int, integer_zero_node);
!             }
!             ENDIF
!           }
!           ENDIF
!         }
!         ENDIF
!       }
!     else
!       {
!       // The right side can be negative.  If it is, the return value has to be
!       // +1 for left > right
!       IF( right_side, lt_op, gg_cast(TREE_TYPE(right_side), integer_zero_node) )
!         {
!         if( debugging )
!           {
!           gg_printf("normal_normal_compare(): different types returning +1\n", NULL_TREE);
!           }
!         gg_assign( return_int, integer_one_node);
!         }
!       ELSE
!         {
!         // Both sides are positive, allowing a direct comparison.
!         IF( left_side, lt_op, gg_cast(TREE_TYPE(left_side), right_side) )
!           {
!           if( debugging )
!             {
!             gg_printf("normal_normal_compare(): returning -1\n", NULL_TREE);
!             }
!           gg_assign( return_int, integer_minusone_node);
!           }
!         ELSE
!           {
!           IF( left_side, gt_op, gg_cast(TREE_TYPE(left_side), right_side) )
!             {
!             if( debugging )
!               {
!               gg_printf("normal_normal_compare(): returning +1\n", NULL_TREE);
!               }
!             gg_assign( return_int, integer_one_node);
!             }
!           ELSE
!             {
!             if( debugging )
!               {
!               gg_printf("normal_normal_compare(): returning zero\n", NULL_TREE);
!               }
!             gg_assign( return_int, integer_zero_node);
!             }
!             ENDIF
!           }
!           ENDIF
!         }
!         ENDIF
!       }
!     }
!   else
!     {
!     // Both sides are the same type, allowing a direct comparison.
!     IF( left_side, lt_op, right_side )
!       {
!       if( debugging )
!         {
!         gg_printf("normal_normal_compare(): returning -1\n", NULL_TREE);
!         }
!       gg_assign( return_int, integer_minusone_node);
!       }
!     ELSE
!       {
!       IF( left_side, gt_op, right_side )
!         {
!         if( debugging )
!           {
!           gg_printf("normal_normal_compare(): returning +1\n", NULL_TREE);
!           }
!         gg_assign( return_int, integer_one_node);
!         }
!       ELSE
!         {
!         if( debugging )
!           {
!           gg_printf("normal_normal_compare(): returning zero\n", NULL_TREE);
!           }
!         gg_assign( return_int, integer_zero_node);
!         }
!         ENDIF
!       }
!       ENDIF
!     }
!   }
! 
! static
! tree
  tree_type_from_field_type(cbl_field_t *field, size_t &nbytes)
    {
    /*  This routine is used to determine what action is taken with type of a
--- 1853,1859 ----
    return retval;
    }
  
! static tree
  tree_type_from_field_type(cbl_field_t *field, size_t &nbytes)
    {
    /*  This routine is used to determine what action is taken with type of a
*************** tree_type_from_field_type(cbl_field_t *f
*** 2185,2566 ****
    return retval;
    }
  
- static void
- compare_binary_binary(tree return_int,
-                       cbl_refer_t *left_side_ref,
-                       cbl_refer_t *right_side_ref )
-   {
-   Analyze();
-   static const bool debugging = false;
- 
-   // We know the two sides have binary values that can be extracted.
-   tree left_side;
-   tree right_side;
- 
-   // Let's check for the simplified case where both left and right sides are
-   // little-endian binary values:
- 
-   if(   is_pure_integer(left_side_ref->field)
-      && is_pure_integer(right_side_ref->field) )
-     {
-     size_t left_bytes;
-     tree left_type = tree_type_from_field_type(left_side_ref->field,
-                                                left_bytes);
-     size_t right_bytes;
-     tree right_type = tree_type_from_field_type(right_side_ref->field,
-                                                 right_bytes);
-     tree larger;
-     if(    TREE_INT_CST_LOW(TYPE_SIZE(left_type))
-          > TREE_INT_CST_LOW(TYPE_SIZE(right_type)) )
-       {
-       larger = left_type;
-       }
-     else
-       {
-       larger = right_type;
-       }
-     left_side  = get_binary_value_tree(larger,
-                                        NULL,
-                                        *left_side_ref);
-     right_side = get_binary_value_tree(larger,
-                                        NULL,
-                                        *right_side_ref);
-     IF( left_side, eq_op, right_side )
-       {
-       gg_assign(return_int, integer_zero_node);
-       }
-     ELSE
-       {
-       IF( left_side, lt_op, right_side )
-         {
-         gg_assign(return_int, integer_minusone_node);
-         }
-       ELSE
-         {
-         gg_assign(return_int, integer_one_node);
-         }
-       ENDIF
-       }
-     ENDIF
-     return;
-     }
- 
-   // Use SIZE128 when we need two 64-bit registers to hold the value.  All
-   // others fit into 64-bit LONG with pretty much the same efficiency.
- 
-   size_t left_bytes_needed  = get_bytes_needed(left_side_ref->field);
-   size_t right_bytes_needed = get_bytes_needed(right_side_ref->field);
- 
-   if(     left_bytes_needed >= SIZE128
-       || right_bytes_needed >= SIZE128 )
-     {
-     if( debugging )
-       {
-       gg_printf("compare_binary_binary(): using int128\n", NULL_TREE);
-       }
- 
-     left_side  = gg_define_int128();
-     right_side = gg_define_int128();
-     }
-   else
-     {
-     if( debugging )
-       {
-       gg_printf("compare_binary_binary(): using int64\n", NULL_TREE);
-       }
-     left_side  = gg_define_variable( left_side_ref->field->has_attr(signable_e) ? LONG : ULONG );
-     right_side = gg_define_variable(right_side_ref->field->has_attr(signable_e) ? LONG : ULONG );
-     }
- 
-   //tree dummy = gg_define_int();
-   static tree hilo_left  = gg_define_variable(INT, "..cbb_hilo_left",  vs_file_static);
-   static tree hilo_right = gg_define_variable(INT, "..cbb_hilo_right", vs_file_static);
- 
-   get_binary_value(left_side,
-                    NULL,
-                    left_side_ref->field,
-                    refer_offset(*left_side_ref),
-                    hilo_left);
-   get_binary_value(right_side,
-                    NULL,
-                    right_side_ref->field,
-                    refer_offset(*right_side_ref),
-                    hilo_right);
- 
-   IF( hilo_left, eq_op, integer_one_node )
-     {
-     // left side is hi-value
-     IF( hilo_right, eq_op, integer_one_node )
-       {
-       if( debugging )
-         {
-         gg_printf("compare_binary_binary(): left and right are HIGH-VALUE\n", NULL_TREE);
-         }
-       gg_assign(return_int, integer_zero_node);
-       }
-     ELSE
-       {
-       if( debugging )
-         {
-         gg_printf("compare_binary_binary(): left is HIGH-VALUE\n", NULL_TREE);
-         }
-       gg_assign(return_int, integer_one_node);
-       }
-       ENDIF
-     }
-   ELSE
-     {
-     // left is not HIGH-VALUE:
-     IF( hilo_left, eq_op, integer_minus_one_node )
-       {
-       // left side is LOW-VALUE
-       IF( hilo_right, eq_op, integer_minus_one_node )
-         {
-         if( debugging )
-           {
-           gg_printf("compare_binary_binary(): left and right are LOW-VALUE\n", NULL_TREE);
-           }
-         gg_assign(return_int, integer_zero_node);
-         }
-       ELSE
-         {
-         // Right side is not low-value
-         if( debugging )
-           {
-           gg_printf("compare_binary_binary(): left is LOW-VALUE\n", NULL_TREE);
-           }
-         gg_assign(return_int, integer_one_node);
-         }
-         ENDIF
-       }
-     ELSE
-       {
-       // Left side is normal
-       IF( hilo_right, eq_op, integer_one_node )
-         {
-         if( debugging )
-           {
-           gg_printf("compare_binary_binary(): right is HIGH-VALUE\n", NULL_TREE);
-           }
-         gg_assign(return_int, integer_minus_one_node);
-         }
-       ELSE
-         {
-         IF( hilo_right, eq_op, integer_minus_one_node )
-           {
-           if( debugging )
-             {
-             gg_printf("compare_binary_binary(): right is LOW-VALUE\n", NULL_TREE);
-             }
-           gg_assign(return_int, integer_one_node);
-           }
-         ELSE
-           {
-           if( debugging )
-             {
-             gg_printf("compare_binary_binary(): left and right are normal\n", NULL_TREE);
-             }
-           normal_normal_compare(debugging,
-                                 return_int,
-                                 left_side_ref,
-                                 right_side_ref,
-                                 left_side,
-                                 right_side
-                                 );
-           }
-           ENDIF
-         }
-         ENDIF
-       }
-       ENDIF
-     }
-     ENDIF
-   }
- 
- #define DEBUG_COMPARE
- 
- static void
- cobol_compare(  tree return_int,
-                 cbl_refer_t &left_side_ref,
-                 cbl_refer_t &right_side_ref )
-   {
-   Analyze();
- // gg_printf("cobol_compare %s %s \"%s\" \"%s\"\n",
-           // gg_string_literal(left_side_ref.field->name),
-           // gg_string_literal(right_side_ref.field->name),
-           // member(left_side_ref.field, "data"),
-           // gg_string_literal(right_side_ref.field->data.original()),
-           // NULL_TREE);
- 
-   CHECK_FIELD(left_side_ref.field);
-   CHECK_FIELD(right_side_ref.field);
-   // This routine is in support of conditionals in the COBOL program.
-   // It takes two arbitrary COBOL variables from the parser and compares them
-   // according to a nightmarish set of rules.
- 
-   // See ISO/IEC 1989:2014(E) section 8.8.4.1.1 (page 153)
- 
-   // The return_int value is -1 when left_side  < right_side
-   //                          0      left_side == right_side
-   //                          1      left_side  > right_side
- 
-   bool compared = false;
- 
-   // In the effort to convert to in-line GIMPLE comparisons, I became flummoxed
-   // by comparisons involving REFMODs.  This will have to be revisited, but for
-   // now I decided to keep using the libgcobol code, which according to NIST
-   // works properly.
- 
-   if(    !left_side_ref.refmod.from
-       && !left_side_ref.refmod.len
-       && !right_side_ref.refmod.from
-       && !right_side_ref.refmod.len )
-     {
-     cbl_refer_t *lefty = &left_side_ref;
-     cbl_refer_t *righty = &right_side_ref;
- 
-     int ntries = 1;
-     while( ntries <= 2 )
-       {
-       switch( lefty->field->type )
-         {
-         case FldLiteralN:
-           {
-           switch( righty->field->type )
-             {
-             case FldLiteralN:
-             case FldNumericBinary:
-             case FldNumericBin5:
-             case FldPacked:
-             case FldNumericDisplay:
-             case FldIndex:
-               compare_binary_binary(return_int, lefty, righty);
-               compared = true;
-               break;
- 
-             case FldGroup:
-             case FldAlphanumeric:
-               {
-               // Comparing a FldLiteralN to an alphanumeric.  The alphanumeric
-               // is encoded in its codeset.encoding, but the FldLiteralN is,
-               // in accordance with the rules in cbl_field_t::internalize,
-               // encoded in the source-code encoding.  The routine we are about
-               // to call assumes that the literal string is encoded the same
-               // as the alphanumeric, so we have to make it match.
-               size_t outlength;
-               cbl_encoding_t enc_right = righty->field->codeset.encoding;
-               char *converted = __gg__iconverter(
-                                          DEFAULT_SOURCE_ENCODING,
-                                          enc_right,
-                                          lefty->field->data.original(),
-                                          strlen(lefty->field->data.original()),
-                                          &outlength );
-               gg_assign(  return_int, gg_call_expr(
-                           INT,
-                           "__gg__literaln_alpha_compare",
-                           gg_string_literal(converted),
-                           gg_get_address_of(righty->field->var_decl_node),
-                           refer_offset(*righty),
-                           refer_size_source(  *righty),
-                           build_int_cst_type(INT,
-                                         (righty->all ? REFER_T_MOVE_ALL : 0)),
-                           NULL_TREE));
-               compared = true;
-               break;
-               }
- 
-             case FldLiteralA:
-               {
-               // Comparing a FldLiteralN to an FldLiteralA.
-               // lefty->field->data.original() is the numeric string in ASCII.
-               // righty->field->data.original() is original alphanumeric
-               // string in ASCII.
-               int icmp = strcmp(lefty->field->data.original(),
-                                 righty->field->data.original());
-               gg_assign(return_int, build_int_cst_type(INT, icmp));
-               compared = true;
-               break;
-               }
- 
- 
-             default:
-               break;
-             }
-           break;
-           }
- 
-         case FldNumericBin5:
-         case FldNumericBinary:
-         case FldPacked:
-         case FldNumericDisplay:
-           {
-           switch( righty->field->type )
-             {
-             case FldNumericBin5:
-             case FldNumericBinary:
-             case FldPacked:
-             case FldNumericDisplay:
-               {
-               compare_binary_binary(return_int, lefty, righty);
-               compared = true;
-               break;
-               }
- 
-             default:
-               break;
-             }
-           break;
-           }
- 
-         default:
-           break;
-         }
-       if( compared )
-         {
-         break;
-         }
-       // We weren't able to compare left/right.  Let's see if we understand
-       // right/left
-       std::swap(lefty, righty);
-       ntries += 1;
-       }
- 
-     if( compared && ntries == 2 )
-       {
-       // We have a successful comparision, but we managed it on the second try,
-       // which means our result has the wrong sign.  Fix it:
-       gg_assign(return_int, gg_negate(return_int));
-       }
-     }
- 
-   if( !compared )
-     {
-     // None of our explicit comparisons up above worked, so we revert to the
-     // general case:
-     int leftflags  =   (left_side_ref.all          ? REFER_T_MOVE_ALL   : 0)
-                     +  (left_side_ref.addr_of      ? REFER_T_ADDRESS_OF : 0)
-                     +  (left_side_ref.refmod.from  ? REFER_T_REFMOD     : 0);
-     int rightflags =   (right_side_ref.all         ? REFER_T_MOVE_ALL   : 0)
-                     +  (right_side_ref.addr_of     ? REFER_T_ADDRESS_OF : 0)
-                     +  (right_side_ref.refmod.from ? REFER_T_REFMOD     : 0);
- 
-     gg_assign(  return_int, gg_call_expr(
-                 INT,
-                 "__gg__compare",
-                 gg_get_address_of(left_side_ref.field->var_decl_node),
-                 refer_offset(left_side_ref),
-                 refer_size_source(  left_side_ref),
-                 build_int_cst_type(INT, leftflags),
-                 gg_get_address_of(right_side_ref.field->var_decl_node),
-                 refer_offset(right_side_ref),
-                 refer_size_source(  right_side_ref),
-                 build_int_cst_type(INT, rightflags),
-                 integer_zero_node,
-                 NULL_TREE));
-     // compared = true;  // Commented out to quiet cppcheck
-     }
-   }
- 
  static char *
  combined_name(const cbl_label_t *label)
    {
--- 1948,1953 ----
*************** parser_enter_file(const char *filename)
*** 3604,3626 ****
      SET_VAR_DECL(var_decl_call_parameter_lengths   , build_array_type(SIZE_T, NULL),
                                                              "__gg__call_parameter_lengths");
  
-     SET_VAR_DECL(var_decl_arithmetic_rounds_size  , SIZE_T , "__gg__arithmetic_rounds_size");
-     SET_VAR_DECL(var_decl_arithmetic_rounds       , INT_P  , "__gg__arithmetic_rounds");
-     SET_VAR_DECL(var_decl_fourplet_flags_size     , SIZE_T , "__gg__fourplet_flags_size");
-     SET_VAR_DECL(var_decl_fourplet_flags          , INT_P  , "__gg__fourplet_flags");
- 
-     SET_VAR_DECL(var_decl_treeplet_1f             , cblc_field_pp_type_node , "__gg__treeplet_1f"     );
-     SET_VAR_DECL(var_decl_treeplet_1o             , SIZE_T_P                , "__gg__treeplet_1o"     );
-     SET_VAR_DECL(var_decl_treeplet_1s             , SIZE_T_P                , "__gg__treeplet_1s"     );
-     SET_VAR_DECL(var_decl_treeplet_2f             , cblc_field_pp_type_node , "__gg__treeplet_2f"     );
-     SET_VAR_DECL(var_decl_treeplet_2o             , SIZE_T_P                , "__gg__treeplet_2o"     );
-     SET_VAR_DECL(var_decl_treeplet_2s             , SIZE_T_P                , "__gg__treeplet_2s"     );
-     SET_VAR_DECL(var_decl_treeplet_3f             , cblc_field_pp_type_node , "__gg__treeplet_3f"     );
-     SET_VAR_DECL(var_decl_treeplet_3o             , SIZE_T_P                , "__gg__treeplet_3o"     );
-     SET_VAR_DECL(var_decl_treeplet_3s             , SIZE_T_P                , "__gg__treeplet_3s"     );
-     SET_VAR_DECL(var_decl_treeplet_4f             , cblc_field_pp_type_node , "__gg__treeplet_4f"     );
-     SET_VAR_DECL(var_decl_treeplet_4o             , SIZE_T_P                , "__gg__treeplet_4o"     );
-     SET_VAR_DECL(var_decl_treeplet_4s             , SIZE_T_P                , "__gg__treeplet_4s"     );
      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"     );
--- 2991,2996 ----
*************** parser_enter_program( const char *funcna
*** 3850,3856 ****
      }
  
  #ifdef ENABLE_HIJACKING
!   if( strcmp(funcname, "dubner") == 0)
      {
      fprintf(stderr, "This is a DUBNER hijacking\n");
      hijack_for_development(funcname);
--- 3220,3226 ----
      }
  
  #ifdef ENABLE_HIJACKING
!   if( strcmp(funcname, "dubner_h") == 0)
      {
      fprintf(stderr, "This is a DUBNER hijacking\n");
      hijack_for_development(funcname);
*************** dirty_to_binary(const char  *instring,
*** 4487,4492 ****
--- 3857,3992 ----
    return value;
    }
  
+ static tree
+ data_decl_type_for(cbl_field_t *field)
+   {
+   // The idea behind this function is to provide a useful data_type for the
+   // the data_decl_node for the field.  Where we can get it right, we do, like
+   // for little-endian FldNumericBin3.  For other types of 1, 2, 4, 8, or 16
+   // bytes, we alias it to uint8_t, uint16_t, and so on.  The idea there is to
+   // be able to create efficient GENERIC for doing moves between identical
+   // types.  Otherwise we generate a type for an array of uint8_t.
+   tree retval = NULL_TREE;
+   switch(field->type)
+     {
+     case FldGroup:
+       break;
+     case FldAlphanumeric:
+       break;
+     case FldNumericBinary:
+       break;
+     case FldFloat:
+       if( field->attr & ieeedec_e )
+         {
+         cbl_internal_error("%s: called with the unimplemented %s flag for %s",
+                             __func__,
+                             "IEEE",
+                             field->name);
+         }
+       switch(field->data.capacity())
+         {
+         case 4:
+           retval = FLOAT;
+           break;
+         case 8:
+           retval = DOUBLE;
+           break;
+         case 16:
+           retval = FLOAT128;
+           break;
+         }
+       break;
+     case FldPacked:
+       break;
+     case FldNumericBin5:
+       if( field->attr & signable_e )
+         {
+         // Because it is signable, we handle it here.  Unsigned fall through
+         // to the default handler
+         switch(field->data.capacity())
+           {
+           case 1:
+             retval = CHAR;
+             break;
+           case 2:
+             retval = SHORT;
+             break;
+           case 4:
+             retval = INT;
+             break;
+           case 8:
+             retval = LONG;
+             break;
+           case 16:
+             retval = INT128;
+             break;
+           default:
+             cbl_internal_error("%s: called with type %s but strange byte count for %s",
+                                 __func__,
+                                 cbl_field_type_str(field->type),
+                                 field->name);
+             retval = NULL_TREE;
+             break;
+           }
+         }
+       break;
+     case FldNumericDisplay:
+       break;
+     case FldNumericEdited:
+       break;
+     case FldAlphaEdited:
+       break;
+     case FldClass:
+       // Doesn't actually need storage, but we give it one character to avoid
+       // having a NULL data pointer.
+       retval = UCHAR;
+       break;
+     case FldIndex:
+       break;
+     case FldPointer:
+       break;
+     default:
+       cbl_internal_error("%s: called with type %s for %s",
+                           __func__,
+                           cbl_field_type_str(field->type),
+                           field->name);
+       retval = NULL_TREE;
+       break;
+     }
+   // At this point, if there isn't already an assigned type, we specify an
+   // unsigned integer scalar if we can, and otherwise an array of uint8_t.
+ 
+   if( !retval )
+     {
+     size_t bytes_needed = std::max(field->data.memsize,
+                                                  field->data.capacity());
+     switch(bytes_needed)
+       {
+       case 1:
+         retval = UCHAR;
+         break;
+       case 2:
+         retval = USHORT;
+         break;
+       case 4:
+         retval = UINT;
+         break;
+       case 8:
+         retval = ULONG;
+         break;
+       case 16:
+         retval = UINT128;
+         break;
+       default:
+         retval = build_array_type_nelts(UCHAR, bytes_needed);
+         break;
+       }
+     }
+ 
+   return retval;
+   }
+ 
+ 
  static void
  psa_FldLiteralN(struct cbl_field_t *field )
    {
*************** parser_alphabet_use( cbl_alphabet_t& alp
*** 5350,5355 ****
--- 4850,4857 ----
  
    uint64_t alphabet_index = symbol_unique_index(symbol_elem_of(&alphabet));
  
+   current_function->alphabet_in_use = true;
+ 
    switch(alphabet.encoding)
      {
      default:
*************** parser_display( const struct cbl_special
*** 5775,5783 ****
      parser_display_internal(file_descriptor, refs[i], DISPLAY_NO_ADVANCE);
      }
    CHECK_FIELD(refs[n-1].field);
!   parser_display_internal(file_descriptor,
!                           refs[n-1],
!                           advance ? DISPLAY_ADVANCE : DISPLAY_NO_ADVANCE);
    if( needs_closing )
      {
      gg_close(file_descriptor);
--- 5277,5302 ----
      parser_display_internal(file_descriptor, refs[i], DISPLAY_NO_ADVANCE);
      }
    CHECK_FIELD(refs[n-1].field);
! 
!   if(    upon
!       && upon->id == SYSPUNCH_e
!       && getenv("ASSEMBLER")
!       && refs[n-1].field
!       && refs[n-1].field->type == FldLiteralA )
!     {
!     // That combination means we want to put the text into the assembly
!     // language.  This is a compile-time operation, so the field has to be
!     // a FldLiteralA.
!     gg_insert_into_assemblerf( "%s %s",
!                               ASM_COMMENT_START,
!                               refs[n-1].field->data.original());
!     }
!   else
!     {
!     parser_display_internal(file_descriptor,
!                             refs[n-1],
!                             advance ? DISPLAY_ADVANCE : DISPLAY_NO_ADVANCE);
!     }
    if( needs_closing )
      {
      gg_close(file_descriptor);
*************** program_end_stuff(cbl_refer_t refer,
*** 6613,6626 ****
    // We need the just_once state because this routine can be called more than
    // once.  Usually the parser handles it, but we have a "just-in-case" call
    // in parser_end_program() that sometimes is necessary.
!   if(just_once && strcmp(current_function->our_name, "hijack") == 0)
      {
      just_once = false;
      fprintf(stderr, "This is a HIJACK BEFORE EXIT scenario.\n");
      hijacker();
      }
  #endif
- 
    // This is the moral equivalent of a C "return xyz;".
  
    // There cannot be both a non-zero exit status and an exception condition.
--- 6132,6144 ----
    // We need the just_once state because this routine can be called more than
    // once.  Usually the parser handles it, but we have a "just-in-case" call
    // in parser_end_program() that sometimes is necessary.
!   if(just_once && strcmp(current_function->our_name, "hijack_h") == 0)
      {
      just_once = false;
      fprintf(stderr, "This is a HIJACK BEFORE EXIT scenario.\n");
      hijacker();
      }
  #endif
    // This is the moral equivalent of a C "return xyz;".
  
    // There cannot be both a non-zero exit status and an exception condition.
*************** parser_division(cbl_division_t division,
*** 7876,7885 ****
      // Stash the returning variables for use during parser_return()
      current_function->returning = returning;
  
      current_function->var_decl_return =
!     gg_indirect(gg_cast(SHORT_P,
!         member(cbl_field_of(symbol_at(return_code_register()))->var_decl_node,
!                "data")));
  
      if( gg_trans_unit.function_stack.size() == 1 )
        {
--- 7394,7403 ----
      // Stash the returning variables for use during parser_return()
      current_function->returning = returning;
  
+     cbl_field_t *return_code = cbl_field_of(symbol_at(return_code_register()));
      current_function->var_decl_return =
!             gg_indirect(gg_cast(SHORT_P,
!                                 member(return_code->var_decl_node, "data")));
  
      if( gg_trans_unit.function_stack.size() == 1 )
        {
*************** parser_division(cbl_division_t division,
*** 7963,7969 ****
        {
        }
      ENDIF
- 
      current_function->pseudo_return_index =
                  gg_define_variable(SIZE_T, "_pseudo_return_index", vs_static);
  
--- 7481,7486 ----
*************** parser_logop( struct cbl_field_t *tgt,
*** 8049,8066 ****
        }
      }
  
-   switch(logop)
-     {
-     case and_op:
-     case or_op:
-     case xor_op:
-     case xnor_op:
-       CHECK_FIELD(a);
-       break;
-     default:
-       break;
-     }
- 
    // This routine takes two conditionals and a logical operator.  From those,
    // it creates and returns another conditional:
  
--- 7566,7571 ----
*************** parser_logop( struct cbl_field_t *tgt,
*** 8086,8140 ****
    switch( logop )
      {
      case and_op:
!       gg_assign(tgt->var_decl_node, gg_build_logical_expression(
!                   a->var_decl_node,
!                   and_op,
!                   b->var_decl_node));
        break;
  
      case or_op:
!       gg_assign(tgt->var_decl_node, gg_build_logical_expression(
                    a->var_decl_node,
                    or_op,
!                   b->var_decl_node));
        break;
  
      case not_op:
!       gg_assign(tgt->var_decl_node, gg_build_logical_expression(
                    NULL,
                    not_op,
!                   b->var_decl_node));
        break;
  
      case xor_op:
!       gg_assign(tgt->var_decl_node, gg_build_logical_expression(
                    a->var_decl_node,
                    xor_op,
!                   b->var_decl_node));
        break;
  
      case xnor_op:
        {
!       gg_assign(  tgt->var_decl_node,
                    gg_build_logical_expression(a->var_decl_node,
                                                xor_op,
!                                               b->var_decl_node));
  
        // I need to negate the result.
  
!       gg_assign(tgt->var_decl_node, gg_build_logical_expression(
                    NULL,
                    not_op,
!                   tgt->var_decl_node));
        }
      break;
  
      case true_op:
!       gg_assign(tgt->var_decl_node, boolean_true_node);
        break;
  
      case false_op:
!       gg_assign(tgt->var_decl_node, boolean_false_node);
        break;
      }
  
--- 7591,7645 ----
    switch( logop )
      {
      case and_op:
!       tgt->var_decl_node = gg_build_logical_expression(
!                         a->var_decl_node,
!                         and_op,
!                         b->var_decl_node);
        break;
  
      case or_op:
!       tgt->var_decl_node = gg_build_logical_expression(
                    a->var_decl_node,
                    or_op,
!                   b->var_decl_node);
        break;
  
      case not_op:
!       tgt->var_decl_node = gg_build_logical_expression(
                    NULL,
                    not_op,
!                   b->var_decl_node);
        break;
  
      case xor_op:
!       tgt->var_decl_node = gg_build_logical_expression(
                    a->var_decl_node,
                    xor_op,
!                   b->var_decl_node);
        break;
  
      case xnor_op:
        {
!       tgt->var_decl_node =
                    gg_build_logical_expression(a->var_decl_node,
                                                xor_op,
!                                               b->var_decl_node);
  
        // I need to negate the result.
  
!       tgt->var_decl_node = gg_build_logical_expression(
                    NULL,
                    not_op,
!                   tgt->var_decl_node);
        }
      break;
  
      case true_op:
!       tgt->var_decl_node = boolean_true_node;
        break;
  
      case false_op:
!       tgt->var_decl_node = boolean_false_node;
        break;
      }
  
*************** parser_relop(   cbl_field_t *tgt,
*** 8190,8206 ****
                         tgt->name);
      }
  
!   static tree comp_res = gg_define_variable(INT, "..pr_comp_res", vs_file_static);
!   cobol_compare(comp_res, aref, bref);
! 
!   // 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,
!                   integer_zero_node));
    TRACE1
      {
      TRACE1_INDENT
--- 7695,7706 ----
                         tgt->name);
      }
  
!   tree left;
!   tree right;
!   cobol_compare_relop(left, right, aref, bref);
!   tgt->var_decl_node = gg_build_relational_expression(left,
!                                                       relop,
!                                                       right);
    TRACE1
      {
      TRACE1_INDENT
*************** parser_relop_long(cbl_field_t *tgt,
*** 8246,8252 ****
  
    // This routine builds the relational expression and returns the TREE as
    // a conditional:
- 
    if( tgt->type != FldConditional )
      {
      cbl_internal_error("%<parser_relop()%> was called with variable %s, "
--- 7746,7751 ----
*************** parser_relop_long(cbl_field_t *tgt,
*** 8255,8266 ****
      }
  
    tree tree_a  = build_int_cst_type(LONG, avalue);
!   static tree tree_b  = gg_define_variable(LONG, "..prl_tree_b", vs_file_static);
    get_binary_value( tree_b,
                      NULL,
                      bref.field,
                      refer_offset(bref) );
!   static tree comp_res = gg_define_variable(LONG, "..prl_comp_res", vs_file_static);
    gg_assign(comp_res, gg_subtract(tree_a, tree_b));
  
    // comp_res is negative, zero, position for less-than, equal-to, greater-than
--- 7754,7765 ----
      }
  
    tree tree_a  = build_int_cst_type(LONG, avalue);
!   tree tree_b  = gg_define_variable(LONG);
    get_binary_value( tree_b,
                      NULL,
                      bref.field,
                      refer_offset(bref) );
!   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
*************** inspect_tally(bool backward,
*** 11075,11081 ****
    gcc_assert(pcbl_index == n_resolveds);
  
    // We have built up an array of integers, and an array of cbl_refer_t.
!   build_array_of_treeplets(1, pcbl_index, pcbl_refers.data());
  
    // Do the actual call:
    charmap_t *charmap = __gg__get_charmap(identifier_1.field->codeset.encoding);
--- 10574,10580 ----
    gcc_assert(pcbl_index == n_resolveds);
  
    // We have built up an array of integers, and an array of cbl_refer_t.
!   tree params = build_array_of_referlets(pcbl_index, pcbl_refers.data());
  
    // Do the actual call:
    charmap_t *charmap = __gg__get_charmap(identifier_1.field->codeset.encoding);
*************** inspect_tally(bool backward,
*** 11086,11091 ****
--- 10585,10591 ----
              "__gg__inspect_format_1_sbc",
              backward ? integer_one_node : integer_zero_node,
              integers,
+             params,
              NULL_TREE);
      }
    else
*************** inspect_tally(bool backward,
*** 11094,11099 ****
--- 10594,10600 ----
              "__gg__inspect_format_1",
              backward ? integer_one_node : integer_zero_node,
              integers,
+             params,
              NULL_TREE);
      }
    }
*************** inspect_replacing(int backward,
*** 11290,11302 ****
        }
      }
  
!   build_array_of_treeplets(1, pcbl_index, pcbl_refers.data());
  
    // Do the actual call:
    gg_call(VOID,
            "__gg__inspect_format_2",
            backward ? integer_one_node : integer_zero_node,
            integers,
            NULL_TREE);
    }
  
--- 10791,10804 ----
        }
      }
  
!   tree params = build_array_of_referlets(pcbl_index, pcbl_refers.data());
  
    // Do the actual call:
    gg_call(VOID,
            "__gg__inspect_format_2",
            backward ? integer_one_node : integer_zero_node,
            integers,
+           params,
            NULL_TREE);
    }
  
*************** parser_intrinsic_subst( cbl_field_t *f,
*** 11540,11550 ****
  
    tree control = gg_array_of_bytes(argc, control_bytes);
  
!   build_array_of_treeplets(1, argc, arg1.data());
!   build_array_of_treeplets(2, argc, arg2.data());
  
    gg_call(VOID,
            "__gg__substitute",
            gg_get_address_of(f->var_decl_node),
            gg_get_address_of(ref1.field->var_decl_node),
            refer_offset(ref1),
--- 11042,11054 ----
  
    tree control = gg_array_of_bytes(argc, control_bytes);
  
!   tree ref_arg1 = build_array_of_referlets(argc, arg1.data());
!   tree ref_arg2 = build_array_of_referlets(argc, arg2.data());
  
    gg_call(VOID,
            "__gg__substitute",
+           ref_arg1,
+           ref_arg2,
            gg_get_address_of(f->var_decl_node),
            gg_get_address_of(ref1.field->var_decl_node),
            refer_offset(ref1),
*************** parser_intrinsic_callv( cbl_field_t *tgt
*** 11599,11610 ****
    store_location_stuff(function_name);
    tree ncount = build_int_cst_type(SIZE_T, nrefs);
  
!   build_array_of_fourplets(1, nrefs, refs);
  
    gg_call(VOID,
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            ncount,
            NULL_TREE);
  
    TRACE1
--- 11103,11115 ----
    store_location_stuff(function_name);
    tree ncount = build_int_cst_type(SIZE_T, nrefs);
  
!   tree refers = build_array_of_refers(nrefs, refs);
  
    gg_call(VOID,
            function_name,
            gg_get_address_of(tgt->var_decl_node),
            ncount,
+           refers,
            NULL_TREE);
  
    TRACE1
*************** parser_intrinsic_call_1( cbl_field_t *tg
*** 11815,11824 ****
        TRACE1_INDENT
        TRACE1_REFER("parameter: ", ref1, "")
        }
-             gg_get_address_of(tgt->var_decl_node);
-             gg_get_address_of(ref1.field->var_decl_node);
-             refer_offset(ref1);
-             refer_size_source(ref1);
  
      gg_call(VOID,
              function_name,
--- 11320,11325 ----
*************** parser_bsearch_start(   cbl_label_t* nam
*** 12325,12333 ****
    gg_assign(bsearch->left, build_int_cst_type(LONG, 1));
    depending_on_value(bsearch->right, current);
  
-   // Create the variable that will take the compare result.
-   bsearch->compare_result = gg_define_int();
- 
    // We now jump to the top of the binary testing loop, which comes right
    // after the labels where we handle non-equal cases:
    gg_append_statement(bsearch->top.go_to);
--- 11826,11831 ----
*************** done:
*** 12452,12459 ****
  
  void
  parser_bsearch_when(cbl_label_t* name,
!                     cbl_refer_t key,
!                     cbl_refer_t sarg,
                      bool ascending)
    {
    Analyze();
--- 11950,11957 ----
  
  void
  parser_bsearch_when(cbl_label_t* name,
!               const cbl_refer_t &key,
!               const cbl_refer_t &sarg,
                      bool ascending)
    {
    Analyze();
*************** parser_bsearch_when(cbl_label_t* name,
*** 12469,12496 ****
      }
    cbl_bsearch_t *bsearch = name->structs.bsearch;
  
    if( ascending )
      {
!     cobol_compare(  bsearch->compare_result,
!                     key,
!                     sarg );
      }
    else
      {
!     cobol_compare(  bsearch->compare_result,
!                     sarg,
!                     key );
      }
  
!   IF( bsearch->compare_result, lt_op, integer_zero_node )
!   // The key is smaller than sarg:
!   gg_append_statement(bsearch->too_small.go_to);
!   ELSE
!   ENDIF
!   IF( bsearch->compare_result, gt_op, integer_zero_node )
!   // The key is larger than sarg:
!   gg_append_statement(bsearch->too_big.go_to);
    ELSE
    ENDIF
  
    // We are at the Goldilocks point.  The clause has been satisfied with
--- 11967,11998 ----
      }
    cbl_bsearch_t *bsearch = name->structs.bsearch;
  
+   tree left;
+   tree right;
    if( ascending )
      {
!     cobol_compare_relop(left, right, key, sarg);
      }
    else
      {
!     cobol_compare_relop(left, right, sarg, key);
      }
  
!   IF( left, lt_op, right )
!     {
!     gg_append_statement(bsearch->too_small.go_to);
!     }
    ELSE
+     {
+     IF( left, gt_op, right )
+       {
+       gg_append_statement(bsearch->too_big.go_to);
+       }
+     ELSE
+       {
+       }
+     ENDIF
+     }
    ENDIF
  
    // We are at the Goldilocks point.  The clause has been satisfied with
*************** parser_unstring(cbl_refer_t src,
*** 13358,13372 ****
  
    tree t_alls         = build_string_literal(ndelimited+1, alls);
  
!   build_array_of_treeplets(1, ndelimited, delims.data());
!   build_array_of_treeplets(2, noutputs,   outputs);
!   build_array_of_treeplets(3, noutputs,   delimiters);
!   build_array_of_treeplets(4, noutputs,   counts);
  
    tree t_overflow = gg_define_int();
    gg_assign(t_overflow,
              gg_call_expr( INT,
                            "__gg__unstring",
                            gg_get_address_of(src.field->var_decl_node),
                            refer_offset(src),
                            refer_size_source(src),
--- 12860,12878 ----
  
    tree t_alls         = build_string_literal(ndelimited+1, alls);
  
!   tree ref_data       = build_array_of_referlets(ndelimited, delims.data());
!   tree ref_outputs    = build_array_of_referlets(noutputs,   outputs);
!   tree ref_delimiters = build_array_of_referlets(noutputs,   delimiters);
!   tree ref_counts     = build_array_of_referlets(noutputs,   counts);
  
    tree t_overflow = gg_define_int();
    gg_assign(t_overflow,
              gg_call_expr( INT,
                            "__gg__unstring",
+                           ref_data,
+                           ref_outputs,
+                           ref_delimiters,
+                           ref_counts,
                            gg_get_address_of(src.field->var_decl_node),
                            refer_offset(src),
                            refer_size_source(src),
*************** parser_string(const cbl_refer_t& tgt,
*** 13442,13448 ****
    size_t *integers = static_cast<size_t *>(xmalloc((nsource+1)*sizeof(size_t)));
    gcc_assert(integers);
  
!   // Count up how many treeplets we are going to need:
    size_t cblc_count = 2;  // tgt and pointer
    for(size_t i=0; i<nsource; i++)
      {
--- 12948,12954 ----
    size_t *integers = static_cast<size_t *>(xmalloc((nsource+1)*sizeof(size_t)));
    gcc_assert(integers);
  
!   // Count up how many referlets we are going to need:
    size_t cblc_count = 2;  // tgt and pointer
    for(size_t i=0; i<nsource; i++)
      {
*************** parser_string(const cbl_refer_t& tgt,
*** 13473,13485 ****
    gcc_assert(index_cblc == cblc_count);
  
    tree pintegers = build_array_of_size_t( index_int, integers);
! 
!   build_array_of_treeplets(1, index_cblc, refers.data());
  
    tree t_overflow = gg_define_int();
    gg_assign(t_overflow, gg_call_expr( INT,
                                        "__gg__string",
                                        pintegers,
                                        NULL_TREE));
    gg_free(pintegers);
  
--- 12979,12991 ----
    gcc_assert(index_cblc == cblc_count);
  
    tree pintegers = build_array_of_size_t( index_int, integers);
!   tree referlets = build_array_of_referlets(index_cblc, refers.data());
  
    tree t_overflow = gg_define_int();
    gg_assign(t_overflow, gg_call_expr( INT,
                                        "__gg__string",
                                        pintegers,
+                                       referlets,
                                        NULL_TREE));
    gg_free(pintegers);
  
*************** create_and_call(size_t narg,
*** 13948,13957 ****
      }
    else
      {
!     // Because no explicit returning value is expected, we call the designated
!     // function and assign the return value to our RETURN-CODE
      push_program_state();
!     gg_assign(current_function->var_decl_return, gg_cast(SHORT, call_expr));
      pop_program_state();
      }
  
--- 13454,13473 ----
      }
    else
      {
!     // There is no explicit location to assign the returned value.
      push_program_state();
!     if( dialect_ibm() )
!       {
!       // Because no explicit returning value is expected, we call the
!       // designated function and assign the return value to our RETURN-CODE.
!       gg_assign(current_function->var_decl_return, gg_cast(SHORT, call_expr));
!       }
!     else
!       {
!       // Because it is not IBM, we execute the called function and ignore the
!       // any returned value.
!       gg_append_statement(call_expr);
!       }
      pop_program_state();
      }
  
*************** parser_call(   cbl_refer_t name,
*** 14118,14140 ****
          }
        else
          {
!         tree mangled_name = gg_define_variable(CHAR_P);
! 
!         gg_call(VOID,
!                 "__gg__just_mangle_name",
!                 (name.field->var_decl_node
!                                 ? gg_get_address_of(name.field->var_decl_node)
!                                 : null_pointer_node),
!                 gg_get_address_of(  mangled_name),
!                 NULL_TREE);
  
!         gg_printf("WARNING: %s:%d \"CALL %s\" not found"
!                   " with no \"CALL ON EXCEPTION\" phrase.\n"
!                   "(You might need -rdynamic or --export-dynamic for symbols in the executable.)\n",
!                   gg_string_literal(current_filename.back().c_str()),
!                   build_int_cst_type(INT, CURRENT_LINE_NUMBER),
!                   mangled_name,
                    NULL_TREE);
          }
        }
      ENDIF
--- 13634,13662 ----
          }
        else
          {
!         // When EC-PROGRAM-NOT-FOUND is not enabled, we issue a warning.
!         const cbl_enabled_exceptions_t&
!                                 enabled_exceptions( cdf_enabled_exceptions() );
!         if( !enabled_exceptions.match(ec_program_not_found_e) )
!           {
!           tree mangled_name = gg_define_variable(CHAR_P);
  
!           gg_call(VOID,
!                   "__gg__just_mangle_name",
!                   (name.field->var_decl_node
!                                   ? gg_get_address_of(name.field->var_decl_node)
!                                   : null_pointer_node),
!                   gg_get_address_of(  mangled_name),
                    NULL_TREE);
+ 
+           gg_printf("WARNING: %s:%d \"CALL %s\" not found"
+                     " with no \"CALL ON EXCEPTION\" phrase.\n"
+                     "(You might need -rdynamic or --export-dynamic for symbols in the executable.)\n",
+                     gg_string_literal(current_filename.back().c_str()),
+                     build_int_cst_type(INT, CURRENT_LINE_NUMBER),
+                     mangled_name,
+                     NULL_TREE);
+           }
          }
        }
      ENDIF
*************** build_temporaryN(int N)
*** 14972,14978 ****
                        array_type,
                        pszdata,
                        vs_scope);
- ////  data_decl_node = null_pointer_node;
    free(pszdata);
  
    // This is the holy grail.  With the initializer set to gg_pointer_to_array,
--- 14494,14499 ----
*************** build_temporaryN(int N)
*** 14987,14993 ****
    tree cobfield = gg_define_variable(cblc_field_type_node, psz, vs_stack);
    free(psz);
  
!   tree data = null_pointer_node;        //  UCHAR_P, "data",
    tree capacity = build_int_cst_type(SIZE_T, 16);     //  SIZE_T,  "capacity",
    tree allocated = build_int_cst_type(SIZE_T, 16);    //  SIZE_T,  "allocated",
    tree offset = build_int_cst_type(SIZE_T, 0);       //  SIZE_T,  "offset",
--- 14508,14514 ----
    tree cobfield = gg_define_variable(cblc_field_type_node, psz, vs_stack);
    free(psz);
  
!   tree data = data_area;        //  UCHAR_P, "data",
    tree capacity = build_int_cst_type(SIZE_T, 16);     //  SIZE_T,  "capacity",
    tree allocated = build_int_cst_type(SIZE_T, 16);    //  SIZE_T,  "allocated",
    tree offset = build_int_cst_type(SIZE_T, 0);       //  SIZE_T,  "offset",
*************** build_temporaryN(int N)
*** 15025,15039 ****
        tencoding,    //  INT,     "encoding",
        alphabet);    //  INT,     "alphabet",
  
-   if( data_decl_node != null_pointer_node )
-     {
-     gg_call(VOID,
-             "__gg__set_data_member",
-             gg_get_address_of(cobfield),
-             data_area,
-             NULL_TREE);
-     }
- 
    return cobfield;
    }
  #pragma GCC diagnostic pop
--- 14546,14551 ----
*************** hijack_for_development(const char *funcn
*** 15057,15063 ****
                       funcname,
                       NULL_TREE);
  
!   parser_display_literal("You have been hijacked by a program named \"dubner\"");
    gg_insert_into_assemblerf("%s HIJACKED CODE START", ASM_COMMENT_START);
  
  
--- 14569,14575 ----
                       funcname,
                       NULL_TREE);
  
!   parser_display_literal("You have been hijacked by a program named \"dubner_h\"");
    gg_insert_into_assemblerf("%s HIJACKED CODE START", ASM_COMMENT_START);
  
  
*************** hijacker()
*** 15090,15100 ****
       down.  The code here is injected just prior to the parser_exit() stuff
       in the COBOL source code. */
  
!   parser_display_literal("You have been hijacked by a program named \"hijack\"");
    gg_insert_into_assemblerf("%s HIJACKED CODE START", ASM_COMMENT_START);
  
! #if 0
  
    cbl_field_t *faaa = register_find("aaa");
    cbl_field_t *fbbb = register_find("bbb");
    cbl_field_t *fddd = register_find("ddd");
--- 14602,14628 ----
       down.  The code here is injected just prior to the parser_exit() stuff
       in the COBOL source code. */
  
!   parser_display_literal("You have been hijacked by a program named \"hijack_h\"");
    gg_insert_into_assemblerf("%s HIJACKED CODE START", ASM_COMMENT_START);
  
!   tree foo = gg_define_variable(INT);
!   IF( integer_one_node, eq_op, integer_one_node )
!     {
!     gg_printf("1 is indeed equal to 1\n", NULL_TREE);
!     gg_assign(foo, build_int_cst_type(INT, 123));
!     }
!   ELSE
!     {
!     gg_printf("1 is NOT equal to 1!\n", NULL_TREE);
!     gg_abort();
!     gg_assign(foo, build_int_cst_type(INT, 999));
!     }
!   ENDIF
!   gg_printf("\"foo\" is %d\n", foo, NULL_TREE);
  
+ #if 0
+   // Leave this around for reference; it's how you find variables set up
+   // in WORKING-STORAGE when involved in a hijack.
    cbl_field_t *faaa = register_find("aaa");
    cbl_field_t *fbbb = register_find("bbb");
    cbl_field_t *fddd = register_find("ddd");
*************** conditional_abs(tree source, const cbl_f
*** 15132,15177 ****
      }
    }
  
  static bool
  mh_identical(const cbl_refer_t &destref,
!              const cbl_refer_t &sourceref,
!              const TREEPLET    &tsource)
    {
    // Check to see if the two variables are identical types, thus allowing
    // for a simple byte-for-byte copy of the data areas:
    bool moved = false;
!   if(     destref.field->type          == sourceref.field->type
        &&  destref.field->data.capacity() == sourceref.field->data.capacity()
!       &&  destref.field->data.digits   == sourceref.field->data.digits
!       &&  destref.field->data.rdigits  == sourceref.field->data.rdigits
        &&       (destref.field->attr   & (signable_e|separate_e|leading_e))
              == (sourceref.field->attr & (signable_e|separate_e|leading_e))
        &&  destref.field->codeset.encoding == sourceref.field->codeset.encoding
-       &&  !destref.field->occurs.depending_on
-       &&  !sourceref.field->occurs.depending_on
-       &&  !destref.refmod.from
-       &&  !sourceref.refmod.len
-       &&  !(destref.field->attr   & intermediate_e) // variables with variable
-       &&  !(sourceref.field->attr & intermediate_e) // capacities have to be
-       &&  !(destref.field->attr   & any_length_e)   // handled elsewhere
-       &&  !(sourceref.field->attr & any_length_e)
        )
      {
!     // The source and destination are identical in type
!     if( !symbol_find_odo(sourceref.field) )
        {
!       Analyze();
!       // Source doesn't have a depending_on clause
!       SHOW_PARSE1
          {
!         SHOW_PARSE_INDENT
!         SHOW_PARSE_TEXT("mh_identical()");
          }
-       gg_memcpy(gg_add(member(destref.field->var_decl_node,   "data"),
-                        refer_offset(destref)),
-                 gg_add(member(sourceref.field->var_decl_node, "data"),
-                        tsource.offset),
-                 build_int_cst_type(SIZE_T, sourceref.field->data.capacity()));
        moved = true;
        }
      }
--- 14660,14914 ----
      }
    }
  
+ static tree
+ get_reference_to_data(cbl_field_t *field)
+   {
+   // Given a field, we can derive the type of data the field needs to provide.
+   // That field has a field->data_decl_node, which is the starting point for
+   // the reference to the data we calculate.
+   tree retval = NULL_TREE;
+   tree field_type = data_decl_type_for(field);
+   tree data_type  = TREE_TYPE(field->data_decl_node);
+   bool field_is_array = TREE_CODE(field_type) == ARRAY_TYPE;
+   bool data_is_array  = TREE_CODE(data_type) == ARRAY_TYPE;
+ 
+   int field_code = TREE_CODE(field_type);
+   int data_code  = TREE_CODE(data_type);
+   size_t field_size = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(field_type));
+   size_t data_size  = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(data_type));
+ 
+   if( field_code == data_code && field_size == data_size )
+     {
+     if( !field_is_array )
+       {
+       // The two types are the same and are not ARRAY_TYPE
+       if( field->offset == 0 )
+         {
+         // This is an "ah, that feels good" moment.  Getting here means the
+         // field is something like "77 foo pic 9999" and that means the
+         // data_decl_node is exactly what is needed.
+         retval = field->data_decl_node;
+         }
+       else
+         {
+         // We have an offset.
+         if( (field->offset % field_size) == 0 )
+           {
+           // The offset is an integer number of bytes from data_decl_node:
+           size_t index = field->offset % field_size;
+           retval = gg_indirect( gg_cast(build_pointer_type(data_type),
+                                      gg_get_address_of(field->data_decl_node)),
+                                build_int_cst_type(SIZE_T, index));
+           }
+         else
+           {
+           // The offset is some random number of bytes.  We need to do a
+           // retval = *(data_type *)((char *)&data_decl_node + offset)
+           tree base = gg_get_address_of(field->data_decl_node);
+           base = gg_cast(UCHAR_P, base);
+           base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
+           retval = gg_cast(field_type, gg_indirect(base));
+           }
+         }
+       }
+     else
+       {
+       // The two types are the same ARRAY_TYPE
+       retval = gg_cast(UCHAR_P, gg_pointer_to_array(field->data_decl_node));
+       if( field->offset )
+         {
+         retval = gg_add(retval, build_int_cst_type(SIZE_T, field->offset));
+         }
+       }
+     }
+   else if( field_is_array && data_is_array )
+     {
+     // We have two different array types
+     retval = gg_cast(UCHAR_P, gg_pointer_to_array(field->data_decl_node));
+     if( field->offset )
+       {
+       retval = gg_add(retval, build_int_cst_type(SIZE_T, field->offset));
+       }
+     }
+   else if( !field_is_array && !data_is_array )
+     {
+     // The two data types are different, and neither is an array
+     if( field->offset == 0 )
+       {
+       if( field_size == data_size )
+         {
+         // The offset is zero, and the sizes are the same.
+         // This must be something like REDEFINES or the like:
+         retval = gg_cast(field_type, field->data_decl_node);
+         }
+       else
+         {
+         // The sizes are different:
+         // retval = *(data_type *)((char *)&data_decl_node)
+         tree base = gg_get_address_of(field->data_decl_node);
+         retval = gg_indirect(gg_cast(build_pointer_type(field_type), base));
+         }
+       }
+     else
+       {
+       // There is an offset
+       tree base = gg_get_address_of(field->data_decl_node);
+       base = gg_cast(UCHAR_P, base);
+       base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
+       retval = gg_indirect(gg_cast(build_pointer_type(field_type), base));
+       }
+     }
+   else if( !field_is_array && data_is_array )
+     {
+     // The return is a scalar, but we start from an array.
+     tree base = gg_pointer_to_array(field->data_decl_node);
+     base = gg_cast(UCHAR_P, base);
+     if( field->offset )
+       {
+       base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
+       }
+     base = gg_cast(build_pointer_type(field_type), base);
+     retval = gg_indirect(base);
+     }
+   else // if( field_is_array !data_is_array )
+     {
+     // The return is an array, but we start from a scalar
+     tree base = gg_get_address_of(field->data_decl_node);
+     base = gg_cast(UCHAR_P, base);
+     if( field->offset )
+       {
+       base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
+       }
+     retval = base;
+     }
+ 
+   return retval;
+ 
+ #if 0
+   tree retval;
+   // Our job is to return a reference to the field's data decl node:
+   tree cobol_type = data_decl_type_for(field);
+   if( TREE_CODE(cobol_type) != ARRAY_TYPE )
+     {
+     // This COBOL variable is a scalar type
+     tree data_decl_type = TREE_TYPE(field->data_decl_node);
+     if( cobol_type == data_decl_type )
+       {
+       // Life is relatively easy; the data_decl_node is the type we want to
+       // end up with
+ 
+       if( field->offset == 0 )
+         {
+         // This is the ideal situation:  This is a reference to the 01 or 07
+         // member of a simple elementary variable.
+         retval = field->data_decl_node;
+         }
+       else
+         {
+         // This is slightly less desirable.
+         // Get the base address as a pointer to UCHAR
+         tree base = gg_cast(build_pointer_type(UCHAR),
+                             gg_get_address_of(field->var_decl_node));
+         // Add the offset to get a new pointer to UCHAR
+         tree base_addr = gg_add(base,
+                         build_int_cst_type(SIZE_T, field->offset));
+ 
+         // Do the equivalent of *( type *)base_addr;
+         retval =  gg_cast(cobol_type,
+                           gg_indirect(gg_cast(build_pointer_type(cobol_type),
+                                               base_addr)));
+         }
+       }
+     else
+       {
+       tree base;
+       if( TREE_CODE(data_decl_type) == ARRAY_TYPE )
+         {
+         // Our source data_decl_node is an array:
+         base = gg_pointer_to_array(field->data_decl_node);
+         }
+       else
+         {
+         // Our source data_decl_node is a scalar:
+         base = gg_get_address_of(field->data_decl_node);
+         }
+       base = gg_cast(build_pointer_type(UCHAR), base);
+       if( field->offset )
+         {
+         // Add the offset to get a new pointer to UCHAR
+         base = gg_add(base,
+                       build_int_cst_type(SIZE_T, field->offset));
+         }
+ 
+       // Do the equivalent of *( type *)base;
+       retval =  gg_cast(cobol_type,
+                         gg_indirect(gg_cast(build_pointer_type(cobol_type),
+                                             base)));
+       }
+     }
+   else
+     {
+     // This field is an array type.
+     tree base = gg_pointer_to_array(field->data_decl_node);
+     if( field->offset )
+       {
+       retval = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
+       }
+     else
+       {
+       retval = base;
+       }
+     }
+   return retval;
+ #endif
+   }
+ 
  static bool
  mh_identical(const cbl_refer_t &destref,
!              const cbl_refer_t &sourceref)
    {
    // Check to see if the two variables are identical types, thus allowing
    // for a simple byte-for-byte copy of the data areas:
    bool moved = false;
!   if(     destref.field->type            == sourceref.field->type
        &&  destref.field->data.capacity() == sourceref.field->data.capacity()
!       &&  destref.field->data.digits     == sourceref.field->data.digits
!       &&  destref.field->data.rdigits    == sourceref.field->data.rdigits
        &&       (destref.field->attr   & (signable_e|separate_e|leading_e))
              == (sourceref.field->attr & (signable_e|separate_e|leading_e))
        &&  destref.field->codeset.encoding == sourceref.field->codeset.encoding
        )
      {
!     // The source and destination are identical in type and the
!     // Source doesn't have a depending_on clause
!     SHOW_PARSE1
        {
!       SHOW_PARSE_INDENT
!       SHOW_PARSE_TEXT("mh_identical()");
!       }
!     if(    refer_is_super_clean(destref)
!         && refer_is_super_clean(sourceref) )
!       {
!       // They are identical, and they have no subscripts
! 
!       tree source = get_reference_to_data(sourceref.field);
!       tree dest   = get_reference_to_data(destref.field);
! 
!       tree type = data_decl_type_for(destref.field);
!       if( TREE_CODE(type) == ARRAY_TYPE )
          {
!         // We are dealing with pointers to UCHAR.
!         // The move has to be done with a copy:
!         gg_memcpy(dest,
!                   source,
!                   build_int_cst_type(SIZE_T,
!                                      destref.field->data.capacity()));
!         }
!       else
!         {
!         // We are dealing with scalars
!         gg_assign(dest, source);
          }
        moved = true;
        }
      }
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 15200,15205 ****
--- 14937,14952 ----
            SHOW_PARSE_TEXT("mh_source_is_literalN: __gg__psz_to_alpha_move")
            }
  
+         // In accordance with the rules of moving a numeric to an alphabetic,
+         // we need to eliminate any leading sign character from the text
+         // string:
+ 
+         const char *original = sourceref.field->data.original();
+         if( *original == ascii_plus || *original == ascii_minus )
+           {
+           original += 1;
+           }
+ 
          // We need the data sent to __gg__psz_to_alpha_move to be in the
          // encoding of the destination.  In accordance with the rules of
          // cbl_field_t::internalize, the FldLiteralN is in source-code
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 15209,15216 ****
          const char *converted = __gg__iconverter(
                                           DEFAULT_SOURCE_ENCODING,
                                           destref.field->codeset.encoding,
!                                          sourceref.field->data.original(),
!                                          strlen(sourceref.field->data.original()),
                                           &charsout);
          gg_call(VOID,
                  "__gg__psz_to_alpha_move",
--- 14956,14963 ----
          const char *converted = __gg__iconverter(
                                           DEFAULT_SOURCE_ENCODING,
                                           destref.field->codeset.encoding,
!                                          original,
!                                          strlen(original),
                                           &charsout);
          gg_call(VOID,
                  "__gg__psz_to_alpha_move",
*************** move_helper(tree size_error,        // T
*** 16754,16761 ****
      SHOW_PARSE_TEXT("move_helper()");
      }
  
-   bool moved = false;
- 
    if( size_error )
      {
      gg_assign(size_error, integer_zero_node);
--- 16501,16506 ----
*************** move_helper(tree size_error,        // T
*** 16788,16801 ****
                st_size);
      }
  
!   // if( !moved ) // commented out to quiet cppcheck
!     {
!     moved = mh_source_is_group(destref, sourceref, tsource);
!     }
  
    if( !moved )
      {
!     moved = mh_identical(destref, sourceref, tsource);
      }
  
    if( !moved )
--- 16533,16543 ----
                st_size);
      }
  
!   bool moved = mh_source_is_group(destref, sourceref, tsource);
  
    if( !moved )
      {
!     moved = mh_identical(destref, sourceref);
      }
  
    if( !moved )
*************** actually_create_the_static_field( cbl_fi
*** 17031,17064 ****
                                    tree immediate_parent,
                                    tree new_var_decl)
    {
-   // There is a bug in the GCC compiler. For some optimizations and some
-   // settings of -fpie, pathological N-squared time in the middle end can
-   // happen when a structure on the stack has an initialized member pointing
-   // to another memory area on the stack.  In those cases, we are going to
-   // initialize the pointer to zero, and then call a function to initialize
-   // the data member.  That hides things from the compiler's optimization
-   // phases.
- 
-   bool read_only = !!TREE_READONLY(new_var_decl);
-   if( new_var->type == FldLiteralN )
-     {
-     // For a FldLiteralN the new_var_decl is a number, not a
-     // a cblc_field_t.
-     read_only = true;
-     }
- 
-   if( new_var->type == FldAlphanumeric && new_var->attr & intermediate_e )
-     {
-     // We need not to mess with the intermediate malloc() logic.
-     read_only = true;
-     }
- 
-   if( new_var->attr & external_e )
-     {
-     // We need not to mess with the intermediate malloc() logic.
-     read_only = true;
-     }
- 
    //  For FldLiteralN we force the encoding to be ASCII.
    //  See initial_from_initial() for an explanation.
    //  For FldClass, we force the encoding to be UTF32; see
--- 16773,16778 ----
*************** actually_create_the_static_field( cbl_fi
*** 17111,17121 ****
    tree tencoding = build_int_cst_type(INT, encoding);
    tree alphabet = build_int_cst_type(INT, new_var->codeset.alphabet);
  
-   if( !read_only )
-     {
-     data = null_pointer_node;
-     }
- 
    gg_structure_type_constructor(
        new_var_decl,
        data ,        //  UCHAR_P, "data",
--- 16825,16830 ----
*************** actually_create_the_static_field( cbl_fi
*** 17135,17150 ****
        rdigits,      //  SCHAR,   "rdigits",
        tencoding,    //  INT,     "encoding",
        alphabet);    //  INT,     "alphabet",
- 
- 
-   if( !read_only && data_area != null_pointer_node )
-     {
-     gg_call(VOID,
-             "__gg__set_data_member",
-             gg_get_address_of(new_var_decl),
-             data_area,
-             NULL_TREE);
-     }
    }
  
  static void
--- 16844,16849 ----
*************** psa_new_var_decl(cbl_field_t *new_var, c
*** 17321,17327 ****
          // This has to be static, because we are putting the actual memory
          // on the heap.  But if we put the cblc_field_t on the stack inside
          // of a condition, or in a loop, we just keep recreating the field
!         // without getting freeing the memory.  Eventually, with perhaps a
          // two-pass compiler, we'll be able to create the stack cblc_field_t
          // once per program-id.
          scope = vs_static;
--- 17020,17026 ----
          // This has to be static, because we are putting the actual memory
          // on the heap.  But if we put the cblc_field_t on the stack inside
          // of a condition, or in a loop, we just keep recreating the field
!         // without freeing the memory.  Eventually, with perhaps a
          // two-pass compiler, we'll be able to create the stack cblc_field_t
          // once per program-id.
          scope = vs_static;
*************** parser_symbol_add(struct cbl_field_t *ne
*** 17790,17831 ****
        length_of_initial_string = 0;
        }
  
-     // GDB needs to know the data hierarchy.  We do that by including our_index
-     // and parent index in the variable name:
- 
-     size_t our_index = new_var->our_index;
- 
-     if(   !our_index
-           && new_var->type != FldLiteralN
-           && !(new_var->attr & intermediate_e))
-       {
-       if( ! (new_var->type == FldFloat && new_var->has_attr(constant_e)) )
-         {
-         // N.B. If level is 0 then we're not participating in a hierarchy.
-         // During the early stages of implementing cbl_field_t::our_index, there
-         // were execution paths in parse.y and parser.cc that resulted in
-         // our_index not being set.  Those should be gone.
-         cbl_errx("%<our_index%> is NULL under unanticipated circumstances");
-         }
-       }
- 
-     // When we create the cblc_field_t structure, we need a data pointer
-     // for "data".  In the case of a variable that has no parent, we
-     // have to allocate storage.  In the case of a variable that has a parent,
-     // we calculate data as the pointer to our parent's data plus our
-     // offset.
- 
-     // Declare and define the structure.  This code *must* match
-     // the C structure declared in libgcobol.c.  Towards that end, the
-     // variables are declared in descending order of size in order to
-     // make the packing match up.
- 
-     // This uses a single structure type_decl template for creating each structure
- 
      char external_record_base[2*sizeof(cbl_name_t)] = "";
  
      if( new_var->parent > 0 )
        {
        symbol_elem_t *parent = symbol_at(new_var->parent);
        gcc_assert(parent);
        if( parent->type == SymField )
--- 17489,17499 ----
        length_of_initial_string = 0;
        }
  
      char external_record_base[2*sizeof(cbl_name_t)] = "";
  
      if( new_var->parent > 0 )
        {
+       // new_var has a parent.
        symbol_elem_t *parent = symbol_at(new_var->parent);
        gcc_assert(parent);
        if( parent->type == SymField )
*************** parser_symbol_add(struct cbl_field_t *ne
*** 17839,17845 ****
            {
            // The parent of new_var is a SymFile with the external_e attribute
            // Therefore, we have to establish new_var as an external with a
!           // predictable name
            strcpy(external_record_base, parent->elem.file.name);
            }
          }
--- 17507,17514 ----
            {
            // The parent of new_var is a SymFile with the external_e attribute
            // Therefore, we have to establish new_var as an external with a
!           // predictable name, which we derive from the source file the parent
!           // came from.
            strcpy(external_record_base, parent->elem.file.name);
            }
          }
*************** parser_symbol_add(struct cbl_field_t *ne
*** 17922,17928 ****
        goto actual_allocate;
        }
  
!     if( ancestor && new_var->level != 0 )
        {
        // This variable has an ancestor, so we share its already-allocated data
        // area
--- 17591,17597 ----
        goto actual_allocate;
        }
  
!     if( ancestor && new_var->level != 00 )
        {
        // This variable has an ancestor, so we share its already-allocated data
        // area
*************** parser_symbol_add(struct cbl_field_t *ne
*** 17951,17958 ****
          // A FldClass actually doesn't need any bytes, because the only important
          // thing about it is the .initial field.  We will allocate a single byte,
          // just to keep run-time pointers from being NULL
!         if(    (new_var->type == FldClass    && bytes_to_allocate == 0)
!             || (new_var->type == FldLiteralA && bytes_to_allocate == 0)  )
            {
            bytes_to_allocate = 1;
            }
--- 17620,17626 ----
          // A FldClass actually doesn't need any bytes, because the only important
          // thing about it is the .initial field.  We will allocate a single byte,
          // just to keep run-time pointers from being NULL
!         if(    (new_var->type == FldClass    && bytes_to_allocate == 0)  )
            {
            bytes_to_allocate = 1;
            }
*************** parser_symbol_add(struct cbl_field_t *ne
*** 17983,17989 ****
              }
            }
  
!         if(   new_var->attr & intermediate_e
             && new_var->type == FldAlphanumeric )
            {
            // We don't allocate here for intermediates.  We instead use
--- 17651,17657 ----
              }
            }
  
!         if(   (new_var->attr & intermediate_e)
             && new_var->type == FldAlphanumeric )
            {
            // We don't allocate here for intermediates.  We instead use
*************** parser_symbol_add(struct cbl_field_t *ne
*** 18029,18041 ****
              else
                {
                gg_variable_scope_t vs_scope = (new_var->attr & intermediate_e)
!                                               ? vs_stack : vs_static ;
!               tree array_type = build_array_type_nelts(UCHAR, bytes_to_allocate);
!               new_var->data_decl_node = gg_define_variable(
!                                   array_type,
!                                   achDataName,
!                                   vs_scope);
!               data_area = gg_pointer_to_array(new_var->data_decl_node);
                }
              }
            }
--- 17697,17716 ----
              else
                {
                gg_variable_scope_t vs_scope = (new_var->attr & intermediate_e)
!                                            ? vs_stack
!                                            : vs_static ;
!               tree data_decl_type = data_decl_type_for(new_var);
!               new_var->data_decl_node = gg_define_variable( data_decl_type,
!                                                             achDataName,
!                                                             vs_scope);
!               if( TREE_CODE(data_decl_type) == ARRAY_TYPE )
!                 {
!                 data_area = gg_pointer_to_array(new_var->data_decl_node);
!                 }
!               else
!                 {
!                 data_area = gg_get_address_of(new_var->data_decl_node);
!                 }
                }
              }
            }
*************** parser_symbol_add(struct cbl_field_t *ne
*** 18084,18086 ****
--- 17759,17762 ----
    done:
    return;
    }
+ 
diff -Nrcpad gcc-17-20260510/gcc/cobol/genapi.h gcc-17-20260517/gcc/cobol/genapi.h
*** gcc-17-20260510/gcc/cobol/genapi.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/genapi.h	Sun May 17 22:32:05 2026
*************** parser_lsearch_start(   cbl_label_t *nam
*** 424,448 ****
  
  void parser_lsearch_conditional(cbl_label_t * name);
  void parser_bsearch_conditional(cbl_label_t * name);
- 
  void parser_lsearch_when( cbl_label_t *name, cbl_field_t *conditional );
! void
! parser_bsearch_when(cbl_label_t *name,
!                     cbl_refer_t key,
!                     cbl_refer_t sarg,
!                     bool ascending);
! 
  void parser_lsearch_end( cbl_label_t *name );
  void parser_bsearch_end( cbl_label_t *name );
  
! void
! parser_bsearch_start( cbl_label_t *name, cbl_field_t *tgt );
! 
! void
! parser_sort(cbl_refer_t table,
!             bool duplicates,
!             cbl_alphabet_t *alphabet,
!             const std::vector<cbl_key_t>& keys );
  void
  parser_file_sort(   cbl_file_t *file,
                      bool duplicates,
--- 424,442 ----
  
  void parser_lsearch_conditional(cbl_label_t * name);
  void parser_bsearch_conditional(cbl_label_t * name);
  void parser_lsearch_when( cbl_label_t *name, cbl_field_t *conditional );
! void parser_bsearch_when( cbl_label_t *name,
!                           const cbl_refer_t &key,
!                           const cbl_refer_t &sarg,
!                                 bool ascending);
  void parser_lsearch_end( cbl_label_t *name );
  void parser_bsearch_end( cbl_label_t *name );
+ void parser_bsearch_start( cbl_label_t *name, cbl_field_t *tgt );
  
! void parser_sort( cbl_refer_t table,
!                   bool duplicates,
!                   cbl_alphabet_t *alphabet,
!                   const std::vector<cbl_key_t>& keys );
  void
  parser_file_sort(   cbl_file_t *file,
                      bool duplicates,
diff -Nrcpad gcc-17-20260510/gcc/cobol/gengen.cc gcc-17-20260517/gcc/cobol/gengen.cc
*** gcc-17-20260510/gcc/cobol/gengen.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/gengen.cc	Sun May 17 22:32:05 2026
*************** gg_show_type(tree type)
*** 370,394 ****
      cbl_internal_error("The given type is NULL, and that is just not fair");
      }
  
    if( DECL_P(type) )
      {
      type = TREE_TYPE(type);
      }
!   if( !TYPE_P(type) )
      {
!     cbl_internal_error("The given type is not a declaration or a TYPE");
      }
  
    static char ach[1100];
    static char ach2[1024];
    static char ach3[1024];
!   switch( TREE_CODE(type) )
      {
      case POINTER_TYPE:
        strcpy(ach2, gg_show_type(TREE_TYPE(type)));
        sprintf(ach, "POINTER to %s", ach2);
        break;
  
      case VOID_TYPE:
        sprintf(ach, "VOID");
        break;
--- 370,405 ----
      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);
      }
!   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];
    static char ach2[1024];
    static char ach3[1024];
!   switch( code )
      {
      case POINTER_TYPE:
        strcpy(ach2, gg_show_type(TREE_TYPE(type)));
        sprintf(ach, "POINTER to %s", ach2);
        break;
  
+     case ARRAY_TYPE:
+       strcpy(ach2, gg_show_type(TREE_TYPE(type)));
+       sprintf(ach, "ARRAY");
+       break;
+ 
+     case ARRAY_REF:
+       sprintf(ach, "ARRAY_REF");
+       break;
+ 
      case VOID_TYPE:
        sprintf(ach, "VOID");
        break;
*************** gg_show_type(tree type)
*** 433,438 ****
--- 444,454 ----
      strcat(ach, " readonly");
      }
  
+   if( DECL_P(original_type) && TYPE_VOLATILE(original_type) )
+     {
+     strcat(ach, " volatile");
+     }
+ 
    return ach;
    }
  
*************** gg_define_from_declaration(tree var_decl
*** 852,858 ****
      // it's time to actually define the storage with a decl_expression:
      tree stmt = build1_loc (gg_token_location(),
                              DECL_EXPR,
!                             TREE_TYPE(var_decl),
                              var_decl);
      gg_append_statement(stmt);
      }
--- 868,874 ----
      // it's time to actually define the storage with a decl_expression:
      tree stmt = build1_loc (gg_token_location(),
                              DECL_EXPR,
!                             void_type_node,
                              var_decl);
      gg_append_statement(stmt);
      }
*************** gg_define_variable(tree type_decl, const
*** 912,917 ****
--- 928,961 ----
    }
  
  tree
+ gg_define_volatile_variable(tree type_decl,
+                             const char *name,
+                             gg_variable_scope_t vs_scope)
+   {
+   bool already_defined = false;
+ 
+   tree volatile_type = build_qualified_type(type_decl, TYPE_QUAL_VOLATILE);
+ 
+   tree var_decl = gg_declare_variable(volatile_type,
+                                       name,
+                                       NULL_TREE,
+                                       vs_scope,
+                                       &already_defined);
+ 
+   /* Helpful, especially while debugging the front end.  The volatile-qualified
+      type is the important part; these flags should agree with it. */
+   TREE_THIS_VOLATILE(var_decl) = 1;
+   TREE_SIDE_EFFECTS(var_decl) = 1;
+ 
+   if (!already_defined)
+     {
+     gg_define_from_declaration(var_decl);
+     }
+ 
+   return var_decl;
+   }
+ 
+ tree
  gg_define_bool()
    {
    tree var_decl = gg_declare_variable(BOOL);
*************** gg_pointer_to_array(tree expr)
*** 1317,1322 ****
--- 1361,1383 ----
    }
  
  tree
+ gg_get_address(const tree var_decl)
+   {
+   /* This takes care of the problem of finding the address of a scalar, or of
+      an ARRAY_TYPE.  I recommend using it carefully; there is something to be
+      said for knowing whether you are working with an array, or a scalar. */
+   tree type = TREE_TYPE (var_decl);
+   if( TREE_CODE (type) == ARRAY_TYPE )
+     {
+     return gg_pointer_to_array(var_decl);
+     }
+ 
+   TREE_ADDRESSABLE(var_decl) = 1;
+   TREE_USED(var_decl) = 1;
+   return build_fold_addr_expr(var_decl);
+   }
+ 
+ tree
  gg_get_indirect_reference(tree pointer, tree offset)
    {
    // The C equivalent: auto pointer[offset];
*************** gg_array_value(tree pointer, tree offset
*** 1400,1411 ****
      }
    else
      {
!     return build4(ARRAY_REF,
                    element_type,
                    pointer,
!                   offset,
                    NULL_TREE,
                    NULL_TREE);
      }
    }
  
--- 1461,1473 ----
      }
    else
      {
!     tree retval =  build4(ARRAY_REF,
                    element_type,
                    pointer,
!                   fold_convert(SIZE_T, offset),
                    NULL_TREE,
                    NULL_TREE);
+     return retval;
      }
    }
  
*************** gg_bitwise_and(tree A, tree B)
*** 1595,1600 ****
--- 1657,1718 ----
    }
  
  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));
+ 
+   unsigned HOST_WIDE_INT size_in_bytes = tree_to_uhwi (size);
+ 
+   enum built_in_function fncode;
+   tree unsigned_type;
+ 
+   switch (size_in_bytes)
+     {
+     case 1:
+       return var;
+ 
+     case 2:
+       fncode = BUILT_IN_BSWAP16;
+       unsigned_type = uint16_type_node;
+       break;
+ 
+     case 4:
+       {
+       fncode = BUILT_IN_BSWAP32;
+       unsigned_type = uint32_type_node;
+       break;
+       }
+ 
+     case 8:
+       fncode = BUILT_IN_BSWAP64;
+       unsigned_type = uint64_type_node;
+       break;
+ 
+     case 16:
+       fncode = BUILT_IN_BSWAP128;
+       unsigned_type = unsigned_intTI_type_node;  /* or your UINT128 type */
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   tree arg = fold_convert_loc (loc, unsigned_type, var);
+ 
+   tree swapped =
+     build_call_expr_loc (loc,
+                          builtin_decl_explicit (fncode),
+                          1,
+                          arg);
+ 
+   return fold_convert_loc (loc, type, swapped);
+   }
+ 
+ tree
  gg_build_relational_expression(tree operand_a,
                                 enum relop_t op,
                                 tree operand_b)
*************** gg_free(tree pointer)
*** 3126,3131 ****
--- 3244,3262 ----
    gg_append_statement(the_call);
    }
  
+ tree
+ gg_memcmp(const tree s1, const tree s2, tree n)
+   {
+   tree the_call =
+       build_call_expr_loc(gg_token_location(),
+                           builtin_decl_explicit (BUILT_IN_MEMCMP),
+                           3,
+                           s1,
+                           s2,
+                           n);
+   return the_call;
+   }
+ 
  void
  gg_record_statement_list_start()
    {
diff -Nrcpad gcc-17-20260510/gcc/cobol/gengen.h gcc-17-20260517/gcc/cobol/gengen.h
*** gcc-17-20260510/gcc/cobol/gengen.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/gengen.h	Sun May 17 22:32:05 2026
***************
*** 48,53 ****
--- 48,54 ----
  #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)
*************** struct gg_function_t
*** 266,271 ****
--- 267,273 ----
      tree entry_switch_goto;
      tree entry_switch_label;
      std::vector<tree> entry_goto_expressions;
+     bool alphabet_in_use;
      };
  
  struct cbl_translation_unit_t
*************** extern tree gg_define_variable(tree type
*** 363,368 ****
--- 365,373 ----
                                 const char *name,
                                 gg_variable_scope_t vs_scope,
                                 tree initial_value);
+ extern tree gg_define_volatile_variable(tree type_decl,
+                                         const char *name,
+                                         gg_variable_scope_t vs_scope);
  // Utility definers:
  extern tree gg_define_bool();
  extern tree gg_define_char();
*************** extern tree gg_define_uchar_star(tree va
*** 414,422 ****
  extern tree gg_define_uchar_star(const char *variable_name, tree var);
  
  // address_of operator; equivalent of C "&var_decl"
! extern tree gg_get_address_of(const tree var_decl);
  // equivalent of C "&array[0]"
! extern tree gg_pointer_to_array(tree array);
  
  
  // Array creation and access:
--- 419,428 ----
  extern tree gg_define_uchar_star(const char *variable_name, tree var);
  
  // address_of operator; equivalent of C "&var_decl"
! extern tree gg_get_address_of(const tree var_decl); // For scalars
  // equivalent of C "&array[0]"
! extern tree gg_pointer_to_array(tree array);        // For arrays
! extern tree gg_get_address(const tree var_decl);
  
  
  // Array creation and access:
*************** extern void gg_decrement(tree var);
*** 434,439 ****
--- 440,446 ----
  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_bswap(tree var);         // end-for-end byte swap
  
  // And some binary operations:
  
*************** extern tree gg_read(tree fd, tree buf, t
*** 477,482 ****
--- 484,490 ----
  extern void gg_write(tree fd, tree buf, tree count);
  extern void gg_memset(tree dest, const tree value, tree size);
  extern tree gg_memchr(tree s, tree c, tree n);
+ 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 void gg_insert_into_assemblerf(co
*** 580,583 ****
--- 588,592 ----
  
  extern char *gg_show_type(tree type);
  extern void gg_leaving_the_source_code_file();
+ 
  #endif
diff -Nrcpad gcc-17-20260510/gcc/cobol/genmath.cc gcc-17-20260517/gcc/cobol/genmath.cc
*** gcc-17-20260510/gcc/cobol/genmath.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/genmath.cc	Sun May 17 22:32:05 2026
*************** set_up_arithmetic_error_handler(cbl_labe
*** 93,99 ****
    }
  
  static void
! arithmetic_operation(size_t nC, cbl_num_result_t *C,
                        size_t nA, cbl_refer_t *A,
                        size_t nB, cbl_refer_t *B,
                        cbl_arith_format_t format,
--- 93,99 ----
    }
  
  static void
! arithmetic_operation( size_t nC, cbl_num_result_t *C,
                        size_t nA, cbl_refer_t *A,
                        size_t nB, cbl_refer_t *B,
                        cbl_arith_format_t format,
*************** arithmetic_operation(size_t nC, cbl_num_
*** 140,160 ****
    std::vector<cbl_refer_t> results(nC + 1);
    int ncount = 0;
  
-   if( nC+1 <= MIN_FIELD_BLOCK_SIZE )
-     {
-     // We know there is room in our existing buffer
-     }
-   else
-     {
-     // We might have to allocate more space:
-     gg_call(VOID,
-             "__gg__resize_int_p",
-             gg_get_address_of(var_decl_arithmetic_rounds_size),
-             gg_get_address_of(var_decl_arithmetic_rounds),
-             build_int_cst_type(SIZE_T, nC+1),
-             NULL_TREE);
-     }
- 
    // We have to take into account the possibility the quotient of the division
    // can affect the disposition of the remainder.  In particular, some of the
    // NIST tests have the construction
--- 140,145 ----
*************** arithmetic_operation(size_t nC, cbl_num_
*** 182,191 ****
      // list
      results[ncount++] = temp_remainder;
      }
    for(size_t i=0; i<nC; i++)
      {
      results[ncount] = C[i].refer;
!     gg_assign(  gg_array_value(var_decl_arithmetic_rounds, ncount),
                  build_int_cst_type(INT, C[i].rounded));
      ncount += 1;
      }
--- 167,178 ----
      // list
      results[ncount++] = temp_remainder;
      }
+   tree array_of_int_type = build_array_type_nelts(INT, nC+1);
+   tree arithmetic_rounds = gg_define_variable(array_of_int_type);
    for(size_t i=0; i<nC; i++)
      {
      results[ncount] = C[i].refer;
!     gg_assign(  gg_array_value(arithmetic_rounds, ncount),
                  build_int_cst_type(INT, C[i].rounded));
      ncount += 1;
      }
*************** arithmetic_operation(size_t nC, cbl_num_
*** 201,217 ****
    // Having done all that work, we now need to break out the various different
    // arithmetic routines that implement the various possibilities,
  
!   build_array_of_treeplets(1, nA, A);
!   build_array_of_treeplets(2, nB, B);
!   build_array_of_treeplets(3, ncount, results.data());
! 
    gg_call(VOID,
            operation,
            build_int_cst_type(INT, format),
            build_int_cst_type(SIZE_T, nA),
            build_int_cst_type(SIZE_T, nB),
            build_int_cst_type(SIZE_T, ncount),
!           var_decl_arithmetic_rounds,
            build_int_cst_type(INT, call_flags),
            compute_error,
            NULL_TREE);
--- 188,206 ----
    // Having done all that work, we now need to break out the various different
    // arithmetic routines that implement the various possibilities,
  
!   tree referlets_A = build_array_of_referlets(nA, A);
!   tree referlets_B = build_array_of_referlets(nB, B);
!   tree referlets_C = build_array_of_referlets(ncount, results.data());
    gg_call(VOID,
            operation,
            build_int_cst_type(INT, format),
            build_int_cst_type(SIZE_T, nA),
+           referlets_A,
            build_int_cst_type(SIZE_T, nB),
+           referlets_B,
            build_int_cst_type(SIZE_T, ncount),
!           referlets_C,
!           gg_pointer_to_array(arithmetic_rounds),
            build_int_cst_type(INT, call_flags),
            compute_error,
            NULL_TREE);
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 418,426 ****
      tree term_type = largest_binary_term(nA, A);
      if( term_type )
        {
!       tree dest_type = tree_type_from_size(
!                                         C[0].refer.field->data.capacity(),
!                                         0);
        // All the numbers are integers without rdigits
        if(    nC == 1
            && nA == 1
--- 407,417 ----
      tree term_type = largest_binary_term(nA, A);
      if( term_type )
        {
!       tree dest_type = tree_type_from_size(C[0].refer.field->data.capacity(),
!                                            0);
! //      tree dest_type2 = TREE_TYPE(C[0].refer.field->data_decl_node);
! //      gcc_assert(dest_type2 == dest_type);
! 
        // All the numbers are integers without rdigits
        if(    nC == 1
            && nA == 1
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 449,461 ****
            }
          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 accumulating into memory
!           gg_assign(  gg_indirect(ptr),
!                       gg_add( gg_indirect(ptr),
!                               A_value));
            }
          else
            {
--- 440,462 ----
            }
          if( refer_is_clean(C[0].refer) )
            {
            // We are accumulating into memory
! 
!           if(false &&    refer_is_working_storage(C[0].refer)
!              && C[0].refer.field->offset == 0 )
!             {
!             gg_assign(  C[0].refer.field->data_decl_node,
!                         gg_cast(TREE_TYPE(C[0].refer.field->data_decl_node), gg_add( C[0].refer.field->data_decl_node, A_value)));
!             }
!           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
            {
*************** parser_add( size_t nC, cbl_num_result_t
*** 1154,1160 ****
            // Do phase 2, which puts the subtotal into each target location in turn
            for(size_t i=0; i<nC; i++)
              {
!             arithmetic_operation(1, &C[i],
                                    0, NULL,
                                    0, NULL,
                                    format,
--- 1155,1161 ----
            // Do phase 2, which puts the subtotal into each target location in turn
            for(size_t i=0; i<nC; i++)
              {
!             arithmetic_operation( 1, &C[i],
                                    0, NULL,
                                    0, NULL,
                                    format,
diff -Nrcpad gcc-17-20260510/gcc/cobol/genutil.cc gcc-17-20260517/gcc/cobol/genutil.cc
*** gcc-17-20260510/gcc/cobol/genutil.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/genutil.cc	Sun May 17 22:32:05 2026
***************
*** 33,38 ****
--- 33,46 ----
  #include "cobol-system.h"
  #include "coretypes.h"
  #include "tree.h"
+ #include "langhooks.h"
+ #include "tree-iterator.h"
+ #include "stringpool.h"
+ #include "cgraph.h"
+ #include "stor-layout.h"
+ #include "toplev.h"
+ #include "function.h"
+ #include "fold-const.h"
  #include "../../libgcobol/ec.h"
  #include "../../libgcobol/common-defs.h"
  #include "util.h"
***************
*** 49,54 ****
--- 57,64 ----
  #include "show_parse.h"
  #include "../../libgcobol/exceptl.h"
  #include "exceptg.h"
+ #include "dumpfile.h"
+ 
  
  bool exception_location_active = true;
  bool skip_exception_processing = true;
*************** tree var_decl_call_parameter_signature;
*** 77,100 ****
  tree var_decl_call_parameter_count;     // int __gg__call_parameter_count
  tree var_decl_call_parameter_lengths;   // size_t *__gg__call_parameter_count
  
- tree var_decl_arithmetic_rounds_size;  // size_t __gg__arithmetic_rounds_size;
- tree var_decl_arithmetic_rounds;       // int*   __gg__arithmetic_rounds;
- tree var_decl_fourplet_flags_size;     // size_t __gg__fourplet_flags_size;
- tree var_decl_fourplet_flags;          // int*   __gg__fourplet_flags;
- 
- tree var_decl_treeplet_1f; // cblc_field_pp_type_node , "__gg__treeplet_1f"
- tree var_decl_treeplet_1o; // SIZE_T_P                , "__gg__treeplet_1o"
- tree var_decl_treeplet_1s; // SIZE_T_P                , "__gg__treeplet_1s"
- tree var_decl_treeplet_2f; // cblc_field_pp_type_node , "__gg__treeplet_2f"
- tree var_decl_treeplet_2o; // SIZE_T_P                , "__gg__treeplet_2o"
- tree var_decl_treeplet_2s; // SIZE_T_P                , "__gg__treeplet_2s"
- tree var_decl_treeplet_3f; // cblc_field_pp_type_node , "__gg__treeplet_3f"
- tree var_decl_treeplet_3o; // SIZE_T_P                , "__gg__treeplet_3o"
- tree var_decl_treeplet_3s; // SIZE_T_P                , "__gg__treeplet_3s"
- tree var_decl_treeplet_4f; // cblc_field_pp_type_node , "__gg__treeplet_4f"
- tree var_decl_treeplet_4o; // SIZE_T_P                , "__gg__treeplet_4o"
- tree var_decl_treeplet_4s; // SIZE_T_P                , "__gg__treeplet_4s"
- 
  // There are times when I need to insert a NOP into the code, mainly to force
  // a .loc directive into the assembly language so that the GDB-COBOL debugger
  // can show the COBOL source code.  This is true, for example, the CONTINUE
--- 87,92 ----
*************** get_scaled_digits(cbl_field_t *field)
*** 181,187 ****
    }
  
  tree
! tree_type_from_digits(size_t digits, int signable)
    {
    tree retval = NULL_TREE;
  
--- 173,179 ----
    }
  
  tree
! tree_type_from_digits(size_t digits, uint64_t signable)
    {
    tree retval = NULL_TREE;
  
*************** get_depending_on_value(tree retval, cons
*** 564,571 ****
  
  static
  tree
! 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
--- 556,562 ----
  
  static
  tree
! 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
*************** get_data_offset(const cbl_refer_t &refer
*** 574,580 ****
       be handled efficiently.  */
  
    const cbl_enabled_exceptions_t &enabled_exceptions(cdf_enabled_exceptions());
!   if(    !enabled_exceptions.match(ec_bound_subscript_e) 
        && !enabled_exceptions.match(ec_bound_odo_e)
        && !enabled_exceptions.match(ec_bound_ref_mod_e) )
      {
--- 565,571 ----
       be handled efficiently.  */
  
    const cbl_enabled_exceptions_t &enabled_exceptions(cdf_enabled_exceptions());
!   if(    !enabled_exceptions.match(ec_bound_subscript_e)
        && !enabled_exceptions.match(ec_bound_odo_e)
        && !enabled_exceptions.match(ec_bound_ref_mod_e) )
      {
*************** get_data_offset(const cbl_refer_t &refer
*** 757,763 ****
              ELSE
                {
                IF( subscript,
!                   ge_op,
                    build_int_cst_type( TREE_TYPE(subscript),
                                        parent->occurs.ntimes()) )
                  {
--- 748,754 ----
              ELSE
                {
                IF( subscript,
!                   gt_op,
                    build_int_cst_type( TREE_TYPE(subscript),
                                        parent->occurs.ntimes()) )
                  {
*************** get_data_offset(const cbl_refer_t &refer
*** 825,832 ****
    return retval;
    }
  
- //static tree tree_type_from_field(const cbl_field_t *field);
- 
  tree
  get_binary_value_tree(tree return_type,
                        tree rdigits,
--- 816,821 ----
*************** get_binary_value_tree(tree return_type,
*** 856,864 ****
      return retval;
      }
  
!   static tree pointer = gg_define_variable( UCHAR_P,
!                                             "..gbv_pointer",
!                                             vs_file_static);
    switch(field->type)
      {
      case FldLiteralN:
--- 845,851 ----
      return retval;
      }
  
!   tree pointer = gg_define_variable(UCHAR_P);
    switch(field->type)
      {
      case FldLiteralN:
*************** get_binary_value_tree(tree return_type,
*** 874,883 ****
            gg_assign(rdigits, build_int_cst_type(TREE_TYPE(rdigits),
                                                  field->data.rdigits));
            }
-         // tree source_type = tree_type_from_field(field);
-         // retval = gg_cast(return_type,
-                          // gg_indirect( gg_cast(build_pointer_type(source_type),
-                                    // gg_get_address_of(field->data_decl_node))));
          retval = gg_cast(return_type, field->data_decl_node);
          }
        break;
--- 861,866 ----
*************** get_binary_value_tree(tree return_type,
*** 995,1001 ****
                                build_int_cst_type(INT, field->codeset.encoding),
                                NULL_TREE));
            // Assign the value we got from the string to our "return" value:
!           
            // Note that cppcheck can't understand the run-time IF()
            // cppcheck-suppress redundantAssignment
            retval = gg_cast(return_type, val128);
--- 978,984 ----
                                build_int_cst_type(INT, field->codeset.encoding),
                                NULL_TREE));
            // Assign the value we got from the string to our "return" value:
! 
            // Note that cppcheck can't understand the run-time IF()
            // cppcheck-suppress redundantAssignment
            retval = gg_cast(return_type, val128);
*************** get_binary_value( tree value,
*** 1244,1257 ****
                                            hilo ));
    }
  
! #if 0
! static tree
  tree_type_from_field(const cbl_field_t *field)
    {
!   gcc_assert(field);
!   return tree_type_from_size(field->data.capacity(), field->attr & signable_e);
    }
- #endif
  
  tree
  get_data_address( cbl_field_t *field,
--- 1227,1395 ----
                                            hilo ));
    }
  
! tree
  tree_type_from_field(const cbl_field_t *field)
    {
!   /*  This routine is used to determine what action is taken with type of a
!       CALL ... USING <var> and the matching PROCEDURE DIVISION USING <var> of
!       a PROGRAM-ID or FUNCTION-ID
!       */
!   tree retval;
! 
!   switch(field->type)
!     {
!     case FldGroup:
!     case FldAlphanumeric:
!     case FldAlphaEdited:
!     case FldNumericEdited:
!     case FldLiteralA:
!       {
!       retval = CHAR_P;
!       break;
!       }
! 
!     case FldNumericDisplay:
!     case FldPacked:
!       {
!       if( field->attr & signable_e )
!         {
!         if( field->data.digits > 18 )
!           {
!           retval = INT128;
!           }
!         else if( field->data.digits > 9)
!           {
!           retval = LONG;
!           }
!         else if( field->data.digits > 4)
!           {
!           retval = INT;
!           }
!         else if( field->data.digits > 2)
!           {
!           retval = SHORT;
!           }
!         else
!           {
!           retval = SCHAR;
!           }
!         }
!       else
!         {
!         if( field->data.digits > 18 )
!           {
!           retval = UINT128;
!           }
!         else if( field->data.digits > 9)
!           {
!           retval = ULONG;
!           }
!         else if( field->data.digits > 4)
!           {
!           retval = UINT;
!           }
!         else if( field->data.digits > 2)
!           {
!           retval = USHORT;
!           }
!         else
!           {
!           retval = UCHAR;
!           }
!         }
!       break;
!       }
! 
!     case FldLiteralN:
!     case FldNumericBinary:
!     case FldNumericBin5:
!     case FldIndex:
!     case FldPointer:
!       {
!       if( field->attr & signable_e )
!         {
!         if( field->data.capacity() == 16 )
!           {
!           retval = INT128;
!           }
!         else if( field->data.capacity() == 8 )
!           {
!           retval = LONG;
!           }
!         else if( field->data.capacity() == 4 )
!           {
!           retval = INT;
!           }
!         else if( field->data.capacity() == 2 )
!           {
!           retval = SHORT;
!           }
!         else if( field->data.capacity() == 1 )
!           {
!           retval = SCHAR;
!           }
!         else
!           {
!           gcc_unreachable();
!           }
!         }
!       else
!         {
!         if( field->data.capacity() == 16 )
!           {
!           retval = UINT128;
!           }
!         else if( field->data.capacity() == 8 )
!           {
!           retval = ULONG;
!           }
!         else if( field->data.capacity() == 4 )
!           {
!           retval = UINT;
!           }
!         else if( field->data.capacity() == 2 )
!           {
!           retval = USHORT;
!           }
!         else if( field->data.capacity() == 1 )
!           {
!           retval = UCHAR;
!           }
!         else
!           {
!           gcc_unreachable();
!           }
!         }
!       break;
!       }
! 
!     case FldFloat:
!       {
!       if( field->data.capacity() == 8 )
!         {
!         retval = DOUBLE;
!         }
!       else if( field->data.capacity() == 4 )
!         {
!         retval = FLOAT;
!         }
!       else
!         {
!         retval = FLOAT128;
!         }
!       break;
!       }
! 
!     default:
!       {
!       cbl_internal_error(  "%s: Invalid field type %s:",
!               __func__,
!               cbl_field_type_str(field->type));
!       break;
!       }
!     }
!   return retval;
    }
  
  tree
  get_data_address( cbl_field_t *field,
*************** hex_dump(tree data, size_t bytes)
*** 1483,1489 ****
    }
  
  tree
! tree_type_from_size(size_t bytes, int signable)
    {
    tree retval = NULL_TREE;
  
--- 1621,1627 ----
    }
  
  tree
! tree_type_from_size(size_t bytes, uint64_t signable)
    {
    tree retval = NULL_TREE;
  
*************** tree_type_from_size(size_t bytes, int si
*** 1492,1498 ****
      switch( bytes )
        {
        case 1:
!         retval = CHAR;
          break;
        case 2:
          retval = SHORT;
--- 1630,1636 ----
      switch( bytes )
        {
        case 1:
!         retval = SCHAR;
          break;
        case 2:
          retval = SHORT;
*************** tree_type_from_size(size_t bytes, int si
*** 1501,1507 ****
          retval = INT;
          break;
        case 8:
!         retval = LONGLONG;
          break;
        case 16:
          retval = INT128;
--- 1639,1645 ----
          retval = INT;
          break;
        case 8:
!         retval = LONG;
          break;
        case 16:
          retval = INT128;
*************** tree_type_from_size(size_t bytes, int si
*** 1525,1531 ****
          retval = UINT;
          break;
        case 8:
!         retval = ULONGLONG;
          break;
        case 16:
          retval = UINT128;
--- 1663,1669 ----
          retval = UINT;
          break;
        case 8:
!         retval = ULONG;
          break;
        case 16:
          retval = UINT128;
*************** copy_little_endian_into_place(cbl_field_
*** 1728,1853 ****
              gg_cast(dest_type, value));
    }
  
! void
! build_array_of_treeplets( int ngroup,
!                           size_t N,
                            cbl_refer_t *refers)
    {
!   if( N )
      {
!     // At the present time the most this routine is called is four times, for
!     // the implementation of the UNSTRING verb.
  
!     if( N > MIN_FIELD_BLOCK_SIZE )
!       {
!       gg_call(VOID,
!               "__gg__resize_treeplet",
!               build_int_cst_type(INT,    ngroup),
!               build_int_cst_type(SIZE_T, N),
!               NULL_TREE
!               );
!       }
!     switch(ngroup)
        {
!       case 1:
!         for(size_t i=0; i<N; i++)
!           {
!           gg_assign(gg_array_value(var_decl_treeplet_1f, i),
!                     refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
!                                     : gg_cast(cblc_field_p_type_node, null_pointer_node));
!           gg_assign(gg_array_value(var_decl_treeplet_1o, i),
!                     refer_offset(refers[i]));
!           gg_assign(gg_array_value(var_decl_treeplet_1s, i),
!                     refer_size_source(refers[i]));
!           }
!         break;
!       case 2:
!         for(size_t i=0; i<N; i++)
!           {
!           gg_assign(gg_array_value(var_decl_treeplet_2f, i),
!                     refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
!                                     : gg_cast(cblc_field_p_type_node, null_pointer_node));
!           gg_assign(gg_array_value(var_decl_treeplet_2o, i),
!                     refer_offset(refers[i]));
!           gg_assign(gg_array_value(var_decl_treeplet_2s, i),
!                     refer_size_source(refers[i]));
!           }
!         break;
!       case 3:
!         for(size_t i=0; i<N; i++)
!           {
!           gg_assign(gg_array_value(var_decl_treeplet_3f, i),
!                     refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
!                                     : gg_cast(cblc_field_p_type_node, null_pointer_node));
!           gg_assign(gg_array_value(var_decl_treeplet_3o, i),
!                     refer_offset(refers[i]));
!           gg_assign(gg_array_value(var_decl_treeplet_3s, i),
!                     refer_size_source(refers[i]));
!           }
!         break;
!       case 4:
!         for(size_t i=0; i<N; i++)
!           {
!           gg_assign(gg_array_value(var_decl_treeplet_4f, i),
!                     refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
!                                     : gg_cast(cblc_field_p_type_node, null_pointer_node));
!           gg_assign(gg_array_value(var_decl_treeplet_4o, i),
!                     refer_offset(refers[i]));
!           gg_assign(gg_array_value(var_decl_treeplet_4s, i),
!                     refer_size_source(refers[i]));
!           }
!         break;
!       default:
!         abort();
!         break;
        }
      }
!   else
!     {
!     // Just do nothing
!     }
    }
  
! void
! build_array_of_fourplets( int ngroup,
!                           size_t N,
!                           cbl_refer_t *refers)
    {
!   int flag_bits = 0;
    if( N )
      {
!     if( N > MIN_FIELD_BLOCK_SIZE )
!       {
!       gg_call(VOID,
!               "__gg__resize_treeplet",
!               build_int_cst_type(INT, ngroup),
!               build_int_cst_type(SIZE_T, N),
!               NULL_TREE);
! 
!       gg_call(VOID,
!               "__gg__resize_int_p",
!               gg_get_address_of(var_decl_fourplet_flags_size),
!               gg_get_address_of(var_decl_fourplet_flags),
!               build_int_cst_type(SIZE_T, N),
!               NULL_TREE);
!       }
! 
      for(size_t i=0; i<N; i++)
        {
!       gg_assign(gg_array_value(var_decl_treeplet_1f, i),
!                 gg_get_address_of(refers[i].field->var_decl_node));
!       gg_assign(gg_array_value(var_decl_treeplet_1o, i),
                  refer_offset(refers[i], &flag_bits));
!       gg_assign(gg_array_value(var_decl_treeplet_1s, i),
                  refer_size_source(refers[i]));
!       gg_assign(gg_array_value(var_decl_fourplet_flags, i),
                  build_int_cst_type(INT, flag_bits));
        }
      }
    else
      {
      abort();
      }
    }
  
  tree
--- 1866,1933 ----
              gg_cast(dest_type, value));
    }
  
! tree
! build_array_of_referlets( size_t N,
                            cbl_refer_t *refers)
    {
!   tree retval = null_pointer_node;
!   if(N)
      {
!     // Create the array of referlets.
!     tree table_type = build_array_type_nelts(cblc_referlet_type_node, N);
!     tree reflets    = gg_define_variable(table_type);
  
!     // Initialize the array of referlets from the list of refers:
!     for(size_t i=0; i<N; i++)
        {
!       gg_assign(gg_struct_field_ref(gg_array_value(reflets, i), "field"),
!             refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
!                             : gg_cast(cblc_field_p_type_node,
!                                       null_pointer_node));
!       gg_assign(gg_struct_field_ref(gg_array_value(reflets, i), "offset"),
!                 refer_offset(refers[i]));
!       gg_assign(gg_struct_field_ref(gg_array_value(reflets, i), "size"),
!                 refer_size_source(refers[i]));
        }
+ 
+     // And just return a pointer to the first element of the array:
+     retval = gg_pointer_to_array(reflets);
      }
! 
!   return retval;
    }
  
! tree
! build_array_of_refers(size_t N,
!                       cbl_refer_t *refers)
    {
!   tree retval;
    if( N )
      {
!     int flag_bits = 0;
!     tree table_type = build_array_type_nelts(cblc_refer_type_node, N);
!     tree table      = gg_define_variable(table_type);
      for(size_t i=0; i<N; i++)
        {
!       gg_assign(gg_struct_field_ref(gg_array_value(table, i), "field"),
!             refers[i].field ? gg_get_address_of(refers[i].field->var_decl_node)
!                             : gg_cast(cblc_field_p_type_node,
!                                       null_pointer_node));
!       gg_assign(gg_struct_field_ref(gg_array_value(table, i), "offset"),
                  refer_offset(refers[i], &flag_bits));
!       gg_assign(gg_struct_field_ref(gg_array_value(table, i), "size"),
                  refer_size_source(refers[i]));
!       gg_assign(gg_struct_field_ref(gg_array_value(table, i), "flags"),
                  build_int_cst_type(INT, flag_bits));
        }
+     // And just return a pointer to the first element of the array:
+     retval = gg_pointer_to_array(table);
      }
    else
      {
      abort();
      }
+   return retval;
    }
  
  tree
*************** get_literal_string(cbl_field_t *field)
*** 1910,1916 ****
  bool
  refer_is_clean(const cbl_refer_t &refer)
    {
!     if( !refer.field || refer.field->is_numeric_constant() )
      {
      // It is routine for a refer to have no field.  It happens when the parser
      // passes us a refer for an optional parameter that has been omitted, for
--- 1990,1996 ----
  bool
  refer_is_clean(const cbl_refer_t &refer)
    {
!   if( !refer.field || refer.field->is_numeric_constant() )
      {
      // It is routine for a refer to have no field.  It happens when the parser
      // passes us a refer for an optional parameter that has been omitted, for
*************** refer_is_clean(const cbl_refer_t &refer)
*** 1930,1935 ****
--- 2010,2044 ----
            ;
    }
  
+ bool
+ refer_is_super_clean(const cbl_refer_t &refer)
+   {
+   // By super-clean, we mean that in addition to refer_is_clean, the value
+   // is also in working-storage with fixed offset and capacity, and is
+   // otherwise in condition so that we can use refer.field->var_data_node for
+   // GENERIC, thus getting rid the additional level of indirection through
+   // the refer.field->var_decl_node::data pointer
+   return   refer_is_clean(refer)
+         && !(refer.field->attr & (  based_e
+                                   | linkage_e
+                                   | local_e
+                                   | intermediate_e
+                                   | any_length_e
+                                   | external_e)) ;
+   }
+ 
+ bool
+ refer_is_working_storage(const cbl_refer_t &refer)
+   {
+   // This returns TRUE in cases where the refer.field->data_decl_node is
+   // stored in .bss or .data, and is thus directly addressable.
+   bool retval = !( refer.field->attr & (  based_e
+                                         | linkage_e
+                                         | local_e
+                                         | intermediate_e) )
+                 || (refer.field->type == FldLiteralN);
+   return retval;
+   }
  
  /*  This routine returns the length portion of a refmod(start:length) reference.
      It extracts both the start and the length so that it can add them together
*************** refer_fill_depends(const cbl_refer_t &re
*** 1983,1990 ****
    }
  
  tree  // size_t
! refer_offset(const cbl_refer_t &refer,
!                    int *pflags)
    {
    // This routine calculates the effect of a refer offset on the
    // refer.field->data location.  When there are subscripts, the data location
--- 2092,2098 ----
    }
  
  tree  // size_t
! refer_offset(const cbl_refer_t &refer, int *pflags)
    {
    // This routine calculates the effect of a refer offset on the
    // refer.field->data location.  When there are subscripts, the data location
*************** is_pure_integer(const cbl_field_t *field
*** 2201,2203 ****
--- 2309,3198 ----
      }
    return retval;
    }
+ 
+ bool
+ binary_from_FldNumericBin5(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   bool retval = false;
+ 
+   tree source_type = tree_type_from_field(refer.field);
+ 
+   if( refer_is_working_storage(refer) )
+     {
+     if( !type )
+       {
+       type = source_type;
+       }
+ 
+     value = gg_define_variable(type);
+ 
+     if(  refer.field->offset == 0
+       && TREE_CODE(TREE_TYPE(refer.field->data_decl_node)) == INTEGER_TYPE)
+       {
+       // This is the cleanest method: We can just pick up the original base
+       // data.
+ 
+ //#define FOUND_THE_ALIASING_PROBLEM
+ #ifdef FOUND_THE_ALIASING_PROBLEM
+       // At the present writing, we can't just pick up the data_decl_node data,
+       // because the contents can be altered by pointer operations that the
+       // compiler doesn't know about.  And we get errors, first noted with the
+       // results of fast_add (which uses *(data *) to change the data.) Using
+       // -fno-strict-aliasing makes the problem go away.  Until we get that
+       // sorted out, we use the slightly less efficient method on the other
+       // side of the #else.
+       gg_assign(value, gg_cast(type, refer.field->data_decl_node));
+ #else
+       tree base;
+       base = gg_cast(build_pointer_type(TREE_TYPE(refer.field->data_decl_node)),
+                                 member(refer.field->var_decl_node, "data"));
+       gg_assign(value,
+                 gg_cast(type,
+                         gg_indirect(gg_cast(build_pointer_type(source_type),
+                                             base))));
+ #endif
+       }
+     else
+       {
+       // We can't just pick up the stuff at data_decl_node.  Either there is
+       // an offset from the 01 grandfather, or else there is a type mismatch,
+       // probably because of a REDEFINES.  So, we do the equivalent of
+       // *(type *)&thing;
+       tree base;
+       base = gg_cast(UCHAR_P, gg_get_address(refer.field->data_decl_node));
+       if( refer_is_clean(refer) )
+         {
+         if( refer.field->offset )
+           {
+           base = gg_add(base, build_int_cst_type(SIZE_T, refer.field->offset));
+           }
+         }
+       else
+         {
+         base = gg_add(base, refer_offset(refer));
+         }
+       gg_assign(value,
+                 gg_cast(type,
+                         gg_indirect(gg_cast(build_pointer_type(source_type),
+                                             base))));
+       }
+     retval = true;
+     }
+   else
+     {
+     if( !type )
+       {
+       type = tree_type_from_field(refer.field);
+       }
+ 
+     tree base;
+     get_location(base, refer);
+     value = gg_define_variable(type);
+     gg_assign(value,
+               gg_cast(type,
+                       gg_indirect(gg_cast(build_pointer_type(source_type),
+                                           base))));
+     retval = true;
+     }
+   return retval;
+   }
+ 
+ bool
+ binary_from_FldNumericBinary(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   bool retval = false;
+ 
+   // get the value as its own type.
+   tree unflipped;
+   retval = binary_from_FldNumericBin5(unflipped, refer, NULL_TREE);
+   if( retval )
+     {
+     // The actual return value gets the flipped bytes:
+     value = gg_define_variable(type);
+     gg_assign(value, gg_cast(type, gg_bswap(unflipped)));
+     }
+ 
+   return retval;
+   }
+ 
+ static const unsigned long pots[17] =
+   {
+   1ULL,                       // 00
+   10ULL,                      // 01
+   100ULL,                     // 02
+   1000ULL,                    // 03
+   10000ULL,                   // 04
+   100000ULL,                  // 05
+   1000000ULL,                 // 06
+   10000000ULL,                // 07
+   100000000ULL,               // 08
+   1000000000ULL,              // 09
+   10000000000ULL,             // 10
+   100000000000ULL,            // 11
+   1000000000000ULL,           // 12
+   10000000000000ULL,          // 13
+   100000000000000ULL,         // 14
+   1000000000000000ULL,        // 15
+   10000000000000000ULL,       // 16
+   };
+ 
+ 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)
+   {
+   switch( digits )
+     {
+     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;
+       }
+ 
+     case 3:
+     case 4:
+       {
+       tree type = USHORT;
+       int rsize = 2;
+       retval = gg_define_variable(type);
+       tree left_half;
+       tree right_half;
+       d_and_q_num_disp(left_half,
+                        loc,
+                        digits - rsize,
+                        stride);
+       d_and_q_num_disp(right_half,
+                        gg_add(loc,
+                               build_int_cst_type(SIZE_T,
+                                                  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:
+     case 6:
+     case 7:
+     case 8:
+       {
+       tree type = UINT;
+       int rsize = 4;
+       retval = gg_define_variable(type);
+       tree left_half;
+       tree right_half;
+       d_and_q_num_disp(left_half,
+                        loc,
+                        digits - rsize,
+                        stride);
+       d_and_q_num_disp(right_half,
+                        gg_add(loc,
+                               build_int_cst_type(SIZE_T,
+                                                  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;
+       }
+ 
+     case  9:
+     case 10:
+     case 11:
+     case 12:
+     case 13:
+     case 14:
+     case 15:
+     case 16:
+       {
+       tree type = ULONG;
+       int rsize = 8;
+       retval = gg_define_variable(type);
+       tree left_half;
+       tree right_half;
+       d_and_q_num_disp(left_half,
+                        loc,
+                        digits - rsize,
+                        stride);
+       d_and_q_num_disp(right_half,
+                        gg_add(loc,
+                               build_int_cst_type(SIZE_T,
+                                                  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;
+       }
+     }
+   }
+ 
+ bool
+ binary_from_FldNumericDisplay(tree &value,
+                               const cbl_refer_t &refer,
+                               tree return_type)
+   {
+   // A return of false means we couldn't convert this value
+   bool retval = false;
+ 
+   tree source_type = tree_type_from_field(refer.field);
+   if( !return_type )
+     {
+     return_type = source_type;
+     }
+ 
+   // 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 our address pointer, used for walking the digits.
+   tree base          = gg_define_variable(UCHAR_P);
+ 
+   // This is the location of the byte holding the sign (if any)
+   tree sign_location = gg_define_variable(UCHAR_P);
+   // 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;
+ 
+   // This works for all forms of storage:
+   gg_assign(base,
+             gg_cast(build_pointer_type(UCHAR_P),
+                     member(refer.field->var_decl_node,"data")));
+   if( !refer_is_clean(refer) )
+     {
+     gg_assign(base, gg_add(base, refer_offset(refer)));
+     }
+ 
+   gg_assign(digit_count, build_int_cst_type(SIZE_T, refer.field->data.digits));
+ 
+   charmap_t *charmap = __gg__get_charmap(refer.field->codeset.encoding);
+   size_t fstride = charmap->stride();
+   stride = build_int_cst_type(SIZE_T, fstride);
+ 
+   if( refer.field->attr & signable_e )
+     {
+     // The value is signable.
+     if( refer.field->attr & separate_e )
+       {
+       // The sign byte is separate from the digits
+       if( refer.field->attr & leading_e )
+         {
+         // separate & leading.  sign_location is the first character.
+         gg_assign(sign_location, base);
+         gg_assign(base, gg_add(base, stride));
+         }
+       else
+         {
+         // separate & trailing.  The sign byte is after the last character:
+         gg_assign(sign_location,
+                   gg_add(base,
+                          build_int_cst_type(SIZE_T,
+                                         refer.field->data.digits * fstride)));
+         }
+       }
+     else
+       {
+       // sign is internal:
+       if( refer.field->attr & leading_e )
+         {
+         // internal & leading
+         gg_assign(sign_location, base);
+         }
+       else
+         {
+         // internal & trailing
+         gg_assign(sign_location,
+                   gg_add(base,
+                          build_int_cst_type(SIZE_T,
+                                             fstride *
+                                               (refer.field->data.digits-1))));
+         }
+       }
+     }
+ 
+   size_t digits = refer.field->data.digits;
+   // At this point, we have 'digits', which is the number of characters at
+   // 'base',  The obvious thing is a multiply-and-accumulate loop, but faster
+   // code can result from allowing the middle-end to create overlapping.
+ 
+   // This divide-and-conquer algorithm gives the middle-end that flexibility.
+   // It runs about three times faster than a multiply-accumulate when compiled
+   // with -O0, and about 2.8 times faster when compiled with -O2.
+ 
+   tree d_and_q;
+   d_and_q_num_disp(d_and_q, base, digits, fstride);
+ 
+   // d_and_q contains our value.  We need to know if negativeness is involved.
+   if( refer.field->attr & signable_e )
+     {
+     if( refer.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
+       {
+       // The sign indicator is inside the sign_location digit.
+       if( charmap->is_like_ebcdic() )
+         {
+         // 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));
+     }
+ 
+   retval = true;
+   return retval;
+   }
+ 
+   /* This is the GENERIC that creates
+   static const unsigned char dp2bin[160] =
+     {
+     00, 01, 02, 03, 04, 05, 06, 07,  8,  9,  0,  0,  0,  0,  0,  0, // 0x00
+     10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 10, 10, 10, 10, 10, // 0x10
+     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 20, 20, 20, 20, 20, // 0x20
+     30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 30, 30, 30, 30, 30, 30, // 0x30
+     40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 40, 40, 40, 40, 40, 40, // 0x40
+     50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 50, 50, 50, 50, 50, 50, // 0x50
+     60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 60, 60, 60, 60, 60, 60, // 0x60
+     70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 70, 70, 70, 70, 70, 70, // 0x70
+     80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 80, 80, 80, 80, 80, 80, // 0x80
+     90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 90, 90, 90, 90, 90, 90, // 0x90
+     };
+   */
+ 
+ static tree
+ make_dp2bin_decl()
+   {
+   static const unsigned char dp2bin[160] =
+     {
+     00, 01, 02, 03, 04, 05, 06, 07,  8,  9,  0,  0,  0,  0,  0,  0, // 0x00
+     10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 10, 10, 10, 10, 10, // 0x10
+     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 20, 20, 20, 20, 20, // 0x20
+     30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 30, 30, 30, 30, 30, 30, // 0x30
+     40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 40, 40, 40, 40, 40, 40, // 0x40
+     50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 50, 50, 50, 50, 50, 50, // 0x50
+     60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 60, 60, 60, 60, 60, 60, // 0x60
+     70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 70, 70, 70, 70, 70, 70, // 0x70
+     80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 80, 80, 80, 80, 80, 80, // 0x80
+     90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 90, 90, 90, 90, 90, 90, // 0x90
+     };
+ 
+   tree array_type = build_array_type_nelts(UCHAR, 160);
+   tree decl = gg_define_variable( array_type,
+                                           "_dp2bin",
+                                           vs_file_static);
+   tree ctor = make_node(CONSTRUCTOR);
+   TREE_TYPE(ctor) = array_type;
+   TREE_STATIC(ctor)    = 1;
+   TREE_CONSTANT(ctor)  = 1;
+ 
+   for(int i=0; i<160; i++)
+     {
+     CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(ctor),
+                             build_int_cst_type(SIZE_T, i),
+                             build_int_cst_type(UCHAR, dp2bin[i]) );
+     }
+   DECL_INITIAL(decl) = ctor;
+ 
+   TREE_STATIC (decl) = 1;
+   TREE_PUBLIC (decl) = 0;
+   DECL_EXTERNAL (decl) = 0;
+   TREE_READONLY (decl) = 1;
+   DECL_ARTIFICIAL (decl) = 1;
+   DECL_IGNORED_P (decl) = 1;
+   TREE_USED (decl) = 1;
+ 
+   DECL_INITIAL (decl) = ctor;
+ 
+   return decl;
+   }
+ 
+ static void
+ d_and_q_packed(tree &value, tree base, size_t places)
+   {
+   static tree dp2bin = make_dp2bin_decl();
+ 
+   switch(places)
+     {
+     case 0:
+       {
+       // 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;
+       size_t lplaces = places - rplaces;
+       size_t pot = pots[rplaces*2];
+       d_and_q_packed(lhalf, base, lplaces);
+       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;
+       size_t lplaces = places - rplaces;
+       size_t pot = pots[rplaces*2];
+       d_and_q_packed(lhalf, base, lplaces);
+       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
+     case 6: // twelve digits
+     case 7: // fourteen digits
+     case 8: // sixteen digits
+       {
+       tree type = ULONG;
+       value = gg_define_variable(type);
+       tree lhalf;
+       tree rhalf;
+       size_t rplaces = 4;
+       size_t lplaces = places - rplaces;
+       size_t pot = pots[rplaces*2];
+       d_and_q_packed(lhalf, base, lplaces);
+       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:
+       {
+       // 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;
+         }
+       }
+     }
+   }
+ 
+ static bool
+ binary_from_comp_3(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   bool retval = false;
+ 
+   // 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 source_type = tree_type_from_field(refer.field);
+ 
+   if( !type )
+     {
+     type = source_type;
+     }
+ 
+   tree working = gg_define_variable(source_type);
+ 
+   tree base = gg_define_variable(UCHAR_P);
+   gg_assign(base,
+             gg_cast(build_pointer_type(UCHAR_P),
+                     member(refer.field->var_decl_node,"data")));
+   if( !refer_is_clean(refer) )
+     {
+     gg_assign(base, gg_add(base, refer_offset(refer)));
+     }
+ 
+   // 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(base,
+                    build_int_cst_type(SIZE_T,
+                                       refer.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,
+                  base,
+                  refer.field->data.capacity()-1);
+   // Multiply that by 10
+   tree d_and_q_10 = gg_multiply(gg_cast(source_type, d_and_q),
+                                 build_int_cst_type(source_type, 10));
+   // Pick up the final digit
+   tree final_digit = gg_rshift(gg_indirect(sign_location),
+                                build_int_cst_type(SIZE_T, 4));
+   // 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));
+ 
+   retval = true;
+   return retval;
+   }
+ 
+ static bool
+ binary_from_comp_6(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   bool retval = false;
+ 
+   // 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 = gg_define_variable(UCHAR_P);
+   gg_assign(base,
+             gg_cast(build_pointer_type(UCHAR_P),
+                     member(refer.field->var_decl_node,"data")));
+   if( !refer_is_clean(refer) )
+     {
+     gg_assign(base, gg_add(base, refer_offset(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));
+ 
+   retval = true;
+   return retval;
+   }
+ 
+ bool
+ binary_from_FldPacked(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   bool retval;
+   if( refer.field->attr & packed_no_sign_e )
+     {
+     retval = binary_from_comp_6(value, refer, type);
+     }
+   else
+     {
+     retval = binary_from_comp_3(value, refer, type);
+     }
+   return retval;
+   }
+ 
+ static
+ bool binary_from_FldFloat(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   tree source_type = tree_type_from_field(refer.field);
+ 
+   if( !type )
+     {
+     type = source_type;
+     }
+ 
+   value = gg_define_variable(type);
+ 
+   tree base;
+   get_location(base, refer);
+ 
+   gg_assign(value,
+             gg_cast(type,
+                     gg_indirect(gg_cast(build_pointer_type(source_type),
+                                                                    base))));
+ 
+   return true;
+   }
+ 
+ bool
+ get_binary_value(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   bool retval = false;
+   /* 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( (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));
+     retval = true;
+     }
+   else if( refer.addr_of )
+     {
+     // 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
+     {
+     // We know that the refer is a type that involves an integer binary value.
+     switch(refer.field->type)
+       {
+       case FldNumericBin5:
+       case FldLiteralN:
+       case FldIndex:
+       case FldPointer:
+         retval = binary_from_FldNumericBin5(value, refer, type);
+         break;
+ 
+       case FldNumericBinary:
+         retval = binary_from_FldNumericBinary(value, refer, type);
+         break;
+ 
+       case FldNumericDisplay:
+         retval = binary_from_FldNumericDisplay(value, refer, type);
+         break;
+ 
+       case FldPacked:
+         retval = binary_from_FldPacked(value, refer, type);
+         break;
+ 
+       case FldFloat:
+         retval = binary_from_FldFloat(value, refer, type);
+         break;
+ 
+       default:
+         gcc_unreachable();
+         break;
+       }
+     }
+   return retval;
+   }
+ 
+ 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.
+   retval = gg_define_variable(UCHAR_P);
+   if( refer_is_super_clean(refer) )
+     {
+     // Working storage, not external, no refmods or subscripts:
+     // gg_assign(retval, member(refer.field->var_decl_node,"data"));
+     tree base   = gg_cast(UCHAR_P,
+                           gg_get_address(refer.field->data_decl_node));
+     if( refer.field->offset )
+       {
+       tree offset = build_int_cst_type(SIZE_T, refer.field->offset);
+       gg_assign(retval, gg_cast(UCHAR_P, gg_add(base, offset)));
+       }
+     else
+       {
+       gg_assign(retval, base);
+       }
+     }
+   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.
+     gg_assign(retval,
+               gg_add(member(refer.field->var_decl_node,"data"),
+                      refer_offset(refer)));
+     }
+   }
+ 
+ void
+ get_length(tree &retval, const cbl_refer_t &refer)
+   {
+   if(refer_is_clean(refer))
+     {
+     if(   refer.field->attr & any_length_e
+        || refer.field->attr & intermediate_e )
+       {
+       // We need the run-time capacity.
+       retval = member(refer.field->var_decl_node, "capacity");
+       }
+     else
+       {
+       // We can use the compile-time capacity.
+       retval = build_int_cst_type(SIZE_T, refer.field->data.capacity());
+       }
+     }
+   else
+     {
+     retval = refer_size_source(refer);
+     }
+   }
diff -Nrcpad gcc-17-20260510/gcc/cobol/genutil.h gcc-17-20260517/gcc/cobol/genutil.h
*** gcc-17-20260510/gcc/cobol/genutil.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/genutil.h	Sun May 17 22:32:05 2026
*************** extern tree var_decl_call_parameter_sign
*** 57,87 ****
  extern tree var_decl_call_parameter_count;     // int __gg__call_parameter_count
  extern tree var_decl_call_parameter_lengths;   // size_t *var_decl_call_parameter_lengths
  
- extern tree var_decl_arithmetic_rounds_size;  // size_t __gg__arithmetic_rounds_size;
- extern tree var_decl_arithmetic_rounds;       // int*   __gg__arithmetic_rounds;
- extern tree var_decl_fourplet_flags_size;     // size_t __gg__fourplet_flags_size;
- extern tree var_decl_fourplet_flags;          // int*   __gg__fourplet_flags;
- 
- extern tree var_decl_treeplet_1f; // cblc_field_pp_type_node , "__gg__treeplet_1f"
- extern tree var_decl_treeplet_1o; // SIZE_T_P                , "__gg__treeplet_1o"
- extern tree var_decl_treeplet_1s; // SIZE_T_P                , "__gg__treeplet_1s"
- extern tree var_decl_treeplet_2f; // cblc_field_pp_type_node , "__gg__treeplet_2f"
- extern tree var_decl_treeplet_2o; // SIZE_T_P                , "__gg__treeplet_2o"
- extern tree var_decl_treeplet_2s; // SIZE_T_P                , "__gg__treeplet_2s"
- extern tree var_decl_treeplet_3f; // cblc_field_pp_type_node , "__gg__treeplet_3f"
- extern tree var_decl_treeplet_3o; // SIZE_T_P                , "__gg__treeplet_3o"
- extern tree var_decl_treeplet_3s; // SIZE_T_P                , "__gg__treeplet_3s"
- extern tree var_decl_treeplet_4f; // cblc_field_pp_type_node , "__gg__treeplet_4f"
- extern tree var_decl_treeplet_4o; // SIZE_T_P                , "__gg__treeplet_4o"
- extern tree var_decl_treeplet_4s; // SIZE_T_P                , "__gg__treeplet_4s"
  extern tree var_decl_nop;         // int __gg__nop
  extern tree var_decl_main_called; // int __gg__main_called
  extern tree var_decl_entry_index; // void* __gg__entry_index
  
  int       get_scaled_rdigits(cbl_field_t *field);
  int       get_scaled_digits(cbl_field_t *field);
! tree      tree_type_from_digits(size_t digits, int signable);
! tree      tree_type_from_size(size_t bytes, int signable);
  
  void      get_binary_value( tree value,
                              tree rdigits,
--- 57,70 ----
  extern tree var_decl_call_parameter_count;     // int __gg__call_parameter_count
  extern tree var_decl_call_parameter_lengths;   // size_t *var_decl_call_parameter_lengths
  
  extern tree var_decl_nop;         // int __gg__nop
  extern tree var_decl_main_called; // int __gg__main_called
  extern tree var_decl_entry_index; // void* __gg__entry_index
  
  int       get_scaled_rdigits(cbl_field_t *field);
  int       get_scaled_digits(cbl_field_t *field);
! tree      tree_type_from_digits(size_t digits, uint64_t signable);
! tree      tree_type_from_size(size_t bytes, uint64_t signable);
  
  void      get_binary_value( tree value,
                              tree rdigits,
*************** void      parser_display_internal_field(
*** 138,161 ****
  char     *get_literal_string(cbl_field_t *field);
  
  bool      refer_is_clean(const cbl_refer_t &refer);
  
! tree      refer_offset(const cbl_refer_t &refer,
!                        int *pflags=NULL);
  tree      refer_size_source(const cbl_refer_t &refer);
  tree      refer_size_dest(const cbl_refer_t &refer);
  
  tree      qualified_data_location(const cbl_refer_t &refer);
  
! void      build_array_of_treeplets( int ngroup,
!                                     size_t N,
                                      cbl_refer_t *refers);
  
! void      build_array_of_fourplets( int ngroup,
!                                     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);
  
  #endif
--- 121,151 ----
  char     *get_literal_string(cbl_field_t *field);
  
  bool      refer_is_clean(const cbl_refer_t &refer);
+ bool      refer_is_super_clean(const cbl_refer_t &refer);
+ bool      refer_is_working_storage(const cbl_refer_t &refer);
  
! tree      refer_offset(const cbl_refer_t &refer, int *pflags=NULL);
  tree      refer_size_source(const cbl_refer_t &refer);
  tree      refer_size_dest(const cbl_refer_t &refer);
  
  tree      qualified_data_location(const cbl_refer_t &refer);
  
! tree      build_array_of_referlets( size_t N,
                                      cbl_refer_t *refers);
  
! 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);
  
+ tree      tree_type_from_field(const cbl_field_t *field);
+ 
+ bool      get_binary_value(tree &value, 
+                      const cbl_refer_t &refer,
+                            tree type = NULL_TREE);
+ void      get_location(tree &retval, const cbl_refer_t &refer);
+ void      get_length(tree &retval, const cbl_refer_t &refer);
+ 
  #endif
diff -Nrcpad gcc-17-20260510/gcc/cobol/parse.y gcc-17-20260517/gcc/cobol/parse.y
*** gcc-17-20260510/gcc/cobol/parse.y	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/parse.y	Sun May 17 22:32:05 2026
*************** class locale_tgt_t {
*** 1046,1051 ****
--- 1046,1052 ----
  %printer { fprintf(yyo, "%c %s",
                          $$.invert? '!' : ' ',
  		        $$.term? name_of($$.term->field) : "<none>"); } <rel_term_t>
+ %printer { fprintf(yyo, "%s", $$->dbgstr()); } <log_expr_t>
  
  %printer { fprintf(yyo, "%s (token %d)", keyword_str($$), $$ ); } relop
  %printer { fprintf(yyo, "'%s'", $$? $$ : "" ); } NAME <string>
*************** exit_with:      %empty
*** 6282,6292 ****
  		   *  as specified in the rules."
  		   */
                    $$ = cbl_refer_t::empty();
- 		  if( dialect_ibm() ) {
- 		    static auto rt = cbl_field_of(symbol_at(return_code_register()));
- 		    static cbl_refer_t status(rt);
- 		    $$ = &status;
- 		  }
  		  const auto prog = cbl_label_of(symbol_at(current_program_index()));
  		  if( prog->returning ) {
  		    $$ = new cbl_refer_t( cbl_field_of(symbol_at(prog->returning)) );
--- 6283,6288 ----
diff -Nrcpad gcc-17-20260510/gcc/cobol/parse_ante.h gcc-17-20260517/gcc/cobol/parse_ante.h
*** gcc-17-20260510/gcc/cobol/parse_ante.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/parse_ante.h	Sun May 17 22:32:05 2026
*************** class log_expr_t {
*** 1591,1597 ****
        dbgmsg("%s:%d: logic error: %s is not a truth value",
                 __func__, __LINE__, name_of(rhs));
      } else {
!       parser_logop( andable, andable, and_op, rhs );
      }
      return this;
    }
--- 1591,1599 ----
        dbgmsg("%s:%d: logic error: %s is not a truth value",
                 __func__, __LINE__, name_of(rhs));
      } else {
!       auto cond = new_temporary(FldConditional);
!       parser_logop( cond, andable, and_op, rhs );
!       andable = cond;
      }
      return this;
    }
*************** class log_expr_t {
*** 1604,1610 ****
      if( ! orable ) {
        orable = andable;
      } else {
!       parser_logop( orable, orable, or_op, andable );
      }
      andable = rhs;
      return this;
--- 1606,1614 ----
      if( ! orable ) {
        orable = andable;
      } else {
!       auto cond = new_temporary(FldConditional);
!       parser_logop( cond, orable, or_op, andable );
!       orable = cond;
      }
      andable = rhs;
      return this;
*************** class log_expr_t {
*** 1612,1618 ****
    cbl_field_t * resolve() {
      assert(andable);
      if( orable ) {
!       parser_logop( andable, orable, or_op, andable );
        orable = NULL;
      }
      assert(!orable);
--- 1616,1624 ----
    cbl_field_t * resolve() {
      assert(andable);
      if( orable ) {
!       auto cond = new_temporary(FldConditional);
!       parser_logop( cond, orable, or_op, andable );
!       andable = cond;
        orable = NULL;
      }
      assert(!orable);
*************** class log_expr_t {
*** 1621,1626 ****
--- 1627,1645 ----
    bool unresolved() const {
      return orable != NULL;
    }
+ 
+   const char * dbgstr() const {
+     static char msg[64 * 2 + 16];
+     int pos = 0;
+     if( andable ) {
+       pos = sprintf(msg, "%s", andable->name);
+       assert(0 < pos);
+     }
+     if( orable ) {
+       pos = sprintf(msg + pos, " or %s", orable->name);
+     }
+     return msg;
+   }
  };
  
  static void ast_enter_section( cbl_label_t * );
diff -Nrcpad gcc-17-20260510/gcc/cobol/scan_post.h gcc-17-20260517/gcc/cobol/scan_post.h
*** gcc-17-20260510/gcc/cobol/scan_post.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/scan_post.h	Sun May 17 22:32:05 2026
*************** yylex(void) {
*** 410,413 ****
  // tokens.h is generated as needed from parse.h with tokens.h.gen
  current_tokens_t::tokenset_t::tokenset_t() {
  #include "token_names.h"
! };
--- 410,413 ----
  // tokens.h is generated as needed from parse.h with tokens.h.gen
  current_tokens_t::tokenset_t::tokenset_t() {
  #include "token_names.h"
! }
diff -Nrcpad gcc-17-20260510/gcc/cobol/structs.cc gcc-17-20260517/gcc/cobol/structs.cc
*** gcc-17-20260510/gcc/cobol/structs.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/structs.cc	Sun May 17 22:32:05 2026
*************** tree cblc_field_pp_type_node;
*** 157,162 ****
--- 157,164 ----
  tree cblc_file_type_node;
  tree cblc_file_p_type_node;
  tree cblc_goto_type_node;
+ tree cblc_referlet_type_node;
+ tree cblc_refer_type_node;
  
  // The following functions return type_decl nodes for the various structures
  
*************** create_cblc_file_t()
*** 213,219 ****
      // When doing FILE I/O, you need the cblc_file_t structure
  
      /*
! typedef struct cblc_file_t*
      {
      char                *name;             // This is the name of the structure; might be the name of an environment variable
      uint64_t             symbol_index;     // The symbol table index of the related cbl_file_t structure
--- 215,221 ----
      // When doing FILE I/O, you need the cblc_file_t structure
  
      /*
! typedef struct cblc_file_t
      {
      char                *name;             // This is the name of the structure; might be the name of an environment variable
      uint64_t             symbol_index;     // The symbol table index of the related cbl_file_t structure
*************** typedef struct cblc_file_t*
*** 289,294 ****
--- 291,336 ----
      return retval;
      }
  
+ static tree
+ create_referlet_t()
+     {
+     /*
+       typedef struct cblc_referlet_t
+           {
+           cblc_field_t        *field;
+           size_t               offset;
+           size_t               size;
+           } cblc_referlet_t;
+     */
+     tree retval = gg_get_structure_type_decl("cblc_referlet_t",
+                                               cblc_field_p_type_node, "field",
+                                               SIZE_T,               "offset",
+                                               SIZE_T,               "size",
+                                               NULL_TREE);
+     return retval;
+     }
+ 
+ static tree
+ create_refer_t()
+     {
+     /*
+       typedef struct cblc_refer_t
+           {
+           cblc_field_t        *field;
+           size_t               offset;
+           size_t               size;
+           int                  flags;
+           } cblc_refer_t;
+     */
+     tree retval = gg_get_structure_type_decl("cblc_refer_t",
+                                               cblc_field_p_type_node, "field",
+                                               SIZE_T,               "offset",
+                                               SIZE_T,               "size",
+                                               INT,                  "flags",
+                                               NULL_TREE);
+     return retval;
+     }
+ 
  void
  create_our_type_nodes()
      {
*************** create_our_type_nodes()
*** 301,306 ****
--- 343,350 ----
          cblc_field_pp_type_node           = build_pointer_type(cblc_field_p_type_node);
          cblc_file_type_node               = create_cblc_file_t();
          cblc_file_p_type_node             = build_pointer_type(cblc_file_type_node);
+         cblc_referlet_type_node           = create_referlet_t();
+         cblc_refer_type_node              = create_refer_t();
          }
      }
  
diff -Nrcpad gcc-17-20260510/gcc/cobol/structs.h gcc-17-20260517/gcc/cobol/structs.h
*** gcc-17-20260510/gcc/cobol/structs.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/structs.h	Sun May 17 22:32:05 2026
*************** extern void member(tree var, const char
*** 46,51 ****
--- 46,52 ----
  extern void member(cbl_field_t *var, const char *member_name, tree value);
  
  extern void member2(tree var, const char *member_name, const char *submember, int value);
+ extern void member2(tree var, const char *member_name, const char *submember, int value);
  extern void member2(tree var, const char *member_name, const char *submember, tree value);
  extern void member3(tree var, const char *mem, const char *sub1, const char *sub2, tree value);
  
*************** extern GTY(()) tree cblc_field_pp_type_n
*** 55,60 ****
--- 56,63 ----
  extern GTY(()) tree cblc_file_type_node;
  extern GTY(()) tree cblc_file_p_type_node;
  extern GTY(()) tree cblc_goto_type_node;
+ extern GTY(()) tree cblc_referlet_type_node;
+ extern GTY(()) tree cblc_refer_type_node;
  
  extern void create_our_type_nodes();
  
diff -Nrcpad gcc-17-20260510/gcc/cobol/symbols.cc gcc-17-20260517/gcc/cobol/symbols.cc
*** gcc-17-20260510/gcc/cobol/symbols.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/symbols.cc	Sun May 17 22:32:05 2026
*************** temporaries_t::add( cbl_field_t *field )
*** 3782,3788 ****
    bool yn(p.second);
    assert(yn);
    return *p.first;
! };
  
  cbl_field_t *
  temporaries_t::reuse( cbl_field_type_t type ) {
--- 3782,3788 ----
    bool yn(p.second);
    assert(yn);
    return *p.first;
! }
  
  cbl_field_t *
  temporaries_t::reuse( cbl_field_type_t type ) {
diff -Nrcpad gcc-17-20260510/gcc/cobol/symbols.h gcc-17-20260517/gcc/cobol/symbols.h
*** gcc-17-20260510/gcc/cobol/symbols.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/symbols.h	Sun May 17 22:32:05 2026
*************** struct cbl_bsearch_t {
*** 1364,1370 ****
      tree right; // This is a long
      tree middle; // This is our copy of the index, so we only need to write
                   // it and never read it.
-     tree compare_result; // This is an int, and avoids
      struct cbl_field_t *index;
      bool first_when;
  };
--- 1364,1369 ----
*************** bool validate_numeric_edited(cbl_field_t
*** 3114,3128 ****
  cbl_field_t *new_alphanumeric(const cbl_name_t name=nullptr,
                                cbl_encoding_t encoding=no_encoding_e );
  
- 
  // ENABLE_HIJACKING allows for code generation to be "hijacked" when the
! // program-id is "dubner" or "hijack".  See the mainline code in genapi.cc.
  
! // To enable hijacking, use
! // 
! //     make ... CPPFLAGS=-DENABLE_HIJACKING
! //
! // taking care to recaptulate whatever CPPFLAGS were set when configure was
! // run.
  
  #endif
--- 3113,3121 ----
  cbl_field_t *new_alphanumeric(const cbl_name_t name=nullptr,
                                cbl_encoding_t encoding=no_encoding_e );
  
  // ENABLE_HIJACKING allows for code generation to be "hijacked" when the
! // program-id is "dubner_h" or "hijack_h".  See the mainline code in genapi.cc.
  
! #define ENABLE_HIJACKING
  
  #endif
diff -Nrcpad gcc-17-20260510/gcc/cobol/util.cc gcc-17-20260517/gcc/cobol/util.cc
*** gcc-17-20260510/gcc/cobol/util.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cobol/util.cc	Sun May 17 22:32:05 2026
*************** symbol_field_type_update( cbl_field_t *f
*** 957,967 ****
      case FldSwitch:
        gcc_unreachable();
      case FldAlphanumeric:
!       // MF allows PIC X(n) to have USAGE COMP-[5x]
        if( candidate != FldNumericBin5 ) return false;
-       if( ! (dialect_mf() && field->has_attr(all_x_e)) ) {
-         return false;
-       }
        __attribute__((fallthrough));
      case FldFloat:
      case FldNumericBin5:
--- 957,965 ----
      case FldSwitch:
        gcc_unreachable();
      case FldAlphanumeric:
!       // MF and GNU allow pic x usage comp-5.
!       // Dialect enforcement in that case is in field_binary_usage.
        if( candidate != FldNumericBin5 ) return false;
        __attribute__((fallthrough));
      case FldFloat:
      case FldNumericBin5:
diff -Nrcpad gcc-17-20260510/gcc/combine.cc gcc-17-20260517/gcc/combine.cc
*** gcc-17-20260510/gcc/combine.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/combine.cc	Sun May 17 22:32:05 2026
*************** make_compound_operation_int (scalar_int_
*** 8390,8395 ****
--- 8390,8401 ----
  
  	tem = make_compound_operation (inner, subreg_code);
  
+ 	/* TEM's code might be CLOBBER if combine_simplify_rtx
+ 	   could not transform a subexpression, e.g. a volatile MEM.
+ 	   simplify_subreg cannot be called with clobber, so bail out.  */
+ 	if (GET_CODE (tem) == CLOBBER)
+ 	  return NULL_RTX;
+ 
  	simplified
  	  = simplify_subreg (mode, tem, GET_MODE (inner), SUBREG_BYTE (x));
  	if (simplified)
*************** recog_for_combine_1 (rtx *pnewpat, rtx_i
*** 11525,11536 ****
        REG_NOTES (insn) = notes;
        INSN_CODE (insn) = insn_code_number;
  
!       /* Allow targets to reject combined insn.  */
!       if (!targetm.legitimate_combined_insn (insn))
  	{
  	  if (dump_file && (dump_flags & TDF_DETAILS))
! 	    fputs ("Instruction not appropriate for target.",
! 		   dump_file);
  
  	  /* Callers expect recog_for_combine to strip
  	     clobbers from the pattern on failure.  */
--- 11531,11572 ----
        REG_NOTES (insn) = notes;
        INSN_CODE (insn) = insn_code_number;
  
!       /* Do not accept an insn if hard register constraints are used.  For
! 	 example, assume that the first insn is combined into the last one:
! 
! 	 r100=...
! 	 %5=...
! 	 r101=exp(r100)
! 
! 	 If the resulting insn has an operand which is constrained to hard
! 	 register %5, then this introduces a conflict since register %5 is live
! 	 at this point.  Therefore, skip for now.  This is a sledge hammer
! 	 approach.  Ideally we would skip based on the fact whether a
! 	 combination crosses a hard register assignment and the corresponding
! 	 hard register is also referred by a single register constraint of the
! 	 resulting insn.  */
!       bool has_hard_reg_cstr = false;
!       extract_insn (insn);
!       for (int nop = recog_data.n_operands - 1; nop >= 0; --nop)
! 	if (strchr (recog_data.constraints[nop], '{'))
! 	  {
! 	    has_hard_reg_cstr = true;
! 	    break;
! 	  }
! 
!       /* Don't accept hard register constraints.  Allow targets to reject
! 	 combined insn.  */
!       if (has_hard_reg_cstr || !targetm.legitimate_combined_insn (insn))
  	{
  	  if (dump_file && (dump_flags & TDF_DETAILS))
! 	    {
! 	      if (has_hard_reg_cstr)
! 		fputs ("Instruction makes use of hard register constraints.",
! 		       dump_file);
! 	      else
! 		fputs ("Instruction not appropriate for target.",
! 		       dump_file);
! 	    }
  
  	  /* Callers expect recog_for_combine to strip
  	     clobbers from the pattern on failure.  */
diff -Nrcpad gcc-17-20260510/gcc/common.opt gcc-17-20260517/gcc/common.opt
*** gcc-17-20260510/gcc/common.opt	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/common.opt	Sun May 17 22:32:05 2026
*************** Wtsan
*** 932,937 ****
--- 932,941 ----
  Common Var(warn_tsan) Init(1) Warning
  Warn about unsupported features in ThreadSanitizer.
  
+ Wzero-init-padding-bits=
+ Common Joined RejectNegative Enum(zero_init_padding_bits_kind) Var(warn_zero_init_padding_bits) Init(ZERO_INIT_PADDING_BITS_STANDARD) Warning
+ -Wzero-init-padding-bits=[standard|unions|all]	Warn about initializers that might not zero padding bits.
+ 
  Xassembler
  Driver Separate
  
diff -Nrcpad gcc-17-20260510/gcc/common.opt.urls gcc-17-20260517/gcc/common.opt.urls
*** gcc-17-20260510/gcc/common.opt.urls	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/common.opt.urls	Sun May 17 22:32:05 2026
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 555,560 ****
--- 555,563 ----
  Wtsan
  UrlSuffix(gcc/Warning-Options.html#index-Wno-tsan)
  
+ Wzero-init-padding-bits=
+ UrlSuffix(gcc/Warning-Options.html#index-Wzero-init-padding-bits_003d)
+ 
  Xassembler
  UrlSuffix(gcc/Assembler-Options.html#index-Xassembler)
  
diff -Nrcpad gcc-17-20260510/gcc/config/aarch64/aarch64-protos.h gcc-17-20260517/gcc/config/aarch64/aarch64-protos.h
*** gcc-17-20260510/gcc/config/aarch64/aarch64-protos.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/aarch64/aarch64-protos.h	Sun May 17 22:32:05 2026
*************** char *aarch64_output_simd_and_imm (rtx,
*** 952,959 ****
--- 952,961 ----
  char *aarch64_output_simd_xor_imm (rtx, unsigned);
  char *aarch64_output_fmov (rtx);
  
+ const char *aarch64_output_simd_mov_imm_low (rtx *);
  char *aarch64_output_sve_mov_immediate (rtx);
  char *aarch64_output_sve_ptrues (rtx);
+ bool aarch64_const_vec_fmov_p (rtx);
  bool aarch64_pad_reg_upward (machine_mode, const_tree, bool);
  bool aarch64_regno_ok_for_base_p (int, bool);
  bool aarch64_regno_ok_for_index_p (int, bool);
diff -Nrcpad gcc-17-20260510/gcc/config/aarch64/aarch64-simd.md gcc-17-20260517/gcc/config/aarch64/aarch64-simd.md
*** gcc-17-20260510/gcc/config/aarch64/aarch64-simd.md	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/aarch64/aarch64-simd.md	Sun May 17 22:32:05 2026
***************
*** 79,85 ****
  	}
        else if (!aarch64_simd_imm_zero (operands[1], <MODE>mode)
  	       && !aarch64_simd_special_constant_p (operands[1], <MODE>mode)
! 	       && !aarch64_simd_valid_mov_imm (operands[1]))
  	{
  	  rtx x;
  	  /* Expand into VDUP.  */
--- 79,86 ----
  	}
        else if (!aarch64_simd_imm_zero (operands[1], <MODE>mode)
  	       && !aarch64_simd_special_constant_p (operands[1], <MODE>mode)
! 	       && !aarch64_simd_valid_mov_imm (operands[1])
! 	       && !aarch64_const_vec_fmov_p (operands[1]))
  	{
  	  rtx x;
  	  /* Expand into VDUP.  */
***************
*** 183,188 ****
--- 184,190 ----
       [?r, w ; neon_to_gp<q>      , *        , *] fmov\t%x0, %d1
       [?w, r ; f_mcr              , *        , *] fmov\t%d0, %1
       [?r, r ; mov_reg            , *        , *] mov\t%0, %1
+      [w , Dc; fmov               , *        , *] << aarch64_output_simd_mov_imm_low (operands);
       [w , Dn; neon_move<q>       , simd     , *] << aarch64_output_simd_mov_imm (operands[1], 64);
       [w , Dz; f_mcr              , *        , *] fmov\t%d0, xzr
       [w , Dx; neon_move          , simd     , 8] #
***************
*** 212,217 ****
--- 214,220 ----
       [?r , w ; multiple           , *   , 8] #
       [?w , r ; multiple           , *   , 8] #
       [?r , r ; multiple           , *   , 8] #
+      [w  , Dc; fmov               , *   , 4] << aarch64_output_simd_mov_imm_low (operands);
       [w  , Dn; neon_move<q>       , simd, 4] << aarch64_output_simd_mov_imm (operands[1], 128);
       [w  , Dz; fmov               , *   , 4] fmov\t%d0, xzr
       [w  , Dx; neon_move          , simd, 8] #
diff -Nrcpad gcc-17-20260510/gcc/config/aarch64/aarch64-tuning-flags.def gcc-17-20260517/gcc/config/aarch64/aarch64-tuning-flags.def
*** gcc-17-20260510/gcc/config/aarch64/aarch64-tuning-flags.def	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/aarch64/aarch64-tuning-flags.def	Sun May 17 22:32:05 2026
*************** AARCH64_EXTRA_TUNING_OPTION ("cheap_fpmr
*** 67,73 ****
  
  /* Baseline tuning settings suitable for all modern cores.  */
  #define AARCH64_EXTRA_TUNE_BASE (AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND	\
! 				 | AARCH64_EXTRA_TUNE_FULLY_PIPELINED_FMA)
  
  /* Enables dispatch scheduling.  */
  AARCH64_EXTRA_TUNING_OPTION ("dispatch_sched", DISPATCH_SCHED)
--- 67,74 ----
  
  /* Baseline tuning settings suitable for all modern cores.  */
  #define AARCH64_EXTRA_TUNE_BASE (AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND	\
! 				 | AARCH64_EXTRA_TUNE_FULLY_PIPELINED_FMA \
! 				 | AARCH64_EXTRA_TUNE_NARROW_GP_WRITES)
  
  /* Enables dispatch scheduling.  */
  AARCH64_EXTRA_TUNING_OPTION ("dispatch_sched", DISPATCH_SCHED)
diff -Nrcpad gcc-17-20260510/gcc/config/aarch64/aarch64-vxworks.h gcc-17-20260517/gcc/config/aarch64/aarch64-vxworks.h
*** gcc-17-20260510/gcc/config/aarch64/aarch64-vxworks.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/aarch64/aarch64-vxworks.h	Sun May 17 22:32:05 2026
*************** along with GCC; see the file COPYING3.
*** 23,29 ****
  #define SUBTARGET_OVERRIDE_OPTIONS VXWORKS_OVERRIDE_OPTIONS
  
  #undef LINK_SPEC
! #define LINK_SPEC VXWORKS_LINK_SPEC
  
  #undef LIB_SPEC
  #define LIB_SPEC VXWORKS_LIB_SPEC
--- 23,30 ----
  #define SUBTARGET_OVERRIDE_OPTIONS VXWORKS_OVERRIDE_OPTIONS
  
  #undef LINK_SPEC
! #define LINK_SPEC VXWORKS_LINK_SPEC \
!  AARCH64_ERRATA_LINK_SPEC
  
  #undef LIB_SPEC
  #define LIB_SPEC VXWORKS_LIB_SPEC
*************** along with GCC; see the file COPYING3.
*** 38,44 ****
  #define CPP_SPEC VXWORKS_ADDITIONAL_CPP_SPEC
  
  #undef CC1_SPEC
! #define CC1_SPEC VXWORKS_CC1_SPEC
  
  #undef FUNCTION_PROFILER
  #define FUNCTION_PROFILER VXWORKS_FUNCTION_PROFILER
--- 39,48 ----
  #define CPP_SPEC VXWORKS_ADDITIONAL_CPP_SPEC
  
  #undef CC1_SPEC
! #define CC1_SPEC VXWORKS_CC1_SPEC AARCH64_ERRATA_COMPILE_SPEC
! 
! #undef CC1PLUS_SPEC
! #define CC1PLUS_SPEC VXWORKS_CC1_SPEC AARCH64_ERRATA_COMPILE_SPEC
  
  #undef FUNCTION_PROFILER
  #define FUNCTION_PROFILER VXWORKS_FUNCTION_PROFILER
diff -Nrcpad gcc-17-20260510/gcc/config/aarch64/aarch64.cc gcc-17-20260517/gcc/config/aarch64/aarch64.cc
*** gcc-17-20260510/gcc/config/aarch64/aarch64.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/aarch64/aarch64.cc	Sun May 17 22:32:05 2026
*************** aarch64_simd_valid_mov_imm (rtx op)
*** 24604,24609 ****
--- 24604,24688 ----
    return aarch64_simd_valid_imm (op, NULL, AARCH64_CHECK_MOV);
  }
  
+ 
+ /* Return true if OP is an FP constant vector in which the low register
+    element can be materialized using FMOV and all other elements are zero.  */
+ bool
+ aarch64_const_vec_fmov_p (rtx op)
+ {
+   if (!CONST_VECTOR_P (op))
+     return false;
+ 
+   machine_mode mode = GET_MODE (op);
+   scalar_mode inner_mode = GET_MODE_INNER (mode);
+ 
+   if (inner_mode != E_HFmode
+       && inner_mode != E_SFmode
+       && inner_mode != E_DFmode)
+     return false;
+ 
+   if (inner_mode == E_HFmode && !TARGET_FP_F16INST)
+     return false;
+ 
+   unsigned int nunits = GET_MODE_NUNITS (mode).to_constant ();
+   unsigned int const_idx = BYTES_BIG_ENDIAN ? nunits - 1 : 0;
+ 
+   rtx elt = CONST_VECTOR_ELT (op, const_idx);
+   if (!CONST_DOUBLE_P (elt))
+     return false;
+ 
+   REAL_VALUE_TYPE r = *CONST_DOUBLE_REAL_VALUE (elt);
+   if (!aarch64_real_float_const_representable_p (r))
+     return false;
+ 
+   for (unsigned int i = 0; i < nunits; ++i)
+     {
+       if (i == const_idx)
+ 	continue;
+ 
+       rtx x = CONST_VECTOR_ELT (op, i);
+       if (!rtx_equal_p (x, CONST0_RTX (inner_mode)))
+ 	return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Output a move of an FP constant vector in which the low register element is
+    materialized using FMOV and all other elements are zero.  */
+ const char *
+ aarch64_output_simd_mov_imm_low (rtx *operands)
+ {
+   machine_mode mode = GET_MODE (operands[1]);
+   scalar_mode inner_mode = GET_MODE_INNER (mode);
+   unsigned int nunits = GET_MODE_NUNITS (mode).to_constant ();
+   unsigned int const_idx = BYTES_BIG_ENDIAN ? nunits - 1 : 0;
+   rtx elt = CONST_VECTOR_ELT (operands[1], const_idx);
+   rtx xop[2];
+ 
+   xop[0] = operands[0];
+   xop[1] = elt;
+ 
+   switch (inner_mode)
+     {
+       case E_HFmode:
+ 	output_asm_insn ("fmov\t%h0, %1", xop);
+ 	break;
+ 
+       case E_SFmode:
+ 	output_asm_insn ("fmov\t%s0, %1", xop);
+ 	break;
+ 
+       case E_DFmode:
+ 	output_asm_insn ("fmov\t%d0, %1", xop);
+ 	break;
+ 
+       default:
+ 	gcc_unreachable ();
+     }
+   return "";
+ }
+ 
  /* Return true if OP is a valid SIMD orr immediate for SVE or AdvSIMD.  */
  bool
  aarch64_simd_valid_orr_imm (rtx op)
diff -Nrcpad gcc-17-20260510/gcc/config/aarch64/constraints.md gcc-17-20260517/gcc/config/aarch64/constraints.md
*** gcc-17-20260510/gcc/config/aarch64/constraints.md	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/aarch64/constraints.md	Sun May 17 22:32:05 2026
***************
*** 503,508 ****
--- 503,515 ----
   (and (match_code "const_vector")
        (match_test "aarch64_simd_valid_xor_imm (op)")))
  
+ (define_constraint "Dc"
+  "@internal
+   A constraint that matches an FP constant vector in which the low register
+   element can be materialized using FMOV and all other elements are zero."
+  (and (match_code "const_vector")
+       (match_test "aarch64_const_vec_fmov_p (op)")))
+ 
  (define_constraint "Dn"
    "@internal
   A constraint that matches vector of immediates."
diff -Nrcpad gcc-17-20260510/gcc/config/avr/avr.cc gcc-17-20260517/gcc/config/avr/avr.cc
*** gcc-17-20260510/gcc/config/avr/avr.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/avr/avr.cc	Sun May 17 22:32:05 2026
*************** bool avr_need_clear_bss_p = false;
*** 249,257 ****
  bool avr_need_copy_data_p = false;
  bool avr_has_rodata_p = false;
  
- /* To track if we satisfy __call_main from AVR-LibC.  */
- bool avr_no_call_main_p = false;
- 
  /* Counts how often pass avr-fuse-add has been executed.  Is is kept in
     sync with cfun->machine->n_avr_fuse_add_executed and serves as an
     insn condition for shift insn splitters.  */
--- 249,254 ----
*************** avr_insert_attributes (tree node, tree *
*** 11906,11912 ****
  	      *attributes = tree_cons (get_identifier ("section"),
  				       arg, *attributes);
  	    }
! 	  avr_no_call_main_p = true;
  	}
      } // -mno-call-main
  #endif // AVR-LibC
--- 11903,11911 ----
  	      *attributes = tree_cons (get_identifier ("section"),
  				       arg, *attributes);
  	    }
! 	  if (!lookup_attribute ("used", *attributes))
! 	    *attributes = tree_cons (get_identifier ("used"),
! 				     NULL_TREE, *attributes);
  	}
      } // -mno-call-main
  #endif // AVR-LibC
*************** avr_file_end (void)
*** 12467,12481 ****
  
    if (avr_need_clear_bss_p)
      fputs (".global __do_clear_bss\n", asm_out_file);
- 
-   /* Don't let __call_main call main() and exit().
-      Defining this symbol will keep the code from being pulled
-      in from lib<mcu>.a as requested by AVR-LibC's gcrt1.S.
-      We invoke main() by other means: putting it in .init9.  */
- 
-   if (avr_no_call_main_p)
-     fputs (".global __call_main\n"
- 	   "__call_main = 0\n", asm_out_file);
  }
  
  
--- 12466,12471 ----
diff -Nrcpad gcc-17-20260510/gcc/config/avr/gen-avr-mmcu-specs.cc gcc-17-20260517/gcc/config/avr/gen-avr-mmcu-specs.cc
*** gcc-17-20260510/gcc/config/avr/gen-avr-mmcu-specs.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/avr/gen-avr-mmcu-specs.cc	Sun May 17 22:32:05 2026
*************** print_mcu (const avr_mcu_t *mcu, const M
*** 355,360 ****
--- 355,362 ----
  
    fprintf (f, "*link_relax:\n\t%s\n\n", LINK_RELAX_SPEC);
  
+   fprintf (f, "*link_no_call_main:\n\t%s\n\n", "%{mno-call-main: --defsym __call_main=0}");
+ 
    fprintf (f, "*link_arch:\n\t%s", link_arch_spec);
    if (mi.is_device
        && rodata_pm_offset)
diff -Nrcpad gcc-17-20260510/gcc/config/avr/specs.h gcc-17-20260517/gcc/config/avr/specs.h
*** gcc-17-20260510/gcc/config/avr/specs.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/avr/specs.h	Sun May 17 22:32:05 2026
*************** along with GCC; see the file COPYING3.
*** 67,72 ****
--- 67,73 ----
    "%(link_relax) "                              \
    "%(link_pmem_wrap) "                          \
    "%(link_rodata_in_ram) "                      \
+   "%(link_no_call_main) "                       \
    "%{shared:%eshared is not supported} "
  
  #undef  LIB_SPEC
diff -Nrcpad gcc-17-20260510/gcc/config/i386/cygming.h gcc-17-20260517/gcc/config/i386/cygming.h
*** gcc-17-20260510/gcc/config/i386/cygming.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/i386/cygming.h	Sun May 17 22:32:05 2026
*************** along with GCC; see the file COPYING3.
*** 26,32 ****
  #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
  
  #undef TARGET_SEH
! #define TARGET_SEH  (TARGET_64BIT_MS_ABI && flag_unwind_tables)
  
  #undef PREFERRED_STACK_BOUNDARY_DEFAULT
  #define PREFERRED_STACK_BOUNDARY_DEFAULT \
--- 26,36 ----
  #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
  
  #undef TARGET_SEH
! /* Win64 uses SEH unwind metadata regardless of whether an individual
!   function is compiled with the default MS ABI or with sysv_abi.  Keep
!   SEH enabled for all 64-bit Windows functions whenever unwind tables are
!   requested so .seh_proc state stays consistent with EH emission.  */
! #define TARGET_SEH  (TARGET_64BIT && flag_unwind_tables)
  
  #undef PREFERRED_STACK_BOUNDARY_DEFAULT
  #define PREFERRED_STACK_BOUNDARY_DEFAULT \
diff -Nrcpad gcc-17-20260510/gcc/config/i386/i386-features.cc gcc-17-20260517/gcc/config/i386/i386-features.cc
*** gcc-17-20260510/gcc/config/i386/i386-features.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/i386/i386-features.cc	Sun May 17 22:32:05 2026
*************** scalar_chain::add_insn (bitmap candidate
*** 506,511 ****
--- 506,515 ----
    if (def_set)
      switch (GET_CODE (SET_SRC (def_set)))
        {
+       case REG:
+ 	if (HARD_REGISTER_P (SET_SRC (def_set)))
+ 	  return true;
+ 	break;
        case VEC_SELECT:
  	return true;
        case ZERO_EXTEND:
*************** timode_scalar_chain::compute_convert_gai
*** 1641,1647 ****
        switch (GET_CODE (src))
  	{
  	case REG:
! 	  if (!speed_p)
  	    igain = MEM_P (dst) ? COSTS_N_BYTES (6) : COSTS_N_BYTES (3);
  	  else
  	    igain = COSTS_N_INSNS (1);
--- 1645,1677 ----
        switch (GET_CODE (src))
  	{
  	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);
! 	      else
! 		/* movq + movq + punpcklqdq */
! 		igain = speed_p ? -ix86_cost->integer_to_sse
! 				  - COSTS_N_INSNS (2)
! 				: -COSTS_N_BYTES (14);
! 	    }
! 	  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);
! 	      else
! 		/* movhlps + movq + movq */
! 		igain = speed_p ? -ix86_cost->sse_to_integer
! 				  - COSTS_N_INSNS (2)
! 				: -COSTS_N_BYTES (13);
! 	    }
! 	  else if (!speed_p)
  	    igain = MEM_P (dst) ? COSTS_N_BYTES (6) : COSTS_N_BYTES (3);
  	  else
  	    igain = COSTS_N_INSNS (1);
*************** timode_scalar_chain::compute_convert_gai
*** 1680,1686 ****
  	  if (timode_concatdi_p (src))
  	    {
  	      /* vmovq;vpinsrq (11 bytes).  */
! 	      igain = speed_p ? -2 * ix86_cost->sse_to_integer
  			      : -COSTS_N_BYTES (11);
  	      break;
  	    }
--- 1710,1716 ----
  	  if (timode_concatdi_p (src))
  	    {
  	      /* vmovq;vpinsrq (11 bytes).  */
! 	      igain = speed_p ? -ix86_cost->integer_to_sse - COSTS_N_INSNS (1)
  			      : -COSTS_N_BYTES (11);
  	      break;
  	    }
*************** timode_scalar_chain::compute_convert_gai
*** 1693,1699 ****
  	case PLUS:
  	  if (timode_concatdi_p (src))
  	    /* vmovq;vpinsrq (11 bytes).  */
! 	    igain = speed_p ? -2 * ix86_cost->sse_to_integer
  			    : -COSTS_N_BYTES (11);
  	  break;
  
--- 1723,1729 ----
  	case PLUS:
  	  if (timode_concatdi_p (src))
  	    /* vmovq;vpinsrq (11 bytes).  */
! 	    igain = speed_p ? -ix86_cost->integer_to_sse - COSTS_N_INSNS (1)
  			    : -COSTS_N_BYTES (11);
  	  break;
  
*************** timode_scalar_chain::convert_insn (rtx_i
*** 1963,1970 ****
      case REG:
        if (GET_MODE (dst) == TImode)
  	{
! 	  PUT_MODE (dst, V1TImode);
! 	  fix_debug_reg_uses (dst);
  	}
        if (GET_MODE (dst) == V1TImode)
  	{
--- 1993,2005 ----
      case REG:
        if (GET_MODE (dst) == TImode)
  	{
! 	  if (!HARD_REGISTER_NUM_P (REGNO (dst)))
! 	    {
! 	      PUT_MODE (dst, V1TImode);
! 	      fix_debug_reg_uses (dst);
! 	    }
! 	  else if (!GENERAL_REGNO_P (REGNO (dst)))
! 	    dst = gen_raw_REG (V1TImode, REGNO (dst));
  	}
        if (GET_MODE (dst) == V1TImode)
  	{
*************** timode_scalar_chain::convert_insn (rtx_i
*** 1988,1995 ****
      case REG:
        if (GET_MODE (src) == TImode)
  	{
! 	  PUT_MODE (src, V1TImode);
! 	  fix_debug_reg_uses (src);
  	}
        break;
  
--- 2023,2064 ----
      case REG:
        if (GET_MODE (src) == TImode)
  	{
! 	  if (GENERAL_REGNO_P (REGNO (src)))
! 	    {
! 	      rtx lo = gen_reg_rtx (DImode);
! 	      rtx hi = gen_reg_rtx (DImode);
! 	      emit_insn_before (gen_rtx_SET (lo, gen_lowpart (DImode, src)),
! 				insn);
! 	      emit_insn_before (gen_rtx_SET (hi, gen_highpart (DImode, src)),
! 				insn);
! 	      src = gen_reg_rtx (V2DImode);
! 	      emit_insn_before (gen_vec_concatv2di (src, lo, hi), insn);
! 	      src = gen_lowpart (V1TImode, src);
! 	    }
! 	  else if (!HARD_REGISTER_NUM_P (REGNO (src)))
! 	    {
! 	      PUT_MODE (src, V1TImode);
! 	      fix_debug_reg_uses (src);
! 	    }
! 	  else
! 	    src = gen_raw_REG (V1TImode, REGNO (src));
! 	}
!       if (GENERAL_REG_P (dst))
! 	{
! 	  rtx tmp = gen_reg_rtx (V2DImode);
! 	  src = gen_lowpart (V2DImode, src);
! 	  emit_insn_before (gen_rtx_SET (tmp, src), insn);
! 	  /* Extracting hi before lo helps register allocation.  */
! 	  rtx hi = gen_reg_rtx (DImode);
! 	  rtx lo = gen_reg_rtx (DImode);
! 	  emit_insn_before (gen_vec_extractv2didi (hi, tmp, const1_rtx), insn);
! 	  emit_insn_before (gen_vec_extractv2didi (lo, tmp, const0_rtx), insn);
! 
! 	  /* Construct *concatditi3 pattern from lo and hi.  */
! 	  hi = gen_rtx_ZERO_EXTEND (TImode, hi);
! 	  hi = gen_rtx_ASHIFT (TImode, hi, GEN_INT (64));
! 	  lo = gen_rtx_ZERO_EXTEND (TImode, lo);
! 	  src = gen_rtx_PLUS (TImode, hi, lo);
  	}
        break;
  
*************** timode_scalar_to_vector_candidate_p (rtx
*** 2453,2460 ****
  {
    rtx def_set = pseudo_reg_set (insn);
  
    if (!def_set)
!     return false;
  
    rtx src = SET_SRC (def_set);
    rtx dst = SET_DEST (def_set);
--- 2522,2552 ----
  {
    rtx def_set = pseudo_reg_set (insn);
  
+   /* We allow two exceptions to the pseudo registers only rule.
+      Setting a hard register from a pseudo, and setting a pseudo
+      from a hard register.  */
    if (!def_set)
!     {
!       def_set = single_set (insn);
!       if (def_set)
! 	{
! 	  rtx src = SET_SRC (def_set);
! 	  rtx dst = SET_DEST (def_set);
! 	  if (GET_MODE (dst) == TImode
! 	      && REG_P (src) && REG_P (dst))
! 	    {
! 	      if (HARD_REGISTER_P (dst)
! 		  && !HARD_REGISTER_P (src)
! 		  && single_def_chain_p (src))
! 		return true;
! 	      if (HARD_REGISTER_P (src)
! 		  && !HARD_REGISTER_P (dst)
! 		  && single_def_chain_p (dst))
! 		return true;
! 	    }
! 	}
!       return false;
!     }
  
    rtx src = SET_SRC (def_set);
    rtx dst = SET_DEST (def_set);
diff -Nrcpad gcc-17-20260510/gcc/config/i386/i386.cc gcc-17-20260517/gcc/config/i386/i386.cc
*** gcc-17-20260510/gcc/config/i386/i386.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/i386/i386.cc	Sun May 17 22:32:05 2026
*************** ix86_save_reg (unsigned int regno, bool
*** 6776,6781 ****
--- 6776,6788 ----
  {
    rtx reg;
  
+   /* Save and restore DRAP register between prologue and epilogue so
+      that stack pointer can be restored.  */
+   if (crtl->drap_reg
+       && regno == REGNO (crtl->drap_reg)
+       && !cfun->machine->no_drap_save_restore)
+     return true;
+ 
    switch (cfun->machine->call_saved_registers)
      {
      case TYPE_DEFAULT_CALL_SAVED_REGISTERS:
*************** ix86_save_reg (unsigned int regno, bool
*** 6851,6861 ****
  	return false;
      }
  
-   if (crtl->drap_reg
-       && regno == REGNO (crtl->drap_reg)
-       && !cfun->machine->no_drap_save_restore)
-     return true;
- 
    return (df_regs_ever_live_p (regno)
  	  && !call_used_or_fixed_reg_p (regno)
  	  && (regno != HARD_FRAME_POINTER_REGNUM || !frame_pointer_needed));
--- 6858,6863 ----
*************** find_drap_reg (void)
*** 7946,7951 ****
--- 7948,7958 ----
       registers.  */
    if (TARGET_64BIT)
      {
+       /* In preserve_none functions, any register can be used for DRAP,
+ 	 except AX, R12–R15, DI, SI (argument registers), SP, and BP.  */
+       if (cfun->machine->call_saved_registers == TYPE_PRESERVE_NONE)
+ 	return R11_REG;
+ 
        /* Use R13 for nested function or function need static chain.
  	 Since function with tail call may use any caller-saved
  	 registers in epilogue, DRAP must not use caller-saved
*************** ix86_vector_costs::add_stmt_cost (int co
*** 26591,26610 ****
    if ((kind == vector_stmt || kind == scalar_stmt)
        && stmt_info
        && stmt_info->stmt
!       && (cfn = gimple_call_combined_fn (stmt_info->stmt)) != CFN_LAST)
!     switch (cfn)
!       {
!       case CFN_FMA:
! 	stmt_cost = ix86_vec_cost (mode,
! 				   mode == SFmode ? ix86_cost->fmass
! 				   : ix86_cost->fmasd);
! 	break;
!       case CFN_MULH:
! 	stmt_cost = ix86_multiplication_cost (ix86_cost, mode);
! 	break;
!       default:
! 	break;
!       }
  
    if (kind == vec_promote_demote)
      {
--- 26598,26629 ----
    if ((kind == vector_stmt || kind == scalar_stmt)
        && stmt_info
        && stmt_info->stmt
!       && is_gimple_call (stmt_info->stmt))
!     {
!       tree fndecl = gimple_call_fndecl (stmt_info->stmt);
!       cgraph_node *node;
!       if ((fndecl
! 	   && (node = cgraph_node::get (fndecl))
! 	   && node->simd_clones)
! 	  || gimple_call_internal_p (stmt_info->stmt, IFN_MASK_CALL))
! 	stmt_cost = 10 * ix86_vec_cost (mode,
! 					mode == SFmode ? ix86_cost->fmass
! 					: ix86_cost->fmasd);
!       else if ((cfn = gimple_call_combined_fn (stmt_info->stmt)) != CFN_LAST)
! 	switch (cfn)
! 	  {
! 	  case CFN_FMA:
! 	    stmt_cost = ix86_vec_cost (mode,
! 				       mode == SFmode ? ix86_cost->fmass
! 				       : ix86_cost->fmasd);
! 	    break;
! 	  case CFN_MULH:
! 	    stmt_cost = ix86_multiplication_cost (ix86_cost, mode);
! 	    break;
! 	  default:
! 	    break;
! 	  }
!     }
  
    if (kind == vec_promote_demote)
      {
diff -Nrcpad gcc-17-20260510/gcc/config/i386/i386.md gcc-17-20260517/gcc/config/i386/i386.md
*** gcc-17-20260510/gcc/config/i386/i386.md	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/i386/i386.md	Sun May 17 22:32:05 2026
***************
*** 4985,4991 ****
    "REGNO (operands[0]) == REGNO (operands[1])
     && (<SWI48:MODE>mode != SImode
         || !TARGET_ZERO_EXTEND_WITH_AND
!        || !optimize_function_for_speed_p (cfun))"
    [(set (match_dup 0) (zero_extend:SWI48 (match_dup 2)))])
  
  ;; Likewise, but preserving FLAGS_REG.
--- 4985,4992 ----
    "REGNO (operands[0]) == REGNO (operands[1])
     && (<SWI48:MODE>mode != SImode
         || !TARGET_ZERO_EXTEND_WITH_AND
!        || !optimize_function_for_speed_p (cfun))
!    && !(optimize_insn_for_size_p () && optimize_size > 1)"
    [(set (match_dup 0) (zero_extend:SWI48 (match_dup 2)))])
  
  ;; Likewise, but preserving FLAGS_REG.
***************
*** 4998,5003 ****
--- 4999,5034 ----
         || !TARGET_ZERO_EXTEND_WITH_AND
         || !optimize_function_for_speed_p (cfun))"
    [(set (match_dup 0) (zero_extend:SWI48 (match_dup 2)))])
+ 
+ ;; With -Oz, convert mov eax,200 (5 bytes) to xor eax,eax; mov al,200
+ ;; (4 bytes) when the flags register is dead.
+ (define_peephole2
+   [(set (match_operand:SWI48 0 "any_QIreg_operand")
+ 	(match_operand:SWI48 1 "const_int_operand"))]
+   "optimize_insn_for_size_p () && optimize_size > 1
+    && IN_RANGE (INTVAL (operands[1]), 128, 255)
+    && peep2_regno_dead_p (0, FLAGS_REG)"
+   [(parallel [(set (match_dup 0) (const_int 0))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (set (strict_low_part (match_dup 2)) (match_dup 3))]
+ {
+   operands[2] = gen_lowpart (QImode, operands[0]);
+   operands[3] = gen_int_mode (INTVAL (operands[1]), QImode);
+ })
+ 
+ ;; With -Oz, convert mov eax,512 (5 bytes) to xor eax,eax; mov ah,2
+ ;; (4 bytes) when the flags register is dead.
+ (define_peephole2
+   [(set (match_operand:SWI48 0 "QIreg_operand")
+ 	(match_operand:SWI48 1 "const_int_operand"))]
+   "optimize_insn_for_size_p () && optimize_size > 1
+    && (INTVAL (operands[1]) & ~0xff00) == 0
+    && peep2_regno_dead_p (0, FLAGS_REG)"
+   [(parallel [(set (match_dup 0) (const_int 0))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (set (zero_extract:SWI48 (match_dup 0) (const_int 8) (const_int 8))
+         (match_dup 2))]
+   "operands[2] = gen_int_mode (INTVAL (operands[1]) >> 8, QImode);")
  
  ;; Sign extension instructions
  
***************
*** 30272,30278 ****
    [(unspec_volatile [(match_operand:SWI48 0 "nonimmediate_operand" "rm")]
  		    UNSPECV_PTWRITE)]
    "TARGET_PTWRITE"
!   "ptwrite\t%0"
    [(set_attr "type" "other")
     (set_attr "prefix_0f" "1")
     (set_attr "prefix_rep" "1")])
--- 30303,30309 ----
    [(unspec_volatile [(match_operand:SWI48 0 "nonimmediate_operand" "rm")]
  		    UNSPECV_PTWRITE)]
    "TARGET_PTWRITE"
!   "ptwrite<imodesuffix>\t%0"
    [(set_attr "type" "other")
     (set_attr "prefix_0f" "1")
     (set_attr "prefix_rep" "1")])
diff -Nrcpad gcc-17-20260510/gcc/config/i386/mingw-pthread.h gcc-17-20260517/gcc/config/i386/mingw-pthread.h
*** gcc-17-20260510/gcc/config/i386/mingw-pthread.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/i386/mingw-pthread.h	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* Defines that pthread library shall be enabled by default
-    for target.
-    Copyright (C) 2011-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 TARGET_USE_PTHREAD_BY_DEFAULT 1
--- 0 ----
diff -Nrcpad gcc-17-20260510/gcc/config/i386/sse.md gcc-17-20260517/gcc/config/i386/sse.md
*** gcc-17-20260510/gcc/config/i386/sse.md	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/i386/sse.md	Sun May 17 22:32:05 2026
***************
*** 3468,3474 ****
       u = UNSPEC_IEEE_MAX;
  
     rtx tmp = force_reg (<MODE>mode, operands[3]);
!    rtvec v = gen_rtvec (2, operands[2], tmp);
     operands[5] = gen_rtx_UNSPEC (<MODE>mode, v, u);
   })
  
--- 3468,3474 ----
       u = UNSPEC_IEEE_MAX;
  
     rtx tmp = force_reg (<MODE>mode, operands[3]);
!    rtvec v = gen_rtvec (2, force_reg (<MODE>mode, operands[2]), tmp);
     operands[5] = gen_rtx_UNSPEC (<MODE>mode, v, u);
   })
  
diff -Nrcpad gcc-17-20260510/gcc/config/lm32/lm32.cc gcc-17-20260517/gcc/config/lm32/lm32.cc
*** gcc-17-20260510/gcc/config/lm32/lm32.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/lm32/lm32.cc	Sun May 17 22:32:05 2026
*************** static HOST_WIDE_INT lm32_starting_frame
*** 120,127 ****
  #define TARGET_MAX_ANCHOR_OFFSET 0x7fff
  #undef TARGET_CAN_ELIMINATE
  #define TARGET_CAN_ELIMINATE lm32_can_eliminate
- #undef TARGET_LRA_P
- #define TARGET_LRA_P hook_bool_void_false
  #undef TARGET_LEGITIMATE_ADDRESS_P
  #define TARGET_LEGITIMATE_ADDRESS_P lm32_legitimate_address_p
  #undef TARGET_HARD_REGNO_MODE_OK
--- 120,125 ----
diff -Nrcpad gcc-17-20260510/gcc/config/loongarch/loongarch.md gcc-17-20260517/gcc/config/loongarch/loongarch.md
*** gcc-17-20260510/gcc/config/loongarch/loongarch.md	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/loongarch/loongarch.md	Sun May 17 22:32:05 2026
***************
*** 1829,1834 ****
--- 1829,1857 ----
    "<insn>n\t%0,%2,%1"
    [(set_attr "type" "logical")
     (set_attr "mode" "SI")])
+ 
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+         (xor:X (xor:X (ior:X (match_operand:X 1 "register_operand")
+                              (match_operand:X 2 "register_operand"))
+                       (match_dup 1))
+                (match_operand:X 3 "register_operand")))
+    (clobber (match_operand:X 4 "register_operand"))]
+   "TARGET_64BIT || TARGET_32BIT_S"
+   [(set (match_dup 4) (and:X (not:X (match_dup 1)) (match_dup 2)))
+    (set (match_dup 0) (xor:X (match_dup 4) (match_dup 3)))])
+ 
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+         (xor:X (xor:X (ior:X (match_operand:X 1 "register_operand")
+                              (match_operand:X 2 "register_operand"))
+                       (match_dup 2))
+                (match_operand:X 3 "register_operand")))
+    (clobber (match_operand:X 4 "register_operand"))]
+   "TARGET_64BIT || TARGET_32BIT_S"
+   [(set (match_dup 4) (and:X (not:X (match_dup 2)) (match_dup 1)))
+    (set (match_dup 0) (xor:X (match_dup 4) (match_dup 3)))])
+ 
  
  ;;
  ;;  ....................
***************
*** 3800,3805 ****
--- 3823,3869 ----
    [(set_attr "type" "slt")
     (set_attr "mode" "<X:MODE>")])
  
+ (define_expand "spaceship<mode>4"
+   [(match_operand:SI   0 "register_operand")
+    (match_operand:QHWD 1 "register_operand")
+    (match_operand:QHWD 2 "reg_or_0_operand")
+    (match_operand:SI   3 "const_int_operand")]
+   ""
+ {
+   gcc_assert (operands[3] == const1_rtx || operands[3] == constm1_rtx);
+ 
+   if (GET_MODE_SIZE (<MODE>mode) < GET_MODE_SIZE (word_mode))
+     {
+       auto extend = (operands[3] == const1_rtx ? ZERO_EXTEND
+ 					       : SIGN_EXTEND);
+       for (int i: {1, 2})
+ 	if (operands[i] != const0_rtx)
+ 	  operands[i] = force_reg (word_mode,
+ 				   gen_rtx_fmt_e (extend, word_mode,
+ 						  operands[i]));
+     }
+ 
+   auto lt_code = (operands[3] == const1_rtx ? LTU : LT);
+   auto gt_code = (operands[3] == const1_rtx ? GTU : GT);
+   rtx lt = gen_rtx_fmt_ee (lt_code, word_mode, operands[1], operands[2]);
+   rtx gt = gen_rtx_fmt_ee (gt_code, word_mode, operands[1], operands[2]);
+ 
+   gt = force_reg (word_mode, gt);
+   lt = force_reg (word_mode, lt);
+ 
+   rtx diff = gen_rtx_MINUS (word_mode, gt, lt);
+   if (TARGET_64BIT)
+     {
+       diff = force_reg (DImode, diff);
+       diff = gen_lowpart (SImode, diff);
+       SUBREG_PROMOTED_VAR_P (diff) = 1;
+       SUBREG_PROMOTED_SET (diff, SRP_SIGNED);
+     }
+ 
+   emit_move_insn (operands[0], diff);
+   DONE;
+ })
+ 
  
  ;;
  ;;  ....................
diff -Nrcpad gcc-17-20260510/gcc/config/mingw/mingw-pthread.h gcc-17-20260517/gcc/config/mingw/mingw-pthread.h
*** gcc-17-20260510/gcc/config/mingw/mingw-pthread.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/config/mingw/mingw-pthread.h	Sun May 17 22:32:05 2026
***************
*** 0 ****
--- 1,21 ----
+ /* Defines that pthread library shall be enabled by default
+    for target.
+    Copyright (C) 2011-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 TARGET_USE_PTHREAD_BY_DEFAULT 1
diff -Nrcpad gcc-17-20260510/gcc/config/mingw/winnt.cc gcc-17-20260517/gcc/config/mingw/winnt.cc
*** gcc-17-20260510/gcc/config/mingw/winnt.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/mingw/winnt.cc	Sun May 17 22:32:05 2026
*************** mingw_pe_file_end (void)
*** 860,866 ****
  			   "\t.p2align\t3, 0\n"
  	  		   "\t.globl\t%s\n"
  			   "\t.linkonce\tdiscard\n", oname, oname);
! 	  fprintf (asm_out_file, "%s:\n\t.quad\t%s\n", oname, name);
  	}
      }
  }
--- 860,868 ----
  			   "\t.p2align\t3, 0\n"
  	  		   "\t.globl\t%s\n"
  			   "\t.linkonce\tdiscard\n", oname, oname);
! 	  fprintf (asm_out_file, "%s:\n\t.quad\t", oname);
! 	  ASM_OUTPUT_LABELREF (asm_out_file, name);
! 	  fputc ('\n', asm_out_file);
  	}
      }
  }
diff -Nrcpad gcc-17-20260510/gcc/config/pa/pa.h gcc-17-20260517/gcc/config/pa/pa.h
*** gcc-17-20260510/gcc/config/pa/pa.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/pa/pa.h	Sun May 17 22:32:05 2026
*************** extern rtx hppa_pic_save_rtx (void);
*** 440,459 ****
     the SOM linker can do unaligned fixups for absolute pointers.
     We also need aligned pointers for global and function pointers.
  
!    Although the HP-UX 64-bit ELF linker can handle unaligned pc-relative
!    fixups, the runtime doesn't have a consistent relationship between
!    text and data for dynamically loaded objects.  Thus, it's not possible
!    to use pc-relative encoding for pointers on this target.  It may be
!    possible to use segment relative encodings but GAS doesn't currently
!    have a mechanism to generate these encodings.  For other targets, we
!    use pc-relative encoding for pointers.  If the pointer might require
!    dynamic relocation, we make it indirect.  */
  #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)			\
    (TARGET_GAS && !TARGET_HPUX						\
     ? (DW_EH_PE_pcrel							\
        | ((GLOBAL) || (CODE) == 2 ? DW_EH_PE_indirect : 0)		\
        | (TARGET_64BIT ? DW_EH_PE_sdata8 : DW_EH_PE_sdata4))		\
!    : (!TARGET_GAS || (GLOBAL) || (CODE) == 2				\
        ? DW_EH_PE_aligned : DW_EH_PE_absptr))
  
  /* Handle special EH pointer encodings.  Absolute, pc-relative, and
--- 440,460 ----
     the SOM linker can do unaligned fixups for absolute pointers.
     We also need aligned pointers for global and function pointers.
  
!    The HP-UX 64-bit dynamic linker can't handle unaligned DW_EH_PE_absptr
!    encodings.  Although the HP-UX 64-bit ELF linker can handle unaligned
!    pc-relative encodings, the runtime doesn't have a consistent relationship
!    between text and data for dynamically loaded objects.  Thus, it's not
!    possible to use pc-relative encoding for pointers on this target.  It
!    may be possible to use segment relative encodings.
!    
!    For other targets, we use pc-relative encoding for pointers.  If the
!    pointer might require dynamic relocation, we make it indirect.  */
  #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)			\
    (TARGET_GAS && !TARGET_HPUX						\
     ? (DW_EH_PE_pcrel							\
        | ((GLOBAL) || (CODE) == 2 ? DW_EH_PE_indirect : 0)		\
        | (TARGET_64BIT ? DW_EH_PE_sdata8 : DW_EH_PE_sdata4))		\
!    : (TARGET_64BIT || !TARGET_GAS || (GLOBAL) || (CODE) == 2		\
        ? DW_EH_PE_aligned : DW_EH_PE_absptr))
  
  /* Handle special EH pointer encodings.  Absolute, pc-relative, and
diff -Nrcpad gcc-17-20260510/gcc/config/pa/pa64-hpux.h gcc-17-20260517/gcc/config/pa/pa64-hpux.h
*** gcc-17-20260510/gcc/config/pa/pa64-hpux.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/pa/pa64-hpux.h	Sun May 17 22:32:05 2026
*************** along with GCC; see the file COPYING3.
*** 104,114 ****
  #endif
  
  /* Under hpux11, the normal location of the `ld' and `as' programs is the
!    /usr/ccs/bin directory.  */
  
  #ifndef CROSS_DIRECTORY_STRUCTURE
  #undef MD_EXEC_PREFIX
! #define MD_EXEC_PREFIX "/usr/ccs/bin"
  #endif
  
  /* Default prefixes.  */
--- 104,116 ----
  #endif
  
  /* Under hpux11, the normal location of the `ld' and `as' programs is the
!    /usr/ccs/bin directory.  However, we support both HP and GNU ld.
!    Adding this prefix to COMPILER_PATH can cause the wrong linker to be
!    selected.  */
  
  #ifndef CROSS_DIRECTORY_STRUCTURE
  #undef MD_EXEC_PREFIX
! #define MD_EXEC_PREFIX ""
  #endif
  
  /* Default prefixes.  */
diff -Nrcpad gcc-17-20260510/gcc/config/riscv/riscv-v.cc gcc-17-20260517/gcc/config/riscv/riscv-v.cc
*** gcc-17-20260510/gcc/config/riscv/riscv-v.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/riscv/riscv-v.cc	Sun May 17 22:32:05 2026
*************** expand_const_vector_single_step_npattern
*** 1586,1592 ****
  }
  
  static void
! expand_const_vector_interleaved_stepped_npatterns (rtx target, rtx src,
  						   rvv_builder *builder)
  {
    machine_mode mode = GET_MODE (target);
--- 1586,1592 ----
  }
  
  static void
! expand_const_vector_interleaved_stepped_npatterns (rtx target,
  						   rvv_builder *builder)
  {
    machine_mode mode = GET_MODE (target);
*************** expand_const_vector_interleaved_stepped_
*** 1600,1749 ****
      rtx_to_poly_int64 (builder->elt (builder->npatterns () + 1))
        - rtx_to_poly_int64 (base2);
  
!   /* For { 1, 0, 2, 0, ... , n - 1, 0 }, we can use larger EEW
!      integer vector mode to generate such vector efficiently.
! 
!      E.g. EEW = 16, { 2, 0, 4, 0, ... }
! 
!      can be interpreted into:
! 
!      EEW = 32, { 2, 4, ... }.
! 
!      Both the series1 and series2 may overflow before taking the IOR
!      to generate the final result.  However, only series1 matters
!      because the series2 will shift before IOR, thus the overflow
!      bits will never pollute the final result.
! 
!      For now we forbid the negative steps and overflow, and they
!      will fall back to the default merge way to generate the
!      const_vector.  */
! 
!   unsigned int new_smode_bitsize = builder->inner_bits_size () * 2;
!   scalar_int_mode new_smode;
!   machine_mode new_mode;
!   poly_uint64 new_nunits = exact_div (GET_MODE_NUNITS (builder->mode ()), 2);
! 
!   poly_int64 base1_poly = rtx_to_poly_int64 (base1);
!   bool overflow_smode_p = false;
! 
!   if (!step1.is_constant ())
!     overflow_smode_p = true;
!   else
!     {
!       int elem_count = XVECLEN (src, 0);
!       uint64_t step1_val = step1.to_constant ();
!       int64_t base1_signed = base1_poly.to_constant ();
!       /* Reinterpret as type of inner bits size so we can properly check
! 	 overflow.  */
!       uint64_t base1_val
! 	= base1_signed & ((1ULL << builder->inner_bits_size ()) - 1);
!       uint64_t elem_val = base1_val + (elem_count - 1) * step1_val;
! 
!       if ((elem_val >> builder->inner_bits_size ()) != 0)
! 	overflow_smode_p = true;
!     }
! 
!   if (known_ge (step1, 0) && known_ge (step2, 0)
!       && int_mode_for_size (new_smode_bitsize, 0).exists (&new_smode)
!       && get_vector_mode (new_smode, new_nunits).exists (&new_mode)
!       && !overflow_smode_p)
      {
!       rtx tmp1 = gen_reg_rtx (new_mode);
!       base1 = gen_int_mode (base1_poly, new_smode);
!       expand_vec_series (tmp1, base1, gen_int_mode (step1, new_smode));
! 
!       if (rtx_equal_p (base2, const0_rtx) && known_eq (step2, 0))
! 	/* { 1, 0, 2, 0, ... }.  */
! 	emit_move_insn (result, gen_lowpart (mode, tmp1));
!       else if (known_eq (step2, 0))
! 	{
! 	  /* { 1, 1, 2, 1, ... }.  */
! 	  rtx scalar = expand_simple_binop (
! 	    Xmode, ASHIFT, gen_int_mode (rtx_to_poly_int64 (base2), Xmode),
! 	    gen_int_mode (builder->inner_bits_size (), Xmode), NULL_RTX, false,
! 	    OPTAB_DIRECT);
! 	  scalar = simplify_gen_subreg (new_smode, scalar, Xmode, 0);
! 	  rtx tmp2 = gen_reg_rtx (new_mode);
! 	  rtx ior_ops[] = {tmp2, tmp1, scalar};
! 	  emit_vlmax_insn (code_for_pred_scalar (IOR, new_mode), BINARY_OP,
! 			   ior_ops);
! 	  emit_move_insn (result, gen_lowpart (mode, tmp2));
! 	}
!       else
! 	{
! 	  /* { 1, 3, 2, 6, ... }.  */
! 	  rtx tmp2 = gen_reg_rtx (new_mode);
! 	  base2 = gen_int_mode (rtx_to_poly_int64 (base2), new_smode);
! 	  expand_vec_series (tmp2, base2, gen_int_mode (step2, new_smode));
! 	  rtx shifted_tmp2;
! 	  rtx shift = gen_int_mode (builder->inner_bits_size (), Xmode);
! 	  if (lra_in_progress)
! 	    {
! 	      shifted_tmp2 = gen_reg_rtx (new_mode);
! 	      rtx shift_ops[] = {shifted_tmp2, tmp2, shift};
! 	      emit_vlmax_insn (code_for_pred_scalar (ASHIFT, new_mode),
! 			       BINARY_OP, shift_ops);
! 	    }
! 	  else
! 	    shifted_tmp2 = expand_simple_binop (new_mode, ASHIFT, tmp2, shift,
! 						NULL_RTX, false, OPTAB_DIRECT);
! 	  rtx tmp3 = gen_reg_rtx (new_mode);
! 	  rtx ior_ops[] = {tmp3, tmp1, shifted_tmp2};
! 	  emit_vlmax_insn (code_for_pred (IOR, new_mode), BINARY_OP, ior_ops);
! 	  emit_move_insn (result, gen_lowpart (mode, tmp3));
! 	}
      }
    else
!     {
!       rtx vid = gen_reg_rtx (mode);
!       expand_vec_series (vid, const0_rtx, const1_rtx);
!       /* Transform into { 0, 0, 1, 1, 2, 2, ... }.  */
!       rtx shifted_vid;
!       if (lra_in_progress)
! 	{
! 	  shifted_vid = gen_reg_rtx (mode);
! 	  rtx shift = gen_int_mode (1, Xmode);
! 	  rtx shift_ops[] = {shifted_vid, vid, shift};
! 	  emit_vlmax_insn (code_for_pred_scalar (LSHIFTRT, mode), BINARY_OP,
! 			   shift_ops);
! 	}
!       else
! 	shifted_vid = expand_simple_binop (mode, LSHIFTRT, vid, const1_rtx,
! 					   NULL_RTX, false, OPTAB_DIRECT);
!       rtx tmp1 = gen_reg_rtx (mode);
!       rtx tmp2 = gen_reg_rtx (mode);
!       expand_vec_series (tmp1, base1,
! 			 gen_int_mode (step1, builder->inner_mode ()),
! 			 shifted_vid);
!       expand_vec_series (tmp2, base2,
! 			 gen_int_mode (step2, builder->inner_mode ()),
! 			 shifted_vid);
  
!       /* Transform into { 0, 1, 0, 1, 0, 1, ... }.  */
!       rtx and_vid = gen_reg_rtx (mode);
!       rtx and_ops[] = {and_vid, vid, const1_rtx};
!       emit_vlmax_insn (code_for_pred_scalar (AND, mode), BINARY_OP, and_ops);
!       rtx mask = gen_reg_rtx (builder->mask_mode ());
!       expand_vec_cmp (mask, EQ, and_vid, CONST1_RTX (mode));
  
!       rtx ops[] = {result, tmp1, tmp2, mask};
!       emit_vlmax_insn (code_for_pred_merge (mode), MERGE_OP, ops);
!     }
  
    if (result != target)
      emit_move_insn (target, result);
  }
  
  static void
! expand_const_vector_stepped (rtx target, rtx src, rvv_builder *builder)
  {
    gcc_assert (GET_MODE_CLASS (GET_MODE (target)) == MODE_VECTOR_INT);
  
    if (builder->single_step_npatterns_p ())
      return expand_const_vector_single_step_npatterns (target, builder);
    else if (builder->interleaved_stepped_npatterns_p ())
!     return expand_const_vector_interleaved_stepped_npatterns (target, src,
! 							      builder);
  
    /* TODO: We will enable more variable-length vector in the future.  */
    gcc_unreachable ();
--- 1600,1652 ----
      rtx_to_poly_int64 (builder->elt (builder->npatterns () + 1))
        - rtx_to_poly_int64 (base2);
  
!   rtx vid = gen_reg_rtx (mode);
!   expand_vec_series (vid, const0_rtx, const1_rtx);
!   /* Transform into { 0, 0, 1, 1, 2, 2, ... }.  */
!   rtx shifted_vid;
!   if (lra_in_progress)
      {
!       shifted_vid = gen_reg_rtx (mode);
!       rtx shift = gen_int_mode (1, Xmode);
!       rtx shift_ops[] = {shifted_vid, vid, shift};
!       emit_vlmax_insn (code_for_pred_scalar (LSHIFTRT, mode), BINARY_OP,
! 		       shift_ops);
      }
    else
!     shifted_vid = expand_simple_binop (mode, LSHIFTRT, vid, const1_rtx,
! 				       NULL_RTX, false, OPTAB_DIRECT);
!   rtx tmp1 = gen_reg_rtx (mode);
!   rtx tmp2 = gen_reg_rtx (mode);
!   expand_vec_series (tmp1, base1,
! 		     gen_int_mode (step1, builder->inner_mode ()),
! 		     shifted_vid);
!   expand_vec_series (tmp2, base2,
! 		     gen_int_mode (step2, builder->inner_mode ()),
! 		     shifted_vid);
  
!   /* Transform into { 0, 1, 0, 1, 0, 1, ... }.  */
!   rtx and_vid = gen_reg_rtx (mode);
!   rtx and_ops[] = {and_vid, vid, const1_rtx};
!   emit_vlmax_insn (code_for_pred_scalar (AND, mode), BINARY_OP, and_ops);
!   rtx mask = gen_reg_rtx (builder->mask_mode ());
!   expand_vec_cmp (mask, EQ, and_vid, CONST1_RTX (mode));
  
!   rtx ops[] = {result, tmp1, tmp2, mask};
!   emit_vlmax_insn (code_for_pred_merge (mode), MERGE_OP, ops);
  
    if (result != target)
      emit_move_insn (target, result);
  }
  
  static void
! expand_const_vector_stepped (rtx target, rvv_builder *builder)
  {
    gcc_assert (GET_MODE_CLASS (GET_MODE (target)) == MODE_VECTOR_INT);
  
    if (builder->single_step_npatterns_p ())
      return expand_const_vector_single_step_npatterns (target, builder);
    else if (builder->interleaved_stepped_npatterns_p ())
!     return expand_const_vector_interleaved_stepped_npatterns (target, builder);
  
    /* TODO: We will enable more variable-length vector in the future.  */
    gcc_unreachable ();
*************** expand_const_vector (rtx target, rtx src
*** 1851,1857 ****
    else if (CONST_VECTOR_NELTS_PER_PATTERN (src) == 2)
      return expand_const_vector_onestep (target, builder);
    else if (CONST_VECTOR_STEPPED_P (src))
!     return expand_const_vector_stepped (target, src, &builder);
  
    gcc_unreachable ();
  }
--- 1754,1760 ----
    else if (CONST_VECTOR_NELTS_PER_PATTERN (src) == 2)
      return expand_const_vector_onestep (target, builder);
    else if (CONST_VECTOR_STEPPED_P (src))
!     return expand_const_vector_stepped (target, &builder);
  
    gcc_unreachable ();
  }
diff -Nrcpad gcc-17-20260510/gcc/config/rs6000/vsx.md gcc-17-20260517/gcc/config/rs6000/vsx.md
*** gcc-17-20260510/gcc/config/rs6000/vsx.md	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/rs6000/vsx.md	Sun May 17 22:32:06 2026
***************
*** 6547,6571 ****
     (set_attr "size" "<bits>")])
  
  (define_insn "smul<mode>3_highpart"
!   [(set (match_operand:VIlong 0 "vsx_register_operand" "=v")
! 	(mult:VIlong (ashiftrt
! 		       (match_operand:VIlong 1 "vsx_register_operand" "v")
! 		       (const_int 32))
! 		     (ashiftrt
! 		       (match_operand:VIlong 2 "vsx_register_operand" "v")
! 		       (const_int 32))))]
    "TARGET_POWER10"
    "vmulhs<wd> %0,%1,%2"
    [(set_attr "type" "veccomplex")])
  
  (define_insn "umul<mode>3_highpart"
!   [(set (match_operand:VIlong 0 "vsx_register_operand" "=v")
! 	(us_mult:VIlong (ashiftrt
! 			  (match_operand:VIlong 1 "vsx_register_operand" "v")
! 			  (const_int 32))
! 			(ashiftrt
! 			  (match_operand:VIlong 2 "vsx_register_operand" "v")
! 			  (const_int 32))))]
    "TARGET_POWER10"
    "vmulhu<wd> %0,%1,%2"
    [(set_attr "type" "veccomplex")])
--- 6547,6565 ----
     (set_attr "size" "<bits>")])
  
  (define_insn "smul<mode>3_highpart"
!   [(set (match_operand:VIlong 0 "altivec_register_operand" "=v")
! 	(smul_highpart:VIlong
! 	  (match_operand:VIlong 1 "altivec_register_operand" "v")
! 	  (match_operand:VIlong 2 "altivec_register_operand" "v")))]
    "TARGET_POWER10"
    "vmulhs<wd> %0,%1,%2"
    [(set_attr "type" "veccomplex")])
  
  (define_insn "umul<mode>3_highpart"
!   [(set (match_operand:VIlong 0 "altivec_register_operand" "=v")
! 	(umul_highpart:VIlong
! 	  (match_operand:VIlong 1 "altivec_register_operand" "v")
! 	  (match_operand:VIlong 2 "altivec_register_operand" "v")))]
    "TARGET_POWER10"
    "vmulhu<wd> %0,%1,%2"
    [(set_attr "type" "veccomplex")])
diff -Nrcpad gcc-17-20260510/gcc/config/rx/rx-protos.h gcc-17-20260517/gcc/config/rx/rx-protos.h
*** gcc-17-20260510/gcc/config/rx/rx-protos.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/rx/rx-protos.h	Sun May 17 22:32:06 2026
*************** extern void rx_copy_reg_dead_or_unused_n
*** 70,75 ****
--- 70,77 ----
  
  extern bool rx_fuse_in_memory_bitop (rtx* operands, rtx_insn* curr_insn,
  				     rtx (*gen_insn)(rtx, rtx));
+ extern void rx_split_double_move (rtx* operands, machine_mode mode);
+ extern void rx_relax_double_operands (rtx* operands, machine_mode mode);
  
  /* Result value of rx_find_set_of_reg.  */
  struct set_of_reg
diff -Nrcpad gcc-17-20260510/gcc/config/rx/rx.cc gcc-17-20260517/gcc/config/rx/rx.cc
*** gcc-17-20260510/gcc/config/rx/rx.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/rx/rx.cc	Sun May 17 22:32:06 2026
*************** rx_legitimize_address (rtx x,
*** 154,164 ****
        return rv;
      }
  
!   if (GET_CODE (x) == PLUS
!       && GET_CODE (XEXP (x, 0)) == PLUS
!       && REG_P (XEXP (XEXP (x, 0), 0))
!       && REG_P (XEXP (x, 1)))
!     return force_reg (SImode, x);
  
    return x;
  }
--- 154,175 ----
        return rv;
      }
  
!   if (GET_CODE (x) == PLUS)
!     {
!       rtx op0 = XEXP (x, 0);
!       rtx op1 = XEXP (x, 1);
! 
!       if (GET_CODE (op0) == PLUS
! 	  && REG_P (XEXP (op0, 0))
! 	  && CONST_INT_P (op1))
! 	{
! 	  rtx base = XEXP (op0, 0);
! 	  rtx index = XEXP (op0, 1);
! 
! 	  rtx new_base = force_reg (Pmode, gen_rtx_PLUS (Pmode, base, op1));
! 	  return simplify_gen_binary (PLUS, Pmode, new_base, index);
! 	}
!     }
  
    return x;
  }
*************** rx_is_legitimate_address (machine_mode m
*** 194,199 ****
--- 205,231 ----
         Post-increment Register Indirect.  */
      return RTX_OK_FOR_BASE (XEXP (x, 0), strict);
  
+   if (GET_MODE_SIZE (mode) == UNITS_PER_WORD * 2)
+     {
+       /* Since double-word memory access is split into multiple parts,
+ 	 only simple indirect addresses are accepted.  */
+       if (GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC)
+ 	return false;
+ 
+       if (GET_CODE (x) == PLUS)
+ 	{
+ 	  rtx base = XEXP (x, 0);
+ 	  rtx index = XEXP (x, 1);
+ 
+ 	  if (!REG_P (base) || !CONST_INT_P (index))
+ 	    return false;
+ 
+ 	  if (!IN_RANGE (INTVAL (index), 0, (0x10000 * 4) - 1 - 4)
+ 	      || (INTVAL (index) % 4) != 0)
+ 	    return false;
+ 	}
+     }
+ 
    switch (rx_pid_data_operand (x))
      {
      case PID_UNENCODED:
*************** rx_gen_move_template (rtx * operands, bo
*** 970,976 ****
    rtx          src  = operands[1];
  
    /* Decide which extension, if any, should be given to the move instruction.  */
!   switch (CONST_INT_P (src) ? GET_MODE (dest) : GET_MODE (src))
      {
      case E_QImode:
        /* The .B extension is not valid when
--- 1002,1009 ----
    rtx          src  = operands[1];
  
    /* Decide which extension, if any, should be given to the move instruction.  */
!   /* When zero-extending, always check the size of the source. */
!   switch ((is_movu || MEM_P (src)) ? GET_MODE (src) : GET_MODE (dest))
      {
      case E_QImode:
        /* The .B extension is not valid when
*************** rx_gen_move_template (rtx * operands, bo
*** 984,993 ****
  	   loading an immediate into a register.  */
  	extension = ".W";
        break;
-     case E_DFmode:
-     case E_DImode:
      case E_SFmode:
      case E_SImode:
        extension = ".L";
        break;
      case E_VOIDmode:
--- 1017,1025 ----
  	   loading an immediate into a register.  */
  	extension = ".W";
        break;
      case E_SFmode:
      case E_SImode:
+       gcc_assert (!is_movu);
        extension = ".L";
        break;
      case E_VOIDmode:
*************** rx_gen_move_template (rtx * operands, bo
*** 1025,1042 ****
    else
      dst_template = "%0";
  
!   if (GET_MODE (dest) == DImode || GET_MODE (dest) == DFmode)
!     {
!       gcc_assert (! is_movu);
! 
!       if (REG_P (src) && REG_P (dest) && (REGNO (dest) == REGNO (src) + 1))
! 	sprintf (out_template, "mov.L\t%%H1, %%H0 ! mov.L\t%%1, %%0");
!       else
! 	sprintf (out_template, "mov.L\t%%1, %%0 ! mov.L\t%%H1, %%H0");
!     }
!   else
!     sprintf (out_template, "%s%s\t%s, %s", is_movu ? "movu" : "mov",
! 	     extension, src_template, dst_template);
    return out_template;
  }
  
--- 1057,1064 ----
    else
      dst_template = "%0";
  
!   sprintf (out_template, "%s%s\t%s, %s", is_movu ? "movu" : "mov",
! 	   extension, src_template, dst_template);
    return out_template;
  }
  
*************** rx_get_stack_layout (unsigned int * lowe
*** 1568,1579 ****
        * register_mask = 0;
      }
  
!   * frame_size = rx_round_up
!     (get_frame_size (), STACK_BOUNDARY / BITS_PER_UNIT);
! 
!   if (crtl->args.size > 0)
!     * frame_size += rx_round_up
!       (crtl->args.size, STACK_BOUNDARY / BITS_PER_UNIT);
  
    * stack_size = rx_round_up
      (crtl->outgoing_args_size, STACK_BOUNDARY / BITS_PER_UNIT);
--- 1590,1598 ----
        * register_mask = 0;
      }
  
!   * frame_size = rx_round_up (
!       get_frame_size () + crtl->args.pretend_args_size,
!       STACK_BOUNDARY / BITS_PER_UNIT);
  
    * stack_size = rx_round_up
      (crtl->outgoing_args_size, STACK_BOUNDARY / BITS_PER_UNIT);
*************** rx_initial_elimination_offset (int from,
*** 2221,2246 ****
    unsigned int frame_size;
    unsigned int stack_size;
    unsigned int mask;
  
    rx_get_stack_layout (& low, & high, & mask, & frame_size, & stack_size);
  
    if (from == ARG_POINTER_REGNUM)
      {
-       /* Extend the computed size of the stack frame to
- 	 include the registers pushed in the prologue.  */
-       if (low)
- 	frame_size += ((high - low) + 1) * UNITS_PER_WORD;
-       else
- 	frame_size += bit_count (mask) * UNITS_PER_WORD;
- 
        /* Remember to include the return address.  */
!       frame_size += 1 * UNITS_PER_WORD;
  
        if (to == FRAME_POINTER_REGNUM)
! 	return frame_size;
  
        gcc_assert (to == STACK_POINTER_REGNUM);
!       return frame_size + stack_size;
      }
  
    gcc_assert (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM);
--- 2240,2266 ----
    unsigned int frame_size;
    unsigned int stack_size;
    unsigned int mask;
+   unsigned int saved_regs_size = 0;
  
    rx_get_stack_layout (& low, & high, & mask, & frame_size, & stack_size);
  
+   if (mask != 0)
+     /* multiple push reg */
+     saved_regs_size = bit_count (mask) * UNITS_PER_WORD;
+   else if (low != 0)
+     /* pushm low - high */
+     saved_regs_size = (high - low + 1) * UNITS_PER_WORD;
+ 
    if (from == ARG_POINTER_REGNUM)
      {
        /* Remember to include the return address.  */
!       frame_size += UNITS_PER_WORD;
  
        if (to == FRAME_POINTER_REGNUM)
! 	return frame_size + saved_regs_size;
  
        gcc_assert (to == STACK_POINTER_REGNUM);
!       return frame_size + stack_size + saved_regs_size;
      }
  
    gcc_assert (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM);
*************** rx_fuse_in_memory_bitop (rtx* operands,
*** 3611,3623 ****
  static unsigned int
  rx_hard_regno_nregs (unsigned int, machine_mode mode)
  {
!   return CLASS_MAX_NREGS (0, mode);
  }
  
  /* Implement TARGET_HARD_REGNO_MODE_OK.  */
  
  static bool
! rx_hard_regno_mode_ok (unsigned int regno, machine_mode)
  {
    return REGNO_REG_CLASS (regno) == GR_REGS;
  }
--- 3631,3643 ----
  static unsigned int
  rx_hard_regno_nregs (unsigned int, machine_mode mode)
  {
!   return CEIL (GET_MODE_SIZE (mode), UNITS_PER_WORD);
  }
  
  /* Implement TARGET_HARD_REGNO_MODE_OK.  */
  
  static bool
! rx_hard_regno_mode_ok (unsigned int regno, machine_mode mode ATTRIBUTE_UNUSED)
  {
    return REGNO_REG_CLASS (regno) == GR_REGS;
  }
*************** rx_c_mode_for_floating_type (enum tree_i
*** 3644,3650 ****
--- 3664,3724 ----
      return TARGET_64BIT_DOUBLES ? DFmode : SFmode;
    return default_mode_for_floating_type (ti);
  }
+ 
+ /* Return one word of doubleword value OP, where OP has mode MODE.
+    A REG_OFFSET of 0 selects the low word and a REG_OFFSET of 1 selects
+    the high word.  */
+ static rtx
+ rx_get_subword (rtx op, machine_mode mode, int reg_offset)
+ {
+   unsigned int mem_offset = reg_offset * 4;
+   if (TARGET_BIG_ENDIAN_DATA)
+     mem_offset = 4 - mem_offset;
+ 
+   if (MEM_P (op))
+     return adjust_address (op, SImode, mem_offset);
+   else
+     return simplify_gen_subreg (SImode, op, mode, mem_offset);
+ }
+ 
+ /* Split a doubleword move with operands OPERANDS.
+    Both operands have mode MODE.  */
+ void
+ rx_split_double_move (rtx * operands, machine_mode mode)
+ {
+   rtx dest = operands[0];
+   rtx src  = operands[1];
+ 
+   rtx dest_low, dest_high, src_low, src_high;
+ 
+   src_low  = rx_get_subword (src, mode, 0);
+   src_high = rx_get_subword (src, mode, 1);
+ 
+   dest_low  = rx_get_subword (dest, mode, 0);
+   dest_high = rx_get_subword (dest, mode, 1);
+ 
+   if (REG_P (operands[0]) && reg_overlap_mentioned_p (dest_low, operands[1]))
+     {
+       emit_move_insn (dest_high, src_high);
+       emit_move_insn (dest_low, src_low);
+     }
+   else
+     {
+       emit_move_insn (dest_low, src_low);
+       emit_move_insn (dest_high, src_high);
+     }
+ }
+ 
+ /* Adjust the operands of a doubleword move. OPERANDS gives the operands and
+    MODE gives the mode of the operands.  */
+ void
+ rx_relax_double_operands(rtx * operands, machine_mode mode)
+ {
+   if (MEM_P (operands[0]) && !REG_P (operands[1]))
+     operands[1] = force_reg (mode, operands[1]);
+ }
  
+ 
  #undef  TARGET_NARROW_VOLATILE_BITFIELD
  #define TARGET_NARROW_VOLATILE_BITFIELD		rx_narrow_volatile_bitfield
  
diff -Nrcpad gcc-17-20260510/gcc/config/rx/rx.h gcc-17-20260517/gcc/config/rx/rx.h
*** gcc-17-20260510/gcc/config/rx/rx.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/rx/rx.h	Sun May 17 22:32:06 2026
*************** enum reg_class
*** 195,207 ****
  {							\
    { 0x00000000 },	/* No registers,  */		\
    { 0x0000ffff },	/* Integer registers.  */	\
!   { 0x0000ffff }	/* All registers.  */		\
  }
  
  #define N_REG_CLASSES			(int) LIM_REG_CLASSES
- #define CLASS_MAX_NREGS(CLASS, MODE)    ((GET_MODE_SIZE (MODE) \
- 					  + UNITS_PER_WORD - 1) \
- 					 / UNITS_PER_WORD)
  
  #define GENERAL_REGS			GR_REGS
  #define BASE_REG_CLASS  		GR_REGS
--- 195,204 ----
  {							\
    { 0x00000000 },	/* No registers,  */		\
    { 0x0000ffff },	/* Integer registers.  */	\
!   { 0x0001ffff }	/* All registers. */		\
  }
  
  #define N_REG_CLASSES			(int) LIM_REG_CLASSES
  
  #define GENERAL_REGS			GR_REGS
  #define BASE_REG_CLASS  		GR_REGS
diff -Nrcpad gcc-17-20260510/gcc/config/rx/rx.md gcc-17-20260517/gcc/config/rx/rx.md
*** gcc-17-20260510/gcc/config/rx/rx.md	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/rx/rx.md	Sun May 17 22:32:06 2026
***************
*** 575,591 ****
    ""
    {
      if (MEM_P (operands[0]) && MEM_P (operands[1]))
!       operands[1] = copy_to_mode_reg (<register_modes:MODE>mode, operands[1]);
      operands[0] = rx_maybe_pidify_operand (operands[0], 0);
      operands[1] = rx_maybe_pidify_operand (operands[1], 0);
!     if (GET_CODE (operands[0]) != REG
! 	&& GET_CODE (operands[1]) == PLUS)
!       operands[1] = copy_to_mode_reg (<register_modes:MODE>mode, operands[1]);
!     if (GET_CODE (operands[1]) == PLUS && GET_MODE (operands[1]) == SImode)
!       {
!         emit_insn (gen_addsi3 (operands[0], XEXP (operands[1], 0), XEXP (operands[1], 1)));
!         DONE;
!       }
      if (CONST_INT_P (operand1)
          && ! rx_is_legitimate_constant (<register_modes:MODE>mode, operand1))
        FAIL;
--- 575,585 ----
    ""
    {
      if (MEM_P (operands[0]) && MEM_P (operands[1]))
!       operands[1] = force_reg (<register_modes:MODE>mode, operands[1]);
      operands[0] = rx_maybe_pidify_operand (operands[0], 0);
      operands[1] = rx_maybe_pidify_operand (operands[1], 0);
!     if (MEM_P (operands[0]) && GET_CODE (operands[1]) == PLUS)
!       operands[1] = force_reg (<register_modes:MODE>mode, operands[1]);
      if (CONST_INT_P (operand1)
          && ! rx_is_legitimate_constant (<register_modes:MODE>mode, operand1))
        FAIL;
***************
*** 603,608 ****
--- 597,648 ----
     (set_attr "timings" "11,11,11,11,11,12,11,11,11,11,11,11")]
  )
  
+ (define_expand "movdi"
+   [(set (match_operand:DI 0 "nonimmediate_operand" "")
+         (match_operand:DI 1 "general_operand" ""))]
+   ""
+   {
+     rx_relax_double_operands(operands, DImode);
+   }
+ )
+ 
+ (define_insn_and_split "movdi_internal"
+   [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m")
+         (match_operand:DI 1 "general_operand"  "ri,m,r"))]
+   ""
+   "#"
+   "reload_completed"
+   [(const_int 0)]
+   {
+     rx_split_double_move (operands, DImode);
+     DONE;
+   }
+   [(set_attr "length" "8")]
+ )
+ 
+ (define_expand "movdf"
+   [(set (match_operand:DF 0 "nonimmediate_operand" "")
+         (match_operand:DF 1 "general_operand" ""))]
+   ""
+   {
+     rx_relax_double_operands(operands, DFmode);
+   }
+ )
+ 
+ (define_insn_and_split "movdf_internal"
+   [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m")
+         (match_operand:DF 1 "general_operand"  "rF,m,r"))]
+   ""
+   "#"
+   "reload_completed"
+   [(const_int 0)]
+   {
+     rx_split_double_move (operands, DFmode);
+     DONE;
+   }
+   [(set_attr "length" "8")]
+ )
+ 
  (define_insn "extend<small_int_modes:mode>si2"
    [(set (match_operand:SI 0 "register_operand"    "=r,r")
          (sign_extend:SI (match_operand:small_int_modes
***************
*** 975,980 ****
--- 1015,1032 ----
     (set_attr "length"   "3,4,5,6,7,6")]
  )
  
+ (define_insn "addsi3_pid"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+         (plus:SI (match_operand:SI 1 "register_operand" "%0")
+                  (const:SI (unspec:SI [(match_operand:SI 2 "immediate_operand" "i")] UNSPEC_PID_ADDR))))
+     (clobber (reg:CC CC_REG))]
+ 
+   ""
+   "add\t%2, %0"
+   [(set_attr "length" "6")
+    (set_attr "timings" "11")]
+ )
+ 
  ;; Peepholes to match:
  ;;   (set (reg A) (reg B))
  ;;   (set (CC) (compare:CC (reg A/reg B) (const_int 0)))
***************
*** 1938,1943 ****
--- 1990,1996 ----
    [(set_attr "timings" "33")
     (set_attr "length"  "5")] ;; This length is corrected in rx_adjust_insn_length
  )
+ 
  
  ;; Floating Point Instructions
  
***************
*** 2872,2891 ****
    ""
  )
  
! (define_insn "movdi"
!   [(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
!         (match_operand:DI 1 "general_operand"      "rmi"))]
!   "TARGET_ENABLE_LRA"
!   { return rx_gen_move_template (operands, false); }
!   [(set_attr "length" "16")
!    (set_attr "timings" "22")]
  )
  
! (define_insn "movdf"
!   [(set (match_operand:DF 0 "nonimmediate_operand" "=rm")
!         (match_operand:DF 1 "general_operand"      "rmi"))]
!   "TARGET_ENABLE_LRA"
!   { return rx_gen_move_template (operands, false); }
!   [(set_attr "length" "16")
!    (set_attr "timings" "22")]
  )
--- 2925,2954 ----
    ""
  )
  
! ;; RX does not allow addition without destroying CC.
! ;; As an alternative to addptrsi3, we define addsi3, which hides changes to CC.
! (define_insn_and_split "*addsi3_lra"
!   [(set (match_operand:SI 0 "register_operand" "=r,r")
!         (plus:SI (match_operand:SI 1 "register_operand" "0,r")
!                  (match_operand:SI 2 "rx_source_operand" "ri,ri")))]
!   "!post_ra_split_completed"
!   "#"
!   "&& 1"
!   [(parallel [
!      (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))
!      (clobber (reg:CC 16))
!    ])]
  )
  
! (define_insn_and_split "*ashlsi3_lra"
!   [(set (match_operand:SI 0 "register_operand" "=r,r,r")
!         (ashift:SI (match_operand:SI 1 "register_operand" "%0,0,r")
!                    (match_operand:SI 2 "rx_shift_operand" "r,i,i")))]
!   "!post_ra_split_completed"
!   "#"
!   "&& 1"
!   [(parallel [
!      (set (match_dup 0) (ashift:SI (match_dup 1) (match_dup 2)))
!      (clobber (reg:CC CC_REG))
!    ])]
  )
diff -Nrcpad gcc-17-20260510/gcc/config/xtensa/xtensa.cc gcc-17-20260517/gcc/config/xtensa/xtensa.cc
*** gcc-17-20260510/gcc/config/xtensa/xtensa.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/xtensa/xtensa.cc	Sun May 17 22:32:06 2026
*************** xtensa_emit_adjust_stack_ptr (HOST_WIDE_
*** 3587,3603 ****
  
  static bool
  xtensa_can_eliminate_callee_saved_reg_p (unsigned int regno,
! 					 rtx_insn **p_insnS,
! 					 rtx_insn **p_insnR)
  {
    df_ref ref;
!   rtx_insn *insn, *insnS = NULL, *insnR = NULL;
    rtx pattern;
  
    if (!optimize || !df || call_used_or_fixed_reg_p (regno))
      return false;
  
!   for (ref = DF_REG_DEF_CHAIN (regno);
         ref; ref = DF_REF_NEXT_REG (ref))
      if (DF_REF_CLASS (ref) != DF_REF_REGULAR
  	|| DEBUG_INSN_P (insn = DF_REF_INSN (ref)))
--- 3587,3602 ----
  
  static bool
  xtensa_can_eliminate_callee_saved_reg_p (unsigned int regno,
! 					 rtx_insn *&insnS, rtx_insn *&insnR)
  {
    df_ref ref;
!   rtx_insn *insn;
    rtx pattern;
  
    if (!optimize || !df || call_used_or_fixed_reg_p (regno))
      return false;
  
!   for (insnS = NULL, ref = DF_REG_DEF_CHAIN (regno);
         ref; ref = DF_REF_NEXT_REG (ref))
      if (DF_REF_CLASS (ref) != DF_REF_REGULAR
  	|| DEBUG_INSN_P (insn = DF_REF_INSN (ref)))
*************** xtensa_can_eliminate_callee_saved_reg_p
*** 3617,3623 ****
      else
        return false;
  
!   for (ref = DF_REG_USE_CHAIN (regno);
         ref; ref = DF_REF_NEXT_REG (ref))
      if (DF_REF_CLASS (ref) != DF_REF_REGULAR
  	|| DEBUG_INSN_P (insn = DF_REF_INSN (ref)))
--- 3616,3622 ----
      else
        return false;
  
!   for (insnR = NULL, ref = DF_REG_USE_CHAIN (regno);
         ref; ref = DF_REF_NEXT_REG (ref))
      if (DF_REF_CLASS (ref) != DF_REF_REGULAR
  	|| DEBUG_INSN_P (insn = DF_REF_INSN (ref)))
*************** xtensa_can_eliminate_callee_saved_reg_p
*** 3637,3648 ****
      else
        return false;
  
!   if (!insnS || !insnR)
!     return false;
! 
!   *p_insnS = insnS, *p_insnR = insnR;
! 
!   return true;
  }
  
  /* minimum frame = reg save area (4 words) plus static chain (1 word)
--- 3636,3642 ----
      else
        return false;
  
!   return insnS && insnR;
  }
  
  /* minimum frame = reg save area (4 words) plus static chain (1 word)
*************** xtensa_expand_prologue (void)
*** 3745,3751 ****
  
  	    if (!large_stack_needed
  		&& xtensa_can_eliminate_callee_saved_reg_p (regno,
! 							    &insnS, &insnR))
  	      {
  		if (frame_pointer_needed)
  		  mem = replace_rtx (mem, stack_pointer_rtx,
--- 3739,3745 ----
  
  	    if (!large_stack_needed
  		&& xtensa_can_eliminate_callee_saved_reg_p (regno,
! 							    insnS, insnR))
  	      {
  		if (frame_pointer_needed)
  		  mem = replace_rtx (mem, stack_pointer_rtx,
*************** FPreg_neg_scaled_simm12b (rtx_insn *insn
*** 5889,5894 ****
--- 5883,5889 ----
    int scale;
    rtx_insn *next, *last, *seq;
    REAL_VALUE_TYPE r;
+   bool success;
  
    /* It matches RTL expressions of the following format:
  	(set (reg:SF gpr) (const_double:SF cst))
*************** FPreg_neg_scaled_simm12b (rtx_insn *insn
*** 5944,5955 ****
  	      dump_insn_slim (dump_file, next);
  	    }
  	  remove_reg_equal_equiv_notes (insn);
! 	  validate_change (insn, &PATTERN (insn),
! 			   PATTERN (seq), 0);
  	  remove_reg_equal_equiv_notes (next);
  	  remove_note (next, note);
! 	  validate_change (next, &PATTERN (next),
! 			   PATTERN (last), 0);
  	  add_reg_note (next, REG_EQUIV, src);
  	  add_reg_note (next, REG_DEAD, dest_2);
  	  if (dump_file)
--- 5939,5952 ----
  	      dump_insn_slim (dump_file, next);
  	    }
  	  remove_reg_equal_equiv_notes (insn);
! 	  success = validate_change (insn, &PATTERN (insn),
! 				     PATTERN (seq), 0);
! 	  gcc_assert (success);
  	  remove_reg_equal_equiv_notes (next);
  	  remove_note (next, note);
! 	  success = validate_change (next, &PATTERN (next),
! 				     PATTERN (last), 0);
! 	  gcc_assert (success);
  	  add_reg_note (next, REG_EQUIV, src);
  	  add_reg_note (next, REG_DEAD, dest_2);
  	  if (dump_file)
*************** static bool
*** 5986,5991 ****
--- 5983,5989 ----
  convert_SF_const (rtx_insn *insn)
  {
    rtx pat, dest, src, dest0, src0, src0c;
+   bool success;
  
    /* It is more efficient to assign SFmode literal constants using their
       bit-equivalent SImode ones, thus we convert them so.  */
*************** convert_SF_const (rtx_insn *insn)
*** 6024,6030 ****
        && ! xtensa_simm12b (INTVAL (src0)))
      src0c = src0, src0 = force_const_mem (SImode, src0);
    remove_reg_equal_equiv_notes (insn);
!   validate_change (insn, &PATTERN (insn), gen_rtx_SET (dest0, src0), 0);
    if (src0c)
      add_reg_note (insn, REG_EQUIV, copy_rtx (src0c));
    if (dump_file)
--- 6022,6030 ----
        && ! xtensa_simm12b (INTVAL (src0)))
      src0c = src0, src0 = force_const_mem (SImode, src0);
    remove_reg_equal_equiv_notes (insn);
!   success = validate_change (insn, &PATTERN (insn),
! 			     gen_rtx_SET (dest0, src0), 0);
!   gcc_assert (success);
    if (src0c)
      add_reg_note (insn, REG_EQUIV, copy_rtx (src0c));
    if (dump_file)
*************** constantsynth_pass1 (rtx_insn *insn, con
*** 6337,6342 ****
--- 6337,6343 ----
  {
    rtx pat, dest, src;
    int *pcount;
+   bool success;
  
    /* Check whether the insn is an assignment to a constant that is eligible
       for constantsynth.  If a large constant, record the insn and also the
*************** constantsynth_pass1 (rtx_insn *insn, con
*** 6354,6360 ****
        if (! rtx_equal_p (src, SET_SRC (pat)))
  	{
  	  remove_reg_equal_equiv_notes (insn);
! 	  validate_change (insn, &SET_SRC (pat), src, 0);
  	}
        if (dump_file)
  	{
--- 6355,6362 ----
        if (! rtx_equal_p (src, SET_SRC (pat)))
  	{
  	  remove_reg_equal_equiv_notes (insn);
! 	  success = validate_change (insn, &SET_SRC (pat), src, 0);
! 	  gcc_assert (success);
  	}
        if (dump_file)
  	{
*************** litpool_set_src_1 (rtx_insn *insn, rtx s
*** 6527,6532 ****
--- 6529,6535 ----
  {
    rtx dest, src;
    enum machine_mode mode;
+   bool success;
  
    if (REG_P (dest = SET_DEST (set)) && CONST_INT_P (src = SET_SRC (set))
        && ((((mode = GET_MODE (dest)) == SImode || mode == HImode)
*************** litpool_set_src_1 (rtx_insn *insn, rtx s
*** 6534,6541 ****
  	  || mode == DImode))
      {
        remove_reg_equal_equiv_notes (insn);
!       validate_change (insn, &SET_SRC (set),
! 		       force_const_mem (mode, src), in_group);
        add_reg_note (insn, REG_EQUIV, copy_rtx (src));
        return true;
      }
--- 6537,6545 ----
  	  || mode == DImode))
      {
        remove_reg_equal_equiv_notes (insn);
!       success = validate_change (insn, &SET_SRC (set),
! 				 force_const_mem (mode, src), in_group);
!       gcc_assert (success);
        add_reg_note (insn, REG_EQUIV, copy_rtx (src));
        return true;
      }
*************** litpool_set_src (rtx_insn *insn)
*** 6548,6554 ****
  {
    rtx pat = PATTERN (insn);
    int i;
!   bool changed;
  
    switch (GET_CODE (pat))
      {
--- 6552,6558 ----
  {
    rtx pat = PATTERN (insn);
    int i;
!   bool changed, success;
  
    switch (GET_CODE (pat))
      {
*************** litpool_set_src (rtx_insn *insn)
*** 6564,6570 ****
  	    && litpool_set_src_1 (insn, XVECEXP (pat, 0, i), 1))
  	  changed = true;
        if (changed)
! 	apply_change_group ();
        return changed;
  
      default:
--- 6568,6578 ----
  	    && litpool_set_src_1 (insn, XVECEXP (pat, 0, i), 1))
  	  changed = true;
        if (changed)
! 	{
! 	  success = apply_change_group ();
! 	  gcc_assert (success);
! 	}
! 
        return changed;
  
      default:
diff -Nrcpad gcc-17-20260510/gcc/config/xtensa/xtensa.h gcc-17-20260517/gcc/config/xtensa/xtensa.h
*** gcc-17-20260510/gcc/config/xtensa/xtensa.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config/xtensa/xtensa.h	Sun May 17 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 254,259 ****
--- 254,263 ----
  }
  #define ADJUST_REG_ALLOC_ORDER xtensa_adjust_reg_alloc_order ()
  
+ /* Tell IRA to use the order we define rather than messing it up with its
+    own cost calculations.  */
+ #define HONOR_REG_ALLOC_ORDER 1
+ 
  /* Internal macros to classify a register number.  */
  
  /* 16 address registers + fake registers */
diff -Nrcpad gcc-17-20260510/gcc/config.gcc gcc-17-20260517/gcc/config.gcc
*** gcc-17-20260510/gcc/config.gcc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/config.gcc	Sun May 17 22:32:05 2026
*************** aarch64*-*-gnu*)
*** 1319,1324 ****
--- 1319,1333 ----
  aarch64-*-mingw*)
  	tm_file="${tm_file} aarch64/aarch64-abi-ms.h"
  	tm_file="${tm_file} aarch64/aarch64-coff.h"
+ 	case ${enable_threads} in
+ 	  "" | yes | win32)
+ 	    thread_file='win32'
+ 	    ;;
+ 	  posix)
+ 	    thread_file='posix'
+ 	    tm_file="${tm_file} mingw/mingw-pthread.h"
+ 	    ;;
+ 	esac
  	tm_file="${tm_file} aarch64/cygming.h"
  	tm_file="${tm_file} mingw/mingw32.h"
  	tm_file="${tm_file} mingw/mingw-stdint.h"
*************** aarch64-*-mingw*)
*** 1335,1355 ****
  	cxx_target_objs="${cxx_target_objs} msformat-c.o"
  	d_target_objs="${d_target_objs} winnt-d.o"
  	tmake_file="${tmake_file} mingw/t-cygming"
- 	case ${enable_threads} in
- 	  "" | yes | win32)
- 	    thread_file='win32'
- 	    ;;
- 	  posix)
- 	    thread_file='posix'
- 	    ;;
- 	esac
  	default_use_cxa_atexit=yes
  	use_gcc_stdint=wrap
  	user_headers_inc_next_post="${user_headers_inc_next_post} float.h"
  	tm_defines="${tm_defines} TARGET_AARCH64_MS_ABI=1"
  	;;
  aarch64*-wrs-vxworks*)
!         tm_file="${tm_file} elfos.h aarch64/aarch64-elf.h"
          tm_file="${tm_file} vx-common.h vxworks.h aarch64/aarch64-vxworks.h"
          tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-vxworks"
          ;;
--- 1344,1356 ----
  	cxx_target_objs="${cxx_target_objs} msformat-c.o"
  	d_target_objs="${d_target_objs} winnt-d.o"
  	tmake_file="${tmake_file} mingw/t-cygming"
  	default_use_cxa_atexit=yes
  	use_gcc_stdint=wrap
  	user_headers_inc_next_post="${user_headers_inc_next_post} float.h"
  	tm_defines="${tm_defines} TARGET_AARCH64_MS_ABI=1"
  	;;
  aarch64*-wrs-vxworks*)
!         tm_file="${tm_file} elfos.h aarch64/aarch64-elf.h aarch64/aarch64-errata.h"
          tm_file="${tm_file} vx-common.h vxworks.h aarch64/aarch64-vxworks.h"
          tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-vxworks"
          ;;
*************** i[34567]86-*-mingw* | x86_64-*-mingw*)
*** 2288,2294 ****
  			;;
  	esac
  	if test x$enable_threads = xposix ; then
! 		tm_file="${tm_file} i386/mingw-pthread.h"
  	fi
  	if test x$enable_threads = xmcf ; then
  		tm_file="${tm_file} i386/mingw-mcfgthread.h"
--- 2289,2295 ----
  			;;
  	esac
  	if test x$enable_threads = xposix ; then
! 		tm_file="${tm_file} mingw/mingw-pthread.h"
  	fi
  	if test x$enable_threads = xmcf ; then
  		tm_file="${tm_file} i386/mingw-mcfgthread.h"
diff -Nrcpad gcc-17-20260510/gcc/cp/ChangeLog gcc-17-20260517/gcc/cp/ChangeLog
*** gcc-17-20260510/gcc/cp/ChangeLog	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/ChangeLog	Sun May 17 22:32:06 2026
***************
*** 1,3 ****
--- 1,84 ----
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125081
+ 	* typeck.cc (cp_build_binary_op): Emit -Wconstant-logical-operand
+ 	warnings.
+ 
+ 2026-05-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125315
+ 	* constexpr.cc (init_subob_ctx): Allow both ctor and object
+ 	to be null for an empty subobject.
+ 
+ 2026-05-14  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/124628
+ 	* reflect.cc (resolve_type_of_reflected_decl): New.
+ 	(get_reflection): Call resolve_type_of_reflected_decl instead
+ 	of mark_used.
+ 	(has_type): Call resolve_type_of_reflected_decl before
+ 	checking for an undeduced auto.
+ 	(eval_can_substitute): Likewise.  Also look through BASELINK.
+ 	(members_of_representable): Call resolve_type_of_reflected_decl
+ 	before checking for an undeduced auto.
+ 
+ 2026-05-14  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* semantics.cc (cp_check_omp_declare_mapper): Change what
+ 	argument is expected; check that the struct var is used by at
+ 	least one map war. Print sorry when compiling with -std=c++98.
+ 	* pt.cc (tsubst_stmt, tsubst_expr): Call it.
+ 	* parser.cc (cp_parser_omp_declare_mapper): Update call.
+ 
+ 2026-05-13  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125280
+ 	* reflect.cc (consteval_only_p): Don't complete_type.
+ 	(consteval_only_p_walker::walk): Return false for
+ 	error_mark_node.
+ 
+ 2026-05-13  chzn@mail.ustc.edu.cn  <chzn@mail.ustc.edu.cn>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/123609
+ 	* parser.cc (cp_parser_class_head): Re-parse attributes
+ 	that caused a tentative parsing failure.
+ 
+ 2026-05-12  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/100903
+ 	* call.cc (build_over_call): Avoid -Wzero-as-null-pointer-constant
+ 	if the warning is disabled around the called function.
+ 
+ 2026-05-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/50479
+ 	PR c++/62244
+ 	* parser.cc (cp_parser_parameter_declaration_list): Move the
+ 	grokdeclarator call and setting DECL_SOURCE_LOCATION to...
+ 	(cp_parser_parameter_declaration): ...here.  New tree parameter.
+ 	Set it.  Call pushdecl for a named decl with a default argument.
+ 
+ 2026-05-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125208
+ 	* reflect.cc (compare_reflections): Use == when comparing two
+ 	aliases.
+ 	* tree.cc (cp_tree_equal) <case REFLECT_EXPR>: Use
+ 	compare_reflections.
+ 
+ 2026-05-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* reflect.cc (null_reflection_p): New.
+ 	(splice): Use it.
+ 	* error.cc (dump_expr): Use it.
+ 	* cp-tree.h (null_reflection_p): Declare.
+ 
+ 2026-05-11  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* decl2.cc (decl_defined_p): Also return true if DECL_INITIAL
+ 	and !DECL_IN_AGGR_P is true for a VAR_DECL.
+ 
  2026-05-09  Patrick Palka  <ppalka@redhat.com>
  
  	PR c++/121500
diff -Nrcpad gcc-17-20260510/gcc/cp/call.cc gcc-17-20260517/gcc/cp/call.cc
*** gcc-17-20260510/gcc/cp/call.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/call.cc	Sun May 17 22:32:06 2026
*************** build_over_call (struct z_candidate *can
*** 10715,10724 ****
               func(NULL);
             }
        */
!       bool const conversion_warning = !(null_node_p (current_arg)
! 					&& DECL_TEMPLATE_INFO (fn)
! 					&& cand->template_decl
! 					&& !cand->explicit_targs);
  
        tsubst_flags_t const arg_complain
  	= conversion_warning ? complain : complain & ~tf_warning;
--- 10715,10732 ----
               func(NULL);
             }
        */
!       bool conversion_warning = !(null_node_p (current_arg)
! 				  && DECL_TEMPLATE_INFO (fn)
! 				  && cand->template_decl
! 				  && !cand->explicit_targs);
! 
!       /* Also don't warn about (x <=> y) < 0 (c++/100903).  */
!       if (conversion_warning
! 	  && integer_zerop (current_arg)
! 	  && warn_zero_as_null_pointer_constant
! 	  && !warning_enabled_at (DECL_SOURCE_LOCATION (fn),
! 				  OPT_Wzero_as_null_pointer_constant))
! 	conversion_warning = false;
  
        tsubst_flags_t const arg_complain
  	= conversion_warning ? complain : complain & ~tf_warning;
diff -Nrcpad gcc-17-20260510/gcc/cp/constexpr.cc gcc-17-20260517/gcc/cp/constexpr.cc
*** gcc-17-20260510/gcc/cp/constexpr.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/constexpr.cc	Sun May 17 22:32:06 2026
*************** init_subob_ctx (const constexpr_ctx *ctx
*** 6718,6724 ****
    else if (ctx->object)
      ctxtype = TREE_TYPE (ctx->object);
    else
!     gcc_unreachable ();
  
    if (VECTOR_TYPE_P (type)
        && VECTOR_TYPE_P (ctxtype)
--- 6718,6729 ----
    else if (ctx->object)
      ctxtype = TREE_TYPE (ctx->object);
    else
!     {
!       /* This can happen if the enclosing object is also an empty subobject
! 	 (c++/125315).  */
!       gcc_checking_assert (is_empty_class (type));
!       return;
!     }
  
    if (VECTOR_TYPE_P (type)
        && VECTOR_TYPE_P (ctxtype)
diff -Nrcpad gcc-17-20260510/gcc/cp/cp-tree.h gcc-17-20260517/gcc/cp/cp-tree.h
*** gcc-17-20260510/gcc/cp/cp-tree.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/cp-tree.h	Sun May 17 22:32:06 2026
*************** extern tree process_metafunction (const
*** 9524,9529 ****
--- 9524,9530 ----
  				  bool *, bool *, tree *);
  extern tree get_reflection (location_t, tree, reflect_kind = REFLECT_UNDEF);
  extern tree get_null_reflection () ATTRIBUTE_PURE;
+ extern bool null_reflection_p (const_tree) ATTRIBUTE_PURE;
  extern tree splice (tree);
  extern bool check_out_of_consteval_use (tree, bool = true);
  extern bool consteval_only_p (tree) ATTRIBUTE_PURE;
diff -Nrcpad gcc-17-20260510/gcc/cp/decl2.cc gcc-17-20260517/gcc/cp/decl2.cc
*** gcc-17-20260510/gcc/cp/decl2.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/decl2.cc	Sun May 17 22:32:06 2026
*************** decl_defined_p (tree decl)
*** 5324,5330 ****
    else
      {
        gcc_assert (VAR_P (decl));
!       return !DECL_EXTERNAL (decl);
      }
  }
  
--- 5324,5336 ----
    else
      {
        gcc_assert (VAR_P (decl));
!       return (!DECL_EXTERNAL (decl)
! 	      /* An initialized variable is defined even if we've decided not
! 		 to emit it, unless it's initialized within the class and not
! 		 inline.  Note that finish_static_member_decl doesn't set
! 		 DECL_IN_AGGR_P for inline variables, so we don't need to check
! 		 DECL_INLINE_VAR_P here.  */
! 	      || (DECL_INITIAL (decl) && !DECL_IN_AGGR_P (decl)));
      }
  }
  
diff -Nrcpad gcc-17-20260510/gcc/cp/error.cc gcc-17-20260517/gcc/cp/error.cc
*** gcc-17-20260510/gcc/cp/error.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/error.cc	Sun May 17 22:32:06 2026
*************** dump_expr (cxx_pretty_printer *pp, tree
*** 3471,3476 ****
--- 3471,3481 ----
  	    pp_right_paren (pp);
  	    break;
  	  default:
+ 	    if (null_reflection_p (t))
+ 	      {
+ 		pp_cxx_ws_string (pp, "std::meta::info{}");
+ 		break;
+ 	      }
  	    pp_string (pp, "^^");
  	    pp->set_padding (pp_none);
  	    if (DECL_P (h))
diff -Nrcpad gcc-17-20260510/gcc/cp/parser.cc gcc-17-20260517/gcc/cp/parser.cc
*** gcc-17-20260510/gcc/cp/parser.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/parser.cc	Sun May 17 22:32:06 2026
*************** static tree cp_parser_parameter_declarat
*** 2785,2791 ****
  static tree cp_parser_parameter_declaration_list
    (cp_parser *, cp_parser_flags, auto_vec<tree> *);
  static cp_parameter_declarator *cp_parser_parameter_declaration
!   (cp_parser *, cp_parser_flags, bool, bool *);
  static tree cp_parser_default_argument
    (cp_parser *, bool);
  static void cp_parser_function_body
--- 2785,2791 ----
  static tree cp_parser_parameter_declaration_list
    (cp_parser *, cp_parser_flags, auto_vec<tree> *);
  static cp_parameter_declarator *cp_parser_parameter_declaration
!   (cp_parser *, cp_parser_flags, bool, bool *, tree * = nullptr);
  static tree cp_parser_default_argument
    (cp_parser *, bool);
  static void cp_parser_function_body
*************** cp_parser_parameter_declaration_list (cp
*** 28301,28324 ****
        parameter
  	= cp_parser_parameter_declaration (parser, flags,
  					   /*template_parm_p=*/false,
! 					   &parenthesized_p);
! 
!       /* We don't know yet if the enclosing context is unavailable or deprecated,
! 	 so wait and deal with it in grokparms if appropriate.  */
!       deprecated_state = UNAVAILABLE_DEPRECATED_SUPPRESS;
! 
!       if (parameter && !cp_parser_error_occurred (parser))
! 	{
! 	  decl = grokdeclarator (parameter->declarator,
! 				 &parameter->decl_specifiers,
! 				 PARM,
! 				 parameter->default_argument != NULL_TREE,
! 				 &parameter->decl_specifiers.attributes);
! 	  if (decl != error_mark_node && parameter->loc != UNKNOWN_LOCATION)
! 	    DECL_SOURCE_LOCATION (decl) = parameter->loc;
! 	}
! 
!       deprecated_state = DEPRECATED_NORMAL;
  
        /* If a parse error occurred parsing the parameter declaration,
  	 then the entire parameter-declaration-list is erroneous.  */
--- 28301,28307 ----
        parameter
  	= cp_parser_parameter_declaration (parser, flags,
  					   /*template_parm_p=*/false,
! 					   &parenthesized_p, &decl);
  
        /* If a parse error occurred parsing the parameter declaration,
  	 then the entire parameter-declaration-list is erroneous.  */
*************** cp_parser_parameter_declaration_list (cp
*** 28361,28367 ****
  		   return false;
  		 }())
  	    pending_decls->safe_push (decl);
! 	  else
  	    decl = pushdecl (decl);
  	}
  
--- 28344,28353 ----
  		   return false;
  		 }())
  	    pending_decls->safe_push (decl);
! 	  /* If we saw a default argument, we've already pushed this decl.
! 	     (An ill-formed default argument should have been parsed to
! 	     error_mark_node.)  */
! 	  else if (!parameter->default_argument)
  	    decl = pushdecl (decl);
  	}
  
*************** cp_parser_parameter_declaration_list (cp
*** 28474,28479 ****
--- 28460,28469 ----
     token encountered during the parsing of the assignment-expression
     is not interpreted as a greater-than operator.)
  
+    If DECLP is non-null, we are called from cp_parser_parameter_declaration_list
+    and will perform grokdeclarator here; DECLP will be set to the result.  If
+    we see a default argument, we also call pushdecl; see below for rationale.
+ 
     Returns a representation of the parameter, or NULL if an error
     occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
     true iff the declarator is of the form "(p)".  */
*************** static cp_parameter_declarator *
*** 28482,28488 ****
  cp_parser_parameter_declaration (cp_parser *parser,
  				 cp_parser_flags flags,
  				 bool template_parm_p,
! 				 bool *parenthesized_p)
  {
    int declares_class_or_enum;
    cp_decl_specifier_seq decl_specifiers;
--- 28472,28479 ----
  cp_parser_parameter_declaration (cp_parser *parser,
  				 cp_parser_flags flags,
  				 bool template_parm_p,
! 				 bool *parenthesized_p,
! 				 tree *declp/*=nullptr*/)
  {
    int declares_class_or_enum;
    cp_decl_specifier_seq decl_specifiers;
*************** cp_parser_parameter_declaration (cp_pars
*** 28697,28709 ****
        decl_specifiers.locations[ds_this] = 0;
      }
  
    /* The restriction on defining new types applies only to the type
       of the parameter, not to the default argument.  */
    parser->type_definition_forbidden_message = saved_message;
!   cp_token *eq_token = NULL;
    /* If the next token is `=', then process a default argument.  */
!   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
      {
        tree type = decl_specifiers.type;
        token = cp_lexer_peek_token (parser->lexer);
        /* Used for diagnostics with an xobj parameter.  */
--- 28688,28724 ----
        decl_specifiers.locations[ds_this] = 0;
      }
  
+   const bool has_defarg_p = cp_lexer_next_token_is (parser->lexer, CPP_EQ);
+ 
+   /* We don't know yet if the enclosing context is unavailable or deprecated,
+      so wait and deal with it in grokparms if appropriate.  */
+   deprecated_state = UNAVAILABLE_DEPRECATED_SUPPRESS;
+ 
+   /* We are processing a parameter-declaration-list and need to do this
+      early so that we have a decl for the pushdecl below.  */
+   if (declp && !cp_parser_error_occurred (parser))
+     *declp = grokdeclarator (declarator,
+ 			    &decl_specifiers,
+ 			    PARM,
+ 			    has_defarg_p,
+ 			    &decl_specifiers.attributes);
+ 
+   deprecated_state = DEPRECATED_NORMAL;
+ 
    /* The restriction on defining new types applies only to the type
       of the parameter, not to the default argument.  */
    parser->type_definition_forbidden_message = saved_message;
!   cp_token *eq_token = nullptr;
    /* If the next token is `=', then process a default argument.  */
!   if (has_defarg_p)
      {
+       /* And if we have a default argument, we must be dealing with a function
+ 	 declaration, so we can push now to correctly handle
+ 	   void fn (int i = sizeof (i));
+ 	 which is valid.  */
+       if (declp && *declp != error_mark_node && DECL_NAME (*declp))
+ 	*declp = pushdecl (*declp);
+ 
        tree type = decl_specifiers.type;
        token = cp_lexer_peek_token (parser->lexer);
        /* Used for diagnostics with an xobj parameter.  */
*************** cp_parser_parameter_declaration (cp_pars
*** 28812,28817 ****
--- 28827,28835 ----
  					decl_spec_token_start->location,
  					input_location);
  
+   if (declp && *declp != error_mark_node && param_loc != UNKNOWN_LOCATION)
+     DECL_SOURCE_LOCATION (*declp) = param_loc;
+ 
    return make_parameter_declarator (&decl_specifiers,
  				    declarator,
  				    default_argument,
*************** cp_parser_class_head (cp_parser* parser,
*** 30277,30283 ****
--- 30295,30307 ----
    location_t class_head_start_location = input_location;
  
    /* Parse the attributes.  */
+   /* Save tokens for some unhandled error (PR123609).  */
+   cp_token_position attribute_error_position = 0;
+   if (!cp_parser_error_occurred (parser))
+     attribute_error_position = cp_lexer_token_position (parser->lexer, false);
    attributes = cp_parser_attributes_opt (parser);
+   if (!cp_parser_error_occurred (parser))
+     attribute_error_position = 0;
  
    /* If the next token is `::', that is invalid -- but sometimes
       people do try to write:
*************** cp_parser_class_head (cp_parser* parser,
*** 30419,30424 ****
--- 30443,30457 ----
    /* At this point, we're going ahead with the class-specifier, even
       if some other problem occurs.  */
    cp_parser_commit_to_tentative_parse (parser);
+   /* Some errors while parsing attributes are ignored due to tentative parsing,
+      redo parsing to reject it.  */
+   if (attribute_error_position)
+     {
+       auto current_position = cp_lexer_token_position (parser->lexer, false);
+       cp_lexer_set_token_position (parser->lexer, attribute_error_position);
+       cp_parser_attributes_opt (parser);
+       cp_lexer_set_token_position (parser->lexer, current_position);
+     }
    /* Issue the error about the overly-qualified name now.  */
    if (qualified_p)
      {
*************** cp_parser_omp_declare_mapper (cp_parser
*** 55690,55696 ****
    else
      pushdecl (vardecl);
  
!   cp_check_omp_declare_mapper (vardecl);
  
    cp_parser_require_pragma_eol (parser, pragma_tok);
    return;
--- 55723,55729 ----
    else
      pushdecl (vardecl);
  
!   cp_check_omp_declare_mapper (mapper);
  
    cp_parser_require_pragma_eol (parser, pragma_tok);
    return;
diff -Nrcpad gcc-17-20260510/gcc/cp/pt.cc gcc-17-20260517/gcc/cp/pt.cc
*** gcc-17-20260510/gcc/cp/pt.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/pt.cc	Sun May 17 22:32:06 2026
*************** tsubst_stmt (tree t, tree args, tsubst_f
*** 20762,20767 ****
--- 20762,20768 ----
  	TREE_TYPE (t) = type;
  	OMP_DECLARE_MAPPER_DECL (t) = decl;
  	OMP_DECLARE_MAPPER_CLAUSES (t) = clauses;
+ 	cp_check_omp_declare_mapper (t);
  	RETURN (t);
        }
  
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 21881,21886 ****
--- 21882,21888 ----
  	TREE_TYPE (t) = type;
  	OMP_DECLARE_MAPPER_DECL (t) = decl;
  	OMP_DECLARE_MAPPER_CLAUSES (t) = clauses;
+ 	cp_check_omp_declare_mapper (t);
  	RETURN (t);
        }
  
diff -Nrcpad gcc-17-20260510/gcc/cp/reflect.cc gcc-17-20260517/gcc/cp/reflect.cc
*** gcc-17-20260510/gcc/cp/reflect.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/reflect.cc	Sun May 17 22:32:06 2026
*************** init_reflection ()
*** 74,79 ****
--- 74,92 ----
    pop_namespace ();
  }
  
+ /* Ensure the type of DECL is fully resolved by performing return
+    type deduction and deferred noexcept instantiation.  */
+ 
+ static void
+ resolve_type_of_reflected_decl (tree decl)
+ {
+   /* Quietly calling mark_used in an unevaluated context will perform
+      all necessary checks and instantiations while suppressing constraint
+      unsatisfaction and deletedness diagnostics.  */
+   cp_unevaluated u;
+   mark_used (decl, tf_none);
+ }
+ 
  /* Create a REFLECT_EXPR expression of kind KIND around T.  */
  
  static tree
*************** get_reflection (location_t loc, tree t,
*** 210,217 ****
        t = resolve_nondeduced_context_or_error (t, tf_warning_or_error);
        /* The argument could have a deduced return type, so we need to
  	 instantiate it now to find out its type.  */
!       if (!mark_used (t))
! 	return error_mark_node;
        /* Avoid -Wunused-but-set* warnings when a variable or parameter
  	 is just set and reflected.  */
        if (VAR_P (t) || TREE_CODE (t) == PARM_DECL)
--- 223,229 ----
        t = resolve_nondeduced_context_or_error (t, tf_warning_or_error);
        /* The argument could have a deduced return type, so we need to
  	 instantiate it now to find out its type.  */
!       resolve_type_of_reflected_decl (t);
        /* Avoid -Wunused-but-set* warnings when a variable or parameter
  	 is just set and reflected.  */
        if (VAR_P (t) || TREE_CODE (t) == PARM_DECL)
*************** get_null_reflection ()
*** 267,272 ****
--- 279,293 ----
    return null_reflection;
  }
  
+ /* True iff T is a null reflection.  */
+ 
+ bool
+ null_reflection_p (const_tree t)
+ {
+   return (t && TREE_CODE (t) == REFLECT_EXPR
+ 	  && REFLECT_EXPR_HANDLE (t) == unknown_type_node);
+ }
+ 
  /* Do strip_typedefs on T, but only for types.  */
  
  static tree
*************** has_type (tree r, reflect_kind kind)
*** 2533,2538 ****
--- 2554,2560 ----
      {
        if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
  	return false;
+       resolve_type_of_reflected_decl (r);
        if (undeduced_auto_decl (r))
  	return false;
        return true;
*************** eval_can_substitute (location_t loc, con
*** 5532,5537 ****
--- 5554,5561 ----
        if (fn == error_mark_node)
  	return boolean_false_node;
        fn = resolve_nondeduced_context_or_error (fn, tf_none);
+       fn = MAYBE_BASELINK_FUNCTIONS (fn);
+       resolve_type_of_reflected_decl (fn);
        if (fn == error_mark_node || undeduced_auto_decl (fn))
  	return boolean_false_node;
        return boolean_true_node;
*************** members_of_representable_p (tree c, tree
*** 6759,6766 ****
  	  || TREE_CODE (r) == FIELD_DECL
  	  || TREE_CODE (r) == NAMESPACE_DECL)
  	return true;
!       if (VAR_OR_FUNCTION_DECL_P (r) && !undeduced_auto_decl (r))
! 	return true;
      }
    return false;
  }
--- 6783,6794 ----
  	  || TREE_CODE (r) == FIELD_DECL
  	  || TREE_CODE (r) == NAMESPACE_DECL)
  	return true;
!       if (VAR_OR_FUNCTION_DECL_P (r))
! 	{
! 	  resolve_type_of_reflected_decl (r);
! 	  if (!undeduced_auto_decl (r))
! 	    return true;
! 	}
      }
    return false;
  }
*************** splice (tree refl)
*** 8533,8539 ****
        return error_mark_node;
      }
  
!   if (compare_reflections (refl, get_null_reflection ()))
      {
        error_at (loc, "cannot splice a null reflection");
        return error_mark_node;
--- 8561,8567 ----
        return error_mark_node;
      }
  
!   if (null_reflection_p (refl))
      {
        error_at (loc, "cannot splice a null reflection");
        return error_mark_node;
*************** consteval_only_p (tree t)
*** 8614,8626 ****
    if (dependent_type_p (t))
      return false;
  
-   /* We need the complete type otherwise we'd have no fields for class
-      templates and thus come up with zilch for things like
-        template<typename T>
-        struct X : T { };
-      which could be consteval-only, depending on T.  */
-   t = complete_type (t);
- 
    consteval_only_p_walker walker;
    return walker.walk (t).is_true ();
  }
--- 8642,8647 ----
*************** consteval_only_p (tree t)
*** 8632,8637 ****
--- 8653,8661 ----
  tristate
  consteval_only_p_walker::walk (tree t)
  {
+   if (t == error_mark_node)
+     return false;
+ 
    t = TYPE_MAIN_VARIANT (t);
  
    if (REFLECTION_TYPE_P (t))
*************** compare_reflections (tree lhs, tree rhs)
*** 8939,8947 ****
      return lhs == rhs;
    else if (TYPE_P (lhs) && TYPE_P (rhs))
      {
!       /* Given "using A = int;", "^^int != ^^A" should hold.  */
!       if (typedef_variant_p (lhs) != typedef_variant_p (rhs))
! 	return false;
        /* This is for comparing function types.  E.g.,
  	  auto fn() -> int; type_of(^^fn) == ^^auto()->int;  */
        return same_type_p (lhs, rhs);
--- 8963,8974 ----
      return lhs == rhs;
    else if (TYPE_P (lhs) && TYPE_P (rhs))
      {
!       /* Given
! 	  using A = int;
! 	  using B = int;
! 	 ^^int != ^^A and ^^A != ^^B.  */
!       if (typedef_variant_p (lhs) || typedef_variant_p (rhs))
! 	return lhs == rhs;
        /* This is for comparing function types.  E.g.,
  	  auto fn() -> int; type_of(^^fn) == ^^auto()->int;  */
        return same_type_p (lhs, rhs);
diff -Nrcpad gcc-17-20260510/gcc/cp/semantics.cc gcc-17-20260517/gcc/cp/semantics.cc
*** gcc-17-20260510/gcc/cp/semantics.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/semantics.cc	Sun May 17 22:32:06 2026
*************** finish_omp_reduction_clause (tree c, boo
*** 7440,7464 ****
  bool
  cp_check_omp_declare_mapper (tree udm)
  {
!   tree type = TREE_TYPE (udm);
!   location_t loc = DECL_SOURCE_LOCATION (udm);
  
    if (type == error_mark_node)
      return false;
  
!   if (!processing_template_decl && !RECORD_OR_UNION_TYPE_P (type))
      {
        error_at (loc, "%qT is not a struct, union or class type in "
  		"%<#pragma omp declare mapper%>", type);
        return false;
      }
!   if (!processing_template_decl && CLASSTYPE_VBASECLASSES (type))
      {
        error_at (loc, "%qT must not be a virtual base class in "
  		"%<#pragma omp declare mapper%>", type);
        return false;
      }
  
    return true;
  }
  
--- 7440,7508 ----
  bool
  cp_check_omp_declare_mapper (tree udm)
  {
!   tree var = OMP_DECLARE_MAPPER_DECL (udm);
!   tree type = TREE_TYPE (var);
!   location_t loc = DECL_SOURCE_LOCATION (var);
  
    if (type == error_mark_node)
      return false;
  
!   if (processing_template_decl)
!     return true;
! 
!   if (!RECORD_OR_UNION_TYPE_P (type))
      {
        error_at (loc, "%qT is not a struct, union or class type in "
  		"%<#pragma omp declare mapper%>", type);
        return false;
      }
!   if (CLASSTYPE_VBASECLASSES (type))
      {
        error_at (loc, "%qT must not be a virtual base class in "
  		"%<#pragma omp declare mapper%>", type);
        return false;
      }
  
+   tree c = OMP_DECLARE_MAPPER_CLAUSES (udm);
+   for ( ; c; c = OMP_CLAUSE_CHAIN (c))
+     {
+       tree dvar = OMP_CLAUSE_DECL (c);
+       while (!DECL_P (dvar) && TREE_OPERAND_LENGTH (dvar))
+ 	dvar = TREE_OPERAND (dvar, 0);
+       if (dvar == var)
+ 	break;
+     }
+   if (!c)
+     {
+       // After template handling, the var is mangled, demangle it
+       const char *name = IDENTIFIER_POINTER (DECL_NAME (var));
+       char *n = NULL;
+       if (startswith (name, "omp declare mapper "))
+ 	{
+ 	  name += strlen ("omp declare mapper ");
+ 	  n = xstrdup (name);
+ 	  n[strchr (n, '~')-n] = '\0';
+ 	  name = n;
+ 	}
+       error_at (loc, "at least one %<map%> clause must map %qs or an "
+ 		     "element of it", name);
+       if (n)
+ 	free (n);
+       return false;
+     }
+ 
+   /* FIXME: The vardecl created for the mapper_id uses DECL_DECLARED_CONSTEXPR_P
+      = 1, which is set to false in finalize_literal_type_property for C++ < 11,
+      leading to an error in ensure_literal_type_for_constexpr_object.
+      Examples (compile with -std=c++98): gcc.dg/gomp/declare-mapper-13.c and
+      libgomp.c++/declare-mapper-{5,6,8}.C.  */
+   if (cxx_dialect < cxx11)
+     {
+       sorry_at (loc, "%<#pragma omp declare mapper%> with %<-std=%> set to "
+ 		     "before C++11");
+       return false;
+     }
+ 
    return true;
  }
  
diff -Nrcpad gcc-17-20260510/gcc/cp/tree.cc gcc-17-20260517/gcc/cp/tree.cc
*** gcc-17-20260510/gcc/cp/tree.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/tree.cc	Sun May 17 22:32:06 2026
*************** cp_tree_equal (tree t1, tree t2)
*** 4514,4533 ****
        return true;
  
      case REFLECT_EXPR:
!       {
! 	if (REFLECT_EXPR_KIND (t1) != REFLECT_EXPR_KIND (t2))
! 	  return false;
! 	tree h1 = REFLECT_EXPR_HANDLE (t1);
! 	tree h2 = REFLECT_EXPR_HANDLE (t2);
! 	if (!cp_tree_equal (h1, h2))
! 	  return false;
! 	/* ^^alias represents the alias itself, not the underlying type.  */
! 	if (TYPE_P (h1)
! 	    && (typedef_variant_p (h1) || typedef_variant_p (h2))
! 	    && TYPE_NAME (h1) != TYPE_NAME (h2))
! 	  return false;
! 	return true;
!       }
  
      default:
        break;
--- 4514,4520 ----
        return true;
  
      case REFLECT_EXPR:
!       return compare_reflections (t1, t2);
  
      default:
        break;
diff -Nrcpad gcc-17-20260510/gcc/cp/typeck.cc gcc-17-20260517/gcc/cp/typeck.cc
*** gcc-17-20260510/gcc/cp/typeck.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/cp/typeck.cc	Sun May 17 22:32:06 2026
*************** cp_build_binary_op (const op_location_t
*** 5953,5958 ****
--- 5953,5996 ----
  	  return cp_build_binary_op (location, code, op0, op1, complain);
  	}
  
+       if (warn_constant_logical_operand
+ 	  && (complain & tf_warning)
+ 	  && (code0 == INTEGER_TYPE || code0 == ENUMERAL_TYPE)
+ 	  && (code1 == INTEGER_TYPE || code1 == ENUMERAL_TYPE))
+ 	{
+ 	  tree cop0 = fold_for_warn (op0), cop1 = fold_for_warn (op1);
+ 	  const char *name
+ 	    = ((code == TRUTH_ANDIF_EXPR || code == TRUTH_AND_EXPR)
+ 	       ? "&&" : "||");
+ 	  auto enum_other_than_0_1 = [] (tree type) {
+ 	    if (TREE_CODE (type) != ENUMERAL_TYPE)
+ 	      return false;
+ 	    for (tree l = TYPE_VALUES (type); l; l = TREE_CHAIN (l))
+ 	      {
+ 		tree v = DECL_INITIAL (TREE_VALUE (l));
+ 		if (!integer_zerop (v) && !integer_onep (v))
+ 		  return true;
+ 	      }
+ 	    return false;
+ 	  };
+ 	  auto diagnose_constant_logical_operand = [=] (tree val, tree type) {
+ 	    if (TREE_CODE (val) != INTEGER_CST || integer_zerop (val))
+ 	      return false;
+ 	    if (integer_onep (val) && !enum_other_than_0_1 (type))
+ 	      return false;
+ 	    gcc_rich_location richloc (location);
+ 	    richloc.add_fixit_replace (name + 1);
+ 	    auto_diagnostic_group d;
+ 	    if (warning_at (location, OPT_Wconstant_logical_operand,
+ 			    "use of logical %qs with constant operand %qE",
+ 			    name, val))
+ 	      inform (&richloc, "use %qs for bitwise operation", name + 1);
+ 	    return true;
+ 	  };
+ 	  if (!diagnose_constant_logical_operand (cop1, orig_type1))
+ 	    diagnose_constant_logical_operand (cop0, orig_type0);
+ 	}
+ 
        result_type = boolean_type_node;
        break;
  
diff -Nrcpad gcc-17-20260510/gcc/doc/extend.texi gcc-17-20260517/gcc/doc/extend.texi
*** gcc-17-20260510/gcc/doc/extend.texi	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/doc/extend.texi	Sun May 17 22:32:06 2026
*************** Similar to @code{__builtin_bswap64}, exc
*** 16022,16027 ****
--- 16022,16051 ----
  are 128-bit.  Only supported on targets when 128-bit types are supported.
  @enddefbuiltin
  
+ @defbuiltin{uint8_t __builtin_bitreverse8 (uint8_t @var{x})}
+ Returns @var{x} with all bits reversed.
+ @enddefbuiltin
+ 
+ @defbuiltin{uint16_t __builtin_bitreverse16 (uint16_t @var{x})}
+ Similar to @code{__builtin_bitreverse8}, except the argument and return types
+ are 16-bit.
+ @enddefbuiltin
+ 
+ @defbuiltin{uint32_t __builtin_bitreverse32 (uint32_t @var{x})}
+ Similar to @code{__builtin_bitreverse16}, except the argument and return types
+ are 32-bit.
+ @enddefbuiltin
+ 
+ @defbuiltin{uint64_t __builtin_bitreverse64 (uint64_t @var{x})}
+ Similar to @code{__builtin_bitreverse32}, except the argument and return types
+ are 64-bit.
+ @enddefbuiltin
+ 
+ @defbuiltin{uint128_t __builtin_bitreverse128 (uint128_t @var{x})}
+ Similar to @code{__builtin_bitreverse64}, except the argument and return types
+ are 128-bit.  Only supported on targets when 128-bit types are supported.
+ @enddefbuiltin
+ 
  @node CRC Builtins
  @subsection CRC Builtins
  @cindex CRC builtins
diff -Nrcpad gcc-17-20260510/gcc/doc/invoke.texi gcc-17-20260517/gcc/doc/invoke.texi
*** gcc-17-20260510/gcc/doc/invoke.texi	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/doc/invoke.texi	Sun May 17 22:32:06 2026
*************** Objective-C and Objective-C++ Dialects}.
*** 385,391 ****
  -Wchar-subscripts
  -Wclobbered  -Wcomment
  -Wcompare-distinct-pointer-types
! -Wno-complain-wrong-lang
  -Wconversion  -Wno-coverage-mismatch  -Wno-cpp
  -Wdangling-else  -Wdangling-pointer  -Wdangling-pointer=@var{n}
  -Wdate-time
--- 385,391 ----
  -Wchar-subscripts
  -Wclobbered  -Wcomment
  -Wcompare-distinct-pointer-types
! -Wno-complain-wrong-lang  -Wconstant-logical-operand
  -Wconversion  -Wno-coverage-mismatch  -Wno-cpp
  -Wdangling-else  -Wdangling-pointer  -Wdangling-pointer=@var{n}
  -Wdate-time
*************** Objective-C and Objective-C++ Dialects}.
*** 474,479 ****
--- 474,480 ----
  -Wno-xor-used-as-pow
  -Wzero-as-null-pointer-constant
  -Wzero-length-bounds
+ -Wzero-init-padding-bits=@var{value}
  --all-warnings  --extra-warnings  --no-warnings
  --pedantic  --pedantic-errors}
  
*************** extern int a;
*** 10644,10649 ****
--- 10645,10666 ----
  if (a < 0 && a < 0) @{ @dots{} @}
  @end smallexample
  
+ @opindex Wconstant-logical-operand
+ @opindex Wno-constant-logical-operand
+ @item -Wconstant-logical-operand
+ Warn about another case of suspicious uses of logical operators in
+ expressions, when neither operand of a logical operator is boolean
+ and one of the operands is (or folds into) a constant other than 0 or 1,
+ or enumerator with value 1 if the enumeral type contains enumerators with
+ values other than 0 or 1.
+ In such case the warning will suggest using corresponding bitwise operator.
+ @smallexample
+ extern int a;
+ if (a && 64) @{ @dots{} @}
+ @end smallexample
+ If the warning is a false positive, one can clarify the code by using
+ e.g. @code{a && (64 != 0)} instead.
+ 
  @opindex Wlogical-not-parentheses
  @opindex Wno-logical-not-parentheses
  @item -Wlogical-not-parentheses
*************** Suppress warnings when a positional init
*** 11524,11529 ****
--- 11541,11628 ----
  a structure that has been marked with the @code{designated_init}
  attribute.
  
+ @opindex Wzero-init-padding-bits=
+ @item -Wzero-init-padding-bits=@var{value}
+ Warn about automatic variable initializers that might not zero
+ initialize padding bits.
+ 
+ Certain languages guarantee zero initialization of padding bits in
+ certain cases.  The @code{-fzero-init-padding-bits=unions} and
+ @code{-fzero-init-padding-bits=all} options provide additional
+ guarantees that padding bits will be zero initialized in other
+ circumstances.
+ 
+ This warning is mainly intended to find source code that might need to
+ be modified or else recompiled with
+ @code{-fzero-init-padding-bits=unions} or
+ @code{-fzero-init-padding-bits=all} in order to retain the behavior
+ that it had when compiled by versions of GCC older than 15.1.  It can
+ also be used to find code that might result in uninitialized struct
+ padding unless GCC is invoked with @code{-fzero-init-padding-bits=all}
+ (regardless of the fact that older versions of GCC would not have
+ guaranteed initialization of struct padding either).
+ 
+ It does not follow that all source code which causes warnings about
+ uninitialized padding bits has undefined behavior: usually, the values
+ of padding bits have no effect on execution of a program.
+ 
+ The two options interact as follows:
+ 
+ @multitable @columnfractions 0.25 0.25 0.25 0.25
+ @headitem @tab f:standard @tab f:unions @tab f:all
+ @item W:standard @tab X @tab X @tab X
+ @item W:unions @tab U @tab X @tab X
+ @item W:all @tab A @tab S @tab X
+ @end multitable
+ 
+ @multitable @columnfractions .10 .90
+ @headitem Letter @tab Meaning
+ @item X @tab No warnings about padding bits.
+ @item U @tab Warnings about padding bits of unions.
+ @item S @tab Warnings about padding bits of structs.
+ @item A @tab Warnings about padding bits of structs and unions.
+ @end multitable
+ 
+ Examples of union initialization for ISO C23 with
+ @code{-fzero-init-padding-bits=standard} and
+ @code{-Wzero-init-padding-bits=unions}:
+ 
+ @smallexample
+   long long q;
+   unsigned char r;
+   union U @{ unsigned char a; long long b; @};
+   struct F @{ long long a; union U b; @};
+ 
+   // Padding bits are explicitly initialized
+   union U h = @{@};
+ 
+   // Padding bits might not be initialized
+   union U i = @{ r @};
+ 
+   // Padding bits might not be initialized
+   union U j = @{ .a = r @};
+ 
+   // Union is expected to have no padding bits
+   union U k = @{ .b = q @};
+ 
+   // Padding bits (of union) are explicitly initialized
+   struct F l = @{ q, @{@}, .b.a = r @};
+ 
+   // Padding bits (of union) might not be initialized
+   struct F m = @{ q, @{@}, .b = @{.a = r@} @};
+ @end smallexample
+ 
+ In the declaration of @code{m}, an empty initializer that would otherwise
+ guarantee zero initialization of the padding bits of the union (i.e., storage
+ allocated for member @code{b} that is not part of member @code{a}) is
+ overridden by a subsequently listed initializer.  This is an anti-pattern.
+ 
+ Whether or not a given initializer causes a warning to be produced can be
+ predicted for simple cases but in general it is target-dependent because the
+ layout of storage is target-dependent.  The level of optimization, size, and
+ initial value of the object being initialized also affect whether warnings are
+ produced.
+ 
  @end table
  
  @node Static Analyzer Options
diff -Nrcpad gcc-17-20260510/gcc/doc/md.texi gcc-17-20260517/gcc/doc/md.texi
*** gcc-17-20260510/gcc/doc/md.texi	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/doc/md.texi	Sun May 17 22:32:06 2026
*************** op0 = (narrow) (((wide) op1 + (wide) op2
*** 5273,5278 ****
--- 5273,5282 ----
  @item @samp{bswap@var{m}2}
  Reverse the order of bytes of operand 1 and store the result in operand 0.
  
+ @mdindex bitreverse@var{m}2
+ @item @samp{bitreverse@var{m}2}
+ Reverse the order of bits of operand 1 and store the result in operand 0.
+ 
  @mdindex neg@var{m}2
  @mdindex ssneg@var{m}2
  @mdindex usneg@var{m}2
diff -Nrcpad gcc-17-20260510/gcc/doc/rtl.texi gcc-17-20260517/gcc/doc/rtl.texi
*** gcc-17-20260510/gcc/doc/rtl.texi	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/doc/rtl.texi	Sun May 17 22:32:06 2026
*************** Returns the number of fractional bits of
*** 1577,1585 ****
  
  @findex GET_MODE_MASK
  @item GET_MODE_MASK (@var{m})
! Returns a bitmask containing 1 for all bits in a word that fit within
! mode @var{m}.  This macro can only be used for modes whose bitsize is
! less than or equal to @code{HOST_BITS_PER_INT}.
  
  @findex GET_MODE_ALIGNMENT
  @item GET_MODE_ALIGNMENT (@var{m})
--- 1577,1585 ----
  
  @findex GET_MODE_MASK
  @item GET_MODE_MASK (@var{m})
! Returns a bitmask containing 1 for all bits in a @code{HOST_WIDE_INT}
! that fit within mode @var{m}.  This macro can only be used for modes
! whose bitsize is less than or equal to @code{HOST_BITS_PER_WIDE_INT}.
  
  @findex GET_MODE_ALIGNMENT
  @item GET_MODE_ALIGNMENT (@var{m})
diff -Nrcpad gcc-17-20260510/gcc/expr.cc gcc-17-20260517/gcc/expr.cc
*** gcc-17-20260510/gcc/expr.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/expr.cc	Sun May 17 22:32:06 2026
*************** count_type_elements (const_tree type, bo
*** 7133,7139 ****
  static bool
  categorize_ctor_elements_1 (const_tree ctor, HOST_WIDE_INT *p_nz_elts,
  			    HOST_WIDE_INT *p_unique_nz_elts,
! 			    HOST_WIDE_INT *p_init_elts, int *p_complete)
  {
    unsigned HOST_WIDE_INT idx;
    HOST_WIDE_INT nz_elts, unique_nz_elts, init_elts, num_fields;
--- 7133,7140 ----
  static bool
  categorize_ctor_elements_1 (const_tree ctor, HOST_WIDE_INT *p_nz_elts,
  			    HOST_WIDE_INT *p_unique_nz_elts,
! 			    HOST_WIDE_INT *p_init_elts,
! 			    ctor_completeness *p_complete)
  {
    unsigned HOST_WIDE_INT idx;
    HOST_WIDE_INT nz_elts, unique_nz_elts, init_elts, num_fields;
*************** categorize_ctor_elements_1 (const_tree c
*** 7260,7293 ****
  	}
      }
  
!   if (*p_complete && !complete_ctor_at_level_p (TREE_TYPE (ctor),
  						num_fields, elt_type))
!     *p_complete = 0;
    else if (TREE_CODE (TREE_TYPE (ctor)) == UNION_TYPE
  	   || TREE_CODE (TREE_TYPE (ctor)) == QUAL_UNION_TYPE)
      {
!       if (*p_complete
  	  && CONSTRUCTOR_ZERO_PADDING_BITS (ctor)
  	  && (num_fields
  	      ? simple_cst_equal (TYPE_SIZE (TREE_TYPE (ctor)),
  				  TYPE_SIZE (elt_type)) != 1
  	      : type_has_padding_at_level_p (TREE_TYPE (ctor))))
! 	*p_complete = 0;
!       else if (*p_complete > 0
  	       && (num_fields
  		   ? simple_cst_equal (TYPE_SIZE (TREE_TYPE (ctor)),
  				       TYPE_SIZE (elt_type)) != 1
  		   : type_has_padding_at_level_p (TREE_TYPE (ctor))))
! 	*p_complete = -1;
      }
!   else if (*p_complete
  	   && (CONSTRUCTOR_ZERO_PADDING_BITS (ctor)
  	       || flag_zero_init_padding_bits == ZERO_INIT_PADDING_BITS_ALL)
  	   && type_has_padding_at_level_p (TREE_TYPE (ctor)))
!     *p_complete = 0;
!   else if (*p_complete > 0
  	   && type_has_padding_at_level_p (TREE_TYPE (ctor)))
!     *p_complete = -1;
  
    *p_nz_elts += nz_elts;
    *p_unique_nz_elts += unique_nz_elts;
--- 7261,7294 ----
  	}
      }
  
!   if (!p_complete->sparse && !complete_ctor_at_level_p (TREE_TYPE (ctor),
  						num_fields, elt_type))
!     p_complete->sparse = true;
    else if (TREE_CODE (TREE_TYPE (ctor)) == UNION_TYPE
  	   || TREE_CODE (TREE_TYPE (ctor)) == QUAL_UNION_TYPE)
      {
!       if (!p_complete->sparse
  	  && CONSTRUCTOR_ZERO_PADDING_BITS (ctor)
  	  && (num_fields
  	      ? simple_cst_equal (TYPE_SIZE (TREE_TYPE (ctor)),
  				  TYPE_SIZE (elt_type)) != 1
  	      : type_has_padding_at_level_p (TREE_TYPE (ctor))))
! 	p_complete->sparse = true;
!       else if (!p_complete->sparse && !p_complete->padded_union
  	       && (num_fields
  		   ? simple_cst_equal (TYPE_SIZE (TREE_TYPE (ctor)),
  				       TYPE_SIZE (elt_type)) != 1
  		   : type_has_padding_at_level_p (TREE_TYPE (ctor))))
! 	p_complete->padded_union = true;
      }
!   else if (!p_complete->sparse
  	   && (CONSTRUCTOR_ZERO_PADDING_BITS (ctor)
  	       || flag_zero_init_padding_bits == ZERO_INIT_PADDING_BITS_ALL)
  	   && type_has_padding_at_level_p (TREE_TYPE (ctor)))
!     p_complete->sparse = true;
!   else if (!p_complete->sparse && !p_complete->padded_non_union
  	   && type_has_padding_at_level_p (TREE_TYPE (ctor)))
!     p_complete->padded_non_union = true;
  
    *p_nz_elts += nz_elts;
    *p_unique_nz_elts += unique_nz_elts;
*************** categorize_ctor_elements_1 (const_tree c
*** 7309,7317 ****
     * whether the constructor is complete -- in the sense that every
       meaningful byte is explicitly given a value --
       and place it in *P_COMPLETE:
-      -  0 if any field is missing
-      -  1 if all fields are initialized, and there's no padding
-      - -1 if all fields are initialized, but there's padding
  
     Return whether or not CTOR is a valid static constant initializer, the same
     as "initializer_constant_valid_p (CTOR, TREE_TYPE (CTOR)) != 0".  */
--- 7310,7315 ----
*************** categorize_ctor_elements_1 (const_tree c
*** 7319,7330 ****
  bool
  categorize_ctor_elements (const_tree ctor, HOST_WIDE_INT *p_nz_elts,
  			  HOST_WIDE_INT *p_unique_nz_elts,
! 			  HOST_WIDE_INT *p_init_elts, int *p_complete)
  {
    *p_nz_elts = 0;
    *p_unique_nz_elts = 0;
    *p_init_elts = 0;
!   *p_complete = 1;
  
    return categorize_ctor_elements_1 (ctor, p_nz_elts, p_unique_nz_elts,
  				     p_init_elts, p_complete);
--- 7317,7329 ----
  bool
  categorize_ctor_elements (const_tree ctor, HOST_WIDE_INT *p_nz_elts,
  			  HOST_WIDE_INT *p_unique_nz_elts,
! 			  HOST_WIDE_INT *p_init_elts,
! 			  ctor_completeness *p_complete)
  {
    *p_nz_elts = 0;
    *p_unique_nz_elts = 0;
    *p_init_elts = 0;
!   *p_complete = {};
  
    return categorize_ctor_elements_1 (ctor, p_nz_elts, p_unique_nz_elts,
  				     p_init_elts, p_complete);
*************** mostly_zeros_p (const_tree exp)
*** 7398,7408 ****
    if (TREE_CODE (exp) == CONSTRUCTOR)
      {
        HOST_WIDE_INT nz_elts, unz_elts, init_elts;
!       int complete_p;
  
        categorize_ctor_elements (exp, &nz_elts, &unz_elts, &init_elts,
  				&complete_p);
!       return !complete_p || nz_elts < init_elts / 4;
      }
  
    return initializer_zerop (exp);
--- 7397,7407 ----
    if (TREE_CODE (exp) == CONSTRUCTOR)
      {
        HOST_WIDE_INT nz_elts, unz_elts, init_elts;
!       ctor_completeness complete_p;
  
        categorize_ctor_elements (exp, &nz_elts, &unz_elts, &init_elts,
  				&complete_p);
!       return complete_p.sparse || nz_elts < init_elts / 4;
      }
  
    return initializer_zerop (exp);
*************** all_zeros_p (const_tree exp)
*** 7416,7422 ****
    if (TREE_CODE (exp) == CONSTRUCTOR)
      {
        HOST_WIDE_INT nz_elts, unz_elts, init_elts;
!       int complete_p;
  
        categorize_ctor_elements (exp, &nz_elts, &unz_elts, &init_elts,
  				&complete_p);
--- 7415,7421 ----
    if (TREE_CODE (exp) == CONSTRUCTOR)
      {
        HOST_WIDE_INT nz_elts, unz_elts, init_elts;
!       ctor_completeness complete_p;
  
        categorize_ctor_elements (exp, &nz_elts, &unz_elts, &init_elts,
  				&complete_p);
diff -Nrcpad gcc-17-20260510/gcc/expr.h gcc-17-20260517/gcc/expr.h
*** gcc-17-20260510/gcc/expr.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/expr.h	Sun May 17 22:32:06 2026
*************** extern bool can_move_by_pieces (unsigned
*** 360,368 ****
  
  extern unsigned HOST_WIDE_INT highest_pow2_factor (const_tree);
  
  extern bool categorize_ctor_elements (const_tree, HOST_WIDE_INT *,
  				      HOST_WIDE_INT *, HOST_WIDE_INT *,
! 				      int *);
  extern bool type_has_padding_at_level_p (tree);
  extern bool immediate_const_ctor_p (const_tree, unsigned int words = 1);
  extern void store_constructor (tree, rtx, int, poly_int64, bool);
--- 360,386 ----
  
  extern unsigned HOST_WIDE_INT highest_pow2_factor (const_tree);
  
+ struct ctor_completeness
+ {
+   /* True if the type being constructed has padding that definitely needs to be
+      zero-initialized, or some element of the constructor does not have a
+      complete initializer, or both.  */
+   bool sparse : 1;
+   /* True if the type being constructed is padded (or contains elements that are
+      padded), that padding is not part of a union, and the constructor had not
+      yet been categorized as sparse when all of this was discovered.
+    */
+   bool padded_non_union : 1;
+   /* True if the type being constructed is padded (or contains elements that are
+      padded), that padding is part of a union, and the constructor had not yet
+      been categorized as sparse when all of this was discovered.
+    */
+   bool padded_union : 1;
+ };
+ 
  extern bool categorize_ctor_elements (const_tree, HOST_WIDE_INT *,
  				      HOST_WIDE_INT *, HOST_WIDE_INT *,
! 				      ctor_completeness *);
  extern bool type_has_padding_at_level_p (tree);
  extern bool immediate_const_ctor_p (const_tree, unsigned int words = 1);
  extern void store_constructor (tree, rtx, int, poly_int64, bool);
diff -Nrcpad gcc-17-20260510/gcc/flag-types.h gcc-17-20260517/gcc/flag-types.h
*** gcc-17-20260510/gcc/flag-types.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/flag-types.h	Sun May 17 22:32:06 2026
*************** enum gfc_fcoarray
*** 456,462 ****
  {
    GFC_FCOARRAY_NONE = 0,
    GFC_FCOARRAY_SINGLE,
!   GFC_FCOARRAY_LIB
  };
  
  
--- 456,463 ----
  {
    GFC_FCOARRAY_NONE = 0,
    GFC_FCOARRAY_SINGLE,
!   GFC_FCOARRAY_LIB,
!   GFC_FCOARRAY_SHARED
  };
  
  
diff -Nrcpad gcc-17-20260510/gcc/fold-const-call.cc gcc-17-20260517/gcc/fold-const-call.cc
*** gcc-17-20260510/gcc/fold-const-call.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fold-const-call.cc	Sun May 17 22:32:06 2026
*************** fold_const_call_ss (wide_int *result, co
*** 1102,1107 ****
--- 1102,1116 ----
  					   TYPE_SIGN (arg_type)));
        return true;
  
+     case CFN_BUILT_IN_BITREVERSE8:
+     case CFN_BUILT_IN_BITREVERSE16:
+     case CFN_BUILT_IN_BITREVERSE32:
+     case CFN_BUILT_IN_BITREVERSE64:
+     case CFN_BUILT_IN_BITREVERSE128:
+       *result = wi::bitreverse (wide_int::from (arg, precision,
+ 						TYPE_SIGN (arg_type)));
+       return true;
+ 
      default:
        return false;
      }
*************** fold_const_vec_extract (tree, tree arg0,
*** 1477,1482 ****
--- 1486,1523 ----
    return NULL_TREE;
  }
  
+ /* Try to fold scalar integer IFN_SAT_ADD with operands OP0 and OP1.  */
+ 
+ static tree
+ fold_internal_fn_sat_add (tree type, tree op0, tree op1)
+ {
+   if (!INTEGRAL_NB_TYPE_P (type))
+     return NULL_TREE;
+ 
+   if (TREE_CODE (op0) != INTEGER_CST
+       || TREE_CODE (op1) != INTEGER_CST)
+     return NULL_TREE;
+ 
+   wi::overflow_type overflow;
+   unsigned int prec = TYPE_PRECISION (type);
+   wide_int result = wi::add (wi::to_wide (op0), wi::to_wide (op1),
+ 			     TYPE_SIGN (type), &overflow);
+ 
+   if (overflow != wi::OVF_NONE)
+     {
+       if (TYPE_UNSIGNED (type))
+ 	result = wi::max_value (prec, UNSIGNED);
+       else if (overflow == wi::OVF_OVERFLOW)
+ 	result = wi::max_value (prec, SIGNED);
+       else if (overflow == wi::OVF_UNDERFLOW)
+ 	result = wi::min_value (prec, SIGNED);
+       else
+ 	return NULL_TREE;
+     }
+ 
+   return wide_int_to_tree (type, result);
+ }
+ 
  /* Try to evaluate:
  
        *RESULT = FN (*ARG0, *ARG1)
*************** fold_const_call (combined_fn fn, tree ty
*** 1886,1891 ****
--- 1927,1935 ----
      case CFN_VEC_EXTRACT:
        return fold_const_vec_extract (type, arg0, arg1);
  
+     case CFN_SAT_ADD:
+       return fold_internal_fn_sat_add (type, arg0, arg1);
+ 
      case CFN_UBSAN_CHECK_ADD:
      case CFN_ADD_OVERFLOW:
        subcode = PLUS_EXPR;
diff -Nrcpad gcc-17-20260510/gcc/fold-const.cc gcc-17-20260517/gcc/fold-const.cc
*** gcc-17-20260510/gcc/fold-const.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fold-const.cc	Sun May 17 22:32:06 2026
*************** tree_call_nonnegative_warnv_p (tree type
*** 14984,14989 ****
--- 14984,14994 ----
      case CFN_BUILT_IN_BSWAP32:
      case CFN_BUILT_IN_BSWAP64:
      case CFN_BUILT_IN_BSWAP128:
+     case CFN_BUILT_IN_BITREVERSE8:
+     case CFN_BUILT_IN_BITREVERSE16:
+     case CFN_BUILT_IN_BITREVERSE32:
+     case CFN_BUILT_IN_BITREVERSE64:
+     case CFN_BUILT_IN_BITREVERSE128:
        /* Always true.  */
        return true;
  
diff -Nrcpad gcc-17-20260510/gcc/fortran/ChangeLog gcc-17-20260517/gcc/fortran/ChangeLog
*** gcc-17-20260510/gcc/fortran/ChangeLog	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/ChangeLog	Sun May 17 22:32:06 2026
***************
*** 1,3 ****
--- 1,66 ----
+ 2026-05-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/122245
+ 	* dump-parse-tree.cc (write_formal_arglist): Take the formal
+ 	arglist from the symbol's interface if it is present.
+ 
+ 2026-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/125092
+ 	* decl.cc (add_global_entry): Use string from the heap instead
+ 	of a pointer to stack-allocated memory.
+ 	* frontend-passes.cc (check_against_globals): If there is an error
+ 	already, return early.
+ 	* gfortran.h (gfc_symbol_rank): New prototype.
+ 	* interface.cc (symbol_rank): Rename to
+ 	(gfc_symbol_rank): this.
+ 	(gfc_check_dummy_characteristics): Use new function name.
+ 	(gfc_check_result_characteristics): Likewise.
+ 	(gfc_compare_interfaces): Likewise.
+ 	(compare_parameter): Likewise.
+ 	(get_sym_storage_size): Likewise.
+ 	(gfc_procedure_use): Likewise.
+ 	* resolve.cc (decays_to_pointer): New function.
+ 	(c_types_conform): New function.
+ 	(compare_c_binding_arglists): New function.
+ 	(gfc_verify_binding_labels): Check return types and rank
+ 	plus argument lists if there is a pre-exisiting global
+ 	symbol.
+ 
+ 2026-05-14  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* trans-openmp.cc (gfc_omp_deep_mapping_p, gfc_omp_deep_mapping_cnt,
+ 	gfc_omp_deep_mapping): Improve interface comment.
+ 
+ 2026-05-13  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* intrinsic.texi (OpenMP Modules): Add named parameters for
+ 	omp_control_tool and omp_control_tool_result.
+ 
+ 2026-05-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	* lang.opt (fcoarray=): Add shared enum value; update help text.
+ 	* gfortranspec.cc (CAF_SHMEM_LIBRARY): New macro.
+ 	(lang_specific_driver): Detect -fcoarray=shared in first pass and
+ 	set need_caf_shmem flag.  In second pass, transform -fcoarray=shared
+ 	to -fcoarray=lib for cc1.  Append -lcaf_shmem when need_caf_shmem
+ 	is set and linking is active.
+ 
+ 2026-05-10  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 	    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/125051
+ 	* trans-decl.cc (gfc_get_symbol_decl): gfc_defer_symbol_init
+ 	must not be called for PDT types, classes or types with PDT
+ 	(gfc_generate_function_code): If gfc_current_ns is not the same
+ 	as the function namespace, stash it,change it to the function
+ 	namespace and restore after translation of the code.
+ 	* trans-intrinsic.cc (gfc_conv_intrinsic_caf_get): If the array
+ 	is in a module, use the symbol namespace.
+ 	* trans-openmp.cc (gfc_trans_omp_array_reduction_or_udr): If the
+ 	current namespace is not that of the procedure, change to the
+ 	procedure namspace and revert on leaving this function.
+ 
  2026-05-08  Harald Anlauf  <anlauf@gmx.de>
  
  	PR fortran/111952
diff -Nrcpad gcc-17-20260510/gcc/fortran/decl.cc gcc-17-20260517/gcc/fortran/decl.cc
*** gcc-17-20260510/gcc/fortran/decl.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/decl.cc	Sun May 17 22:32:06 2026
*************** add_global_entry (const char *name, cons
*** 8409,8415 ****
        else
  	{
  	  s->type = type;
! 	  s->sym_name = name;
  	  s->binding_label = binding_label;
  	  s->where = *where;
  	  s->defined = 1;
--- 8409,8415 ----
        else
  	{
  	  s->type = type;
! 	  s->sym_name = gfc_get_string ("%s", name);
  	  s->binding_label = binding_label;
  	  s->where = *where;
  	  s->defined = 1;
diff -Nrcpad gcc-17-20260510/gcc/fortran/dump-parse-tree.cc gcc-17-20260517/gcc/fortran/dump-parse-tree.cc
*** gcc-17-20260510/gcc/fortran/dump-parse-tree.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/dump-parse-tree.cc	Sun May 17 22:32:06 2026
*************** write_formal_arglist (gfc_symbol *sym, b
*** 4513,4519 ****
  {
    gfc_formal_arglist *f;
  
!   for (f = sym->formal; f != NULL; f = f->next)
      {
        enum type_return rok;
        const char *intent_in;
--- 4513,4524 ----
  {
    gfc_formal_arglist *f;
  
!   if (sym->ts.interface)
!     f = sym->ts.interface->formal;
!   else
!     f = sym->formal;
! 
!   for (; f != NULL; f = f->next)
      {
        enum type_return rok;
        const char *intent_in;
diff -Nrcpad gcc-17-20260510/gcc/fortran/frontend-passes.cc gcc-17-20260517/gcc/fortran/frontend-passes.cc
*** gcc-17-20260510/gcc/fortran/frontend-passes.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/frontend-passes.cc	Sun May 17 22:32:06 2026
*************** check_against_globals (gfc_symbol *sym)
*** 5884,5889 ****
--- 5884,5892 ----
        || sym->attr.dummy)
      return;
  
+   if (sym->error)
+     return;
+ 
    if (sym->binding_label)
      sym_name = sym->binding_label;
    else if (sym->attr.use_rename
diff -Nrcpad gcc-17-20260510/gcc/fortran/gfortran.h gcc-17-20260517/gcc/fortran/gfortran.h
*** gcc-17-20260510/gcc/fortran/gfortran.h	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/gfortran.h	Sun May 17 22:32:06 2026
*************** void gfc_free_interface (gfc_interface *
*** 4133,4138 ****
--- 4133,4139 ----
  void gfc_drop_interface_elements_before (gfc_interface **, gfc_interface *);
  bool gfc_compare_derived_types (gfc_symbol *, gfc_symbol *);
  bool gfc_compare_types (gfc_typespec *, gfc_typespec *);
+ int gfc_symbol_rank (gfc_symbol *);
  bool gfc_check_dummy_characteristics (gfc_symbol *, gfc_symbol *,
  				      bool, char *, int);
  bool gfc_check_result_characteristics (gfc_symbol *, gfc_symbol *,
diff -Nrcpad gcc-17-20260510/gcc/fortran/gfortranspec.cc gcc-17-20260517/gcc/fortran/gfortranspec.cc
*** gcc-17-20260510/gcc/fortran/gfortranspec.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/gfortranspec.cc	Sun May 17 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 62,67 ****
--- 62,71 ----
  #define FORTRAN_LIBRARY "gfortran"
  #endif
  
+ #ifndef CAF_SHMEM_LIBRARY
+ #define CAF_SHMEM_LIBRARY "caf_shmem"
+ #endif
+ 
  /* Name of the spec file.  */
  #define SPEC_FILE "libgfortran.spec"
  
*************** lang_specific_driver (struct cl_decoded_
*** 205,210 ****
--- 209,217 ----
    /* Whether we need to link statically.  */
    int static_linking = 0;
  
+   /* Whether -fcoarray=shared was given; triggers auto-link of -lcaf_shmem.  */
+   int need_caf_shmem = 0;
+ 
    /* The number of input and output files in the incoming arg list.  */
    int n_infiles = 0;
    int n_outfiles = 0;
*************** lang_specific_driver (struct cl_decoded_
*** 272,277 ****
--- 279,289 ----
  	  ++n_outfiles;
  	  break;
  
+ 	case OPT_fcoarray_:
+ 	  if (decoded_options[i].value == GFC_FCOARRAY_SHARED)
+ 	    need_caf_shmem = 1;
+ 	  break;
+ 
  	case OPT_v:
  	  verbose = 1;
  	  break;
*************** warranty; not even for MERCHANTABILITY o
*** 349,354 ****
--- 361,376 ----
  	      saw_speclang = (strcmp (lang, "none") != 0);
  	    }
  
+ 	  /* -fcoarray=shared is a driver-level alias for -fcoarray=lib that
+ 	     also arranges for -lcaf_shmem to be linked automatically.  Pass
+ 	     -fcoarray=lib to cc1 so the frontend uses the library code path.  */
+ 	  if (decoded_options[i].opt_index == OPT_fcoarray_
+ 	      && decoded_options[i].value == GFC_FCOARRAY_SHARED)
+ 	    {
+ 	      append_option (OPT_fcoarray_, "lib", GFC_FCOARRAY_LIB);
+ 	      continue;
+ 	    }
+ 
  	  append_arg (&decoded_options[i]);
  
  	  continue;
*************** warranty; not even for MERCHANTABILITY o
*** 404,409 ****
--- 426,434 ----
  	default:
  	  break;
  	}
+ 
+       if (need_caf_shmem)
+ 	append_option (OPT_l, CAF_SHMEM_LIBRARY, 1);
      }
  
  #ifdef ENABLE_SHARED_LIBGCC
diff -Nrcpad gcc-17-20260510/gcc/fortran/interface.cc gcc-17-20260517/gcc/fortran/interface.cc
*** gcc-17-20260510/gcc/fortran/interface.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/interface.cc	Sun May 17 22:32:06 2026
*************** generic_correspondence (gfc_formal_argli
*** 1375,1382 ****
  }
  
  
! static int
! symbol_rank (gfc_symbol *sym)
  {
    gfc_array_spec *as = NULL;
  
--- 1375,1382 ----
  }
  
  
! int
! gfc_symbol_rank (gfc_symbol *sym)
  {
    gfc_array_spec *as = NULL;
  
*************** gfc_check_dummy_characteristics (gfc_sym
*** 1420,1426 ****
        if (!compare_rank (s1, s2))
  	{
  	  snprintf (errmsg, err_len, "Rank mismatch in argument '%s' (%i/%i)",
! 		    s1->name, symbol_rank (s1), symbol_rank (s2));
  	  return false;
  	}
      }
--- 1420,1426 ----
        if (!compare_rank (s1, s2))
  	{
  	  snprintf (errmsg, err_len, "Rank mismatch in argument '%s' (%i/%i)",
! 		    s1->name, gfc_symbol_rank (s1), gfc_symbol_rank (s2));
  	  return false;
  	}
      }
*************** gfc_check_result_characteristics (gfc_sy
*** 1667,1673 ****
    if (!compare_rank (r1, r2))
      {
        snprintf (errmsg, err_len, "Rank mismatch in function result (%i/%i)",
! 		symbol_rank (r1), symbol_rank (r2));
        return false;
      }
  
--- 1667,1673 ----
    if (!compare_rank (r1, r2))
      {
        snprintf (errmsg, err_len, "Rank mismatch in function result (%i/%i)",
! 		gfc_symbol_rank (r1), gfc_symbol_rank (r2));
        return false;
      }
  
*************** gfc_compare_interfaces (gfc_symbol *s1,
*** 1958,1964 ****
  		if (errmsg != NULL)
  		  snprintf (errmsg, err_len, "Rank mismatch in argument "
  			    "'%s' (%i/%i)", f1->sym->name,
! 			    symbol_rank (f1->sym), symbol_rank (f2->sym));
  		return false;
  	      }
  	    if ((gfc_option.allow_std & GFC_STD_F2008)
--- 1958,1964 ----
  		if (errmsg != NULL)
  		  snprintf (errmsg, err_len, "Rank mismatch in argument "
  			    "'%s' (%i/%i)", f1->sym->name,
! 			    gfc_symbol_rank (f1->sym), gfc_symbol_rank (f2->sym));
  		return false;
  	      }
  	    if ((gfc_option.allow_std & GFC_STD_F2008)
*************** compare_parameter (gfc_symbol *formal, g
*** 2477,2488 ****
  	return false;
  
        if (ranks_must_agree
! 	  && symbol_rank (formal) != actual->rank
! 	  && symbol_rank (formal) != -1)
  	{
  	  if (where)
  	    argument_rank_mismatch (formal->name, &actual->where,
! 				    symbol_rank (formal), actual->rank,
  				    NULL);
  	  return false;
  	}
--- 2477,2488 ----
  	return false;
  
        if (ranks_must_agree
! 	  && gfc_symbol_rank (formal) != actual->rank
! 	  && gfc_symbol_rank (formal) != -1)
  	{
  	  if (where)
  	    argument_rank_mismatch (formal->name, &actual->where,
! 				    gfc_symbol_rank (formal), actual->rank,
  				    NULL);
  	  return false;
  	}
*************** compare_parameter (gfc_symbol *formal, g
*** 2692,2698 ****
  
    /* TS29113 C407c; F2018 C711.  */
    if (actual->ts.type == BT_ASSUMED
!       && symbol_rank (formal) == -1
        && actual->rank != -1
        && !(actual->symtree->n.sym->as
  	   && actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE))
--- 2692,2698 ----
  
    /* TS29113 C407c; F2018 C711.  */
    if (actual->ts.type == BT_ASSUMED
!       && gfc_symbol_rank (formal) == -1
        && actual->rank != -1
        && !(actual->symtree->n.sym->as
  	   && actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE))
*************** compare_parameter (gfc_symbol *formal, g
*** 2871,2877 ****
      }
  
    /* If the rank is the same or the formal argument has assumed-rank.  */
!   if (symbol_rank (formal) == actual->rank || symbol_rank (formal) == -1)
      return true;
  
    rank_check = where != NULL && !is_elemental && formal_as
--- 2871,2877 ----
      }
  
    /* If the rank is the same or the formal argument has assumed-rank.  */
!   if (gfc_symbol_rank (formal) == actual->rank || gfc_symbol_rank (formal) == -1)
      return true;
  
    rank_check = where != NULL && !is_elemental && formal_as
*************** compare_parameter (gfc_symbol *formal, g
*** 2916,2922 ****
  	    where_formal = NULL;
  
  	  argument_rank_mismatch (formal->name, &actual->where,
! 				  symbol_rank (formal), actual->rank,
  				  where_formal);
  	}
        return false;
--- 2916,2922 ----
  	    where_formal = NULL;
  
  	  argument_rank_mismatch (formal->name, &actual->where,
! 				  gfc_symbol_rank (formal), actual->rank,
  				  where_formal);
  	}
        return false;
*************** compare_parameter (gfc_symbol *formal, g
*** 3019,3025 ****
  	    where_formal = NULL;
  
  	  argument_rank_mismatch (formal->name, &actual->where,
! 				  symbol_rank (formal), actual->rank,
  				  where_formal);
  	}
        return false;
--- 3019,3025 ----
  	    where_formal = NULL;
  
  	  argument_rank_mismatch (formal->name, &actual->where,
! 				  gfc_symbol_rank (formal), actual->rank,
  				  where_formal);
  	}
        return false;
*************** get_sym_storage_size (gfc_symbol *sym, b
*** 3052,3058 ****
    else
      strlen = 1;
  
!   if (symbol_rank (sym) == 0)
      {
        *size_known = true;
        return strlen;
--- 3052,3058 ----
    else
      strlen = 1;
  
!   if (gfc_symbol_rank (sym) == 0)
      {
        *size_known = true;
        return strlen;
*************** gfc_procedure_use (gfc_symbol *sym, gfc_
*** 4639,4645 ****
  
  	  /* TS 29113, C407b.  */
  	  if (a->expr && a->expr->expr_type == EXPR_VARIABLE
! 	      && symbol_rank (a->expr->symtree->n.sym) == -1)
  	    {
  	      gfc_error ("Assumed-rank argument requires an explicit interface "
  			 "at %L", &a->expr->where);
--- 4639,4645 ----
  
  	  /* TS 29113, C407b.  */
  	  if (a->expr && a->expr->expr_type == EXPR_VARIABLE
! 	      && gfc_symbol_rank (a->expr->symtree->n.sym) == -1)
  	    {
  	      gfc_error ("Assumed-rank argument requires an explicit interface "
  			 "at %L", &a->expr->where);
diff -Nrcpad gcc-17-20260510/gcc/fortran/intrinsic.texi gcc-17-20260517/gcc/fortran/intrinsic.texi
*** gcc-17-20260510/gcc/fortran/intrinsic.texi	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/intrinsic.texi	Sun May 17 22:32:06 2026
*************** kind @code{omp_lock_hint_kind}:
*** 16339,16350 ****
  @item @code{omp_sync_hint_speculative}
  @end table
  
! And the following two scalar integer named constants are of the
  kind @code{omp_pause_resource_kind}:
  
  @table @asis
  @item @code{omp_pause_soft}
  @item @code{omp_pause_hard}
  @end table
  
  The following scalar integer named constants are of the kind
--- 16339,16351 ----
  @item @code{omp_sync_hint_speculative}
  @end table
  
! And the following three scalar integer named constants are of the
  kind @code{omp_pause_resource_kind}:
  
  @table @asis
  @item @code{omp_pause_soft}
  @item @code{omp_pause_hard}
+ @item @code{omp_pause_tool}
  @end table
  
  The following scalar integer named constants are of the kind
*************** The following scalar integer named const
*** 16413,16418 ****
--- 16414,16440 ----
  @item @code{omp_low_lat_mem_space}
  @end table
  
+ The following scalar integer named constants are of the kind
+ @code{omp_control_tool_kind}:
+ 
+ @table @asis
+ @item @code{omp_control_tool_start}
+ @item @code{omp_control_tool_pause}
+ @item @code{omp_control_tool_flush}
+ @item @code{omp_control_tool_end}
+ @item @code{omp_control_tool_max}
+ @end table
+ 
+ The following scalar integer named constants are of the kind
+ @code{omp_control_tool_result_kind}:
+ 
+ @table @asis
+ @item @code{omp_control_tool_notool}
+ @item @code{omp_control_tool_nocallback}
+ @item @code{omp_control_tool_success}
+ @item @code{omp_control_tool_ignored}
+ @end table
+ 
  
  
  @node OpenACC Module OPENACC
diff -Nrcpad gcc-17-20260510/gcc/fortran/lang.opt gcc-17-20260517/gcc/fortran/lang.opt
*** gcc-17-20260510/gcc/fortran/lang.opt	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/lang.opt	Sun May 17 22:32:06 2026
*************** Experimental unsigned numbers.
*** 833,839 ****
  
  fcoarray=
  Fortran RejectNegative Joined Enum(gfc_fcoarray) Var(flag_coarray) Init(GFC_FCOARRAY_NONE)
! -fcoarray=<none|single|lib>	Specify which coarray parallelization should be used.
  
  Enum
  Name(gfc_fcoarray) Type(enum gfc_fcoarray) UnknownError(Unrecognized option: %qs)
--- 833,839 ----
  
  fcoarray=
  Fortran RejectNegative Joined Enum(gfc_fcoarray) Var(flag_coarray) Init(GFC_FCOARRAY_NONE)
! -fcoarray=<none|single|lib|shared>	Specify which coarray parallelization should be used.
  
  Enum
  Name(gfc_fcoarray) Type(enum gfc_fcoarray) UnknownError(Unrecognized option: %qs)
*************** Enum(gfc_fcoarray) String(single) Value(
*** 847,852 ****
--- 847,855 ----
  EnumValue
  Enum(gfc_fcoarray) String(lib) Value(GFC_FCOARRAY_LIB)
  
+ EnumValue
+ Enum(gfc_fcoarray) String(shared) Value(GFC_FCOARRAY_SHARED)
+ 
  fcheck=
  Fortran RejectNegative JoinedOrMissing
  -fcheck=[...]	Specify which runtime checks are to be performed.
diff -Nrcpad gcc-17-20260510/gcc/fortran/resolve.cc gcc-17-20260517/gcc/fortran/resolve.cc
*** gcc-17-20260510/gcc/fortran/resolve.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/resolve.cc	Sun May 17 22:32:06 2026
*************** gfc_verify_DTIO_procedures (gfc_symbol *
*** 14903,14908 ****
--- 14903,15036 ----
    return;
  }
  
+ /* Auxiliary function, checks if an argument decays to a pointer.  */
+ 
+ static bool
+ decays_to_pointer (gfc_symbol *sym)
+ {
+   if (!sym->as)
+     return true;
+ 
+   if (sym->as->type == AS_ASSUMED_SHAPE)
+     return false;
+ 
+   if (sym->as->type == AS_ASSUMED_RANK)
+     return false;
+ 
+   if (sym->as->type == AS_DEFERRED && sym->attr.dummy)
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Helper function, returns true if the types conform according to the C
+    standard, when they are not equal on the Fortran side.  If we decide to
+    include or exclude any types from this, this is the place to change.  */
+ 
+ static bool
+ c_types_conform (gfc_typespec *ts1, gfc_typespec *ts2)
+ {
+   if (ts1->type == BT_ASSUMED || ts2->type == BT_ASSUMED)
+     return true;
+ 
+   if (ts1->kind == ts2->kind
+       && (ts1->type == BT_CHARACTER || ts1->type == BT_INTEGER
+ 	  || ts1->type == BT_UNSIGNED)
+       && (ts2->type == BT_CHARACTER || ts2->type == BT_INTEGER
+ 	  || ts2->type == BT_UNSIGNED))
+     return true;
+ 
+   return false;
+ 
+ }
+ 
+ /* Check argument lists of BIND(C) procedures against each other, return
+    false if they do not. */
+ 
+ static bool
+ compare_c_binding_arglists (gfc_symbol *osym, gfc_symbol *nsym)
+ {
+   gfc_formal_arglist *oarg, *narg;
+   bool ret = true;
+   locus *oloc, *nloc;
+ 
+   oarg = osym->formal;
+   narg = nsym->formal;
+   oloc = &osym->declared_at;
+   nloc = &nsym->declared_at;
+   for ( ; oarg && narg ; oarg = oarg->next, narg = narg->next)
+     {
+       oloc = &oarg->sym->declared_at;
+       nloc = &narg->sym->declared_at;
+ 
+       if (!gfc_compare_types (&oarg->sym->ts, &narg->sym->ts)
+ 	  && (pedantic || !c_types_conform (&oarg->sym->ts, &narg->sym->ts)))
+ 	{
+ 	  gfc_error ("Type mismatch in argument %qs at %L (%s/%s) "
+ 		     "originally declared at %L", narg->sym->name,
+ 		     nloc, gfc_typename (&narg->sym->ts),
+ 		     gfc_typename (&oarg->sym->ts), oloc);
+ 		     ret = false;
+ 		     continue;
+ 	}
+       if (oarg->sym->attr.value != narg->sym->attr.value)
+ 	{
+ 	  gfc_error ("VALUE attribute mismatch in argument %qs at %L "
+ 		     "originally declared at %L",narg->sym->name,
+ 		     nloc, oloc);
+ 	  ret = false;
+ 	  continue;
+ 	}
+ 
+       /* According to the Fortran standard, ranks have to match for arguments.
+ 	 In this case, this makes little sense because both decay to C
+ 	 pointers.  Only issue an error if -pedantic or if the argument does
+ 	 not decay to a pointer.  Same thing for CFI_desc arrays, which include
+ 	 assumed rank.  */
+ 
+       int orank = gfc_symbol_rank (oarg->sym);
+       int nrank = gfc_symbol_rank (narg->sym);
+       if (orank != nrank && pedantic)
+ 	{
+ 	  gfc_error ("Rank mismatch in argument %qs (%d/%d) at %L originally "
+ 		     "declared at %L", narg->sym->name, nrank, orank,  nloc,
+ 		     oloc);
+ 	  ret = false;
+ 	  continue;
+ 	}
+ 
+       /* Confusion between CFI_desc and "normal" arrays.  */
+ 
+       if (decays_to_pointer (oarg->sym) != decays_to_pointer (narg->sym))
+ 	{
+ 	  gfc_error ("Array specification mismatch in argument %qs at %L "
+ 		     "originally declared at %L", narg->sym->name,
+ 		     nloc, oloc);
+ 	  ret = false;
+ 	  continue;
+ 	}
+     }
+ 
+   if (oarg && !narg)
+     {
+       gfc_error ("Not enough arguments for procedure %qs with binding label "
+ 		 "%qs after %L, originally declared at %L", nsym->name,
+ 		 nsym->binding_label, nloc, &oarg->sym->declared_at);
+       ret = false;
+     }
+ 
+   if (!oarg && narg)
+     {
+       gfc_error ("Too many arguments for procedure %qs with binding label "
+ 		 "%qs at %L, originally declared at %L", nsym->name,
+ 		 nsym->binding_label, &narg->sym->declared_at, oloc);
+       ret = false;
+     }
+ 
+   return ret;
+ }
+ 
+ 
  /* Verify that any binding labels used in a given namespace do not collide
     with the names or binding labels of any global symbols.  Multiple INTERFACE
     for the same procedure are permitted.  Abstract interfaces and dummy
*************** gfc_verify_binding_labels (gfc_symbol *s
*** 14919,14925 ****
        || sym->attr.abstract || sym->attr.dummy)
      return;
  
!   gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
  
    if (sym->module)
      module = sym->module;
--- 15047,15070 ----
        || sym->attr.abstract || sym->attr.dummy)
      return;
  
!   /* Avoid double error reporting.  */
!   if (sym->error)
!     return;
! 
!   /* TODO: Check the names of reserved external C identifiers here, see
!      PR 125251.  */
! 
!   /* According to the Fortran standard, global identifiers are case
!      insensitive, which also holds for C identifiers.  This was probably done
!      for systems which had case-insensitive linkers.  Such systems could not
!      accomodate the C standards referenced, so this restriction makes little
!      sense for modern systems. Therefore, check case-sensitive labels unless
!      -pedantic is in force.  */
! 
!   if (pedantic)
!     gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
!   else
!     gsym = gfc_find_gsymbol (gfc_gsym_root, sym->binding_label);
  
    if (sym->module)
      module = sym->module;
*************** gfc_verify_binding_labels (gfc_symbol *s
*** 14933,14938 ****
--- 15078,15125 ----
    else
      module = NULL;
  
+   if (gsym)
+     {
+       if (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)
+ 	{
+ 	  gfc_symbol *global_sym;
+ 	  gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &global_sym);
+ 	  gcc_assert (global_sym);
+ 
+ 	  /* If subroutines and functions are conflated, there is little point
+ 	     in continuing checks.  */
+ 	  if ((sym->attr.function && gsym->type == GSYM_SUBROUTINE)
+ 	      || (sym->attr.subroutine && gsym->type == GSYM_FUNCTION))
+ 	    {
+ 	      gfc_global_used (gsym, &sym->declared_at);
+ 	      sym->binding_label = NULL;
+ 	      sym->error = 1;
+ 	      return;
+ 	    }
+ 
+ 	  if (gsym->type == GSYM_FUNCTION && sym->attr.function
+ 	      && !gfc_compare_types (&sym->ts, &global_sym->ts))
+ 	    {
+ 	      gfc_error ("Return type mismatch of function %qs with binding "
+ 			 "label %qs at %L (%s/%s), originally declared at %L",
+ 			 sym->name, sym->binding_label,
+ 			 &sym->declared_at,
+ 			 gfc_typename (&sym->ts),
+ 			 gfc_typename (&global_sym->ts),
+ 			 &gsym->where);
+ 	      sym->binding_label = NULL;
+ 	      sym->error = 1;
+ 	      return;
+ 	    }
+ 	  if (!compare_c_binding_arglists (global_sym, sym))
+ 	    {
+ 	      sym->binding_label = NULL;
+ 	      sym->error = 1;
+ 	      return;
+ 	    }
+ 	}
+     }
+ 
    if (!gsym
        || (!gsym->defined
  	  && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
*************** gfc_verify_binding_labels (gfc_symbol *s
*** 14992,14997 ****
--- 15179,15185 ----
  		 "global identifier as entity at %L", sym->name,
  		 sym->binding_label, &sym->declared_at, &gsym->where);
        sym->binding_label = NULL;
+       return;
      }
  }
  
diff -Nrcpad gcc-17-20260510/gcc/fortran/trans-openmp.cc gcc-17-20260517/gcc/fortran/trans-openmp.cc
*** gcc-17-20260510/gcc/fortran/trans-openmp.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/fortran/trans-openmp.cc	Sun May 17 22:32:06 2026
*************** gfc_omp_deep_mapping_int_p (const gimple
*** 2475,2482 ****
    return decl;
  }
  
! /* Return true if there is deep mapping, even if the number of mapping is known
!    at compile time. */
  bool
  gfc_omp_deep_mapping_p (const gimple *ctx, tree clause)
  {
--- 2475,2485 ----
    return decl;
  }
  
! /* Return true if there is any deep mapping required, even if the number of
!    mappings is known at compile time.  Deep mapping is required if the passed
!    CLAUSE is a map clause and its OMP_CLAUSE_DECL refers to a derived-type with
!    allocatable components. CTX is the statement that contains the CLAUSE.  */
! 
  bool
  gfc_omp_deep_mapping_p (const gimple *ctx, tree clause)
  {
*************** gfc_omp_deep_mapping_do (bool is_cnt, co
*** 2622,2629 ****
    return num;
  }
  
! /* Return tree with a variable which contains the count of deep-mappyings
!    (value depends, e.g., on allocation status)  */
  tree
  gfc_omp_deep_mapping_cnt (const gimple *ctx, tree clause, gimple_seq *seq)
  {
--- 2625,2638 ----
    return num;
  }
  
! /* Returns NULL_TREE if known that no deep mapping is required for the passed
!    'map' CLAUSE, otherwise returns a size_type expression with the number of
!    required data-mapping operations, which may be zero.  Deep mapping is
!    required for allocatable components of derived types; the number of mapping
!    operations depends on the allocation status, array sizes and the dynamic
!    type.  CTX is the gimple statement that contains the map CLAUSE; the
!    gimple code used for counting is added to SEQ.  */
! 
  tree
  gfc_omp_deep_mapping_cnt (const gimple *ctx, tree clause, gimple_seq *seq)
  {
*************** gfc_omp_deep_mapping_cnt (const gimple *
*** 2631,2637 ****
  				  NULL_TREE, NULL_TREE, NULL_TREE, seq);
  }
  
! /* Does the actual deep mapping. */
  void
  gfc_omp_deep_mapping (const gimple *ctx, tree clause,
  		      unsigned HOST_WIDE_INT tkind, tree data,
--- 2640,2655 ----
  				  NULL_TREE, NULL_TREE, NULL_TREE, seq);
  }
  
! /* Handle the deep mapping for the passed map CLAUSE that is part of
!    the gimple statement CTX by walking all allocated allocatable components
!    and its allocatable components to add additional data-mapping operations.
!    TKIND is the map-type/kind to be used. The generated code is added to
!    SEQ – and the actual struct-field address used for mapping, the map size,
!    and kind value to the arrays DATA, SIZES, and KINDS, respectively.
!    OFFSET_DATA and OFFSET are size-type variables; the map operatations are
!    added at array index OFFSET_DATA for DATA and at array index OFFSET for
!    SIZES/KINDS, incrementing the offsets after each assignment.  */
! 
  void
  gfc_omp_deep_mapping (const gimple *ctx, tree clause,
  		      unsigned HOST_WIDE_INT tkind, tree data,
diff -Nrcpad gcc-17-20260510/gcc/function-abi.cc gcc-17-20260517/gcc/function-abi.cc
*** gcc-17-20260510/gcc/function-abi.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/function-abi.cc	Sun May 17 22:32:06 2026
*************** caller_save_regs (const function_abi &ca
*** 159,165 ****
  	 clobbers for (e.g. taking -fipa-ra into account).  */
        result |= (extra_clobbers & m_abi_clobbers[abi_id]);
      }
!   return result;
  }
  
  /* Return the set of registers that cannot be used to hold a value of
--- 159,168 ----
  	 clobbers for (e.g. taking -fipa-ra into account).  */
        result |= (extra_clobbers & m_abi_clobbers[abi_id]);
      }
! 
!   /* The caller can save a register only if the register is enabled in
!      the caller.  */
!   return result & accessible_reg_set;
  }
  
  /* Return the set of registers that cannot be used to hold a value of
diff -Nrcpad gcc-17-20260510/gcc/genmatch.cc gcc-17-20260517/gcc/genmatch.cc
*** gcc-17-20260510/gcc/genmatch.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/genmatch.cc	Sun May 17 22:32:06 2026
*************** commutative_op (id_base *id, bool compar
*** 1268,1273 ****
--- 1268,1274 ----
        case CFN_FNMS:
        case CFN_ADD_OVERFLOW:
        case CFN_MUL_OVERFLOW:
+       case CFN_SAT_ADD:
  	return 0;
  
        case CFN_COND_ADD:
diff -Nrcpad gcc-17-20260510/gcc/gimple-warn-recursion.cc gcc-17-20260517/gcc/gimple-warn-recursion.cc
*** gcc-17-20260510/gcc/gimple-warn-recursion.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/gimple-warn-recursion.cc	Sun May 17 22:32:06 2026
*************** pass_warn_recursion::pass_warn_recursion
*** 82,162 ****
     there is no (recursive) call to M_FUNC.  */
  
  bool
! pass_warn_recursion::find_function_exit (basic_block bb)
  {
!   if (!bitmap_set_bit (m_visited, bb->index))
!     return false;
! 
!   if (bb == EXIT_BLOCK_PTR_FOR_FN (m_func))
!     return true;
  
!   /* Iterate over statements in BB, looking for a call to FNDECL.  */
!   for (auto si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next_nondebug (&si))
      {
!       gimple *stmt = gsi_stmt (si);
!       if (!is_gimple_call (stmt))
  	continue;
  
!       if (gimple_call_builtin_p (stmt, BUILT_IN_LONGJMP))
! 	/* A longjmp breaks infinite recursion.  */
  	return true;
  
!       if (tree fndecl = gimple_call_fndecl (stmt))
  	{
! 	  /* A throw statement breaks infinite recursion.  */
! 	  tree id = DECL_NAME (fndecl);
! 	  const char *name = IDENTIFIER_POINTER (id);
! 	  if (startswith (name, "__cxa_throw"))
! 	    return true;
! 	  /* As does a call to POSIX siglongjmp.  */
! 	  if (!strcmp (name, "siglongjmp"))
  	    return true;
  
! 	  if (m_built_in
! 	      && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)
! 	      && m_built_in == DECL_FUNCTION_CODE (fndecl))
  	    {
! 	      const char *cname
! 		= IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
! 	      /* Don't warn about gnu_inline extern inline function
! 		 like strcpy calling __builtin_strcpy, that is fine,
! 		 if some call is made (the builtin isn't expanded inline),
! 		 a call is made to the external definition.  */
! 	      if (!(DECL_DECLARED_INLINE_P (current_function_decl)
! 		    && DECL_EXTERNAL (current_function_decl))
! 		  || strcmp (name, cname) == 0)
  		{
! 		  /* The call is being made from the definition of a built-in
! 		     (e.g., in a replacement of one) to itself.  */
! 		  m_calls->safe_push (stmt);
! 		  return false;
  		}
  	    }
- 	}
  
!       if (noreturn_p)
! 	{
! 	  /* A noreturn call breaks infinite recursion.  */
! 	  int flags = gimple_call_flags (stmt);
! 	  if (flags & ECF_NORETURN)
! 	    return true;
  	}
  
!       tree callee = gimple_call_fndecl (stmt);
!       if (!callee || m_func->decl != callee)
! 	continue;
  
!       /* Add the recursive call to the vector and return false.  */
!       m_calls->safe_push (stmt);
!       return false;
!     }
  
!   /* If no call to FNDECL has been found search all BB's successors.  */
!   edge e;
!   edge_iterator ei;
!   FOR_EACH_EDGE (e, ei, bb->succs)
!     if (find_function_exit (e->dest))
!       return true;
  
    return false;
  }
--- 82,180 ----
     there is no (recursive) call to M_FUNC.  */
  
  bool
! pass_warn_recursion::find_function_exit (basic_block bb_start)
  {
!   /* work item list of BB's, presized with average size.  */
!   auto_vec<basic_block, 3> worklist;
!   worklist.safe_push (bb_start);
  
!   while (!worklist.is_empty ())
      {
!       const auto &bb = worklist.pop ();
!       bool nextBB = false;
!       if (!bitmap_set_bit (m_visited, bb->index))
  	continue;
  
!       if (bb == EXIT_BLOCK_PTR_FOR_FN (m_func))
  	return true;
  
!       /* Iterate over statements in BB, looking for a call to FNDECL.  */
!       for (auto si = gsi_start_bb (bb); !gsi_end_p (si);
! 	   gsi_next_nondebug (&si))
  	{
! 	  gimple *stmt = gsi_stmt (si);
! 	  if (!is_gimple_call (stmt))
! 	    continue;
! 
! 	  if (gimple_call_builtin_p (stmt, BUILT_IN_LONGJMP))
! 	    /* A longjmp breaks infinite recursion.  */
  	    return true;
  
! 	  if (tree fndecl = gimple_call_fndecl (stmt))
  	    {
! 	      /* A throw statement breaks infinite recursion.  */
! 	      tree id = DECL_NAME (fndecl);
! 	      const char *name = IDENTIFIER_POINTER (id);
! 	      if (startswith (name, "__cxa_throw"))
! 		return true;
! 	      /* As does a call to POSIX siglongjmp.  */
! 	      if (!strcmp (name, "siglongjmp"))
! 		return true;
! 
! 	      if (m_built_in
! 		  && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)
! 		  && m_built_in == DECL_FUNCTION_CODE (fndecl))
  		{
! 		  const char *cname
! 		    = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
! 		  /* Don't warn about gnu_inline extern inline function
! 		       like strcpy calling __builtin_strcpy, that is fine,
! 		       if some call is made (the builtin isn't expanded inline),
! 		       a call is made to the external definition.  */
! 		  if (!(DECL_DECLARED_INLINE_P (current_function_decl)
! 		      && DECL_EXTERNAL (current_function_decl))
! 		      || strcmp (name, cname) == 0)
! 		    {
! 		      /* The call is being made from the definition of a
! 			   built-in (e.g., in a replacement of one) to itself.
! 		       */
! 		      m_calls->safe_push (stmt);
! 		      nextBB = true;
! 		      break;
! 		    }
  		}
  	    }
  
! 	  if (noreturn_p)
! 	    {
! 	      /* A noreturn call breaks infinite recursion.  */
! 	      int flags = gimple_call_flags (stmt);
! 	      if (flags & ECF_NORETURN)
! 		return true;
! 	    }
! 
! 	  tree callee = gimple_call_fndecl (stmt);
! 	  if (!callee || m_func->decl != callee)
! 	    continue;
! 
! 	  /* Add the recursive call to the vector and return false.  */
! 	  m_calls->safe_push (stmt);
! 	  nextBB = true;
! 	  break;
  	}
+ 	if (nextBB)
+ 	  continue;
  
! 	/* If no call to FNDECL has been found search all BB's successors.  */
! 	/* Add more BB's to check for on demand.  */
! 	edge e;
! 	edge_iterator ei;
  
! 	FOR_EACH_EDGE (e, ei, bb->succs)
! 	  if (!bitmap_bit_p (m_visited, e->dest->index))
! 	    worklist.safe_push (e->dest);
  
!     }
  
    return false;
  }
diff -Nrcpad gcc-17-20260510/gcc/gimplify.cc gcc-17-20260517/gcc/gimplify.cc
*** gcc-17-20260510/gcc/gimplify.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/gimplify.cc	Sun May 17 22:32:06 2026
*************** gimplify_init_constructor (tree *expr_p,
*** 6460,6466 ****
  	struct gimplify_init_ctor_preeval_data preeval_data;
  	HOST_WIDE_INT num_ctor_elements, num_nonzero_elements;
  	HOST_WIDE_INT num_unique_nonzero_elements;
! 	int complete_p;
  	bool valid_const_initializer;
  
  	/* Aggregate types must lower constructors to initialization of
--- 6460,6466 ----
  	struct gimplify_init_ctor_preeval_data preeval_data;
  	HOST_WIDE_INT num_ctor_elements, num_nonzero_elements;
  	HOST_WIDE_INT num_unique_nonzero_elements;
! 	ctor_completeness complete_p;
  	bool valid_const_initializer;
  
  	/* Aggregate types must lower constructors to initialization of
*************** gimplify_init_constructor (tree *expr_p,
*** 6545,6551 ****
  	     objects.  Initializers for such objects must explicitly set
  	     every field that needs to be set.  */
  	  cleared = false;
! 	else if (!complete_p)
  	  /* If the constructor isn't complete, clear the whole object
  	     beforehand, unless CONSTRUCTOR_NO_CLEARING is set on it.
  
--- 6545,6551 ----
  	     objects.  Initializers for such objects must explicitly set
  	     every field that needs to be set.  */
  	  cleared = false;
! 	else if (complete_p.sparse)
  	  /* If the constructor isn't complete, clear the whole object
  	     beforehand, unless CONSTRUCTOR_NO_CLEARING is set on it.
  
*************** gimplify_init_constructor (tree *expr_p,
*** 6570,6576 ****
  	   That will avoid wasting cycles preserving any padding bits
  	   that might be there, and if there aren't any, the compiler
  	   is smart enough to optimize the clearing out.  */
! 	else if (complete_p <= 0
  		 && !TREE_ADDRESSABLE (ctor)
  		 && !TREE_THIS_VOLATILE (object)
  		 && (TYPE_MODE (type) != BLKmode || TYPE_NO_FORCE_BLK (type))
--- 6570,6577 ----
  	   That will avoid wasting cycles preserving any padding bits
  	   that might be there, and if there aren't any, the compiler
  	   is smart enough to optimize the clearing out.  */
! 	else if ((complete_p.sparse || complete_p.padded_union
! 		  || complete_p.padded_non_union)
  		 && !TREE_ADDRESSABLE (ctor)
  		 && !TREE_THIS_VOLATILE (object)
  		 && (TYPE_MODE (type) != BLKmode || TYPE_NO_FORCE_BLK (type))
*************** gimplify_init_constructor (tree *expr_p,
*** 6589,6595 ****
  	   clearing), and don't try to make bitwise copies of
  	   TREE_ADDRESSABLE types.  */
  	if (valid_const_initializer
! 	    && complete_p
  	    && !(cleared || num_nonzero_elements == 0)
  	    && !TREE_ADDRESSABLE (type))
  	  {
--- 6590,6596 ----
  	   clearing), and don't try to make bitwise copies of
  	   TREE_ADDRESSABLE types.  */
  	if (valid_const_initializer
! 	    && !complete_p.sparse
  	    && !(cleared || num_nonzero_elements == 0)
  	    && !TREE_ADDRESSABLE (type))
  	  {
*************** gimplify_init_constructor (tree *expr_p,
*** 6644,6649 ****
--- 6645,6668 ----
  	      }
  	  }
  
+ 	if (!cleared)
+ 	  {
+ 	    if (complete_p.padded_non_union
+ 		&& warn_zero_init_padding_bits >= ZERO_INIT_PADDING_BITS_ALL)
+ 		warning (OPT_Wzero_init_padding_bits_,
+ 			 "padding might not be initialized to zero; "
+ 			 "if code relies on it being zero, consider "
+ 			 "using %<-fzero-init-padding-bits=all%>");
+ 	    else if (complete_p.padded_union
+ 		     && warn_zero_init_padding_bits
+ 			>= ZERO_INIT_PADDING_BITS_UNIONS)
+ 		warning (OPT_Wzero_init_padding_bits_,
+ 			 "padding might not be initialized to zero; "
+ 			 "if code relies on it being zero, consider "
+ 			 "using %<-fzero-init-padding-bits=unions%> "
+ 			 "or %<-fzero-init-padding-bits=all%>");
+ 	  }
+ 
  	/* If a single access to the target must be ensured and there are
  	   nonzero elements or the zero elements are not assigned en masse,
  	   initialize the target from a temporary.  */
diff -Nrcpad gcc-17-20260510/gcc/ipa-icf-gimple.cc gcc-17-20260517/gcc/ipa-icf-gimple.cc
*** gcc-17-20260510/gcc/ipa-icf-gimple.cc	Sun May 10 22:32:06 2026
--- gcc-17-20260517/gcc/ipa-icf-gimple.cc	Sun May 17 22:32:06 2026
*************** func_checker::compare_gimple_switch (con
*** 931,947 ****
        if (!tree_int_cst_equal (high1, high2))
  	return return_false_with_msg ("case high values are different");
  
!       if (TREE_CODE (label1) == CASE_LABEL_EXPR
! 	  && TREE_CODE (label2) == CASE_LABEL_EXPR)
! 	{
! 	  label1 = CASE_LABEL (label1);
! 	  label2 = CASE_LABEL (label2);
! 
! 	  if (!compare_operand (label1, label2, OP_NORMAL))
! 	    return return_false_with_msg ("switch label_exprs are different");
! 	}
!       else if (!tree_int_cst_equal (label1, label2))
! 	return return_false_with_msg ("switch labels are different");
      }
  
    return true;
--- 931,938 ----
        if (!tree_int_cst_equal (high1, high2))
  	return return_false_with_msg ("case high values are different");
  
!       if (!compare_operand (CASE_LABEL (label1), CASE_LABEL (label2), OP_NORMAL))
! 	return return_false_with_msg ("switch label_exprs are different");
      }
  
    return true;
diff -Nrcpad gcc-17-20260510/gcc/langhooks.cc gcc-17-20260517/gcc/langhooks.cc
*** gcc-17-20260510/gcc/langhooks.cc	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/langhooks.cc	Sun May 17 22:32:06 2026
*************** lhd_omp_array_size (tree, gimple_seq *)
*** 646,652 ****
    return NULL_TREE;
  }
  
! /* Returns true when additional mappings for a decl are needed.  */
  
  bool
  lhd_omp_deep_mapping_p (const gimple *, tree)
--- 646,653 ----
    return NULL_TREE;
  }
  
! /* Return false, implying that no additional data-mapping operations
!    are required for the tree containing a map clause.  */
  
  bool
  lhd_omp_deep_mapping_p (const gimple *, tree)
*************** lhd_omp_deep_mapping_p (const gimple *,
*** 654,660 ****
    return false;
  }
  
! /* Returns number of additional mappings for a decl.  */
  
  tree
  lhd_omp_deep_mapping_cnt (const gimple *, tree, gimple_seq *)
--- 655,662 ----
    return false;
  }
  
! /* Return NULL_TREE, implying that no additional data-mapping operations
!    are required for the tree containing a map clause.  */
  
  tree
  lhd_omp_deep_mapping_cnt (const gimple *, tree, gimple_seq *)
*************** lhd_omp_deep_mapping_cnt (const gimple *
*** 662,668 ****
    return NULL_TREE;
  }
  
! /* Do the additional mappings.  */
  
  void
  lhd_omp_deep_mapping (const gimple *, tree, unsigned HOST_WIDE_INT, tree, tree,
--- 664,671 ----
    return NULL_TREE;
  }
  
! /* Do nothing as no additional data-mapping operations
!    are required for the second argument that contains a map clause.  */
  
  void
  lhd_omp_deep_mapping (const gimple *, tree, unsigned HOST_WIDE_INT, tree, tree,
diff -Nrcpad gcc-17-20260510/gcc/langhooks.h gcc-17-20260517/gcc/langhooks.h
*** gcc-17-20260510/gcc/langhooks.h	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/langhooks.h	Sun May 17 22:32:06 2026
*************** struct lang_hooks_for_decls
*** 313,328 ****
    /* Do language specific checking on an implicitly determined clause.  */
    void (*omp_finish_clause) (tree clause, gimple_seq *pre_p, bool);
  
!   /* Additional language-specific mappings for a decl; returns true
!      if those may occur.  */
    bool (*omp_deep_mapping_p) (const gimple *ctx_stmt, tree clause);
  
!   /* Additional language-specific mappings for a decl; returns the
!      number of additional mappings needed.  */
    tree (*omp_deep_mapping_cnt) (const gimple *ctx_stmt, tree clause,
  				gimple_seq *seq);
  
!   /* Do the actual additional language-specific mappings for a decl. */
    void (*omp_deep_mapping) (const gimple *stmt, tree clause,
  			    unsigned HOST_WIDE_INT tkind,
  			    tree data, tree sizes, tree kinds,
--- 313,337 ----
    /* Do language specific checking on an implicitly determined clause.  */
    void (*omp_finish_clause) (tree clause, gimple_seq *pre_p, bool);
  
!   /* Return true if for the passed OpenMP 'map' CLAUSE, additional data-mapping
!      is required; CTX_STMT is the gimple statement containing the clause.
!      Otherwise, false is returned.  */
    bool (*omp_deep_mapping_p) (const gimple *ctx_stmt, tree clause);
  
!   /* Return the number of additional data-mappings required for the passed
!      'map' CLAUSE; CTX_STMT is the gimple statement containing the clause.
!      It is NULL_TREE if known that no such mapping are required and otherwise
!      of type size_type_node and usually non-constant.  */
    tree (*omp_deep_mapping_cnt) (const gimple *ctx_stmt, tree clause,
  				gimple_seq *seq);
  
!   /* If no additional data-mapping is required for the passed 'map' CLAUSE that
!      is part of the CTX_SMT gimple statement, the function has no effect.
!      Otherwise, DATA refers to a void-pointer array containing the address values
!      of the mapping while SIZE and KINDS are arrays for the to-be mapped size and
!      the map kind; OFFSET_DATA and OFFSET are size_type_node variable that refer
!      to the array index of DATA and SIZE/KIND, respectively and are incremented
!      whenever an element is added. New gimple code is added to SEQ.  */
    void (*omp_deep_mapping) (const gimple *stmt, tree clause,
  			    unsigned HOST_WIDE_INT tkind,
  			    tree data, tree sizes, tree kinds,
diff -Nrcpad gcc-17-20260510/gcc/match-sat-alu.pd gcc-17-20260517/gcc/match-sat-alu.pd
*** gcc-17-20260510/gcc/match-sat-alu.pd	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/match-sat-alu.pd	Sun May 17 22:32:06 2026
***************
*** 0 ****
--- 1,566 ----
+ /* Match-and-simplify Saturation ALU patterns for shared GENERIC and GIMPLE
+    folding,  included by match.pd for clear organizational structure.
+    This file is consumed by genmatch which produces gimple-match.cc
+    and generic-match.cc from it.
+ 
+    Copyright (C) 2014-2026 Free Software Foundation, Inc.
+    Contributed by Pan Li <pan2.li@intel.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ 
+ /* Saturation add for unsigned integer.  */
+ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
+  (match (usadd_overflow_mask @0 @1)
+   /* SAT_U_ADD = (X + Y) | -(X > (X + Y)).
+      Overflow_Mask = -(X > (X + Y)).  */
+   (negate (convert (gt @0 (plus:c @0 @1))))
+   (if (types_match (type, @0, @1))))
+  (match (usadd_overflow_mask @0 @1)
+   /* SAT_U_ADD = (X + Y) | -(X > (X + Y)).
+      Overflow_Mask = -((X + Y) < X).  */
+   (negate (convert (lt (plus:c @0 @1) @0)))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SAT_U_ADD = (X + Y) | Overflow_Mask  */
+   (bit_ior:c (plus:c @0 @1) (usadd_overflow_mask @0 @1))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SAT_U_ADD = (X + Y) >= X ? (X + Y) : -1  */
+   (cond^ (ge (plus:c@2 @0 @1) @0) @2 integer_minus_onep)
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SAT_U_ADD = (X + Y) < X ? -1 : (X + Y)  */
+   (cond^ (lt (plus:c@2 @0 @1) @0) integer_minus_onep @2)
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SAT_U_ADD = X <= (X + Y) ? (X + Y) : -1  */
+   (cond^ (le @0 (plus:c@2 @0 @1)) @2 integer_minus_onep)
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SAT_U_ADD = X > (X + Y) ? -1 : (X + Y)  */
+   (cond^ (gt @0 (plus:c@2 @0 @1)) integer_minus_onep @2)
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SAT_U_ADD = (X + IMM) >= x ? (X + IMM) : -1  */
+   (plus (min @0 INTEGER_CST@2) INTEGER_CST@1)
+   (if (types_match (type, @0, @1))
+    (with
+     {
+      unsigned precision = TYPE_PRECISION (type);
+      wide_int cst_1 = wi::to_wide (@1);
+      wide_int cst_2 = wi::to_wide (@2);
+      wide_int max = wi::mask (precision, false, precision);
+      wide_int sum = wi::add (cst_1, cst_2);
+     }
+     (if (wi::eq_p (max, sum))))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SUM = ADD_OVERFLOW (X, Y)
+      SAT_U_ADD = REALPART (SUM) | -IMAGPART (SUM)   */
+   (bit_ior:c (realpart (IFN_ADD_OVERFLOW@2 @0 @1)) (negate (imagpart @2)))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SUM = ADD_OVERFLOW (X, Y)
+      SAT_U_ADD = REALPART (SUM) | -(IMAGPART (SUM) != 0)   */
+   (bit_ior:c (realpart (IFN_ADD_OVERFLOW@2 @0 @1))
+ 	     (negate (convert (ne (imagpart @2) integer_zerop))))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SUM = ADD_OVERFLOW (X, Y)
+      SAT_U_ADD = IMAGPART (SUM) == 0 ? REALPART (SUM) : -1   */
+   (cond^ (eq (imagpart (IFN_ADD_OVERFLOW@2 @0 @1)) integer_zerop)
+ 	 (realpart @2) integer_minus_onep)
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SUM = ADD_OVERFLOW (X, Y)
+      SAT_U_ADD = IMAGPART (SUM) != 0 ? -1 : REALPART (SUM)  */
+   (cond^ (ne (imagpart (IFN_ADD_OVERFLOW@2 @0 @1)) integer_zerop)
+ 	 integer_minus_onep (realpart @2))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* SUM = ADD_OVERFLOW (X, IMM)
+      SAT_U_ADD = IMAGPART (SUM) != 0 ? -1 : REALPART (SUM)  */
+   (cond^ (ne (imagpart (IFN_ADD_OVERFLOW@2 @0 INTEGER_CST@1)) integer_zerop)
+ 	 integer_minus_onep (realpart @2))
+   (if (types_match (type, @0) && int_fits_type_p (@1, type))))
+  (match (unsigned_integer_sat_add @0 @1)
+   /* WIDEN_SUM = (WT)X + (WT)Y
+      SAT_U_ADD = WIDEN_SUM > MAX ? MAX : (NT)WIDEN_SUM  */
+   (cond^ (le (plus (convert@2 @0) (convert@3 @1)) INTEGER_CST@4)
+ 	 (plus:c @0 @1) integer_minus_onep)
+   (if (types_match (type, @0, @1) && types_match (@2, @3))
+    (with
+     {
+      unsigned precision = TYPE_PRECISION (type);
+      unsigned widen_precision = TYPE_PRECISION (TREE_TYPE (@2));
+      wide_int max = wi::mask (precision, false, widen_precision);
+      wide_int c4 = wi::to_wide (@4);
+     }
+     (if (wi::eq_p (c4, max) && widen_precision > precision))))))
+ 
+ /* Saturation sub for unsigned integer.  */
+ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = X > Y ? X - Y : 0  */
+   (cond^ (gt @0 @1) (minus @0 @1) integer_zerop)
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = X >= Y ? X - Y : 0  */
+   (cond^ (ge @0 @1) (convert? (minus (convert1? @0) (convert1? @1)))
+ 		    integer_zerop)
+   (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && types_match (@0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = (X - Y) * (X > Y)  */
+   (mult:c (minus @0 @1) (convert (gt @0 @1)))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = (X - Y) * (X >= Y)  */
+   (mult:c (minus @0 @1) (convert (ge @0 @1)))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* DIFF = SUB_OVERFLOW (X, Y)
+      SAT_U_SUB = REALPART (DIFF) | (IMAGPART (DIFF) + (-1))  */
+   (bit_and:c (realpart (IFN_SUB_OVERFLOW@2 @0 @1))
+    (plus (imagpart @2) integer_minus_onep))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* DIFF = SUB_OVERFLOW (X, Y)
+      SAT_U_SUB = REALPART (DIFF) * (IMAGPART (DIFF) ^ (1))  */
+   (mult:c (realpart (IFN_SUB_OVERFLOW@2 @0 @1))
+    (bit_xor (imagpart @2) integer_onep))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* DIFF = SUB_OVERFLOW (X, Y)
+      SAT_U_SUB = IMAGPART (DIFF) == 0 ? REALPART (DIFF) : 0  */
+   (cond^ (eq (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop)
+ 	 (realpart @2) integer_zerop)
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* DIFF = SUB_OVERFLOW (X, Y)
+      SAT_U_SUB = IMAGPART (DIFF) != 0 ? 0 : REALPART (DIFF)  */
+   (cond^ (ne (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop)
+ 	 integer_zerop (realpart @2))
+   (if (types_match (type, @0, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = IMM > Y ? (IMM - Y) : 0
+      SAT_U_SUB = IMM >= Y ? (IMM - Y) : 0  */
+   (cond^ (le @1 INTEGER_CST@2) (minus INTEGER_CST@0 @1) integer_zerop)
+   (if (types_match (type, @1) && int_fits_type_p (@0, type))
+    (with
+     {
+      unsigned precision = TYPE_PRECISION (type);
+      wide_int max = wi::mask (precision, false, precision);
+      wide_int c0 = wi::to_wide (@0);
+      wide_int c2 = wi::to_wide (@2);
+      wide_int c2_add_1 = wi::add (c2, wi::uhwi (1, precision));
+      bool equal_p = wi::eq_p (c0, c2);
+      bool less_than_1_p = !wi::eq_p (c2, max) && wi::eq_p (c2_add_1, c0);
+     }
+     (if (equal_p || less_than_1_p)))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = (MAX - 1) >= Y ? ((MAX - 1) - Y) : 0  */
+   (cond^ (ne @1 INTEGER_CST@2) (minus INTEGER_CST@0 @1) integer_zerop)
+   (if (types_match (type, @1))
+    (with
+     {
+      unsigned precision = TYPE_PRECISION (type);
+      wide_int max = wi::mask (precision, false, precision);
+      wide_int c0 = wi::to_wide (@0);
+      wide_int c2 = wi::to_wide (@2);
+      wide_int c0_add_1 = wi::add (c0, wi::uhwi (1, precision));
+     }
+     (if (wi::eq_p (c2, max) && wi::eq_p (c0_add_1, max))))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = 1 >= Y ? (1 - Y) : 0  */
+   (cond^ (le @1 integer_onep@0) (bit_xor @1 integer_onep@0) integer_zerop)
+   (if (types_match (type, @1))))
+  (match (unsigned_integer_sat_sub @0 @1)
+   /* SAT_U_SUB = X > IMM  ? (X - IMM) : 0.
+      SAT_U_SUB = X >= IMM ? (X - IMM) : 0.  */
+   (plus (max @0 INTEGER_CST@1) INTEGER_CST@2)
+   (if (types_match (type, @1) && int_fits_type_p (@1, type))
+    (with
+     {
+      unsigned precision = TYPE_PRECISION (type);
+      wide_int c1 = wi::to_wide (@1);
+      wide_int c2 = wi::to_wide (@2);
+      wide_int sum = wi::add (c1, c2);
+     }
+     (if (wi::eq_p (sum, wi::uhwi (0, precision))))))))
+ 
+ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
+  (match (unsigned_integer_narrow_clip @0)
+   /* SAT_U_TRUNC<NT>(MAX (0, X)) =
+ 	     (UT)X & ~(NT)(-1) ? (-X) >> TYPE_PRECISION(X) - 1 : X
+ 
+      The gimple representation uses X > ~(NT)(-1) instead of
+      using & so match on gt instead of bit_and.  */
+   (convert (cond^ (gt (nop_convert? @0) INTEGER_CST@1)
+ 	 (rshift:s (nop_convert? (negate (nop_convert? @0))) INTEGER_CST@2)
+ 	 @0))
+   (if (! TYPE_UNSIGNED (TREE_TYPE (@0)))
+    (with
+     {
+      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
+      unsigned otype_precision = TYPE_PRECISION (type);
+      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
+      wide_int int_cst_1 = wi::to_wide (@1, itype_precision);
+      wide_int int_cst_2 = wi::to_wide (@2, itype_precision);
+      wide_int shift_amount = wi::uhwi (itype_precision - 1,
+ 				  itype_precision); // AKA itype_bits - 1
+      int cmp = 0;
+      cmp = wi::cmp (int_cst_2, shift_amount, TYPE_SIGN (TREE_TYPE (@0)));
+     }
+     (if (otype_precision < itype_precision && wi::eq_p (trunc_max,
+     int_cst_1) && (cmp >= 0)))))))
+ 
+ /* Saturation truncate for unsigned integer.  */
+ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
+  (match (unsigned_integer_sat_trunc @0)
+   /* SAT_U_TRUNC = (NT)x | (NT)(-(X > (WT)(NT)(-1)))  */
+   (bit_ior:c (negate (convert (gt @0 INTEGER_CST@1))) (convert @0))
+   (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
+    (with
+     {
+      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
+      unsigned otype_precision = TYPE_PRECISION (type);
+      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
+      wide_int int_cst = wi::to_wide (@1, itype_precision);
+     }
+     (if (otype_precision < itype_precision && wi::eq_p (trunc_max, int_cst))))))
+  (match (unsigned_integer_sat_trunc @0)
+   /* SAT_U_TRUNC = (NT)(MIN_EXPR (X, IMM))
+      If Op_0 def is MIN_EXPR and not single_use.  Aka below pattern:
+ 
+      _18 = MIN_EXPR <left_8, 4294967295>; // op_0 def
+      iftmp.0_11 = (unsigned int) _18;     // op_0
+      stream.avail_out = iftmp.0_11;
+      left_37 = left_8 - _18;              // op_0 use
+ 
+      Transfer to .SAT_TRUNC will have MIN_EXPR still live.  Then the backend
+      (for example x86/riscv) will have 2-3 more insns generation for .SAT_TRUNC
+      besides the MIN_EXPR.  Thus,  keep the normal truncation as is should be
+      the better choose.  */
+   (convert (min@2 @0 INTEGER_CST@1))
+   (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && single_use (@2))
+    (with
+     {
+      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
+      unsigned otype_precision = TYPE_PRECISION (type);
+      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
+      wide_int int_cst = wi::to_wide (@1, itype_precision);
+     }
+     (if (otype_precision < itype_precision && wi::eq_p (trunc_max, int_cst))))))
+  (match (unsigned_integer_sat_trunc @0)
+   /* SAT_U_TRUNC = (NT)X | ((NT)(X <= (WT)-1) + (NT)-1)  */
+   (bit_ior:c (plus:c (convert (le @0 INTEGER_CST@1)) INTEGER_CST@2)
+ 	     (convert @0))
+   (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
+    (with
+     {
+      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
+      unsigned otype_precision = TYPE_PRECISION (type);
+      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
+      wide_int max = wi::mask (otype_precision, false, otype_precision);
+      wide_int int_cst_1 = wi::to_wide (@1);
+      wide_int int_cst_2 = wi::to_wide (@2);
+     }
+     (if (wi::eq_p (trunc_max, int_cst_1) && wi::eq_p (max, int_cst_2)))))))
+ 
+ (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
+  /* SAT_VAL = (-(T)(X < 0) ^ MAX)  */
+  (match (signed_integer_sat_val @0)
+   (bit_xor:c (nop_convert? (negate
+ 			    (nop_convert? (convert (lt @0 integer_zerop)))))
+ 	     max_value)))
+ 
+ /* Saturation add for signed integer.  */
+ (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
+  (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)Y)
+      SAT_S_ADD = (X ^ SUM) & !(X ^ Y) < 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
+   (cond^ (lt (bit_and:c (bit_xor:c @0 (nop_convert@2 (plus (nop_convert @0)
+ 							   (nop_convert @1))))
+ 			(bit_not (bit_xor:c @0 @1)))
+ 	     integer_zerop)
+ 	 (signed_integer_sat_val @0)
+ 	 @2))
+  (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)Y)
+      SAT_S_ADD = (X ^ SUM) & !(X ^ Y) >= 0 ? SUM : (-(T)(X < 0) ^ MAX)  */
+   (cond^ (ge (bit_and:c (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
+ 							 (nop_convert @1))))
+ 			(bit_not (bit_xor:c @0 @1)))
+ 	     integer_zerop)
+ 	 @2
+ 	 (bit_xor:c (negate (convert (lt @0 integer_zerop))) max_value)))
+  (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)Y)
+      SAT_S_ADD = (X ^ Y) < 0 && (X ^ SUM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
+   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
+ 							 (nop_convert @1))))
+ 			integer_zerop)
+ 		    (ge (bit_xor:c @0 @1) integer_zerop))
+ 	 (signed_integer_sat_val @0)
+ 	 @2))
+  (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)IMM)
+      SAT_S_ADD = (X ^ SUM) < 0 && (X ^ IMM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
+   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
+ 							 INTEGER_CST@1)))
+ 			integer_zerop)
+ 		    (ge (bit_xor:c @0 INTEGER_CST@3) integer_zerop))
+ 	 (signed_integer_sat_val @0)
+ 	 @2)
+   (if (wi::eq_p (wi::to_wide (@1), wi::to_wide (@3)))))
+  (match (signed_integer_sat_add @0 @1)
+    /* SUM = .ADD_OVERFLOW (X, Y)
+       SAT_S_ADD = IMAGPART_EXPR (SUM) != 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
+   (cond^ (ne (imagpart (IFN_ADD_OVERFLOW:c@2 @0 @1)) integer_zerop)
+ 	 (signed_integer_sat_val @0)
+ 	 (realpart @2)))
+  (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)Y)
+      SAT_S_ADD = (X ^ SUM) < 0 & ~((X ^ Y) < 0) ? (-(T)(X < 0) ^ MAX) : SUM  */
+   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
+ 							 (nop_convert @1))))
+ 			integer_zerop)
+ 		    (bit_not (lt (bit_xor:c @0 @1) integer_zerop)))
+ 	 (signed_integer_sat_val @0)
+ 	 @2))
+  (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)IMM);
+      SAT_S_ADD = (X ^ IMM) < 0 ? SUM : (X ^ SUM) >= 0 ? SUM
+ 						      : (x < 0) ? MIN : MAX  */
+   (cond^ (lt (bit_and:c (bit_xor:c @0 (nop_convert@2 (plus (nop_convert @0)
+ 							   INTEGER_CST@1)))
+ 			(bit_xor:c @0 INTEGER_CST@3)) integer_zerop)
+ 	 (signed_integer_sat_val @0)
+ 	 @2)
+   (if (wi::bit_and (wi::to_wide (@1), wi::to_wide (@3)) == 0)))
+ 
+ (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)-1);
+      SAT_S_ADD = (X ^ -1) < 0 ? SUM : (X ^ SUM) >= 0 ? SUM
+ 						      : (x < 0) ? MIN : MAX  */
+   (convert (cond^ (lt (bit_and:c @0 (nop_convert (negate (nop_convert @0))))
+              integer_zerop)
+ 	 INTEGER_CST@2
+ 	 (plus (nop_convert @0) integer_all_onesp@1)))
+    (with
+     {
+      unsigned precision = TYPE_PRECISION (type);
+      wide_int c1 = wi::to_wide (@1);
+      wide_int c2 = wi::to_wide (@2);
+      wide_int sum = wi::add (c1, c2);
+     }
+     (if (wi::eq_p (sum, wi::max_value (precision, SIGNED))))))
+ 
+ (match (signed_integer_sat_add @0 @1)
+   /* T SUM = (T)((UT)X + (UT)IMM)
+      SAT_S_ADD = (X ^ SUM) < 0 && (X ^ IMM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
+    (cond^ (ge (bit_ior:c (bit_xor:c @0 INTEGER_CST@1)
+                        (bit_not (bit_xor:c @0 (nop_convert@2 (plus (nop_convert @0)
+                        INTEGER_CST@3)))))
+                    integer_zerop)
+            (signed_integer_sat_val @0)
+            @2)
+    (if (wi::eq_p (wi::to_wide (@1), wi::to_wide (@3))))))
+ 
+ /* Saturation sub for signed integer.  */
+ (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
+  (match (signed_integer_sat_sub @0 @1)
+   /* T Z = (T)((UT)X - (UT)Y);
+      SAT_S_SUB = (X ^ Y) & (X ^ Z) < 0 ? (-(T)(X < 0) ^ MAX) : Z  */
+   (cond^ (lt (bit_and:c (bit_xor:c @0 @1)
+ 			(bit_xor @0 (nop_convert@2 (minus (nop_convert @0)
+ 							  (nop_convert @1)))))
+ 	     integer_zerop)
+ 	 (signed_integer_sat_val @0)
+ 	 @2))
+  (match (signed_integer_sat_sub @0 @1)
+   /* T Z = (T)((UT)X - (UT)Y);
+      SAT_S_SUB = (X ^ Y) & (X ^ Z) >= 0 ? Z : (-(T)(X < 0) ^ MAX)  */
+   (cond^ (ge (bit_and:c (bit_xor:c @0 @1)
+ 			(bit_xor @0 (nop_convert@2 (minus (nop_convert @0)
+ 							  (nop_convert @1)))))
+ 	     integer_zerop)
+ 	 @2
+ 	 (signed_integer_sat_val @0)))
+  (match (signed_integer_sat_sub @0 @1)
+   /* T Z = (T)((UT)X - (UT)Y);
+      SAT_S_SUB = (X ^ Y) < 0 & (X ^ Z) < 0 ? (-(T)(X < 0) ^ MAX) : Z  */
+   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (minus (nop_convert @0)
+ 							  (nop_convert @1))))
+ 			integer_zerop)
+ 		    (lt (bit_xor:c @0 @1) integer_zerop))
+ 	 (signed_integer_sat_val @0)
+ 	 @2))
+  (match (signed_integer_sat_sub @0 @1)
+   /* Z = .SUB_OVERFLOW (X, Y)
+      SAT_S_SUB = IMAGPART (Z) != 0 ? (-(T)(X < 0) ^ MAX) : REALPART (Z)  */
+   (cond^ (ne (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop)
+ 	 (signed_integer_sat_val @0)
+ 	 (realpart @2))
+   (if (types_match (type, @0, @1)))))
+ 
+ /* Saturation truncate for signed integer.  */
+ (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
+  (match (signed_integer_sat_trunc @0)
+   /* SAT_S_TRUNC(X) = (unsigned)X + NT_MAX + 1  > Unsigned_MAX ? (NT)X  */
+   (cond^ (gt (plus:c (convert@4 @0) INTEGER_CST@1) INTEGER_CST@2)
+ 	 (bit_xor:c (nop_convert?
+ 		     (negate (nop_convert? (convert (lt @0 integer_zerop)))))
+ 		    INTEGER_CST@3)
+ 	 (convert @0))
+   (if (!TYPE_UNSIGNED (TREE_TYPE (@0)) && TYPE_UNSIGNED (TREE_TYPE (@4)))
+    (with
+     {
+      unsigned itype_prec = TYPE_PRECISION (TREE_TYPE (@0));
+      unsigned otype_prec = TYPE_PRECISION (type);
+      wide_int offset = wi::uhwi (HOST_WIDE_INT_1U << (otype_prec - 1),
+ 				 itype_prec); // Aka 128 for int8_t
+      wide_int limit_0 = wi::mask (otype_prec, false, itype_prec); // Aka 255
+      wide_int limit_1 = wi::uhwi ((HOST_WIDE_INT_1U << otype_prec) - 3,
+ 				  itype_prec); // Aka 253
+      wide_int limit_2 = wi::uhwi ((HOST_WIDE_INT_1U << otype_prec) - 2,
+ 				  itype_prec); // Aka 254
+      wide_int otype_max = wi::mask (otype_prec - 1, false, otype_prec);
+      wide_int itype_max = wi::mask (otype_prec - 1, false, itype_prec);
+      wide_int int_cst_1 = wi::to_wide (@1);
+      wide_int int_cst_2 = wi::to_wide (@2);
+      wide_int int_cst_3 = wi::to_wide (@3);
+     }
+     (if (((wi::eq_p (int_cst_1, offset) && wi::eq_p (int_cst_2, limit_0))
+ 	 || (wi::eq_p (int_cst_1, itype_max) && wi::eq_p (int_cst_2, limit_2))
+ 	 || (wi::eq_p (int_cst_1, offset) && wi::eq_p (int_cst_2, limit_2))
+ 	 || (wi::eq_p (int_cst_1, itype_max) && wi::eq_p (int_cst_2, limit_1)))
+ 	 && wi::eq_p (int_cst_3, otype_max)))))))
+ 
+ /* Saturation mult for unsigned integer.  */
+ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
+  (for mult_op (mult widen_mult)
+   (match (usmul_widen_mult @0 @1)
+    (mult_op:c (convert@2 @0) (convert @1))
+     (if (types_match (@0, @1) && TYPE_UNSIGNED (TREE_TYPE (@0)))
+      (with
+       {
+ 	unsigned prec = TYPE_PRECISION (TREE_TYPE (@0));
+ 	unsigned cvt2_prec = TYPE_PRECISION (TREE_TYPE (@2));
+ 	bool widen_cvt_p = cvt2_prec > prec;
+       }
+       (if (widen_cvt_p))))))
+  (match (usmul_widen_mult @0 @1)
+   (widen_mult:c @0 @1)
+    (if (types_match (@0, @1))))
+  (match (unsigned_integer_sat_mul @0 @1)
+   /* SAT_U_MUL (X, Y) = {
+        WT x = (WT)a * (WT)b;
+        T max = -1;
+        if (x > (WT)(max))
+ 	 return max;
+        else
+ 	 return (T)x;
+      }
+      while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t.  */
+   (convert (min (usmul_widen_mult@3 @0 @1) INTEGER_CST@2))
+   (if (types_match (type, @0, @1))
+    (with
+     {
+       unsigned prec = TYPE_PRECISION (type);
+       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
+       wide_int max = wi::mask (prec, false, widen_prec);
+       bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
+     }
+     (if (c2_is_max_p)))))
+   (match (unsigned_integer_sat_mul @0 @1)
+    /* SAT_U_MUL (X, Y) = {
+ 	T result;
+ 	if (__builtin_mul_overflow (X, Y, &result))
+ 	  return -1;
+ 	else
+ 	  return result;
+       }
+       while T can be uint8_t, uint16_t, uint32_t and uint64_t.  */
+    (cond^ (ne (imagpart (IFN_MUL_OVERFLOW:c@2 @0 @1)) integer_zerop)
+ 	   integer_minus_onep (realpart @2))
+    (if (types_match (type, @0, @1))))
+   (match (unsigned_integer_sat_mul @0 @1)
+    /* SAT_U_MUL (X, Y) = {
+ 	WT x = (WT)a * (WT)b;
+ 	if ((x >> sizeof(a) * 8) == 0)
+ 	  return (T)x;
+ 	else
+ 	  return (T)-1;
+       }
+       while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t.  */
+    (convert (cond^ (eq (rshift (mult:c@3 (convert @0) (convert @1))
+ 			       INTEGER_CST@2)
+ 		       integer_zerop)
+ 		   @3 INTEGER_CST@4))
+    (if (types_match (type, @0, @1))
+     (with
+      {
+       unsigned prec = TYPE_PRECISION (type);
+       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
+       wide_int c4 = wi::to_wide (@4);
+       wide_int max = wi::mask (prec, false, widen_prec);
+       bool c4_is_max_p = wi::eq_p (c4, max);
+       unsigned c2 = tree_to_uhwi (@2);
+       bool c2_is_type_precision_p = c2 == prec;
+      }
+      (if (widen_prec > prec && c2_is_type_precision_p && c4_is_max_p)))))
+   (match (unsigned_integer_sat_mul @0 @1)
+    /* SAT_U_MUL (X, Y) = {
+ 	WT x = (WT)a * (WT)b;
+ 	NT hi = x >> (sizeof(NT) * 8);
+ 	NT lo = (NT)x;
+ 	return lo | -!!hi;
+       } while WT is uint128_t, uint64_t, uint32_t, uint16_t,
+ 	and T is uint64_t, uint32_t, uint16_t, uint8_t.  */
+    (bit_ior:c
+     (convert?
+      (negate
+       (convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop))))
+     (convert (usmul_widen_mult@3 @0 @1)))
+    (if (types_match (type, @0, @1))
+     (with
+      {
+       unsigned prec = TYPE_PRECISION (type);
+       bool c2_is_type_precision_p = tree_to_uhwi (@2) == prec;
+      }
+      (if (c2_is_type_precision_p)))))
+   (match (unsigned_integer_sat_mul @0 @1)
+    /* SAT_U_MUL (X, Y) = {
+ 	WT x = (WT)a * (WT)b;
+ 	NT max = -1;
+ 	bool overflow_p = x > (WT)max;
+ 	return -(NT)(overflow_p) | (NT)x;
+       } while WT is uint128_t, uint64_t, uint32_t, uint16_t,
+ 	and T is uint64_t, uint32_t, uint16_t, uint8_t.  */
+    (bit_ior:c (negate (convert (gt @3 INTEGER_CST@2)))
+ 	      (convert (usmul_widen_mult@3 @0 @1)))
+    (if (types_match (type, @0, @1))
+     (with
+      {
+       unsigned prec = TYPE_PRECISION (type);
+       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
+       wide_int max = wi::mask (prec, false, widen_prec);
+       bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
+      }
+      (if (c2_is_max_p)))))
+ )
diff -Nrcpad gcc-17-20260510/gcc/match.pd gcc-17-20260517/gcc/match.pd
*** gcc-17-20260510/gcc/match.pd	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/match.pd	Sun May 17 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 55,60 ****
--- 55,62 ----
  (define_operator_list swapped_simple_comparison gt   ge   eq ne le   lt)
  (define_operator_list BSWAP BUILT_IN_BSWAP16 BUILT_IN_BSWAP32
  	    BUILT_IN_BSWAP64 BUILT_IN_BSWAP128)
+ (define_operator_list BITREVERSE BUILT_IN_BITREVERSE16 BUILT_IN_BITREVERSE32
+ 	    BUILT_IN_BITREVERSE64 BUILT_IN_BITREVERSE128)
  
  #include "cfn-operators.pd"
  
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1614,1619 ****
--- 1616,1630 ----
        && TYPE_PRECISION (TREE_TYPE (@0)) == 1)
    @2))
  
+ /* ((~a) & b) ^ (a | b) --> a  */
+ /* ((~a) | b) ^ (a & b) --> ~a  */
+ (simplify
+  (bit_xor:c (bit_ior:c @0 @1) (bit_and:c @2 @1))
+  (with { bool wascmp; }
+   (if (bitwise_inverted_equal_p (@0, @2, wascmp)
+        && (!wascmp || element_precision (type) == 1))
+    @0)))
+ 
  /* ~(~a & b)  -->  a | ~b  */
  (simplify
   (bit_not (bit_and:cs (bit_not @0) @1))
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3329,3889 ****
         || POINTER_TYPE_P (itype))
        && wi::eq_p (wi::to_wide (int_cst), wi::max_value (itype))))))
  
- #if GIMPLE
- /* Saturation add for unsigned integer.  */
- (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
-  (match (usadd_overflow_mask @0 @1)
-   /* SAT_U_ADD = (X + Y) | -(X > (X + Y)).
-      Overflow_Mask = -(X > (X + Y)).  */
-   (negate (convert (gt @0 (plus:c @0 @1))))
-   (if (types_match (type, @0, @1))))
-  (match (usadd_overflow_mask @0 @1)
-   /* SAT_U_ADD = (X + Y) | -(X > (X + Y)).
-      Overflow_Mask = -((X + Y) < X).  */
-   (negate (convert (lt (plus:c @0 @1) @0)))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SAT_U_ADD = (X + Y) | Overflow_Mask  */
-   (bit_ior:c (plus:c @0 @1) (usadd_overflow_mask @0 @1))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SAT_U_ADD = (X + Y) >= X ? (X + Y) : -1  */
-   (cond^ (ge (plus:c@2 @0 @1) @0) @2 integer_minus_onep)
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SAT_U_ADD = (X + Y) < X ? -1 : (X + Y)  */
-   (cond^ (lt (plus:c@2 @0 @1) @0) integer_minus_onep @2)
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SAT_U_ADD = X <= (X + Y) ? (X + Y) : -1  */
-   (cond^ (le @0 (plus:c@2 @0 @1)) @2 integer_minus_onep)
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SAT_U_ADD = X > (X + Y) ? -1 : (X + Y)  */
-   (cond^ (gt @0 (plus:c@2 @0 @1)) integer_minus_onep @2)
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SAT_U_ADD = (X + IMM) >= x ? (X + IMM) : -1  */
-   (plus (min @0 INTEGER_CST@2) INTEGER_CST@1)
-   (if (types_match (type, @0, @1))
-    (with
-     {
-      unsigned precision = TYPE_PRECISION (type);
-      wide_int cst_1 = wi::to_wide (@1);
-      wide_int cst_2 = wi::to_wide (@2);
-      wide_int max = wi::mask (precision, false, precision);
-      wide_int sum = wi::add (cst_1, cst_2);
-     }
-     (if (wi::eq_p (max, sum))))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SUM = ADD_OVERFLOW (X, Y)
-      SAT_U_ADD = REALPART (SUM) | -IMAGPART (SUM)   */
-   (bit_ior:c (realpart (IFN_ADD_OVERFLOW@2 @0 @1)) (negate (imagpart @2)))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SUM = ADD_OVERFLOW (X, Y)
-      SAT_U_ADD = REALPART (SUM) | -(IMAGPART (SUM) != 0)   */
-   (bit_ior:c (realpart (IFN_ADD_OVERFLOW@2 @0 @1))
- 	     (negate (convert (ne (imagpart @2) integer_zerop))))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SUM = ADD_OVERFLOW (X, Y)
-      SAT_U_ADD = IMAGPART (SUM) == 0 ? REALPART (SUM) : -1   */
-   (cond^ (eq (imagpart (IFN_ADD_OVERFLOW@2 @0 @1)) integer_zerop)
- 	 (realpart @2) integer_minus_onep)
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SUM = ADD_OVERFLOW (X, Y)
-      SAT_U_ADD = IMAGPART (SUM) != 0 ? -1 : REALPART (SUM)  */
-   (cond^ (ne (imagpart (IFN_ADD_OVERFLOW@2 @0 @1)) integer_zerop)
- 	 integer_minus_onep (realpart @2))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* SUM = ADD_OVERFLOW (X, IMM)
-      SAT_U_ADD = IMAGPART (SUM) != 0 ? -1 : REALPART (SUM)  */
-   (cond^ (ne (imagpart (IFN_ADD_OVERFLOW@2 @0 INTEGER_CST@1)) integer_zerop)
- 	 integer_minus_onep (realpart @2))
-   (if (types_match (type, @0) && int_fits_type_p (@1, type))))
-  (match (unsigned_integer_sat_add @0 @1)
-   /* WIDEN_SUM = (WT)X + (WT)Y
-      SAT_U_ADD = WIDEN_SUM > MAX ? MAX : (NT)WIDEN_SUM  */
-   (cond^ (le (plus (convert@2 @0) (convert@3 @1)) INTEGER_CST@4)
- 	 (plus:c @0 @1) integer_minus_onep)
-   (if (types_match (type, @0, @1) && types_match (@2, @3))
-    (with
-     {
-      unsigned precision = TYPE_PRECISION (type);
-      unsigned widen_precision = TYPE_PRECISION (TREE_TYPE (@2));
-      wide_int max = wi::mask (precision, false, widen_precision);
-      wide_int c4 = wi::to_wide (@4);
-     }
-     (if (wi::eq_p (c4, max) && widen_precision > precision))))))
- 
- /* Saturation sub for unsigned integer.  */
- (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = X > Y ? X - Y : 0  */
-   (cond^ (gt @0 @1) (minus @0 @1) integer_zerop)
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = X >= Y ? X - Y : 0  */
-   (cond^ (ge @0 @1) (convert? (minus (convert1? @0) (convert1? @1)))
- 		    integer_zerop)
-   (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && types_match (@0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = (X - Y) * (X > Y)  */
-   (mult:c (minus @0 @1) (convert (gt @0 @1)))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = (X - Y) * (X >= Y)  */
-   (mult:c (minus @0 @1) (convert (ge @0 @1)))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* DIFF = SUB_OVERFLOW (X, Y)
-      SAT_U_SUB = REALPART (DIFF) | (IMAGPART (DIFF) + (-1))  */
-   (bit_and:c (realpart (IFN_SUB_OVERFLOW@2 @0 @1))
-    (plus (imagpart @2) integer_minus_onep))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* DIFF = SUB_OVERFLOW (X, Y)
-      SAT_U_SUB = REALPART (DIFF) * (IMAGPART (DIFF) ^ (1))  */
-   (mult:c (realpart (IFN_SUB_OVERFLOW@2 @0 @1))
-    (bit_xor (imagpart @2) integer_onep))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* DIFF = SUB_OVERFLOW (X, Y)
-      SAT_U_SUB = IMAGPART (DIFF) == 0 ? REALPART (DIFF) : 0  */
-   (cond^ (eq (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop)
- 	 (realpart @2) integer_zerop)
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* DIFF = SUB_OVERFLOW (X, Y)
-      SAT_U_SUB = IMAGPART (DIFF) != 0 ? 0 : REALPART (DIFF)  */
-   (cond^ (ne (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop)
- 	 integer_zerop (realpart @2))
-   (if (types_match (type, @0, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = IMM > Y ? (IMM - Y) : 0
-      SAT_U_SUB = IMM >= Y ? (IMM - Y) : 0  */
-   (cond^ (le @1 INTEGER_CST@2) (minus INTEGER_CST@0 @1) integer_zerop)
-   (if (types_match (type, @1) && int_fits_type_p (@0, type))
-    (with
-     {
-      unsigned precision = TYPE_PRECISION (type);
-      wide_int max = wi::mask (precision, false, precision);
-      wide_int c0 = wi::to_wide (@0);
-      wide_int c2 = wi::to_wide (@2);
-      wide_int c2_add_1 = wi::add (c2, wi::uhwi (1, precision));
-      bool equal_p = wi::eq_p (c0, c2);
-      bool less_than_1_p = !wi::eq_p (c2, max) && wi::eq_p (c2_add_1, c0);
-     }
-     (if (equal_p || less_than_1_p)))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = (MAX - 1) >= Y ? ((MAX - 1) - Y) : 0  */
-   (cond^ (ne @1 INTEGER_CST@2) (minus INTEGER_CST@0 @1) integer_zerop)
-   (if (types_match (type, @1))
-    (with
-     {
-      unsigned precision = TYPE_PRECISION (type);
-      wide_int max = wi::mask (precision, false, precision);
-      wide_int c0 = wi::to_wide (@0);
-      wide_int c2 = wi::to_wide (@2);
-      wide_int c0_add_1 = wi::add (c0, wi::uhwi (1, precision));
-     }
-     (if (wi::eq_p (c2, max) && wi::eq_p (c0_add_1, max))))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = 1 >= Y ? (1 - Y) : 0  */
-   (cond^ (le @1 integer_onep@0) (bit_xor @1 integer_onep@0) integer_zerop)
-   (if (types_match (type, @1))))
-  (match (unsigned_integer_sat_sub @0 @1)
-   /* SAT_U_SUB = X > IMM  ? (X - IMM) : 0.
-      SAT_U_SUB = X >= IMM ? (X - IMM) : 0.  */
-   (plus (max @0 INTEGER_CST@1) INTEGER_CST@2)
-   (if (types_match (type, @1) && int_fits_type_p (@1, type))
-    (with
-     {
-      unsigned precision = TYPE_PRECISION (type);
-      wide_int c1 = wi::to_wide (@1);
-      wide_int c2 = wi::to_wide (@2);
-      wide_int sum = wi::add (c1, c2);
-     }
-     (if (wi::eq_p (sum, wi::uhwi (0, precision))))))))
- 
- (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
-  (match (unsigned_integer_narrow_clip @0)
-   /* SAT_U_TRUNC<NT>(MAX (0, X)) =
- 	     (UT)X & ~(NT)(-1) ? (-X) >> TYPE_PRECISION(X) - 1 : X
- 
-      The gimple representation uses X > ~(NT)(-1) instead of
-      using & so match on gt instead of bit_and.  */
-   (convert (cond^ (gt (nop_convert? @0) INTEGER_CST@1)
- 	 (rshift:s (nop_convert? (negate (nop_convert? @0))) INTEGER_CST@2)
- 	 @0))
-   (if (! TYPE_UNSIGNED (TREE_TYPE (@0)))
-    (with
-     {
-      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
-      unsigned otype_precision = TYPE_PRECISION (type);
-      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
-      wide_int int_cst_1 = wi::to_wide (@1, itype_precision);
-      wide_int int_cst_2 = wi::to_wide (@2, itype_precision);
-      wide_int shift_amount = wi::uhwi (itype_precision - 1,
- 				  itype_precision); // AKA itype_bits - 1
-      int cmp = 0;
-      cmp = wi::cmp (int_cst_2, shift_amount, TYPE_SIGN (TREE_TYPE (@0)));
-     }
-     (if (otype_precision < itype_precision && wi::eq_p (trunc_max,
-     int_cst_1) && (cmp >= 0)))))))
- 
- /* Saturation truncate for unsigned integer.  */
- (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
-  (match (unsigned_integer_sat_trunc @0)
-   /* SAT_U_TRUNC = (NT)x | (NT)(-(X > (WT)(NT)(-1)))  */
-   (bit_ior:c (negate (convert (gt @0 INTEGER_CST@1))) (convert @0))
-   (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
-    (with
-     {
-      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
-      unsigned otype_precision = TYPE_PRECISION (type);
-      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
-      wide_int int_cst = wi::to_wide (@1, itype_precision);
-     }
-     (if (otype_precision < itype_precision && wi::eq_p (trunc_max, int_cst))))))
-  (match (unsigned_integer_sat_trunc @0)
-   /* SAT_U_TRUNC = (NT)(MIN_EXPR (X, IMM))
-      If Op_0 def is MIN_EXPR and not single_use.  Aka below pattern:
- 
-      _18 = MIN_EXPR <left_8, 4294967295>; // op_0 def
-      iftmp.0_11 = (unsigned int) _18;     // op_0
-      stream.avail_out = iftmp.0_11;
-      left_37 = left_8 - _18;              // op_0 use
- 
-      Transfer to .SAT_TRUNC will have MIN_EXPR still live.  Then the backend
-      (for example x86/riscv) will have 2-3 more insns generation for .SAT_TRUNC
-      besides the MIN_EXPR.  Thus,  keep the normal truncation as is should be
-      the better choose.  */
-   (convert (min@2 @0 INTEGER_CST@1))
-   (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && single_use (@2))
-    (with
-     {
-      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
-      unsigned otype_precision = TYPE_PRECISION (type);
-      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
-      wide_int int_cst = wi::to_wide (@1, itype_precision);
-     }
-     (if (otype_precision < itype_precision && wi::eq_p (trunc_max, int_cst))))))
-  (match (unsigned_integer_sat_trunc @0)
-   /* SAT_U_TRUNC = (NT)X | ((NT)(X <= (WT)-1) + (NT)-1)  */
-   (bit_ior:c (plus:c (convert (le @0 INTEGER_CST@1)) INTEGER_CST@2)
- 	     (convert @0))
-   (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
-    (with
-     {
-      unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0));
-      unsigned otype_precision = TYPE_PRECISION (type);
-      wide_int trunc_max = wi::mask (otype_precision, false, itype_precision);
-      wide_int max = wi::mask (otype_precision, false, otype_precision);
-      wide_int int_cst_1 = wi::to_wide (@1);
-      wide_int int_cst_2 = wi::to_wide (@2);
-     }
-     (if (wi::eq_p (trunc_max, int_cst_1) && wi::eq_p (max, int_cst_2)))))))
- 
- (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
-  /* SAT_VAL = (-(T)(X < 0) ^ MAX)  */
-  (match (signed_integer_sat_val @0)
-   (bit_xor:c (nop_convert? (negate
- 			    (nop_convert? (convert (lt @0 integer_zerop)))))
- 	     max_value)))
- 
- /* Saturation add for signed integer.  */
- (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
-  (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)Y)
-      SAT_S_ADD = (X ^ SUM) & !(X ^ Y) < 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
-   (cond^ (lt (bit_and:c (bit_xor:c @0 (nop_convert@2 (plus (nop_convert @0)
- 							   (nop_convert @1))))
- 			(bit_not (bit_xor:c @0 @1)))
- 	     integer_zerop)
- 	 (signed_integer_sat_val @0)
- 	 @2))
-  (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)Y)
-      SAT_S_ADD = (X ^ SUM) & !(X ^ Y) >= 0 ? SUM : (-(T)(X < 0) ^ MAX)  */
-   (cond^ (ge (bit_and:c (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
- 							 (nop_convert @1))))
- 			(bit_not (bit_xor:c @0 @1)))
- 	     integer_zerop)
- 	 @2
- 	 (bit_xor:c (negate (convert (lt @0 integer_zerop))) max_value)))
-  (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)Y)
-      SAT_S_ADD = (X ^ Y) < 0 && (X ^ SUM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
-   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
- 							 (nop_convert @1))))
- 			integer_zerop)
- 		    (ge (bit_xor:c @0 @1) integer_zerop))
- 	 (signed_integer_sat_val @0)
- 	 @2))
-  (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)IMM)
-      SAT_S_ADD = (X ^ SUM) < 0 && (X ^ IMM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
-   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
- 							 INTEGER_CST@1)))
- 			integer_zerop)
- 		    (ge (bit_xor:c @0 INTEGER_CST@3) integer_zerop))
- 	 (signed_integer_sat_val @0)
- 	 @2)
-   (if (wi::eq_p (wi::to_wide (@1), wi::to_wide (@3)))))
-  (match (signed_integer_sat_add @0 @1)
-    /* SUM = .ADD_OVERFLOW (X, Y)
-       SAT_S_ADD = IMAGPART_EXPR (SUM) != 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
-   (cond^ (ne (imagpart (IFN_ADD_OVERFLOW:c@2 @0 @1)) integer_zerop)
- 	 (signed_integer_sat_val @0)
- 	 (realpart @2)))
-  (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)Y)
-      SAT_S_ADD = (X ^ SUM) < 0 & ~((X ^ Y) < 0) ? (-(T)(X < 0) ^ MAX) : SUM  */
-   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
- 							 (nop_convert @1))))
- 			integer_zerop)
- 		    (bit_not (lt (bit_xor:c @0 @1) integer_zerop)))
- 	 (signed_integer_sat_val @0)
- 	 @2))
-  (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)IMM);
-      SAT_S_ADD = (X ^ IMM) < 0 ? SUM : (X ^ SUM) >= 0 ? SUM
- 						      : (x < 0) ? MIN : MAX  */
-   (cond^ (lt (bit_and:c (bit_xor:c @0 (nop_convert@2 (plus (nop_convert @0)
- 							   INTEGER_CST@1)))
- 			(bit_xor:c @0 INTEGER_CST@3)) integer_zerop)
- 	 (signed_integer_sat_val @0)
- 	 @2)
-   (if (wi::bit_and (wi::to_wide (@1), wi::to_wide (@3)) == 0)))
- 
- (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)-1);
-      SAT_S_ADD = (X ^ -1) < 0 ? SUM : (X ^ SUM) >= 0 ? SUM
- 						      : (x < 0) ? MIN : MAX  */
-   (convert (cond^ (lt (bit_and:c @0 (nop_convert (negate (nop_convert @0))))
-              integer_zerop)
- 	 INTEGER_CST@2
- 	 (plus (nop_convert @0) integer_all_onesp@1)))
-    (with
-     {
-      unsigned precision = TYPE_PRECISION (type);
-      wide_int c1 = wi::to_wide (@1);
-      wide_int c2 = wi::to_wide (@2);
-      wide_int sum = wi::add (c1, c2);
-     }
-     (if (wi::eq_p (sum, wi::max_value (precision, SIGNED))))))
- 
- (match (signed_integer_sat_add @0 @1)
-   /* T SUM = (T)((UT)X + (UT)IMM)
-      SAT_S_ADD = (X ^ SUM) < 0 && (X ^ IMM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM  */
-    (cond^ (ge (bit_ior:c (bit_xor:c @0 INTEGER_CST@1)
-                        (bit_not (bit_xor:c @0 (nop_convert@2 (plus (nop_convert @0)
-                        INTEGER_CST@3)))))
-                    integer_zerop)
-            (signed_integer_sat_val @0)
-            @2)
-    (if (wi::eq_p (wi::to_wide (@1), wi::to_wide (@3))))))
- 
- /* Saturation sub for signed integer.  */
- (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
-  (match (signed_integer_sat_sub @0 @1)
-   /* T Z = (T)((UT)X - (UT)Y);
-      SAT_S_SUB = (X ^ Y) & (X ^ Z) < 0 ? (-(T)(X < 0) ^ MAX) : Z  */
-   (cond^ (lt (bit_and:c (bit_xor:c @0 @1)
- 			(bit_xor @0 (nop_convert@2 (minus (nop_convert @0)
- 							  (nop_convert @1)))))
- 	     integer_zerop)
- 	 (signed_integer_sat_val @0)
- 	 @2))
-  (match (signed_integer_sat_sub @0 @1)
-   /* T Z = (T)((UT)X - (UT)Y);
-      SAT_S_SUB = (X ^ Y) & (X ^ Z) >= 0 ? Z : (-(T)(X < 0) ^ MAX)  */
-   (cond^ (ge (bit_and:c (bit_xor:c @0 @1)
- 			(bit_xor @0 (nop_convert@2 (minus (nop_convert @0)
- 							  (nop_convert @1)))))
- 	     integer_zerop)
- 	 @2
- 	 (signed_integer_sat_val @0)))
-  (match (signed_integer_sat_sub @0 @1)
-   /* T Z = (T)((UT)X - (UT)Y);
-      SAT_S_SUB = (X ^ Y) < 0 & (X ^ Z) < 0 ? (-(T)(X < 0) ^ MAX) : Z  */
-   (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (minus (nop_convert @0)
- 							  (nop_convert @1))))
- 			integer_zerop)
- 		    (lt (bit_xor:c @0 @1) integer_zerop))
- 	 (signed_integer_sat_val @0)
- 	 @2))
-  (match (signed_integer_sat_sub @0 @1)
-   /* Z = .SUB_OVERFLOW (X, Y)
-      SAT_S_SUB = IMAGPART (Z) != 0 ? (-(T)(X < 0) ^ MAX) : REALPART (Z)  */
-   (cond^ (ne (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop)
- 	 (signed_integer_sat_val @0)
- 	 (realpart @2))
-   (if (types_match (type, @0, @1)))))
- 
- /* Saturation truncate for signed integer.  */
- (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
-  (match (signed_integer_sat_trunc @0)
-   /* SAT_S_TRUNC(X) = (unsigned)X + NT_MAX + 1  > Unsigned_MAX ? (NT)X  */
-   (cond^ (gt (plus:c (convert@4 @0) INTEGER_CST@1) INTEGER_CST@2)
- 	 (bit_xor:c (nop_convert?
- 		     (negate (nop_convert? (convert (lt @0 integer_zerop)))))
- 		    INTEGER_CST@3)
- 	 (convert @0))
-   (if (!TYPE_UNSIGNED (TREE_TYPE (@0)) && TYPE_UNSIGNED (TREE_TYPE (@4)))
-    (with
-     {
-      unsigned itype_prec = TYPE_PRECISION (TREE_TYPE (@0));
-      unsigned otype_prec = TYPE_PRECISION (type);
-      wide_int offset = wi::uhwi (HOST_WIDE_INT_1U << (otype_prec - 1),
- 				 itype_prec); // Aka 128 for int8_t
-      wide_int limit_0 = wi::mask (otype_prec, false, itype_prec); // Aka 255
-      wide_int limit_1 = wi::uhwi ((HOST_WIDE_INT_1U << otype_prec) - 3,
- 				  itype_prec); // Aka 253
-      wide_int limit_2 = wi::uhwi ((HOST_WIDE_INT_1U << otype_prec) - 2,
- 				  itype_prec); // Aka 254
-      wide_int otype_max = wi::mask (otype_prec - 1, false, otype_prec);
-      wide_int itype_max = wi::mask (otype_prec - 1, false, itype_prec);
-      wide_int int_cst_1 = wi::to_wide (@1);
-      wide_int int_cst_2 = wi::to_wide (@2);
-      wide_int int_cst_3 = wi::to_wide (@3);
-     }
-     (if (((wi::eq_p (int_cst_1, offset) && wi::eq_p (int_cst_2, limit_0))
- 	 || (wi::eq_p (int_cst_1, itype_max) && wi::eq_p (int_cst_2, limit_2))
- 	 || (wi::eq_p (int_cst_1, offset) && wi::eq_p (int_cst_2, limit_2))
- 	 || (wi::eq_p (int_cst_1, itype_max) && wi::eq_p (int_cst_2, limit_1)))
- 	 && wi::eq_p (int_cst_3, otype_max)))))))
- 
- /* Saturation mult for unsigned integer.  */
- (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
-  (for mult_op (mult widen_mult)
-   (match (usmul_widen_mult @0 @1)
-    (mult_op:c (convert@2 @0) (convert @1))
-     (if (types_match (@0, @1) && TYPE_UNSIGNED (TREE_TYPE (@0)))
-      (with
-       {
- 	unsigned prec = TYPE_PRECISION (TREE_TYPE (@0));
- 	unsigned cvt2_prec = TYPE_PRECISION (TREE_TYPE (@2));
- 	bool widen_cvt_p = cvt2_prec > prec;
-       }
-       (if (widen_cvt_p))))))
-  (match (usmul_widen_mult @0 @1)
-   (widen_mult:c @0 @1)
-    (if (types_match (@0, @1))))
-  (match (unsigned_integer_sat_mul @0 @1)
-   /* SAT_U_MUL (X, Y) = {
-        WT x = (WT)a * (WT)b;
-        T max = -1;
-        if (x > (WT)(max))
- 	 return max;
-        else
- 	 return (T)x;
-      }
-      while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t.  */
-   (convert (min (usmul_widen_mult@3 @0 @1) INTEGER_CST@2))
-   (if (types_match (type, @0, @1))
-    (with
-     {
-       unsigned prec = TYPE_PRECISION (type);
-       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
-       wide_int max = wi::mask (prec, false, widen_prec);
-       bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
-     }
-     (if (c2_is_max_p)))))
-   (match (unsigned_integer_sat_mul @0 @1)
-    /* SAT_U_MUL (X, Y) = {
- 	T result;
- 	if (__builtin_mul_overflow (X, Y, &result))
- 	  return -1;
- 	else
- 	  return result;
-       }
-       while T can be uint8_t, uint16_t, uint32_t and uint64_t.  */
-    (cond^ (ne (imagpart (IFN_MUL_OVERFLOW:c@2 @0 @1)) integer_zerop)
- 	   integer_minus_onep (realpart @2))
-    (if (types_match (type, @0, @1))))
-   (match (unsigned_integer_sat_mul @0 @1)
-    /* SAT_U_MUL (X, Y) = {
- 	WT x = (WT)a * (WT)b;
- 	if ((x >> sizeof(a) * 8) == 0)
- 	  return (T)x;
- 	else
- 	  return (T)-1;
-       }
-       while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t.  */
-    (convert (cond^ (eq (rshift (mult:c@3 (convert @0) (convert @1))
- 			       INTEGER_CST@2)
- 		       integer_zerop)
- 		   @3 INTEGER_CST@4))
-    (if (types_match (type, @0, @1))
-     (with
-      {
-       unsigned prec = TYPE_PRECISION (type);
-       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
-       wide_int c4 = wi::to_wide (@4);
-       wide_int max = wi::mask (prec, false, widen_prec);
-       bool c4_is_max_p = wi::eq_p (c4, max);
-       unsigned c2 = tree_to_uhwi (@2);
-       bool c2_is_type_precision_p = c2 == prec;
-      }
-      (if (widen_prec > prec && c2_is_type_precision_p && c4_is_max_p)))))
-   (match (unsigned_integer_sat_mul @0 @1)
-    /* SAT_U_MUL (X, Y) = {
- 	WT x = (WT)a * (WT)b;
- 	NT hi = x >> (sizeof(NT) * 8);
- 	NT lo = (NT)x;
- 	return lo | -!!hi;
-       } while WT is uint128_t, uint64_t, uint32_t, uint16_t,
- 	and T is uint64_t, uint32_t, uint16_t, uint8_t.  */
-    (bit_ior:c
-     (convert?
-      (negate
-       (convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop))))
-     (convert (usmul_widen_mult@3 @0 @1)))
-    (if (types_match (type, @0, @1))
-     (with
-      {
-       unsigned prec = TYPE_PRECISION (type);
-       bool c2_is_type_precision_p = tree_to_uhwi (@2) == prec;
-      }
-      (if (c2_is_type_precision_p)))))
-   (match (unsigned_integer_sat_mul @0 @1)
-    /* SAT_U_MUL (X, Y) = {
- 	WT x = (WT)a * (WT)b;
- 	NT max = -1;
- 	bool overflow_p = x > (WT)max;
- 	return -(NT)(overflow_p) | (NT)x;
-       } while WT is uint128_t, uint64_t, uint32_t, uint16_t,
- 	and T is uint64_t, uint32_t, uint16_t, uint8_t.  */
-    (bit_ior:c (negate (convert (gt @3 INTEGER_CST@2)))
- 	      (convert (usmul_widen_mult@3 @0 @1)))
-    (if (types_match (type, @0, @1))
-     (with
-      {
-       unsigned prec = TYPE_PRECISION (type);
-       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
-       wide_int max = wi::mask (prec, false, widen_prec);
-       bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
-      }
-      (if (c2_is_max_p)))))
- )
- #endif
- 
- /* The boundary condition for case 10: IMM = 1:
-    SAT_U_SUB = X >= IMM ? (X - IMM) : 0.
-    simplify (X != 0 ? X + ~0 : 0) to X - (X != 0).  */
- (simplify
-  (cond (ne@1 @0 integer_zerop)
-        (nop_convert1? (plus (nop_convert2?@2 @0) integer_all_onesp))
-        integer_zerop)
-  (if (INTEGRAL_TYPE_P (type))
-    (with { tree itype = TREE_TYPE (@2); }
-     (convert (minus @2 (convert:itype @1))))))
- 
  /* x >  y  &&  x != XXX_MIN  -->  x > y
     x >  y  &&  x == XXX_MIN  -->  false . */
  (for eqne (eq ne)
--- 3340,3345 ----
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 5881,5889 ****
    (view_convert (BIT_FIELD_REF@0 @1 @2 @3))
    (if (is_gimple_reg_type (type)
         && (!INTEGRAL_TYPE_P (type)
! 	   || !INTEGRAL_TYPE_P (TREE_TYPE (@0))
! 	   || (type_has_mode_precision_p (type)
! 	       && type_has_mode_precision_p (TREE_TYPE (@0)))))
     (BIT_FIELD_REF:type @1 @2 @3)))
  
  /* For integral conversions with the same precision or pointer
--- 5337,5345 ----
    (view_convert (BIT_FIELD_REF@0 @1 @2 @3))
    (if (is_gimple_reg_type (type)
         && (!INTEGRAL_TYPE_P (type)
! 	   || type_has_mode_precision_p (type))
!        && (!INTEGRAL_TYPE_P (TREE_TYPE (@0))
! 	   || type_has_mode_precision_p (TREE_TYPE (@0))))
     (BIT_FIELD_REF:type @1 @2 @3)))
  
  /* For integral conversions with the same precision or pointer
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 6267,6273 ****
    (complex (convert:itype @0) (negate (convert:itype @1)))))
  
  /* BSWAP simplifications, transforms checked by gcc.dg/builtin-bswap-8.c.  */
! (for bswap (BSWAP)
   (simplify
    (bswap (bswap @0))
    @0)
--- 5723,5729 ----
    (complex (convert:itype @0) (negate (convert:itype @1)))))
  
  /* BSWAP simplifications, transforms checked by gcc.dg/builtin-bswap-8.c.  */
! (for bswap (BSWAP BITREVERSE)
   (simplify
    (bswap (bswap @0))
    @0)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 6286,6292 ****
    (simplify
     (cmp (bswap @0) INTEGER_CST@1)
     (with { tree ctype = TREE_TYPE (@1); }
!     (cmp (convert:ctype @0) (bswap! @1)))))
   /* (bswap(x) >> C1) & C2 can sometimes be simplified to (x >> C3) & C2.  */
   (simplify
    (bit_and (convert1? (rshift@0 (convert2? (bswap@4 @1)) INTEGER_CST@2))
--- 5742,5749 ----
    (simplify
     (cmp (bswap @0) INTEGER_CST@1)
     (with { tree ctype = TREE_TYPE (@1); }
!     (cmp (convert:ctype @0) (bswap! @1))))))
! (for bswap (BSWAP)
   /* (bswap(x) >> C1) & C2 can sometimes be simplified to (x >> C3) & C2.  */
   (simplify
    (bit_and (convert1? (rshift@0 (convert2? (bswap@4 @1)) INTEGER_CST@2))
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 8938,8943 ****
--- 8395,8405 ----
         && TYPE_UNSIGNED (TREE_TYPE (@0)))
     (cmp @1 @0))))
  
+ /* x SAT_ADD 0 == x.  */
+ (simplify
+  (IFN_SAT_ADD:c @0 integer_zerop)
+   @0)
+ 
  /* Optimize A - B + -1 >= A into B >= A for unsigned comparisons.  */
  (for cmp (ge lt)
   (simplify
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 10477,10483 ****
    (simplify
     (negate (fmas@3 @0 @1 @2))
     (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))
!     (IFN_FNMS @0 @1 @2))))
  
   (simplify
    (IFN_FMS:c (negate @0) @1 @2)
--- 9939,9959 ----
    (simplify
     (negate (fmas@3 @0 @1 @2))
     (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))
!     (IFN_FNMS @0 @1 @2)))
!   (simplify
!    (fmas:c (nop_convert (negate @0)) @1 @2)
!    (with { tree t = TREE_TYPE (@0); }
!     (if ((!ANY_INTEGRAL_TYPE_P (type)
! 	  || TYPE_UNSIGNED (type)
! 	  || !TYPE_OVERFLOW_SANITIZED (type))
! 	  && (!ANY_INTEGRAL_TYPE_P (t)
! 	      || TYPE_UNSIGNED (t)
! 	      || !TYPE_OVERFLOW_SANITIZED (type)))
!    /* Move the negation into FNMA only when signed overflow is
!       unobservable for both the outer operation and the inner negate.  */
!      (with { tree utype = unsigned_type_for (type); }
!       (convert (IFN_FNMA (convert:utype @0) (convert:utype @1)
! 			 (convert:utype @2))))))))
  
   (simplify
    (IFN_FMS:c (negate @0) @1 @2)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 11227,11232 ****
--- 10703,10867 ----
  					 OPTIMIZE_FOR_SPEED))
    (with { tree utype = unsigned_type_for (TREE_TYPE (@0)); }
     (plus (CTZ:type (convert:utype @0)) { build_one_cst (type); }))))
+ 
+ /* To recognize the popcnt pattern for 32-bit from Hacker's Delight
+    int Gia_WordCountOnes32c ( uint32_t uword)
+    {
+    uword = (uword & 0x55555555) + ((uword>>1) & 0x55555555);
+    uword = (uword & 0x33333333) + ((uword>>2) & 0x33333333);
+    uword = (uword & 0x0f0f0f0f) + ((uword>>4) & 0x0f0f0f0f);
+    uword = (uword & 0x00ff00ff) + ((uword>>8) & 0x00ff00ff);
+    return (uword & 0x0000ffff) + (uword>>16);
+    or
+    return (uword & 0x0000ffff) + ((uword>>16) & 0x0000ffff);
+    }
+ */
+ 
+   (simplify
+      (plus:c
+        (bit_and @step_4 INTEGER_CST@9)
+        (rshift
+ 	 (plus:c@step4
+ 	   (bit_and @step3 INTEGER_CST@7)
+ 	(bit_and
+ 	   (rshift
+ 	      (plus:c@step3
+ 		  (bit_and @step2 INTEGER_CST@5)
+ 		  (bit_and
+ 		     (rshift
+ 			(plus:c@step2
+ 			   (bit_and @step1 INTEGER_CST@3)
+ 			   (bit_and
+ 			      (rshift
+ 				  (plus:c@step1
+ 				      (bit_and @0 INTEGER_CST@1)
+ 				      (bit_and (rshift @0 INTEGER_CST@2) @1))
+ 				  INTEGER_CST@4)
+ 			      INTEGER_CST@3))
+ 			INTEGER_CST@6)
+ 		     INTEGER_CST@5))
+ 	      INTEGER_CST@8)
+ 	   INTEGER_CST@7))
+ 	 INTEGER_CST@10))
+    (with {
+     unsigned prec = TYPE_PRECISION (type);
+     }
+     (if (prec == 32
+ 	 && TYPE_UNSIGNED (type)
+ 	 && compare_tree_int (@2, 1) == 0
+ 	 && compare_tree_int (@4, 2) == 0
+ 	 && compare_tree_int (@6, 4) == 0
+ 	 && compare_tree_int (@8, 8) == 0
+ 	 && compare_tree_int (@10, 16) == 0
+ 	 && compare_tree_int (@1, 0x55555555) == 0
+ 	 && compare_tree_int (@3, 0x33333333) == 0
+ 	 && compare_tree_int (@5, 0x0F0F0F0F) == 0
+ 	 && compare_tree_int (@7, 0x00FF00FF) == 0
+ 	 && compare_tree_int (@9, 0x0000FFFF) == 0)
+        (if (direct_internal_fn_supported_p (IFN_POPCOUNT, type,
+ 					    OPTIMIZE_FOR_BOTH))
+ 	(convert (IFN_POPCOUNT:type @0))))))
+ 
+ /* To recognize the popcnt pattern for 32-bit from Hacker's Delight
+    int pop (unsigned x)
+    {
+     x = x - ((x >> 1) & 0x55555555);
+     x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+     x = (x + (x >> 4)) & 0x0F0F0F0F;
+     x = x + (x >> 8);
+     x = x + (x >> 16);
+     return x & 0x0000003F
+    }
+ */
+ (simplify
+  (bit_and
+    (plus
+     (rshift @step4 INTEGER_CST@10)
+      (plus:c@step4
+ 	(rshift @step3 INTEGER_CST@8)
+ 	   (bit_and@step3
+ 	     (plus
+ 		(rshift @step2 INTEGER_CST@6)
+ 		   (plus:c@step2
+ 		      (bit_and @step1 INTEGER_CST@3)
+ 		      (bit_and
+ 			  (rshift
+ 			    (minus@step1
+ 			     @0
+ 			     (bit_and (rshift @0 INTEGER_CST@2) INTEGER_CST@1))
+ 			    INTEGER_CST@4)
+ 			 INTEGER_CST@3)))
+ 	     INTEGER_CST@5)))
+    INTEGER_CST@7)
+  (with {
+    unsigned prec = TYPE_PRECISION (type);
+    }
+    (if (prec == 32
+ 	&& TYPE_UNSIGNED (type)
+ 	&& compare_tree_int (@2, 1) == 0
+ 	&& compare_tree_int (@4, 2) == 0
+ 	&& compare_tree_int (@6, 4) == 0
+ 	&& compare_tree_int (@8, 8) == 0
+ 	&& compare_tree_int (@10, 16) == 0
+ 	&& compare_tree_int (@1, 0x55555555) == 0
+ 	&& compare_tree_int (@3, 0x33333333) == 0
+ 	&& compare_tree_int (@5, 0x0F0F0F0F) == 0
+ 	&& compare_tree_int (@7, 0x0000003F) == 0)
+      (if (direct_internal_fn_supported_p (IFN_POPCOUNT, type,
+ 					  OPTIMIZE_FOR_BOTH))
+ 	(convert (IFN_POPCOUNT:type @0))))))
+ 
+ /* To recognize the popcnt pattern for 32-bit from Hacker's Delight
+    int pop (unsigned x)
+    {
+      x = x - ((x >> 1) & 0x55555555);
+      x = x - 3*((x >> 2) & 0x33333333)
+      x = (x + (x >> 4)) & 0x0F0F0F0F;
+      x = x + (x >> 8);
+      x = x + (x >> 16);
+      return x & 0x0000003F;
+    }
+ */
+ (simplify
+  (bit_and
+    (plus
+     (rshift @step4 INTEGER_CST@10)
+      (plus:c@step4
+ 	(rshift @step3 INTEGER_CST@8)
+ 	   (bit_and@step3
+ 	      (plus
+ 		(rshift @step2 INTEGER_CST@6)
+ 		(minus@step2
+ 		   @step1
+ 		   (mult:c
+ 		      (bit_and
+ 			(rshift
+ 			  (minus@step1
+ 			     @0
+ 			     (bit_and (rshift @0 INTEGER_CST@2) INTEGER_CST@1))
+ 			  INTEGER_CST@4)
+ 			INTEGER_CST@3)
+ 		      INTEGER_CST@11)))
+ 	      INTEGER_CST@5)))
+    INTEGER_CST@7)
+  (with {
+    unsigned prec = TYPE_PRECISION (type);
+    }
+    (if (prec == 32
+ 	&& TYPE_UNSIGNED (type)
+ 	&& compare_tree_int (@2, 1) == 0
+ 	&& compare_tree_int (@4, 2) == 0
+ 	&& compare_tree_int (@6, 4) == 0
+ 	&& compare_tree_int (@8, 8) == 0
+ 	&& compare_tree_int (@10, 16) == 0
+ 	&& compare_tree_int (@11, 3) == 0
+ 	&& compare_tree_int (@1, 0x55555555) == 0
+ 	&& compare_tree_int (@3, 0x33333333) == 0
+ 	&& compare_tree_int (@5, 0x0F0F0F0F) == 0
+ 	&& compare_tree_int (@5, 0x0F0F0F0F) == 0)
+      (if (direct_internal_fn_supported_p (IFN_POPCOUNT, type,
+ 					  OPTIMIZE_FOR_BOTH))
+ 	(convert (IFN_POPCOUNT:type @0))))))
  #endif
  
  (for ffs (FFS)
*************** and,
*** 12472,12474 ****
--- 12107,12127 ----
  (simplify
   (BUILT_IN_CONSTANT_P (nop_convert@1 @0))
   (BUILT_IN_CONSTANT_P @0))
+ 
+ #if GIMPLE
+ 
+ /* Include the saturation alu match patterns.  */
+ #include "match-sat-alu.pd"
+ 
+ #endif
+ 
+ /* The boundary condition for case 10: IMM = 1:
+    SAT_U_SUB = X >= IMM ? (X - IMM) : 0.
+    simplify (X != 0 ? X + ~0 : 0) to X - (X != 0).  */
+ (simplify
+  (cond (ne@1 @0 integer_zerop)
+        (nop_convert1? (plus (nop_convert2?@2 @0) integer_all_onesp))
+        integer_zerop)
+  (if (INTEGRAL_TYPE_P (type))
+    (with { tree itype = TREE_TYPE (@2); }
+     (convert (minus @2 (convert:itype @1))))))
diff -Nrcpad gcc-17-20260510/gcc/omp-general.cc gcc-17-20260517/gcc/omp-general.cc
*** gcc-17-20260510/gcc/omp-general.cc	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/omp-general.cc	Sun May 17 22:32:06 2026
*************** omp_runtime_api_procname (const char *na
*** 4042,4047 ****
--- 4042,4048 ----
        NULL,
        /* And finally calls available as omp_*, omp_*_ and omp_*_8_; however,
  	 as DECL_NAME only omp_* and omp_*_8 appear.  */
+       "control_tool",
        "display_env",
        "get_ancestor_thread_num",
        "get_uid_from_device",
diff -Nrcpad gcc-17-20260510/gcc/optabs.cc gcc-17-20260517/gcc/optabs.cc
*** gcc-17-20260510/gcc/optabs.cc	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/optabs.cc	Sun May 17 22:32:06 2026
*************** expand_doubleword_bswap (machine_mode mo
*** 2959,2964 ****
--- 2959,3090 ----
    return target;
  }
  
+ /* Try calculating (bitreverse x) using masks and shifts.  */
+ 
+ static rtx
+ expand_bitreverse (scalar_int_mode mode, rtx op0, rtx target)
+ {
+   unsigned int precision = GET_MODE_BITSIZE (mode);
+   rtx_insn *last;
+ 
+   /* Operation requires at least 4 bits (one nibble swap makes no sense below
+      that).  */
+   if (precision < 4)
+     return NULL_RTX;
+ 
+   if (target == NULL_RTX
+       || target == op0
+       || reg_overlap_mentioned_p (target, op0))
+     target = gen_reg_rtx (mode);
+ 
+   last = get_last_insn ();
+ 
+   rtx x, lo, hi;
+ 
+   /* Step 1: byte-swap (only meaningful for >= 16 bits).  */
+   if (precision >= 16)
+     {
+       x = expand_unop (mode, bswap_optab, op0, NULL_RTX, true);
+       if (x == NULL_RTX)
+ 	goto fail;
+     }
+   else
+     x = op0;
+ 
+   /* Step 2: swap nibbles within each byte (shift=4, only for >= 8 bits).  */
+   if (precision >= 8)
+     {
+       wide_int mask = wi::zero (precision);
+       for (unsigned int start = 0; start < precision; start += 8)
+ 	mask = wi::bit_or (mask, wi::shifted_mask (start, 4, false,
+ 						   precision));
+ 
+       rtx mask_rtx = immed_wide_int_const (mask, mode);
+ 
+       hi = expand_simple_binop (mode, LSHIFTRT, x, GEN_INT (4),
+ 				NULL_RTX, true, OPTAB_LIB_WIDEN);
+       if (hi == NULL_RTX) goto fail;
+       hi = expand_binop (mode, and_optab, hi, mask_rtx,
+ 			 NULL_RTX, true, OPTAB_LIB_WIDEN);
+       if (hi == NULL_RTX) goto fail;
+ 
+       lo = expand_binop (mode, and_optab, x, mask_rtx,
+ 			 NULL_RTX, true, OPTAB_LIB_WIDEN);
+       if (lo == NULL_RTX) goto fail;
+       lo = expand_simple_binop (mode, ASHIFT, lo, GEN_INT (4),
+ 				NULL_RTX, true, OPTAB_LIB_WIDEN);
+       if (lo == NULL_RTX) goto fail;
+ 
+       x = expand_binop (mode, ior_optab, hi, lo,
+ 			NULL_RTX, true, OPTAB_LIB_WIDEN);
+       if (x == NULL_RTX) goto fail;
+     }
+ 
+   /* Step 3: swap pairs of bits within each nibble (shift=2).  */
+   {
+     wide_int mask = wi::zero (precision);
+     for (unsigned int start = 0; start < precision; start += 4)
+       mask = wi::bit_or (mask, wi::shifted_mask (start, 2, false, precision));
+ 
+     rtx mask_rtx = immed_wide_int_const (mask, mode);
+ 
+     hi = expand_simple_binop (mode, LSHIFTRT, x, GEN_INT (2),
+ 			      NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (hi == NULL_RTX) goto fail;
+     hi = expand_binop (mode, and_optab, hi, mask_rtx,
+ 		       NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (hi == NULL_RTX) goto fail;
+ 
+     lo = expand_binop (mode, and_optab, x, mask_rtx,
+ 		       NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (lo == NULL_RTX) goto fail;
+     lo = expand_simple_binop (mode, ASHIFT, lo, GEN_INT (2),
+ 			      NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (lo == NULL_RTX) goto fail;
+ 
+     x = expand_binop (mode, ior_optab, hi, lo,
+ 		      NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (x == NULL_RTX) goto fail;
+   }
+ 
+   /* Step 4: swap adjacent bits (shift=1).  */
+   {
+     wide_int mask = wi::zero (precision);
+     for (unsigned int start = 0; start < precision; start += 2)
+       mask = wi::bit_or (mask, wi::shifted_mask (start, 1, false,
+ 						 precision));
+ 
+     rtx mask_rtx = immed_wide_int_const (mask, mode);
+ 
+     hi = expand_simple_binop (mode, LSHIFTRT, x, GEN_INT (1),
+ 			      NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (hi == NULL_RTX) goto fail;
+     hi = expand_binop (mode, and_optab, hi, mask_rtx,
+ 		       NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (hi == NULL_RTX) goto fail;
+ 
+     lo = expand_binop (mode, and_optab, x, mask_rtx,
+ 		       NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (lo == NULL_RTX) goto fail;
+     lo = expand_simple_binop (mode, ASHIFT, lo, GEN_INT (1),
+ 			      NULL_RTX, true, OPTAB_LIB_WIDEN);
+     if (lo == NULL_RTX) goto fail;
+ 
+     x = expand_binop (mode, ior_optab, hi, lo,
+ 		      target, true, OPTAB_LIB_WIDEN);
+     if (x == NULL_RTX) goto fail;
+   }
+ 
+   if (x != target)
+     emit_move_insn (target, x);
+ 
+   return target;
+ 
+  fail:
+   delete_insns_since (last);
+   return NULL_RTX;
+ }
+ 
  /* Try calculating (parity x) as (and (popcount x) 1), where
     popcount can also be done in a wider mode.  */
  static rtx
*************** expand_unop (machine_mode mode, optab un
*** 3409,3414 ****
--- 3535,3544 ----
        goto try_libcall;
      }
  
+   if (unoptab == bitreverse_optab && is_a <scalar_int_mode> (mode, &int_mode))
+     if (rtx tem = expand_bitreverse (int_mode, op0, target))
+       return tem;
+ 
    /* Neg should be tried via expand_absneg_bit before widening.  */
    if (optab_to_code (unoptab) == NEG)
      {
diff -Nrcpad gcc-17-20260510/gcc/optabs.def gcc-17-20260517/gcc/optabs.def
*** gcc-17-20260510/gcc/optabs.def	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/optabs.def	Sun May 17 22:32:06 2026
*************** OPTAB_VC(absv_optab, "absv$I$a2", ABS)
*** 184,189 ****
--- 184,190 ----
  OPTAB_VX(absv_optab, "abs$F$a2")
  OPTAB_NL(one_cmpl_optab, "one_cmpl$a2", NOT, "one_cmpl", '2', gen_int_libfunc)
  OPTAB_NC(bswap_optab, "bswap$a2", BSWAP)
+ OPTAB_NC(bitreverse_optab, "bitreverse$a2", BITREVERSE)
  OPTAB_NL(ffs_optab, "ffs$a2", FFS, "ffs", '2', gen_int_libfunc)
  OPTAB_NL(clz_optab, "clz$a2", CLZ, "clz", '2', gen_int_libfunc)
  OPTAB_NL(ctz_optab, "ctz$a2", CTZ, "ctz", '2', gen_int_libfunc)
diff -Nrcpad gcc-17-20260510/gcc/rtl.h gcc-17-20260517/gcc/rtl.h
*** gcc-17-20260510/gcc/rtl.h	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/rtl.h	Sun May 17 22:32:06 2026
*************** public:
*** 3496,3501 ****
--- 3496,3502 ----
  				  rtx, rtx, rtx);
    rtx simplify_relational_operation (rtx_code, machine_mode, machine_mode,
  				     rtx, rtx);
+   rtx simplify_ior_with_common_term (machine_mode, rtx, rtx);
    rtx simplify_subreg (machine_mode, rtx, machine_mode, poly_uint64);
  
    rtx lowpart_subreg (machine_mode, rtx, machine_mode);
diff -Nrcpad gcc-17-20260510/gcc/simplify-rtx.cc gcc-17-20260517/gcc/simplify-rtx.cc
*** gcc-17-20260510/gcc/simplify-rtx.cc	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/simplify-rtx.cc	Sun May 17 22:32:07 2026
*************** simplify_context::simplify_logical_relat
*** 2734,2739 ****
--- 2734,2817 ----
    return simplify_gen_relational (code, mode, VOIDmode, op0, op1);
  }
  
+ /* We are going to IOR together OP0/OP1.  If there is a common term in OP0/OP1
+    then we may be able to simplify the expression.  We're primarily trying to
+    simplify down to IOR/XOR expression right now, but there may be other
+    simplifications we can do in the future.
+ 
+    Return the simpified expression or NULL_RTX if no simpification was
+    possible.  */
+ rtx
+ simplify_context::simplify_ior_with_common_term (machine_mode mode, rtx op0, rtx op1)
+ {
+   /* (ior X (plus/xor X C)) can be simplified into (ior X C) when
+      X and C have no bits in common.  */
+   if ((GET_CODE (op1) == PLUS || GET_CODE (op1) == XOR)
+       && rtx_equal_p (op0, XEXP (op1, 0))
+       && ((nonzero_bits (op0, GET_MODE (op0))
+ 	  & nonzero_bits (XEXP (op1, 1), GET_MODE (op1))) == 0)
+       && !side_effects_p (op1))
+     return simplify_gen_binary (IOR, mode, op0, XEXP (op1, 1));
+ 
+   /* (ior (and A C1) (and (not A) C2)) can be converted
+      into (and (xor A C2) (C1 + C2)) when there are no bits
+      in common between C1 and C2.  */
+   if (GET_CODE (op0) == AND
+       && GET_CODE (op1) == AND
+       && GET_CODE (XEXP (op1, 0)) == NOT
+       && rtx_equal_p (XEXP (op0, 0), XEXP (XEXP (op1, 0), 0))
+       && CONST_INT_P (XEXP (op0, 1))
+       && CONST_INT_P (XEXP (op1, 1))
+       && (INTVAL (XEXP (op0, 1)) & INTVAL (XEXP (op1, 1))) == 0)
+     {
+       rtx c = GEN_INT (INTVAL (XEXP (op0, 1)) + INTVAL (XEXP (op1, 1)));
+ 
+       rtx tem = simplify_gen_binary (XOR, mode, XEXP (op0, 0), XEXP (op1, 1));
+       if (tem)
+ 	{
+ 	  tem = simplify_gen_binary (AND, mode, tem, c);
+ 
+ 	  if (tem)
+ 	    return tem;
+ 	}
+     }
+ 
+   /* Another variant seen on some target particularly those with
+      sub-word operations.
+ 
+      (ior (and A C1) (plus (and A C2) C2)) can be simplified into
+      (and (xor (A C2) (C1 + C2).
+ 
+      Where C2 is the sign bit for A's mode.  So 0x80 for QI,
+      0x8000 for HI, etc.  In this case we know there is no carry
+      from the PLUS into relevant bits of the output.  */
+   if (GET_CODE (op0) == AND
+       && GET_CODE (op1) == PLUS
+       && GET_CODE (XEXP (op1, 0)) == AND
+       && rtx_equal_p (XEXP (op0, 0), XEXP (XEXP (op1, 0), 0))
+       && CONST_INT_P (XEXP (op0, 1))
+       && CONST_INT_P (XEXP (op1, 1))
+       && CONST_INT_P (XEXP (XEXP (op1, 0), 1))
+       && INTVAL (XEXP (op1, 1)) == INTVAL (XEXP (XEXP (op1, 0), 1))
+       && GET_MODE_BITSIZE (GET_MODE (op1)).is_constant ()
+       && ((INTVAL (XEXP (op1, 1)) & GET_MODE_MASK (GET_MODE (op1)))
+ 	  == HOST_WIDE_INT_1U << (GET_MODE_BITSIZE (GET_MODE (op1)).to_constant () - 1))
+       && (INTVAL (XEXP (op0, 1)) & INTVAL (XEXP (op1, 1))) == 0)
+     {
+       rtx c = GEN_INT (INTVAL (XEXP (op0, 1)) + INTVAL (XEXP (op1, 1)));
+ 
+       rtx tem = simplify_gen_binary (XOR, mode, XEXP (op0, 0), XEXP (op1, 1));
+       if (tem)
+ 	{
+ 	  tem = simplify_gen_binary (AND, mode, tem, c);
+ 	  if (tem)
+ 	    return tem;
+ 	}
+     }
+   return NULL_RTX;
+ }
+ 
+ 
  /* Simplify a binary operation CODE with result mode MODE, operating on OP0
     and OP1.  Return 0 if no simplification is possible.
  
*************** simplify_context::simplify_binary_operat
*** 3900,3905 ****
--- 3978,3996 ----
  	  && negated_ops_p (XEXP (op0, 0), op1))
  	return simplify_gen_binary (IOR, mode, XEXP (op0, 1), op1);
  
+       /* op0/op1 may have a common term which in turn may allow simplification
+ 	 of the the outer IOR.  There are likely other cases we should
+ 	 handle for the outer code as well as the form of the operands.  */
+       tem = simplify_ior_with_common_term (mode, op0, op1);
+       if (tem)
+ 	return tem;
+ 
+       /* IOR is commutative and we can't rely on canonicalization at this point,
+ 	 so try again to simplify with the operands reversed.  */
+       tem = simplify_ior_with_common_term (mode, op1, op0);
+       if (tem)
+ 	return tem;
+ 
        tem = simplify_with_subreg_not (code, mode, op0, op1);
        if (tem)
  	return tem;
diff -Nrcpad gcc-17-20260510/gcc/testsuite/ChangeLog gcc-17-20260517/gcc/testsuite/ChangeLog
*** gcc-17-20260510/gcc/testsuite/ChangeLog	Sun May 10 22:32:07 2026
--- gcc-17-20260517/gcc/testsuite/ChangeLog	Sun May 17 22:32:07 2026
***************
*** 1,3 ****
--- 1,507 ----
+ 2026-05-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* gcc.dg/builtin-bitreverse-4.c: New test.
+ 
+ 2026-05-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* gcc.dg/builtin-bitreverse-1.c: Add __builtin_bitreverse128 tests.
+ 	* gcc.dg/builtin-bitreverse-2.c: Likewise.
+ 
+ 2026-05-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* gcc.dg/builtin-bitreverse-3.c: New test.
+ 
+ 2026-05-16  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/avx-stv-1.c: New test case.
+ 	* gcc.target/i386/sse2-stv-3.c: Likewise.
+ 	* gcc.target/i386/sse2-stv-4.c: Likewise.
+ 	* gcc.target/i386/sse2-stv-5.c: Likewise.
+ 
+ 2026-05-16  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add form 10.
+ 	* gcc.target/riscv/sat/sat_u_mul-11-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-11-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-11-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-11-u8.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-11-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-11-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-11-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-11-u8.c: New test.
+ 
+ 2026-05-16  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add form 9.
+ 	* gcc.target/riscv/sat/sat_u_mul-10-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-10-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-10-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-10-u8.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-10-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-10-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-10-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-10-u8.c: New test.
+ 
+ 2026-05-16  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add form 8.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u64.c: New test.
+ 
+ 2026-05-16  Shivam Gupta  <shivam98.tkg@gmail.com>
+ 
+ 	PR tree-optimization/112095
+ 	* gcc.dg/tree-ssa/pr112095.c: New test.
+ 
+ 2026-05-15  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* g++.dg/warn/Wuninitialized-pr107919-1.C: Fix a dg-bogus.
+ 
+ 2026-05-15  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125290
+ 	* g++.dg/warn/Wuninitialized-pr107919-1.C: Remove xfail.
+ 	* gcc.dg/analyzer/taint-assert.c: Update for the non-removal
+ 	of block containing unreachable.
+ 	* gcc.dg/torture/pr125290-1.c: New test.
+ 
+ 2026-05-15  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR c/124532
+ 	* c-c++-common/pr124532.c: New test.
+ 
+ 2026-05-15  Lili Cui  <lili.cui@intel.com>
+ 
+ 	* gcc.dg/vect/slp-reduc-15.c: Add aarch64 support and use
+ 	-mavx2 for x86.
+ 
+ 2026-05-15  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR tree-optimization/125291
+ 	* gcc.c-torture/execute/pr125291.c: New test.
+ 
+ 2026-05-15  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* gcc.target/loongarch/la64/spaceship.c: New test.
+ 
+ 2026-05-15  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	PR target/123924
+ 	* gcc.target/aarch64/sve/fnma_match.c: New test.
+ 	* gcc.target/aarch64/sve/pr123897.c:
+ 	Update the test to scan for FNMA in the tree dump.
+ 
+ 2026-05-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125296
+ 	* gcc.dg/pr125206.c: New testcase.
+ 
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/125308
+ 	* gcc.target/i386/pr125308.c: New test.
+ 
+ 2026-05-15  Disservin  <disservin.social@gmail.com>
+ 	    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/50481
+ 	* gcc.dg/builtin-bitreverse-1.c: New test.
+ 	* gcc.dg/builtin-bitreverse-2.c: New test.
+ 
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125179
+ 	* g++.dg/reflect/pr125179.C: New test.
+ 
+ 2026-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125081
+ 	* c-c++-common/Wconstant-logical-operand-1.c: New test.
+ 	* c-c++-common/Wconstant-logical-operand-2.c: New test.
+ 
+ 2026-05-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125315
+ 	* g++.dg/cpp2a/no_unique_address16.C: New test.
+ 
+ 2026-05-14  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	* lib/target-supports.exp (check_profiling_available): Remove
+ 	unused global declaration and debugging output.
+ 
+ 2026-05-14  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/124628
+ 	* g++.dg/reflect/can_substitute2.C: New test.
+ 	* g++.dg/reflect/members_of14.C: New test.
+ 	* g++.dg/reflect/substitute3.C: Adjust test so that f<int>'s
+ 	return type fails to get deduced.
+ 	* g++.dg/reflect/type_of3.C: Also test type_of of a templated
+ 	member function with deduced return type.
+ 
+ 2026-05-14  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	PR target/124316
+ 	* gcc.target/i386/pr124316.c: New test.
+ 
+ 2026-05-14  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* c-c++-common/gomp/declare-mapper-10.c: Exclude C++98.
+ 	* c-c++-common/gomp/declare-mapper-15.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-16.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-3.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-4.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-5.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-6.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-7.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-8.c: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-9.c: Likewise.
+ 	* g++.dg/gomp/declare-mapper-1.C: Likewise.
+ 	* g++.dg/gomp/declare-mapper-2.C: Likewise.
+ 	* c-c++-common/gomp/pr122866.c: Expect sorry with C++98.
+ 	* c-c++-common/gomp/declare-mapper-11.c: Likewise.
+ 	Add dg-error for missing var-in-map-clause use.
+ 	* g++.dg/gomp/declare-mapper-3.C: Likewise.
+ 	* c-c++-common/gomp/declare-mapper-17.c: New test.
+ 	* c-c++-common/gomp/declare-mapper-18.c: New test.
+ 	* g++.dg/gomp/declare-mapper-4.C: New test.
+ 	* g++.dg/gomp/declare-mapper-5.C: New test.
+ 
+ 2026-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/125092
+ 	* gfortran.dg/PR100906.f90: Add -Wno-pedantic to options.
+ 	* gfortran.dg/PR100911.f90: Likewise.
+ 	* gfortran.dg/PR100915.f90: Likewise.
+ 	* gfortran.dg/PR94327.f90: Likewise.
+ 	* gfortran.dg/PR94331.f90: Likewise.
+ 	* gfortran.dg/bind_c_procs_4.f90: Add error messages, remove
+ 	warning.
+ 	* gfortran.dg/binding_label_tests_25.f90: Add error messages.
+ 	* gfortran.dg/binding_label_tests_3.f03: Add error messages.
+ 	* gfortran.dg/binding_label_tests_34.f90: Add -Wno-pedantic to
+ 	options.
+ 	* gfortran.dg/c_char_tests_4.f90: Likewise.
+ 	* gfortran.dg/c_char_tests_5.f90: Likewise.
+ 	* gfortran.dg/binding_label_tests_36.f90: New test.
+ 	* gfortran.dg/binding_label_tests_37.f90: New test.
+ 
+ 2026-05-14  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR rtl-optimization/96692
+ 	* gcc.target/loongarch/pr96692.c: New test.
+ 
+ 2026-05-13  Zhongyao Chen  <chen.zhongyao@zte.com.cn>
+ 
+ 	PR target/125215
+ 	* gcc.target/riscv/rvv/autovec/pr125215.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/slp-interleave-1.c: Remove.
+ 	* gcc.target/riscv/rvv/autovec/slp-interleave-2.c: Remove.
+ 	* gcc.target/riscv/rvv/autovec/slp-interleave-3.c: Remove.
+ 	* gcc.target/riscv/rvv/autovec/slp-interleave-4.c: Remove.
+ 	* gcc.target/riscv/rvv/autovec/slp-interleave-5.c: Remove.
+ 
+ 2026-05-13  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125280
+ 	* g++.dg/reflect/init19.C: New test.
+ 	* g++.dg/reflect/type12.C: New test.
+ 	* g++.dg/reflect/type13.C: New test.
+ 
+ 2026-05-13  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* gcc.dg/vect/vect-scev-affine_1.c: New test.
+ 
+ 2026-05-13  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/32803
+ 	* gcc.target/i386/pr32803-2.c: New test case.
+ 	* gcc.target/i386/pr32803-3.c: Likewise.
+ 
+ 2026-05-13  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR middle-end/122871
+ 	* gcc.target/arm/muldi-1.c: Skip test if compiled with -mthumb.
+ 
+ 2026-05-13  Reshma Roy  <Reshma.Roy@amd.com>
+ 
+ 	* gcc.dg/tree-ssa/popcount7.c: New test.
+ 	* gcc.dg/tree-ssa/popcount7_2.c: New test.
+ 	* gcc.dg/tree-ssa/popcount8.c: New test.
+ 	* gcc.dg/tree-ssa/popcount9.c: New test.
+ 
+ 2026-05-13  H.J. Lu  <hjl.tools@gmail.com>
+ 	    Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/120870
+ 	* gcc.target/i386/pr120870-1.c: New test.
+ 	* gcc.target/i386/pr120870-2.c: Likewise.
+ 
+ 2026-05-13  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	PR c/125261
+ 	* gcc.dg/pr125261.c: New test.
+ 
+ 2026-05-13  chzn@mail.ustc.edu.cn  <chzn@mail.ustc.edu.cn>
+ 	    Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/123609
+ 	* g++.dg/cpp0x/attr-nodiscard1.C: Adjust expected errors.
+ 	* g++.dg/reflect/annotations19.C: New test.
+ 
+ 2026-05-13  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	* gcc.dg/pr123286.c: Move to...
+ 	* gcc.target/aarch64/pr123286.c: ...here.
+ 
+ 2026-05-13  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR libfortran/125005
+ 	* gfortran.dg/coarray/failed_images_2.f08,
+ 	gfortran.dg/coarray/image_status_2.f08,
+ 	gfortran.dg/coarray/stopped_images_2.f08: Require sleep effective
+ 	target.
+ 
+ 2026-05-12  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob:
+ 	Corrected logic.
+ 	* cobol.dg/group2/ENTRY_statement.cob: Expanded test.
+ 	* cobol.dg/group2/ENTRY_statement.out: Likewise.
+ 	* cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob: Automated
+ 	generation of run-time environment variable.
+ 	* cobol.dg/group2/Intrinsic_Function_ABS.cob: Corrected.
+ 	* cobol.dg/group2/RETURN-CODE_moving.cob: Requires "dialect ibm".
+ 	* cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob: New test.
+ 	* cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out: New test.
+ 	* cobol.dg/group2/Large_PIC_10000000_.cob: New test.
+ 	* cobol.dg/group2/Large_PIC_10000000_.out: New test.
+ 	* cobol.dg/group2/Nested_PERFORM.cob: New test.
+ 	* cobol.dg/group2/Nested_PERFORM.out: New test.
+ 	* cobol.dg/group2/Overlapping_MOVE.cob: New test.
+ 	* cobol.dg/group2/Overlapping_MOVE.out: New test.
+ 	* cobol.dg/group2/PERFORM_TIMES_subscripted.cob: New test.
+ 	* cobol.dg/group2/PERFORM_TIMES_subscripted.out: New test.
+ 	* cobol.dg/group2/PERFORM_VARYING_BY_-0.2.cob: New test.
+ 	* cobol.dg/group2/PERFORM_VARYING_BY_-0.2.out: New test.
+ 	* cobol.dg/group2/REDEFINES__chained.cob: New test.
+ 	* cobol.dg/group2/REDEFINES__chained.out: New test.
+ 	* cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.cob: New test.
+ 	* cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.out: New test.
+ 	* cobol.dg/group2/Sanity_check_for_ENTRY.cob: New test.
+ 	* cobol.dg/group2/Sanity_check_for_ENTRY.out: New test.
+ 	* cobol.dg/group2/Simple_COMP-X.cob: New test.
+ 	* cobol.dg/group2/Simple_COMP-X.out: New test.
+ 	* cobol.dg/group2/compare_alpha_to_all__literal_.cob: New test.
+ 	* cobol.dg/group2/compare_alpha_to_all__literal_.out: New test.
+ 	* cobol.dg/group2/compare_national_to_display.cob: New test.
+ 	* cobol.dg/group2/compare_national_to_display.out: New test.
+ 	* cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob: New test.
+ 	* cobol.dg/group2/comprensive_compare_comp-1_comp-5.out: New test.
+ 	* cobol.dg/group2/refmod_with_nested_parentheses.cob: New test.
+ 	* cobol.dg/group2/refmod_with_nested_parentheses.out: New test.
+ 	* cobol.dg/group2/signed_unsigned_compare.cob: New test.
+ 	* cobol.dg/group2/signed_unsigned_compare.out: New test.
+ 
+ 2026-05-12  Christopher Bazley  <chris.bazley@arm.com>
+ 
+ 	* gcc.dg/c23-empty-init-warn-1.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-10.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-11.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-12.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-13.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-14.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-15.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-16.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-17.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-2.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-3.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-4.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-5.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-6.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-7.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-8.c: New test.
+ 	* gcc.dg/c23-empty-init-warn-9.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-1.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-10.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-11.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-12.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-13.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-14.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-15.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-16.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-17.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-2.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-3.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-4.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-5.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-6.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-7.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-8.c: New test.
+ 	* gcc.dg/gnu11-empty-init-warn-9.c: New test.
+ 
+ 2026-05-12  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/100903
+ 	* g++.dg/cpp2a/spaceship-warn1.C: New test.
+ 
+ 2026-05-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/50479
+ 	PR c++/62244
+ 	* g++.dg/reflect/parm1.C: Uncomment code.
+ 	* g++.dg/parse/defarg22.C: New test.
+ 	* g++.dg/parse/defarg23.C: New test.
+ 	* g++.dg/parse/defarg24.C: New test.
+ 	* g++.dg/parse/defarg25.C: New test.
+ 	* g++.dg/parse/defarg26.C: New test.
+ 
+ 2026-05-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* g++.dg/reflect/bases_of5.C: Use decltype (sizeof 0) instead of
+ 	unsigned long.
+ 
+ 2026-05-12  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/124151
+ 	* gcc.dg/tree-ssa/pr124151.c: New test.
+ 
+ 2026-05-12  Lili Cui  <lili.cui@intel.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	* gcc.dg/vect/slp-reduc-15.c: New test.
+ 
+ 2026-05-12  Artemiy Volkov  <artemiy.volkov@arm.com>
+ 
+ 	PR middle-end/125259
+ 	* gcc.dg/tree-ssa/pr125259.c: New test.
+ 
+ 2026-05-12  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/aarch64/erratas_opt_0.c: Revert skip on VxWorks.
+ 	* gcc.target/aarch64/erratas_opt_1.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_2.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_3.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_4.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_5.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_6.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_7.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_8.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_9.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_10.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_11.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_12.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_13.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_14.c: Likewise.
+ 	* gcc.target/aarch64/erratas_opt_15.c: Likewise.
+ 
+ 2026-05-12  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.dg/vect/pr94994.c: Include stddef.h.
+ 
+ 2026-05-12  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/pr114139.c: Reset arch.
+ 	* gcc.target/riscv/pr118170.c: Likewise.
+ 
+ 2026-05-12  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	* gcc.dg/pr123286.c: New test.
+ 
+ 2026-05-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125208
+ 	* g++.dg/reflect/alias3.C: New test.
+ 	* g++.dg/reflect/bases_of5.C: New test.
+ 
+ 2026-05-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/reflect/pr125007.C: Add info{} test.
+ 
+ 2026-05-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/124621
+ 	* g++.dg/reflect/reflect_constant_array2.C: Add -D_GLIBCXX_SYSHDR.
+ 
+ 2026-05-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	* gfortran.dg/coarray_51.f90: New test.
+ 
+ 2026-05-11  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* gcc.target/xtensa/elim_callee_saved.c:
+ 	Revise the test item for the number of mov instructions in the
+ 	assembler output.
+ 
+ 2026-05-11  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
+ 
+ 	* g++.target/i386/seh-sysvabi-wrap1.C: New test.
+ 
+ 2026-05-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125250
+ 	* gcc.dg/torture/pr125250.c: New testcase.
+ 
+ 2026-05-11  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	* gcc.target/aarch64/pr113856.c: New test.
+ 
+ 2026-05-11  Boudewijn van der Heide  <boudewijn@delta-utec.com>
+ 
+ 	PR rtl-optimization/125209
+ 	* gcc.dg/pr125209.c: New test.
+ 
+ 2026-05-11  Shreya Munnangi  <smunnang@qti.qualcomm.com>
+ 	    Jeff Law   <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/80770
+ 	* gcc.target/riscv/pr80770.c: New test.
+ 	* gcc.target/riscv/pr80770-2.c: New test.
+ 	* gcc.target/h8300/pr80770.c: New test.
+ 	* gcc.target/h8300/pr80770-2.c: New test.
+ 
+ 2026-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/enum6.adb: New test.
+ 
+ 2026-05-10  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125238
+ 	* gcc.target/i386/pr125238.c: New test.
+ 
+ 2026-05-10  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 	    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/125051
+ 	* gfortran.dg/coarray/pr125051.f90: New test.
+ 
  2026-05-09  Michiel Derhaeg  <Michiel.Derhaeg@synopsys.com>
  
  	PR target/125217
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/Wconstant-logical-operand-1.c gcc-17-20260517/gcc/testsuite/c-c++-common/Wconstant-logical-operand-1.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/Wconstant-logical-operand-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/c-c++-common/Wconstant-logical-operand-1.c	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,106 ----
+ /* PR c++/125081 */
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23" { target c } } */
+ /* { dg-additional-options "-Wconstant-logical-operand" } */
+ 
+ void foo (int);
+ enum A { B, C };
+ enum D { E, F, G, H, I };
+ 
+ void
+ bar (int x, bool y)
+ {
+   if (x && 64)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '64'" } */
+     foo (1);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (128 && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '128'" } */
+     foo (2);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x && 1)
+     foo (3);
+   if (1 && x)
+     foo (4);
+   if (x && 0)
+     foo (5);
+   if (0 && x)
+     foo (6);
+   if (x || 32)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '32'" } */
+     foo (7);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (256 || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '256'" } */
+     foo (8);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x || 1)
+     foo (9);
+   if (1 || x)
+     foo (10);
+   if (x || 0)
+     foo (11);
+   if (0 || x)
+     foo (12);
+   if (y && 64)
+     foo (13);
+   if (128 && y)
+     foo (14);
+   if (y || 32)
+     foo (15);
+   if (256 || y)
+     foo (16);
+   if (x && B)
+     foo (17);
+   if (B && x)
+     foo (18);
+   if (x && C)
+     foo (19);
+   if (C && x)
+     foo (20);
+   if (x && E)
+     foo (21);
+   if (E && x)
+     foo (22);
+   if (x && F)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[1F]'" } */
+     foo (23);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (F && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[1F]'" } */
+     foo (24);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x && G)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[2G]'" } */
+     foo (25);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (G && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[2G]'" } */
+     foo (26);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x || B)
+     foo (27);
+   if (B || x)
+     foo (28);
+   if (x || C)
+     foo (29);
+   if (C || x)
+     foo (30);
+   if (x || E)
+     foo (31);
+   if (E || x)
+     foo (32);
+   if (x || F)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[1F]'" } */
+     foo (33);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (F || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[1F]'" } */
+     foo (34);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x || G)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[2G]'" } */
+     foo (35);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (G || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[2G]'" } */
+     foo (36);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+ }
+ 
+ void
+ baz (int x, bool y)
+ {
+   if (x && 63 + 1)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '64'" } */
+     foo (1);		/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (127 + 1 && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '128'" } */
+     foo (2);		/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x || 31 + 1)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '32'" } */
+     foo (7);		/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (255 + 1 || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '256'" } */
+     foo (8);		/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (y && 63 + 1)
+     foo (13);
+   if (127 + 1 && y)
+     foo (14);
+   if (y || 31 + 1)
+     foo (15);
+   if (255 + 1 || y)
+     foo (16);
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/Wconstant-logical-operand-2.c gcc-17-20260517/gcc/testsuite/c-c++-common/Wconstant-logical-operand-2.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/Wconstant-logical-operand-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/c-c++-common/Wconstant-logical-operand-2.c	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,110 ----
+ /* PR c++/125081 */
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23" { target c } } */
+ /* { dg-additional-options "-Wall" } */
+ 
+ void foo (int);
+ enum A { B, C };
+ enum D { E, F, G, H, I };
+ 
+ void
+ bar (int x, bool y)
+ {
+   if (x && 64)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '64'" } */
+     foo (1);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (128 && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '128'" } */
+     foo (2);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x && 1)
+     foo (3);
+   if (1 && x)
+     foo (4);
+   if (x && 0)
+     foo (5);
+   if (0 && x)
+     foo (6);
+   if (x || 32)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '32'" } */
+     foo (7);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (256 || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '256'" } */
+     foo (8);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x || 1)
+     foo (9);
+   if (1 || x)
+     foo (10);
+   if (x || 0)
+     foo (11);
+   if (0 || x)
+     foo (12);
+   if (y && 64)
+     foo (13);
+   if (128 && y)
+     foo (14);
+   if (y || 32)
+     foo (15);
+   if (256 || y)
+     foo (16);
+   if (x && B)
+     foo (17);
+   if (B && x)
+     foo (18);
+   if (x && C)
+     foo (19);
+   if (C && x)
+     foo (20);
+   if (x && E)
+     foo (21);
+   if (E && x)
+     foo (22);
+   if (x && F)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[1F]'" } */
+     foo (23);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (F && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[1F]'" } */
+     foo (24);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x && G)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[2G]'" } */
+     foo (25);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+ 		/* { dg-warning "enum constant in boolean context" "" { target c++ } .-2 } */
+   if (G && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '\[2G]'" } */
+     foo (26);	/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+ 		/* { dg-warning "enum constant in boolean context" "" { target c++ } .-2 } */
+   if (x || B)
+     foo (27);
+   if (B || x)
+     foo (28);
+   if (x || C)
+     foo (29);
+   if (C || x)
+     foo (30);
+   if (x || E)
+     foo (31);
+   if (E || x)
+     foo (32);
+   if (x || F)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[1F]'" } */
+     foo (33);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (F || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[1F]'" } */
+     foo (34);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x || G)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[2G]'" } */
+     foo (35);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+ 		/* { dg-warning "enum constant in boolean context" "" { target c++ } .-2 } */
+   if (G || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '\[2G]'" } */
+     foo (36);	/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+ 		/* { dg-warning "enum constant in boolean context" "" { target c++ } .-2 } */
+ }
+ 
+ void
+ baz (int x, bool y)
+ {
+   if (x && 63 + 1)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '64'" } */
+     foo (1);		/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (127 + 1 && x)	/* { dg-warning "use of logical '\\\&\\\&' with constant operand '128'" } */
+     foo (2);		/* { dg-message "note: use '\\\&' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (x || 31 + 1)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '32'" } */
+     foo (7);		/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (255 + 1 || x)	/* { dg-warning "use of logical '\\\|\\\|' with constant operand '256'" } */
+     foo (8);		/* { dg-message "note: use '\\\|' for bitwise operation" "" { target *-*-* } .-1 } */
+   if (y && 63 + 1)
+     foo (13);
+   if (127 + 1 && y)
+     foo (14);
+   if (y || 31 + 1)
+     foo (15);
+   if (255 + 1 || y)
+     foo (16);
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-10.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-10.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-10.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-10.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
  
  struct S {
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
  
  struct S {
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-11.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-11.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-11.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-11.c	Sun May 17 22:32:07 2026
*************** struct XT {
*** 18,26 ****
--- 18,28 ----
  // { dg-error "expected primary-expression before '\\)' token" "" { target c++ } .-1 }
  // { dg-error "unknown type name 'XT'" "" { target c } .-2 }
  // { dg-error "expected end of line before 'y'" "" { target c } .-3 }
+ // { dg-error "at least one 'map' clause must map 'y' or an element of it" "" { target c++ } .-4 }
  #pragma omp declare mapper ( bar : struct XT y) map()
  // { dg-error "expected primary-expression before '\\)' token" "" { target c++ } .-1 }
  // { dg-error "expected expression before '\\)' token" "" { target c } .-2 }
+ // { dg-error "at least one 'map' clause must map 'y' or an element of it" "" { target *-*-* } .-3 }
  
  struct t {
    int x;
*************** typedef struct t myStruct;
*** 45,52 ****
--- 47,56 ----
  // { dg-error "expected primary-expression before '\\)' token" "" { target c++ } .-1 }
  // { dg-error "unknown type name 't'" "" { target c } .-2 }
  // { dg-error "expected end of line before 'v'" "" { target c } .-3 }
+ // { dg-error "at least one 'map' clause must map 'v' or an element of it" "" { target c++ } .-4 }
  
  #pragma omp declare mapper(fancy : struct t v) map(always,present,close,mapper(d),tofrom: v) // { dg-error "in 'declare mapper' directives, parameter to 'mapper' modifier must be 'default'" }
+ // { dg-message "sorry, unimplemented: '#pragma omp declare mapper' with '-std=' set to before C++11" "" { target c++98_only } .-1 }
  
  #pragma omp declare mapper(myStruct v) map(v, v.x)
  // { dg-note "'#pragma omp declare mapper \\(myStruct\\)' previously declared here" "" { target c++ } .-1 }
*************** union u_q { };
*** 61,66 ****
--- 65,71 ----
  #pragma omp declare mapper(union u_t v) map()
  // { dg-error "expected primary-expression before '\\)' token" "" { target c++ } .-1 }
  // { dg-error "expected expression before '\\)' token" "" { target c } .-2 }
+ // { dg-error "at least one 'map' clause must map 'v' or an element of it" "" { target *-*-* } .-3 }
  
  #pragma omp declare mapper( one : union u_t v) map(v)
  // { dg-note "'#pragma omp declare mapper \\(one: u_t\\)' previously declared here" "" { target c++ } .-1 }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-15.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-15.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-15.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-15.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  typedef struct {
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  typedef struct {
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-16.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-16.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-16.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-16.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  typedef struct {
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  typedef struct {
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-17.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-17.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-17.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-17.c	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,23 ----
+ typedef struct S { int x;} S;
+ int x;
+ S s;
+ 
+ void f() {
+   #pragma omp declare mapper(S var) map(to: x) /* { dg-error "at least one 'map' clause must map 'var' or an element of it" } */
+   #pragma omp target enter data map(s)
+ }
+ 
+ void f2()
+ {
+   int x;
+   #pragma omp declare mapper (int var) map(always, to: var)
+ // { dg-error "'int' is not a struct or union type in '#pragma omp declare mapper'" "" { target c } .-1 }
+ // { dg-error "'int' is not a struct, union or class type in '#pragma omp declare mapper'" "" { target c++ } .-2 }
+   #pragma omp target enter data map(x)
+ }
+ 
+ void f3() {
+   float g[2];
+   #pragma omp declare mapper (S var) map(always, to: g[var.x]) // { dg-error "at least one 'map' clause must map 'var' or an element of it" }
+   #pragma omp target enter data map(g)
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-18.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-18.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-18.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-18.c	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,39 ----
+ // { dg-do compile { target { c || c++11 } } }
+ // { dg-additional-options "-fdump-tree-gimple" }
+ 
+ typedef struct S { int x;} S;
+ int x;
+ S s1;
+ S s2;
+ 
+ void f() {
+   #pragma omp declare mapper(S var) map(to: var)
+   #pragma omp target exit data map(always, from: s1)
+ }
+ 
+ void f2() {
+   #pragma omp declare mapper(S var) map(present, to: var)
+   #pragma omp target enter data map(always, tofrom : s2)
+ }
+ 
+ void f3()
+ {
+   S x;
+   int y;
+   #pragma omp declare mapper (S var) map(always, to: var, y)
+   #pragma omp target enter data map(x)
+ }
+ 
+ 
+ // to + 'exit date' always from -> release
+ // { dg final { scan-dump "static int omp declare mapper <default> = struct S #pragma omp declare mapper \\(struct S var\\) map\\(to:var\\);" "gimple" }
+ // { dg final { scan-dump "#pragma omp target exit data map\\(release:s1 \\\[len: 4\\\]\\)" "gimple" }
+ 
+ 
+ // present,to + always,from -> always,present,to
+ // { dg final { scan-dump "static int omp declare mapper <default> = struct S #pragma omp declare mapper \\(struct S var\\) map\\(present,to:var\\);" "gimple" }
+ // { dg final { scan-dump "#pragma omp target enter data map\\(always,present,to:s2 \\\[len: 4\\\]\\)" "gimple" }
+ 
+ // always,to + - -> always,to
+ // { dg final { scan-dump "static int omp declare mapper <default> = struct S #pragma omp declare mapper \\(struct S var\\) map\\(always,to:y\\) map\\(always,to:var\\);" "gimple" }
+ // { dg final { scan-dump "#pragma omp target enter data map\\(always,to:y \\\[len: 4\\\]\\) map\\(always,to:x \\\[len: 4\\\]\\)" "gimple" }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-3.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-3.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-3.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-3.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! // { dg-do compile }
  // { dg-additional-options "-fdump-tree-gimple" }
  
  #include <stdlib.h>
--- 1,4 ----
! // { dg-do compile { target { c || c++11 } } }
  // { dg-additional-options "-fdump-tree-gimple" }
  
  #include <stdlib.h>
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-4.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-4.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-4.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-4.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-original" } */
  
  /* Check mapper binding clauses.  */
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-additional-options "-fdump-tree-original" } */
  
  /* Check mapper binding clauses.  */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-5.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-5.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-5.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-5.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  
  typedef struct S_ {
    int *myarr;
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  
  typedef struct S_ {
    int *myarr;
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-6.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-6.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-6.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-6.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  
  int x = 5;
  
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  
  int x = 5;
  
*************** struct R {
*** 19,23 ****
--- 19,24 ----
  #pragma omp declare mapper (struct R myr) map(myr.arr3[0:y])
  /* { dg-error "'y' undeclared" "" { target c } .-1 } */
  /* { dg-error "'y' was not declared in this scope" "" { target c++ } .-2 } */
+ /* { dg-error "at least one 'map' clause must map 'myr' or an element of it" "" { target c++ } .-3 } */
  
  int y = 7;
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  
  struct Q {
    int *arr1;
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  
  struct Q {
    int *arr1;
*************** int bar (void)
*** 24,29 ****
--- 24,30 ----
    #pragma omp declare mapper (struct R myr) map(myr.arr3[0:y])
    /* { dg-error "'y' undeclared" "" { target c } .-1 } */
    /* { dg-error "'y' was not declared in this scope" "" { target c++ } .-2 } */
+   /* { dg-error "at least one 'map' clause must map 'myr' or an element of it" "" { target c++ } .-3 } */
    int y = 7;
    return y;
  }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  
  struct Q {
    int *arr1;
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  
  struct Q {
    int *arr1;
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c	Sun May 17 22:32:07 2026
***************
*** 1,4 ****
! /* { dg-do compile } */
  
  int x = 5;
  
--- 1,4 ----
! /* { dg-do compile { target { c || c++11 } } } */
  
  int x = 5;
  
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/pr122866.c gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/pr122866.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/gomp/pr122866.c	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/c-c++-common/gomp/pr122866.c	Sun May 17 22:32:07 2026
*************** void froggify (struct test);
*** 8,13 ****
--- 8,14 ----
  
  #pragma omp declare mapper(struct test v) map(iterator(i = 0:1), tofrom: v.x)
  /* { dg-message "sorry, unimplemented: user-defined mapper that uses a .map. clause with .iterator." "" { target *-*-* } .-1 } */
+ /* { dg-message "'#pragma omp declare mapper' with '-std=' set to before C++11" "" { target c++98_only } .-2 } */
  
  int
  main ()
diff -Nrcpad gcc-17-20260510/gcc/testsuite/c-c++-common/pr124532.c gcc-17-20260517/gcc/testsuite/c-c++-common/pr124532.c
*** gcc-17-20260510/gcc/testsuite/c-c++-common/pr124532.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/c-c++-common/pr124532.c	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile { target { musttail && { c || c++11 } } } } */
+ 
+ extern int f(void);
+ 
+ static int g(void) {
+   [[gnu::musttail]] return f();
+   return 42;
+ }
+ 
+ static int g2(void) {
+   if (1) [[gnu::musttail]] return f();
+   return 42;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob	Sun May 17 22:32:07 2026
***************
*** 17,23 ****
             END-IF.
  
             MOVE SRC1 TO DST2.
!            IF DST1 not = 11.55
                 DISPLAY 'error: move/compare FLOAT-LONG to FLOAT-LONG failed ' DST2
                 END-DISPLAY
             END-IF.
--- 17,23 ----
             END-IF.
  
             MOVE SRC1 TO DST2.
!            IF DST2 not = 11.55
                 DISPLAY 'error: move/compare FLOAT-LONG to FLOAT-LONG failed ' DST2
                 END-DISPLAY
             END-IF.
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/ENTRY_statement.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/ENTRY_statement.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/ENTRY_statement.cob	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/ENTRY_statement.cob	Sun May 17 22:32:07 2026
***************
*** 6,32 ****
          working-storage         section.
          01 msg pic x(32).
          procedure               division.
!             move "This is foo" to msg
              display "About to call FOO"
!             call    "foo" using msg
!             move "This is bar" to msg
              display "About to call BAR"
!             call    "bar" using msg
!             move "This is foo2" to msg
              display "About to call FOO again"
!             call    "foo" using msg
              goback.
              end program         prog.
  
          identification          division.
!         program-id.             foo.
          data                    division.
          linkage                 section.
          01 msg pic x(32).
          procedure               division using msg.
!             display "  entry point foo: " function trim (msg)
!             entry   "bar"
!             display "  entry point bar: " function trim (msg)
              goback.
!             end program         foo.
  
--- 6,48 ----
          working-storage         section.
          01 msg pic x(32).
          procedure               division.
!             move "This is FOO" to msg
              display "About to call FOO"
!             call    "FOO" using msg
!             move "This is BAR" to msg
              display "About to call BAR"
!             call    "BAR" using msg
!             move "This is FOO2" to msg
              display "About to call FOO again"
!             call    "FOO" using msg
! 
!             move "This is BAZZ" to msg
!             display "About to call BAZZ"
!             call    "BAZZ" using msg
!             move "This is FAZZ" to msg
!             display "About to call FAZZ"
!             call    "FAZZ" using msg
!             move "This is baz2" to msg
!             display "About to call BAZZ again"
!             call    "BAZZ" using msg
! 
              goback.
              end program         prog.
  
          identification          division.
!         program-id.             FOO.
          data                    division.
          linkage                 section.
          01 msg pic x(32).
          procedure               division using msg.
!             display "  entry point FOO: " function trim (msg)
!             entry   "BAR"
!             display "  entry point BAR: " function trim (msg)
              goback.
!             entry   "BAZZ"
!             display "  entry point BAZZ: " function trim (msg)
!             entry   "FAZZ"
!             display "  entry point FAZZ: " function trim (msg)
!             goback.
!             end program         FOO.
  
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/ENTRY_statement.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/ENTRY_statement.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/ENTRY_statement.out	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/ENTRY_statement.out	Sun May 17 22:32:07 2026
***************
*** 1,9 ****
  About to call FOO
!   entry point foo: This is foo
!   entry point bar: This is foo
  About to call BAR
!   entry point bar: This is bar
  About to call FOO again
!   entry point foo: This is foo2
!   entry point bar: This is foo2
  
--- 1,17 ----
  About to call FOO
!   entry point FOO: This is FOO
!   entry point BAR: This is FOO
  About to call BAR
!   entry point BAR: This is BAR
  About to call FOO again
!   entry point FOO: This is FOO2
!   entry point BAR: This is FOO2
! About to call BAZZ
!   entry point BAZZ: This is BAZZ
!   entry point FAZZ: This is BAZZ
! About to call FAZZ
!   entry point FAZZ: This is FAZZ
! About to call BAZZ again
!   entry point BAZZ: This is baz2
!   entry point FAZZ: This is baz2
  
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob	Sun May 17 22:32:07 2026
***************
*** 1,5 ****
         *> { dg-do run }
!        *> { dg-set-target-env-var TZ UTC0 }
  
          identification division.
          program-id. testy.
--- 1,5 ----
         *> { dg-do run }
!        *> { dg-set-target-env-var TZ "UTC0" }
  
          identification division.
          program-id. testy.
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,55 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/FUNCTION_TRIM_with_NATIONAL_characters.out" }
+         identification          division.
+         program-id.             prog.
+         environment             division.
+         configuration           section.
+         special-names.
+             locale cp1252   is "cp1252"
+             locale utf16le  is "utf16le".
+          Object-Computer.
+              linux
+              Character Classification
+                  for Alphanumeric is cp1252
+                  for National     is utf16le.
+         data                    division.
+         working-storage         section.
+         01 from-8   pic x(10) value  "   8888   ".
+         01 from-16  pic n(10) value N"   1616   ".
+         01 to-8     pic x(10).
+         01 to-16    pic n(10).
+         procedure               division.
+             display "Alphanumeric literal " function byte-length(from-8)
+             display """" from-8  """"
+             display """" function trim(from-8 leading )              """"
+             display """" function trim(from-8 trailing )             """"
+             display """" function trim(from-8)                       """"
+ 
+             display "National literal " function byte-length(from-16)
+             display """" from-16 """"
+             display """" function trim(from-16 leading )""""
+             display """" function trim(from-16 trailing )""""
+             display """" function trim(from-16)""""
+ 
+             display "Alphanumeric data item " function byte-length(from-8)
+             move from-8                to to-8
+             display """" to-8 """"
+             move function trim(from-8 leading)  to to-8 
+             display """" to-8 """"
+             move function trim(from-8 trailing) to to-8 
+             display """" to-8 """"
+             move function trim(from-8)          to to-8 
+             display """" to-8 """"
+ 
+             display "National data item " function byte-length(from-16)
+             move from-16                to to-16
+             display """" to-16 """"
+             move function trim(from-16 leading)  to to-16 
+             display """" to-16 """"
+             move function trim(from-16 trailing) to to-16 
+             display """" to-16 """"
+             move function trim(from-16)          to to-16 
+             display """" to-16 """"
+             goback.
+         end program             prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_NATIONAL_characters.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,21 ----
+ Alphanumeric literal 10
+ "   8888   "
+ "8888   "
+ "   8888"
+ "8888"
+ National literal 20
+ "   1616   "
+ "1616   "
+ "   1616"
+ "1616"
+ Alphanumeric data item 10
+ "   8888   "
+ "8888      "
+ "   8888   "
+ "8888      "
+ National data item 20
+ "   1616   "
+ "1616      "
+ "   1616   "
+ "1616      "
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ABS.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ABS.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ABS.cob	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Intrinsic_Function_ABS.cob	Sun May 17 22:32:07 2026
***************
*** 16,21 ****
                     END-IF.
             IF FUNCTION ABS(000.0) NOT EQUAL TO ZERO
                     MOVE 1 TO RETURN-CODE
!                    DISPLAY "FUNCTION ABS(-000.0) FAILS."
                     END-IF.
  
--- 16,21 ----
                     END-IF.
             IF FUNCTION ABS(000.0) NOT EQUAL TO ZERO
                     MOVE 1 TO RETURN-CODE
!                    DISPLAY "FUNCTION ABS(000.0) FAILS."
                     END-IF.
  
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,17 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Large_PIC_10000000_.out" }
+         identification   division.
+         program-id.      prog.
+         data             division.
+         working-storage  section.
+         01 uppered       pic x(10000000) value all "A".
+         01 lowered       pic x(10000000).
+         procedure        division.
+             move function lower-case(uppered) to lowered
+             move 'X' to lowered(1:1)
+             move 'Z' to lowered(10000000:1)
+             display lowered(1:10)
+             display lowered(9999991:10)
+             goback.
+         end program     prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Large_PIC_10000000_.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,3 ----
+ Xaaaaaaaaa
+ aaaaaaaaaZ
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,16 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Nested_PERFORM.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        PROCEDURE        DIVISION.
+            PERFORM 2 TIMES
+              DISPLAY "X" NO ADVANCING
+              END-DISPLAY
+              PERFORM 2 TIMES
+                DISPLAY "Y" NO ADVANCING
+                END-DISPLAY
+              END-PERFORM
+            END-PERFORM.
+            STOP RUN.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Nested_PERFORM.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1 ----
+ XYYXYY
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,28 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Overlapping_MOVE.out" }
+         identification division.
+         program-id. prog.
+         data division.
+         working-storage section.
+         01 structure.
+             05 field1 pic x(5).
+             05 field2 pic x(10).
+         procedure division.
+             move "Hallo" to field1.
+             move "1234567890" to field2.
+             *> The ISO specification says specifically that when an overlapping
+             *> move takes place in a single data descriptor, that it behaves
+             *> like a memmove(3), and not a memcopy(3):
+             move field2 to structure.
+             display """" structure """"
+             if field1 not = "12345"
+               display "error:1: " field1
+               end-display
+             end-if
+             if field2 not = "67890     "
+               display "error:2: " field2
+               end-display
+             end-if
+             goback.
+         end program prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Overlapping_MOVE.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,2 ----
+ "1234567890     "
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,21 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/PERFORM_TIMES_subscripted.out" }
+         identification      division.
+         program-id.         prog.
+         data                division.
+         working-storage section.
+         01  idx                       pic 9.
+         01  cnt-tab.
+             05 cnt-val occurs 3 times pic 9.
+         procedure division.
+             move 1 to cnt-val (1)
+             move 2 to cnt-val (2)
+             move 3 to cnt-val (3)
+             perform varying idx from 1 by 1 until idx > 3
+                 perform cnt-val (idx) times
+                     display idx
+                     end-perform
+                 end-perform
+             goback.
+         end program         prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_TIMES_subscripted.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,7 ----
+ 1
+ 2
+ 2
+ 3
+ 3
+ 3
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,19 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/PERFORM_VARYING_BY_-0.2.out" }
+ 
+        IDENTIFICATION   DIVISION.
+        PROGRAM-ID.      prog.
+        DATA             DIVISION.
+        WORKING-STORAGE  SECTION.
+           77 X             PIC 9v9.
+        PROCEDURE        DIVISION.
+            PERFORM VARYING X FROM 0.8 BY -0.2
+                    UNTIL   X < 0.4
+              DISPLAY "X" NO ADVANCING
+              END-DISPLAY
+            END-PERFORM.
+        IF X NOT = 0.2
+          DISPLAY "WRONG X: " X END-DISPLAY
+        END-IF
+            STOP RUN.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/PERFORM_VARYING_BY_-0.2.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1 ----
+ XXX
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,36 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/REDEFINES__chained.out" }
+         IDENTIFICATION   DIVISION.
+         PROGRAM-ID.      chained_REDEFINES.
+         DATA             DIVISION.
+         WORKING-STORAGE  SECTION.
+         01 REC.
+         10 ZIP-9                    PIC 9(9).
+         10 ZIP-RED REDEFINES ZIP-9.
+             12 ZIP-5                 PIC 9(5).
+             12 ZIP-PLUS-4            PIC 9(4).
+         10 POSTAL-CORRECT-IND REDEFINES ZIP-9.
+             12 FILLER                PIC X(8).
+             12 POST-CORRT-IND        PIC X(1).
+         PROCEDURE        DIVISION.
+             MOVE 123456789 TO ZIP-9
+             DISPLAY """" ZIP-9 """"
+             IF ZIP-5 NOT = 12345
+             DISPLAY "ZIP-5 wrong: " ZIP-5
+             END-DISPLAY
+             END-IF
+             DISPLAY """" ZIP-PLUS-4 """"
+             IF ZIP-PLUS-4 NOT = 6789
+             DISPLAY "ZIP-PLUS-4 wrong: " ZIP-PLUS-4
+             END-DISPLAY
+             END-IF
+             MOVE "X" TO POST-CORRT-IND
+             DISPLAY """" ZIP-9 """"
+             DISPLAY """" POSTAL-CORRECT-IND  """"
+             DISPLAY """" POST-CORRT-IND """"
+             IF POST-CORRT-IND NOT = "X"
+             DISPLAY "POST-CORRT-IND wrong: " POST-CORRT-IND
+             END-DISPLAY
+             END-IF
+             STOP RUN.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/REDEFINES__chained.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,6 ----
+ "123456789"
+ "6789"
+ "123456780"
+ "12345678X"
+ "X"
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/RETURN-CODE_moving.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/RETURN-CODE_moving.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/RETURN-CODE_moving.cob	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/RETURN-CODE_moving.cob	Sun May 17 22:32:07 2026
***************
*** 1,5 ****
--- 1,6 ----
         *> { dg-do run }
         *> { dg-xfail-run-if "" { *-*-* }  }
+        *> { dg-options "-dialect ibm" }
  
         IDENTIFICATION   DIVISION.
         PROGRAM-ID.      prog.
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,47 ----
+        *> { dg-do run }
+        *> { dg-options "-dialect ibm" }
+        *> { dg-output-file "group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.out" }
+         identification      division.
+         program-id.         prog.
+         procedure           division.
+             display "prog starting return code should be +0000:           " return-code
+             call "prog-a"
+             display "prog first return code from prog-a  should be +0123: " return-code
+             call "prog-a"
+             display "prog second return code from prog-a should be +0246: " return-code
+ 
+             call "prog-i"
+             display "prog first return code from prog-i  should be +0321: " return-code
+             call "prog-i"
+             display "prog second return code from prog-i should be +0321: " return-code
+ 
+             call "prog-r"
+             display "prog first return code from prog-r  should be -0123: " return-code
+             call "prog-r"
+             display "prog second return code from prog-r should be -0123: " return-code
+ 
+             move zero to return-code
+             goback.
+         end program         prog.
+ 
+         identification      division.
+         program-id.         prog-a.
+         procedure           division.
+             add 123 to return-code
+             goback.
+         end program         prog-a.
+ 
+         identification      division.
+         program-id.         prog-i INITIAL.
+         procedure           division.
+             add 321 to return-code
+             goback.
+         end program         prog-i.
+ 
+         identification      division.
+         program-id.         prog-r RECURSIVE.
+         procedure           division.
+             add -123 to return-code
+             goback.
+         end program         prog-r.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/RETURN-CODE_with_INITIAL_and_RECURSIVE.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,8 ----
+ prog starting return code should be +0000:           +0000
+ prog first return code from prog-a  should be +0123: +0123
+ prog second return code from prog-a should be +0246: +0246
+ prog first return code from prog-i  should be +0321: +0321
+ prog second return code from prog-i should be +0321: +0321
+ prog first return code from prog-r  should be -0123: -0123
+ prog second return code from prog-r should be -0123: -0123
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,25 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Sanity_check_for_ENTRY.out" }
+         identification   division.
+         program-id.      prog.
+         data             division.
+         working-storage  section.
+         01 foo pic x(12).
+         procedure        division.
+         loop.
+             go to dispatch.
+         dispatch.
+             go to pass_1.
+         pass_1.
+             display "I am the first pass"
+             alter dispatch to pass_2.
+             go to loop.
+         pass_2.
+             display "I am the second pass"
+             alter dispatch to pass_3.
+             go to loop.
+         pass_3.
+             display "I am the third and final pass"
+             goback.
+         end program     prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Sanity_check_for_ENTRY.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,4 ----
+ I am the first pass
+ I am the second pass
+ I am the third and final pass
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,32 ----
+        *> { dg-do run }
+        *> { dg-options "-dialect mf" }
+        *> { dg-output-file "group2/Simple_COMP-X.out" }
+         identification          division.
+         program-id.             compx.
+         data                    division.
+         working-storage         section.
+         01 byte.
+           02 byte-val           pic x(1) comp-x.
+         01 short.               
+           02 short-val          pic x(2) comp-x.
+         01 long.                
+           02 long-val           pic x(4) comp-x.
+         01 longlong.            
+           02 longlong-val       pic x(8) comp-x.
+         01 sixteenbytes.        
+           02 sixteenbytes-val   pic x(16) comp-x.
+         procedure               division.
+             move high-values to byte short long longlong sixteenbytes
+             display function hex-of(byte)
+             display function hex-of(short)
+             display function hex-of(long)
+             display function hex-of(longlong)
+             display function hex-of(sixteenbytes)
+             display "byte-val is: " byte-val.
+             display "short-val is: " short-val.
+             display "long-val is: " long-val.
+             display "longlong-val is: " longlong-val.
+             display "sixteenbytes-val is: " sixteenbytes-val.
+             goback.
+         end  program            compx.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/Simple_COMP-X.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,11 ----
+ FF
+ FFFF
+ FFFFFFFF
+ FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ byte-val is: 255
+ short-val is: 65535
+ long-val is: 4294967295
+ longlong-val is: 8446744073709551615
+ sixteenbytes-val is: 340282366920938463463374607431768211455
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,16 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/compare_alpha_to_all__literal_.out" }
+         identification      division.
+         program-id.         prog.
+         data                division.
+         working-storage     section.
+         01 var1 pic x(64) value all "Bob".
+         procedure           division.
+             if var1 equal all "Bob"
+                 display "It's all Bob."
+             else
+                 display "It's not Bob."
+                 end-if
+             goback.
+         end program         prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_alpha_to_all__literal_.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,2 ----
+ It's all Bob.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_national_to_display.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,58 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/compare_national_to_display.out" }
+         identification      division.
+         program-id.         prog.
+         environment division.
+         configuration section.
+         special-names.
+             locale greek is "cyrillic"
+             locale unicode is "utf16le".
+         object-computer.
+             xerox-parc-star 
+             character classification
+                 for alphanumeric is greek
+                 for national is unicode.
+         data                division.
+         working-storage     section.
+         01 aaa pic x(16).
+         01 bbb pic n(16).
+         procedure           division.
+             move  "aaa" to aaa
+             move n"aaa" to bbb
+             if aaa equal bbb
+                 display "1 - correct"
+             else
+                 display "1 -- bad"
+                 end-if
+             if bbb equal aaa
+                 display "2 - correct"
+             else
+                 display "2 -- bad"
+                 end-if
+             move  "aaa" to aaa
+             move n"bbb" to bbb
+             if aaa < bbb
+                 display "3 - correct"
+             else
+                 display "3 -- bad"
+                 end-if
+             if bbb > aaa
+                 display "4 - correct"
+             else
+                 display "4 -- bad"
+                 end-if
+             move  "bbb" to aaa
+             move n"aaa" to bbb
+             if aaa > bbb
+                 display "5 - correct"
+             else
+                 display "5 -- bad"
+                 end-if
+             if bbb < aaa
+                 display "6 - correct"
+             else
+                 display "6 -- bad"
+                 end-if
+             goback.
+         end program         prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_national_to_display.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_national_to_display.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/compare_national_to_display.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/compare_national_to_display.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,7 ----
+ 1 - correct
+ 2 - correct
+ 3 - correct
+ 4 - correct
+ 5 - correct
+ 6 - correct
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,107 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/comprensive_compare_comp-1_comp-5.out" }
+         identification          division.
+         program-id.             prog.
+         data                    division.
+         working-storage         section.
+         01 aaa comp-1.
+         01 bbb pic S999 comp-5.
+         01 known pic xxxx.
+         01 result pic xxxx.
+         procedure               division.
+             move -1 to aaa move 1 to bbb move ".lt." to known
+             perform checker.
+             move  1 to aaa move 1 to bbb move ".eq." to known
+             perform checker.
+             move  1 to aaa move -1 to bbb move ".gt." to known
+             perform checker.
+             goback.
+         checker.
+             display "checking " space aaa space known space bbb
+             perform lt
+             perform le
+             perform eq
+             perform ge
+             perform gt
+             perform ne
+             continue.
+         lt.
+             display "  .lt. " with no advancing
+             move "xxxx" to result
+             evaluate true
+               when known equal ".lt." if aaa < bbb move "Good" to result
+                                        else move "BAD!" to result end-if
+               when known equal ".eq." if aaa < bbb move "BAD!" to result
+                                       else move "Good" to result end-if
+               when known equal ".gt." if aaa < bbb move "BAD!" to result
+                                       else move "Good" to result end-if
+             end-evaluate
+             display space result
+             continue.
+         le.
+             display "  .le. " with no advancing
+             move "xxxx" to result
+             evaluate true
+               when known equal ".lt." if aaa <= bbb 
+                  move "Good" to result else move "BAD!" to result end-if
+               when known equal ".eq." if aaa <= bbb 
+                  move "Good" to result else move "BAD!" to result end-if
+               when known equal ".gt." if aaa <= bbb 
+                  move "BAD!" to result else move "Good" to result end-if
+             end-evaluate
+             display space result
+             continue.
+         eq.
+             display "  .eq. " with no advancing
+             move "xxxx" to result
+             evaluate true
+               when known equal ".lt." if aaa = bbb 
+                  move "BAD!" to result else move "Good" to result end-if
+               when known equal ".eq." if aaa = bbb 
+                  move "Good" to result else move "BAD!" to result end-if
+               when known equal ".gt." if aaa = bbb 
+                  move "BAD!" to result else move "Good" to result end-if
+             end-evaluate
+             display space result
+             continue.
+         ge.
+             display "  .ge. " with no advancing
+             move "xxxx" to result
+             evaluate true
+               when known equal ".lt." if aaa >= bbb 
+                 move "BAD!" to result else move "Good" to result end-if
+               when known equal ".eq." if aaa >= bbb
+                 move "Good" to result else move "BAD!" to result end-if
+               when known equal ".gt." if aaa >= bbb
+                 move "Good" to result else move "BAD!" to result end-if
+             end-evaluate
+             display space result
+             continue.
+         gt.
+             display "  .gt. " with no advancing
+             move "xxxx" to result
+             evaluate true
+               when known equal ".lt." if aaa > bbb
+                 move "BAD!" to result else move "Good" to result end-if
+               when known equal ".eq." if aaa > bbb
+                 move "BAD!" to result else move "Good" to result end-if
+               when known equal ".gt." if aaa > bbb
+                 move "Good" to result else move "BAD!" to result end-if
+             end-evaluate
+             display space result
+             continue.
+         ne.
+             display "  .ne. " with no advancing
+             move "xxxx" to result
+             evaluate true
+               when known equal ".lt." if aaa <> bbb 
+                 move "Good" to result else move "BAD!" to result end-if
+               when known equal ".eq." if aaa <> bbb
+                 move "BAD!" to result else move "Good" to result end-if
+               when known equal ".gt." if aaa <> bbb
+                 move "Good" to result else move "BAD!" to result end-if
+             end-evaluate
+             display space result
+             continue.
+         end program             prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/comprensive_compare_comp-1_comp-5.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,22 ----
+ checking  -1 .lt. +001
+   .lt.  Good
+   .le.  Good
+   .eq.  Good
+   .ge.  Good
+   .gt.  Good
+   .ne.  Good
+ checking  1 .eq. +001
+   .lt.  Good
+   .le.  Good
+   .eq.  Good
+   .ge.  Good
+   .gt.  Good
+   .ne.  Good
+ checking  1 .gt. -001
+   .lt.  Good
+   .le.  Good
+   .eq.  Good
+   .ge.  Good
+   .gt.  Good
+   .ne.  Good
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,20 ----
+        *> { dg-do run }
+        *> { dg-options "-dialect ibm" }
+        *> { dg-output-file "group2/refmod_with_nested_parentheses.out" }
+         IDENTIFICATION DIVISION.
+         PROGRAM-ID. refmod_nested_paren_expr.
+         DATA DIVISION.
+         WORKING-STORAGE SECTION.
+         01  TXT                        PIC X(10) VALUE 'ABCDEFGHIJ'.
+         01  N                          PIC 9      VALUE 2.
+         01  OUT-CH                     PIC X.
+         01  stride                     PIC 9.
+         PROCEDURE DIVISION.
+       *> LENGTH OF is bytes, so we need stride to handle UTF-16
+             move length of out-ch to stride
+             display TXT(((LENGTH OF TXT / (2*stride)) - (N / 2)):1)
+             MOVE TXT(((LENGTH OF TXT / (2*stride)) - (N / 2)):1) 
+                                                               TO OUT-CH
+             display OUT-CH
+             GOBACK.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/refmod_with_nested_parentheses.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,3 ----
+ D
+ D
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.cob gcc-17-20260517/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.cob
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.cob	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,17 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/signed_unsigned_compare.out" }
+         identification          division.
+         program-id.             prog.
+         data                    division.
+         working-storage         section.
+         01 aaa binary-long   signed value -1.
+         01 bbb binary-long unsigned value  1.
+         procedure               division.
+         if aaa < bbb
+             display "-1 is properly .LT. than +1"
+         else
+             display "-1 is IMPROPERLY .GE. than +1"
+             end-if
+         goback.
+         end program             prog.
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.out gcc-17-20260517/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.out
*** gcc-17-20260510/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/cobol.dg/group2/signed_unsigned_compare.out	Sun May 17 22:32:07 2026
***************
*** 0 ****
--- 1,2 ----
+ -1 is properly .LT. than +1
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/cpp0x/attr-nodiscard1.C gcc-17-20260517/gcc/testsuite/g++.dg/cpp0x/attr-nodiscard1.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/cpp0x/attr-nodiscard1.C	Sun May 10 22:32:08 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/cpp0x/attr-nodiscard1.C	Sun May 17 22:32:08 2026
*************** foo (int n)
*** 10,18 ****
  {
    struct [[nodiscard]] S1 {};
    struct [[nodiscard ("foobar")]] S2 {};
!   struct [[nodiscard (0)]] S3 {};		// { dg-error "'nodiscard' attribute argument must be a string constant" }
    struct [[nodiscard ("foo", "bar", "baz")]] S4 {};	// { dg-error "wrong number of arguments specified for 'nodiscard' attribute" }
!   struct [[nodiscard (0, 1, 2)]] S5 {};		// { dg-error "wrong number of arguments specified for 'nodiscard' attribute" }
  
    auto a = [] [[nodiscard]] () {};
    auto b = [] constexpr [[nodiscard]] {};	// { dg-warning "'nodiscard' attribute can only be applied to functions or to class or enumeration types" }
--- 10,18 ----
  {
    struct [[nodiscard]] S1 {};
    struct [[nodiscard ("foobar")]] S2 {};
!   struct [[nodiscard (0)]] S3 {};		// { dg-error "'nodiscard' attribute argument must be a string constant|expected string-literal" }
    struct [[nodiscard ("foo", "bar", "baz")]] S4 {};	// { dg-error "wrong number of arguments specified for 'nodiscard' attribute" }
!   struct [[nodiscard (0, 1, 2)]] S5 {};		// { dg-error "wrong number of arguments specified for 'nodiscard' attribute|expected string-literal" }
  
    auto a = [] [[nodiscard]] () {};
    auto b = [] constexpr [[nodiscard]] {};	// { dg-warning "'nodiscard' attribute can only be applied to functions or to class or enumeration types" }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/cpp2a/no_unique_address16.C gcc-17-20260517/gcc/testsuite/g++.dg/cpp2a/no_unique_address16.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/cpp2a/no_unique_address16.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/cpp2a/no_unique_address16.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/125315
+ // { dg-do compile { target c++20 } }
+ // { dg-prune-output "used but never defined" }
+ 
+ struct S{~S(){}};
+ constexpr S& f(S& t);
+ struct W{[[no_unique_address]]S v;};
+ struct R:W{};
+ S s;
+ auto x=R{{f(s)}};
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/cpp2a/spaceship-warn1.C gcc-17-20260517/gcc/testsuite/g++.dg/cpp2a/spaceship-warn1.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/cpp2a/spaceship-warn1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/cpp2a/spaceship-warn1.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/100903
+ // { dg-additional-options -Wzero-as-null-pointer-constant }
+ // { dg-do compile { target c++20 } }
+ 
+ #include <compare>
+ 
+ int main()
+ {
+   return (1.0 <=> 2.0) < 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-1.C gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-1.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-1.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-1.C	Sun May 17 22:32:08 2026
***************
*** 1,4 ****
! // { dg-do compile }
  // { dg-additional-options "-fdump-tree-gimple" }
  
  // "omp declare mapper" support -- check expansion in gimple.
--- 1,4 ----
! // { dg-do compile { target c++11 } }
  // { dg-additional-options "-fdump-tree-gimple" }
  
  // "omp declare mapper" support -- check expansion in gimple.
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-2.C gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-2.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-2.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-2.C	Sun May 17 22:32:08 2026
***************
*** 1,4 ****
! // { dg-do compile }
  
  // Error-checking tests for "omp declare mapper".
  
--- 1,4 ----
! // { dg-do compile { target c++11 } }
  
  // Error-checking tests for "omp declare mapper".
  
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-3.C gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-3.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-3.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-3.C	Sun May 17 22:32:08 2026
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-do compile { target c++11 } }
+ 
  #pragma omp declare mapper (int v)  // { dg-error "missing 'map' clause before end of line" }
  #pragma omp declare mapper (float v) map()  // { dg-error "expected primary-expression before '\\)' token" }
  // { dg-error "'float' is not a struct, union or class type in '#pragma omp declare mapper'" "" { target *-*-* } .-1 }
*************** struct XT {
*** 8,13 ****
--- 10,17 ----
    int x;
  };
  #pragma omp declare mapper (XT y) map()  // { dg-error "expected primary-expression before '\\)' token" }
+ // { dg-error "at least one 'map' clause must map 'y' or an element of it" "" { target *-*-* } .-1 }
+ 
  
  struct t {
    int x;
*************** typedef struct t myStruct;
*** 20,25 ****
--- 24,30 ----
  #pragma omp declare mapper(myStruct) // { dg-error "expected unqualified-id before '\\)' token" }
  
  #pragma omp declare mapper(name : t v)  map() // { dg-error "expected primary-expression before '\\)' token" } 
+ // { dg-error "at least one 'map' clause must map 'v' or an element of it" "" { target *-*-* } .-1 }
  
  #pragma omp declare mapper(fancy : struct t v) map(always,present,close,mapper(d),tofrom: v) // { dg-error "in 'declare mapper' directives, parameter to 'mapper' modifier must be 'default'" }
  
*************** class B : public virtual A { };
*** 37,39 ****
--- 42,45 ----
  union u_t { };
  
  #pragma omp declare mapper(u_t v) map()  // { dg-error "expected primary-expression before '\\)' token" }
+ // { dg-error "at least one 'map' clause must map 'v' or an element of it" "" { target *-*-* } .-1 }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-4.C gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-4.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-4.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-4.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,23 ----
+ // { dg-do compile { target c++11 } }
+ // { dg-additional-options "-fdump-tree-original" }
+ 
+ // Ensure that always in mapper does not ICE and gets propagated to both 'x' and 'y'
+ 
+ struct S { int x; };
+ 
+ template<typename T>
+ void f()
+ {
+   T x;
+   int y;
+   #pragma omp declare mapper (T var) map(always, to: var, y)
+ // error: the type 'S' of 'constexpr' variable '#pragma omp declare mapper' is not literal
+   #pragma omp target enter data map(x)
+ }
+ 
+ void g()
+ {
+   f<S>();
+ }
+ 
+ // { dg-final { scan-tree-dump "#pragma omp target enter data map\\(always,to:y\\) map\\(always,to:x\\)" "original" } }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-5.C gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-5.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/gomp/declare-mapper-5.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/gomp/declare-mapper-5.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,29 ----
+ // { dg-do compile { target c++11 } }
+ 
+ struct S { int x; };
+ 
+ template<typename T>
+ void f()
+ {
+   T x;
+   int y;
+   #pragma omp declare mapper (T var) map(always, to: var, y) // { dg-error "'int' is not a struct, union or class type in '#pragma omp declare mapper'" }
+   #pragma omp target enter data map(x)
+ }
+ 
+ void g()
+ {
+   f<int>();
+ }
+ 
+ template<typename T>
+ void h() {
+   T g[2];
+   #pragma omp declare mapper (S var) map(always, to: g[var.x]) // { dg-error "at least one 'map' clause must map 'var' or an element of it" }
+   #pragma omp target enter data map(g)
+ }
+ 
+ void h2()
+ {
+   h<S>();
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg22.C gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg22.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg22.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg22.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/50479
+ // { dg-do compile }
+ 
+ void fn1 (int i = sizeof (i)) {}
+ void fn2 (int i, int = sizeof (i)) {}
+ 
+ void
+ g ()
+ {
+   void fn4 (int i = sizeof (i));
+   void fn5 (int i, int = sizeof (i));
+   fn1 ();
+   fn2 (42);
+   fn4 ();
+   fn5 (42);
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg23.C gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg23.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg23.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg23.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,36 ----
+ // PR c++/50479
+ // { dg-do compile { target c++14 } }
+ 
+ inline void
+ fn1 ()
+ {
+   int f (int i = []{ return 1; }());
+ }
+ 
+ auto l = [](int i = sizeof (i)) { };
+ void fn2 (int i = []{ return 1; }()) {}
+ void fn3 (int x = []{ decltype(x) y{}; return y; }()) {}
+ void fn6 (int i = sizeof (i), decltype (i) = sizeof (i)) {}
+ 
+ struct S {
+   int mfn1 (int i = sizeof (i)) { return i; }
+   int mfn2 (int i, int = sizeof (i)) { return i; }
+   int lm = [](int i6 = sizeof (i6)) { return i6; }();
+   int mfn3 (int i = []{ return 1; }()) { return i; }
+   int i = mfn1 () + mfn2 (42) + mfn3 () + lm;
+ };
+ 
+ void
+ g ()
+ {
+   auto ll = [](int i5 = sizeof (i5)) { };
+   void fn4 (int i = []{ return 1; }());
+   void fn5 (int x = []{ decltype(x) y{}; return y; }());
+   fn1 ();
+   fn2 ();
+   fn3 ();
+   fn4 ();
+   fn5 ();
+   fn6 ();
+   l ();
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg24.C gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg24.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg24.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg24.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/50479
+ // { dg-do compile { target c++11 } }
+ 
+ void fn1 (int x = []{ return x; }()) {}	      // { dg-error "use of parameter outside function body" }
+ void fn2 (int x, int = []{ return x; }()) {}  // { dg-error "use of parameter outside function body" }
+ 
+ void
+ g ()
+ {
+   void fn3 (int z = []{ return z; }());	      // { dg-error "use of parameter outside function body" }
+   void fn4 (int z, int = []{ return z; }());  // { dg-error "use of parameter outside function body" }
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg25.C gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg25.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg25.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg25.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/62244
+ // { dg-do compile { target c++11 } }
+ 
+ int a;
+ void f (int a = a); // { dg-error "parameter .a. may not appear in this context" }
+ 
+ int foo(int x = (decltype(x)(42))) { return 0; }
+ 
+ static int value;
+ 
+ int
+ bar (int &value = value)  // { dg-error "parameter .value. may not appear in this context" }
+ {
+   return value;
+ }
+ 
+ void
+ g ()
+ {
+   bar ();
+ }
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg26.C gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg26.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/parse/defarg26.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/parse/defarg26.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/50479
+ // { dg-do compile { target c++11 } }
+ 
+ template<class>
+ struct A;
+ 
+ template<>
+ struct A<long> {
+   static const int value = 1;
+ };
+ 
+ long foo;
+ 
+ void bar(char foo = A<decltype(foo)>::value) {} // { dg-error "incomplete type" }
+ 
+ int main() {
+   bar();
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/alias3.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/alias3.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/alias3.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/alias3.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,15 ----
+ // PR c++/125208
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ using A = int;
+ using B = int;
+ using C = A;
+ static_assert (^^A == ^^A);
+ static_assert (^^const A == ^^const A);
+ static_assert (^^A != ^^const A);
+ static_assert (^^B == ^^B);
+ static_assert (^^C == ^^C);
+ static_assert (^^A != ^^B);
+ static_assert (^^A != ^^C);
+ static_assert (^^B != ^^C);
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/annotations19.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/annotations19.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/annotations19.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/annotations19.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/123609
+ // { dg-do compile { target c++26 } }
+ 
+ struct [[=]] S {};			// { dg-error "expected primary-expression before ']' token" }
+ [[=]] int a;				// { dg-error "expected primary-expression before ']' token" }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/bases_of5.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/bases_of5.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/bases_of5.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/bases_of5.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,128 ----
+ // PR c++/125208
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ namespace std {
+ template <class _E> struct initializer_list {
+   typedef _E *const_iterator;
+   _E *_M_array;
+   decltype (sizeof 0) _M_len;
+   constexpr long size() { return _M_len; }
+   constexpr const_iterator begin() { return _M_array; }
+   constexpr const_iterator end() { return begin() + size(); }
+ };
+ template <typename> struct allocator_traits;
+ } // namespace std
+ constexpr void *operator new(decltype (sizeof 0), void *__p) { return __p; }
+ namespace std {
+ template <typename _Tp, typename... _Args>
+ constexpr void _Construct(_Tp *__p, _Args... __args) {
+   new (__p) _Tp(__args...);
+ }
+ template <typename _Tp> struct __new_allocator {
+   constexpr _Tp *allocate(long __n) {
+     return static_cast<_Tp *>(__builtin_operator_new(__n * sizeof(_Tp)));
+   }
+   constexpr void deallocate(_Tp *__p, long) { __builtin_operator_delete(__p); }
+ };
+ template <typename _Tp> struct allocator_traits<__new_allocator<_Tp>> {
+   using allocator_type = __new_allocator<_Tp>;
+   using value_type = _Tp;
+   using pointer = _Tp *;
+   template <typename _Up> using rebind_alloc = __new_allocator<_Up>;
+   static constexpr pointer allocate(allocator_type __a, long __n) {
+     return __a.allocate(__n);
+   }
+   static constexpr void deallocate(allocator_type __a, pointer __p, long __n) {
+     __a.deallocate(__p, __n);
+   }
+ };
+ } // namespace std
+ template <typename _Alloc>
+ struct __alloc_traits : std::allocator_traits<_Alloc> {
+   typedef std::allocator_traits<_Alloc> _Base_type;
+   typedef _Base_type::value_type reference;
+   template <typename _Tp> struct rebind {
+     typedef _Base_type::template rebind_alloc<_Tp> other;
+   };
+ };
+ namespace std {
+ template <typename _InputIterator, typename _Sentinel,
+           typename _ForwardIterator>
+ constexpr void __do_uninit_copy(_InputIterator __first, _Sentinel __last,
+                                 _ForwardIterator __result) {
+   for (; __first != __last; ++__first, ++__result)
+     _Construct(__result, *__first);
+ }
+ template <typename _InputIterator, typename _ForwardIterator>
+ constexpr void uninitialized_copy(_InputIterator __first, _InputIterator __last,
+                                   _ForwardIterator __result) {
+   __do_uninit_copy(__first, __last, __result);
+ }
+ template <typename _InputIterator, typename _Sentinel,
+           typename _ForwardIterator, typename _Tp>
+ constexpr void __uninitialized_copy_a(_InputIterator __first, _Sentinel __last,
+                                       _ForwardIterator __result, _Tp) {
+   uninitialized_copy(__first, __last, __result);
+ }
+ template <typename _Tp, typename _Alloc> struct _Vector_base {
+   typedef __alloc_traits<_Alloc>::template rebind<_Tp>::other _Tp_alloc_type;
+   typedef __alloc_traits<_Tp_alloc_type>::pointer pointer;
+   struct _Vector_impl : _Tp_alloc_type {
+     constexpr _Vector_impl(_Tp_alloc_type) {}
+     pointer _M_start;
+   };
+   constexpr ~_Vector_base() { _M_deallocate(_M_impl._M_start); }
+   _Vector_impl _M_impl;
+   constexpr pointer _M_allocate(long __n) {
+     return __n ? __alloc_traits<_Tp_alloc_type>::allocate(_M_impl, __n)
+                : pointer();
+   }
+   constexpr void _M_deallocate(pointer __p) {
+     __alloc_traits<_Tp_alloc_type>::deallocate(_M_impl, __p, 0);
+   }
+ };
+ template <typename _Tp, typename _Alloc = __new_allocator<_Tp>>
+ struct vector : _Vector_base<_Tp, _Alloc> {
+   typedef _Vector_base<_Tp, _Alloc> _Base;
+   typedef _Base::_Tp_alloc_type _Tp_alloc_type;
+   typedef _Alloc allocator_type;
+   constexpr vector(initializer_list<_Tp> __l,
+                    allocator_type __a = allocator_type())
+       : _Base(__a) {
+     long __trans_tmp_1 = __l.size();
+     _M_range_initialize_n(__l.begin(), __l.end(), __trans_tmp_1);
+   }
+   constexpr __alloc_traits<_Tp_alloc_type>::reference operator[](long __n) {
+     return *(this->_M_impl._M_start + __n);
+   }
+   template <typename _Iterator, typename _Sentinel>
+   constexpr void _M_range_initialize_n(_Iterator __first, _Sentinel __last,
+                                        long __n) {
+     typename _Base::pointer __start = this->_M_allocate(__n);
+     this->_M_impl._M_start = __start;
+     _Tp_alloc_type __trans_tmp_2;
+     __uninitialized_copy_a(__first, __last, __start, __trans_tmp_2);
+   }
+ };
+ namespace meta {
+ using info = decltype(^^int);
+ struct access_context {
+   info _M_scope;
+   info _M_designating_class;
+ };
+ consteval vector<info> bases_of(info, access_context);
+ } // namespace meta
+ } // namespace std
+ template <class L> using mp_is_value_list = L;
+ template <template <class> class, class...> long cx_count_if;
+ template <std::meta::info> struct rf_base_desc;
+ struct X1 {};
+ struct X2 {};
+ struct Z : X1, X2 {};
+ int main() {
+   constexpr auto all = std::meta::access_context();
+   using B1 = rf_base_desc<bases_of(^^Z, all)[0]>;
+   using B2 = rf_base_desc<bases_of(^^Z, all)[1]>;
+   (void) cx_count_if<mp_is_value_list, B1, B2>;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/can_substitute2.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/can_substitute2.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/can_substitute2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/can_substitute2.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,19 ----
+ // [meta.reflection.substitute] Example 1
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ template<class T>
+ auto fn1();
+ 
+ static_assert(!can_substitute(^^fn1, {^^int}));
+ constexpr auto r1 = substitute(^^fn1, {^^int}); // { dg-error "can_substitute returned false" }
+ 
+ template<class T>
+ auto fn2() {
+   static_assert(false); // { dg-error "assert" }
+   return T{};
+ }
+ 
+ constexpr bool r2 = can_substitute(^^fn2, {^^int}); // { dg-message "required from here" }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/init19.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/init19.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/init19.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/init19.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/125280
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ struct C { decltype(^^::) i; };
+ struct N { int i; };
+ 
+ template<typename T>
+ struct X : T { };
+ 
+ auto a = X<C>{}; // { dg-error "outside a constant-evaluated context" }
+ auto b = X<N>{};
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/members_of14.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/members_of14.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/members_of14.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/members_of14.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,29 ----
+ // PR c++/124628
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ template<class T> void f();
+ 
+ template<class T>
+ struct A {
+   void g() noexcept(noexcept(T{}));
+   auto h() { return T{}; }
+   static inline auto m = T{};
+   // A& operator=(const A&) noexcept;
+   // A& operator=(A&&) noexcept;
+ };
+ 
+ int main() {
+   constexpr auto ac = std::meta::access_context::current();
+   template for (constexpr auto mem : define_static_array(members_of(^^A<int>, ac)))
+     if constexpr (!is_constructor(mem) && !is_destructor(mem))
+       f<typename [:type_of(mem):]>();
+ }
+ 
+ // { dg-final { scan-assembler _Z1fIDoFvvEEvv } } void f<void () noexcept>()
+ // { dg-final { scan-assembler _Z1fIFivEEvv } } void f<int ()>()
+ // { dg-final { scan-assembler _Z1fIiEvv } } void f<int>()
+ // { dg-final { scan-assembler _Z1fIDoFR1AIiERKS1_EEvv } } void f<A<int>& (A<int> const&) noexcept>()
+ // { dg-final { scan-assembler _Z1fIDoFR1AIiEOS1_EEvv } } void f<A<int>& (A<int>&&) noexcept>()
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/parm1.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/parm1.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/parm1.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/parm1.C	Sun May 17 22:32:08 2026
***************
*** 4,12 ****
  
  #include <meta>
  
! // FIXME PR62244
! //consteval int fn(decltype(^^::) x = ^^x) { return 0; }
! //constexpr int x = fn ();
  
  consteval auto
  ref (std::meta::info r)
--- 4,11 ----
  
  #include <meta>
  
! consteval int fn(decltype(^^::) x = ^^x) { return 0; }
! constexpr int x = fn ();
  
  consteval auto
  ref (std::meta::info r)
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/pr125007.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/pr125007.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/pr125007.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/pr125007.C	Sun May 17 22:32:08 2026
*************** void qux (int x, int y);
*** 44,46 ****
--- 44,49 ----
  
  static_assert (parameters_of (^^qux)[0] == parameters_of (^^qux)[1]);	// { dg-error "static assertion failed" }
  // { dg-message "note: the comparison reduces to '\\\(parameters_of\\\(\\\^\\\^qux\\\(int, int\\\)\\\)\\\[0\\\] \\\{aka x\\\} == parameters_of\\\(\\\^\\\^qux\\\(int, int\\\)\\\)\\\[1\\\] \\\{aka y\\\}\\\)'" "" { target *-*-* } .-1 }
+ 
+ static_assert (std::meta::info{} == ^^int);	// { dg-error "static assertion failed" }
+ // { dg-message {note: the comparison reduces to '\(std::meta::info{} == \^\^int\)} "" { target *-*-* } .-1 }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/pr125179.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/pr125179.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/pr125179.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/pr125179.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,58 ----
+ // PR c++/125179
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #define A(x, y) \
+   struct S##x##0 { S##y##9 *a; }; \
+   struct S##x##1 { S##x##0 *a; }; \
+   struct S##x##2 { S##x##1 *a; }; \
+   struct S##x##3 { S##x##2 *a; }; \
+   struct S##x##4 { S##x##3 *a; }; \
+   struct S##x##5 { S##x##4 *a; }; \
+   struct S##x##6 { S##x##5 *a; }; \
+   struct S##x##7 { S##x##6 *a; }; \
+   struct S##x##8 { S##x##7 *a; }; \
+   struct S##x##9 { S##x##8 *a; }
+ #define B(x, y) \
+   A (x##0, y##9); \
+   A (x##1, x##0); \
+   A (x##2, x##1); \
+   A (x##3, x##2); \
+   A (x##4, x##3); \
+   A (x##5, x##4); \
+   A (x##6, x##5); \
+   A (x##7, x##6); \
+   A (x##8, x##7); \
+   A (x##9, x##8)
+ #define C(x, y) \
+   B (x##0, y##9); \
+   B (x##1, x##0); \
+   B (x##2, x##1); \
+   B (x##3, x##2); \
+   B (x##4, x##3); \
+   B (x##5, x##4); \
+   B (x##6, x##5); \
+   B (x##7, x##6); \
+   B (x##8, x##7); \
+   B (x##9, x##8)
+ #define D(x, y) \
+   C (x##0, y##9); \
+   C (x##1, x##0); \
+   C (x##2, x##1); \
+   C (x##3, x##2); \
+   C (x##4, x##3); \
+   C (x##5, x##4); \
+   C (x##6, x##5); \
+   C (x##7, x##6); \
+   C (x##8, x##7); \
+   C (x##9, x##8)
+ struct S09998;
+ struct S09999;
+ D (1, 0);
+ D (2, 1);
+ D (3, 2);
+ D (4, 3);
+ struct S09999 { S49999 *a; S09998 *b; };
+ S49999 a = { nullptr };
+ struct S09998 { decltype (^^::) a; };
+ constexpr S49999 b = { nullptr };
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/reflect_constant_array2.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/reflect_constant_array2.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/reflect_constant_array2.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/reflect_constant_array2.C	Sun May 17 22:32:08 2026
***************
*** 1,5 ****
  // { dg-do compile { target c++26 } }
! // { dg-additional-options "-freflection" }
  // Test std::meta::reflect_constant_string.
  
  #include <meta>
--- 1,6 ----
  // { dg-do compile { target c++26 } }
! // Added _GLIBCXX_SYSHR to test c++/124621.
! // { dg-additional-options "-freflection -D_GLIBCXX_SYSHDR" }
  // Test std::meta::reflect_constant_string.
  
  #include <meta>
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/substitute3.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/substitute3.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/substitute3.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/substitute3.C	Sun May 17 22:32:08 2026
***************
*** 7,15 ****
  
  template<typename>
  auto
! f ()
! {
! }
  
  consteval bool
  g ()
--- 7,13 ----
  
  template<typename>
  auto
! f ();
  
  consteval bool
  g ()
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/type12.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/type12.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/type12.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/type12.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,28 ----
+ // PR c++/125280
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ template <class T, int N>
+ struct Array {
+   T mElements[N];
+ };
+ 
+ struct Element {
+   static const Array<Element, 9> mData;
+ };
+ const Array<Element, 9> Element::mData;
+ 
+ struct CE { decltype(^^::) i; };
+ 
+ struct A {
+   static const Array<CE, 10> mData;
+ };
+ const Array<CE, 10> A::mData{}; // { dg-error "outside a constant-evaluated context" }
+ 
+ struct B {
+   static constexpr Array<CE, 11> mData{};
+ };
+ 
+ struct C {
+   static const Array<CE, 12> mData;
+ };
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/type13.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/type13.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/type13.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/type13.C	Sun May 17 22:32:08 2026
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/125280
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ template <class T, int N>
+ struct Array {
+   T mElements[N]; // { dg-error "incomplete type" }
+ };
+ 
+ struct Element {
+   static const Array<Element, 10> mData{}; // { dg-error "initialization of static data member" }
+ };
+ const Array<Element, 10> Element::mData;
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/reflect/type_of3.C gcc-17-20260517/gcc/testsuite/g++.dg/reflect/type_of3.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/reflect/type_of3.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/reflect/type_of3.C	Sun May 17 22:32:08 2026
*************** struct S {
*** 10,13 ****
--- 10,19 ----
  };
  int h() { return 0; }
  
+ template<class T>
+ struct ST {
+     auto g() { return T{}; }
+ };
+ 
  static_assert(type_of(^^S::g) == type_of(^^h));
+ static_assert(type_of(^^ST<int>::g) == type_of(^^h));
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C gcc-17-20260517/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
*** gcc-17-20260510/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C	Sun May 10 22:32:09 2026
--- gcc-17-20260517/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C	Sun May 17 22:32:08 2026
*************** void do_something(void* storage)
*** 14,17 ****
    std::swap(event, swappedValue);
  }
  
! // { dg-bogus "may be used uninitialized" "" { xfail *-*-* } 0 }
--- 14,17 ----
    std::swap(event, swappedValue);
  }
  
! // { dg-bogus "may be used uninitialized" "" { target *-*-* } 0 }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/g++.target/i386/seh-sysvabi-wrap1.C gcc-17-20260517/gcc/testsuite/g++.target/i386/seh-sysvabi-wrap1.C
*** gcc-17-20260510/gcc/testsuite/g++.target/i386/seh-sysvabi-wrap1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/g++.target/i386/seh-sysvabi-wrap1.C	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,50 ----
+ /* Verify that x86_64 mingw can emit SEH metadata for a sysv_abi wrapper
+    trampoline that references a throwing callee.  */
+ /* { dg-do compile { target x86_64-*-mingw* } } */
+ /* { dg-options "-std=gnu++17 -fexceptions" } */
+ 
+ #define SYSV __attribute__ ((sysv_abi))
+ #define NOINLINE __attribute__ ((noinline))
+ 
+ template <auto F>
+ struct wrapper;
+ 
+ template <typename R, typename... Args, SYSV R (*Func) (Args...)>
+ struct wrapper<Func>
+ {
+   static R SYSV NOINLINE
+   call (Args... args) noexcept
+   {
+     return Func (args...);
+   }
+ };
+ 
+ using entry_fn = int SYSV (*) ();
+ 
+ volatile int throw_flag;
+ volatile unsigned long long sink;
+ 
+ int SYSV NOINLINE
+ stub0 ()
+ {
+   try
+     {
+       if (throw_flag)
+         throw 0;
+     }
+   catch (...)
+     {
+     }
+ 
+   return 1;
+ }
+ 
+ static entry_fn wrapped[] = { wrapper<stub0>::call };
+ 
+ int
+ main ()
+ {
+   entry_fn fn = wrapped[0];
+   sink += (unsigned long long) (void *) fn;
+   return fn () == 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.c-torture/execute/pr125291.c gcc-17-20260517/gcc/testsuite/gcc.c-torture/execute/pr125291.c
*** gcc-17-20260510/gcc/testsuite/gcc.c-torture/execute/pr125291.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.c-torture/execute/pr125291.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,39 ----
+ /* PR tree-optimization/125291 */
+ 
+ char buf[1111];
+ char *archive_le16dec_filename = buf;
+ unsigned int archive_le16dec_end, archive_le16dec_fn_end,
+     archive_le16dec_filename_size, archive_le16dec_offset;
+ char archive_le16dec_p[] = { 21, 0x7f };
+ 
+ [[gnu::noipa]]
+ void
+ archive_le16dec ()
+ {
+   archive_le16dec_filename_size = (short)archive_le16dec_filename_size;
+   unsigned char flagbits = 0, flagbyte;
+   archive_le16dec_end = archive_le16dec_filename_size;
+   archive_le16dec_fn_end = archive_le16dec_filename_size * 2;
+   archive_le16dec_filename_size = flagbits = 0;
+   while (archive_le16dec_offset < archive_le16dec_end
+          && archive_le16dec_filename_size < archive_le16dec_fn_end)
+     {
+       if (!flagbits)
+         {
+           flagbyte = archive_le16dec_p[archive_le16dec_offset++];
+           flagbits = 8;
+         }
+       flagbits -= 2;
+       if (!(flagbyte >> flagbits & 3))
+         archive_le16dec_filename_size++;
+     }
+ }
+ 
+ int
+ main ()
+ {
+   archive_le16dec_filename_size = 2;
+   archive_le16dec ();
+   if (archive_le16dec_filename_size != 1)
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/analyzer/taint-assert.c gcc-17-20260517/gcc/testsuite/gcc.dg/analyzer/taint-assert.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/analyzer/taint-assert.c	Sun May 10 22:32:10 2026
--- gcc-17-20260517/gcc/testsuite/gcc.dg/analyzer/taint-assert.c	Sun May 17 22:32:09 2026
*************** test_switch_bogus_case_unreachable (int
*** 322,329 ****
      case 2:
        return -1;
      case 42:
!       /* This case gets optimized away before we see it.  */
!       __builtin_unreachable ();
      }
  }
  
--- 322,329 ----
      case 2:
        return -1;
      case 42:
!       /* The wording is rather inaccurate here.  */
!       __builtin_unreachable (); /* { dg-warning "use of attacked-controlled value in condition for assertion" } */
      }
  }
  
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-1.c gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-1.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,92 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ [[gnu::noipa]] static unsigned char
+ br8 (unsigned char x)
+ {
+   return __builtin_bitreverse8 (x);
+ }
+ 
+ [[gnu::noipa]] static unsigned short
+ br16 (unsigned short x)
+ {
+   return __builtin_bitreverse16 (x);
+ }
+ 
+ [[gnu::noipa]] static unsigned
+ br32 (unsigned x)
+ {
+   return __builtin_bitreverse32 (x);
+ }
+ 
+ [[gnu::noipa]] static unsigned long long
+ br64 (unsigned long long x)
+ {
+   return __builtin_bitreverse64 (x);
+ }
+ 
+ #if __SIZEOF_INT128__ == 16
+ [[gnu::noipa]] static unsigned __int128
+ br128 (unsigned __int128 x)
+ {
+   return __builtin_bitreverse128 (x);
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __CHAR_BIT__ == 8
+   if (br8 (0x00u) != 0x00u)
+     __builtin_abort ();
+   if (br8 (0x01u) != 0x80u)
+     __builtin_abort ();
+   if (br8 (0x34u) != 0x2cu)
+     __builtin_abort ();
+   if (br8 (0xffu) != 0xffu)
+     __builtin_abort ();
+ #if __SIZEOF_SHORT__ == 2
+   if (br16 (0x0000u) != 0x0000u)
+     __builtin_abort ();
+   if (br16 (0x0001u) != 0x8000u)
+     __builtin_abort ();
+   if (br16 (0x1234u) != 0x2c48u)
+     __builtin_abort ();
+   if (br16 (0xffffu) != 0xffffu)
+     __builtin_abort ();
+ #endif
+ #if __SIZEOF_INT__ == 4
+   if (br32 (0x00000000u) != 0x00000000u)
+     __builtin_abort ();
+   if (br32 (0x00000001u) != 0x80000000u)
+     __builtin_abort ();
+   if (br32 (0x01234567u) != 0xe6a2c480u)
+     __builtin_abort ();
+   if (br32 (0xffffffffu) != 0xffffffffu)
+     __builtin_abort ();
+ #endif
+ #if __SIZEOF_LONG_LONG__ == 8
+   if (br64 (0x0000000000000000ull) != 0x0000000000000000ull)
+     __builtin_abort ();
+   if (br64 (0x0000000000000001ull) != 0x8000000000000000ull)
+     __builtin_abort ();
+   if (br64 (0x0123456789abcdefull) != 0xf7b3d591e6a2c480ull)
+     __builtin_abort ();
+   if (br64 (0xffffffffffffffffull) != 0xffffffffffffffffull)
+     __builtin_abort ();
+ #endif
+ #if __SIZEOF_INT128__ == 16
+   if (br128 (0) != 0)
+     __builtin_abort ();
+   if (br128 (1) != (unsigned __int128) 1 << 127)
+     __builtin_abort ();
+   if (br128 (((unsigned __int128) 0x0123456789abcdefull << 64)
+ 	     | 0x2468ace013579bdfull)
+       != (((unsigned __int128) 0xfbd9eac807351624ull << 64)
+ 	  | 0xf7b3d591e6a2c480ull))
+     __builtin_abort ();
+   if (br128 (~(unsigned __int128) 0) != ~(unsigned __int128) 0)
+     __builtin_abort ();
+ #endif
+ #endif
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-2.c gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-2.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-std=gnu11" } */
+ 
+ #if __CHAR_BIT__ == 8
+ _Static_assert (__builtin_bitreverse8 (0x01u) == 0x80u, "bitreverse8");
+ #if __SIZEOF_SHORT__ == 2
+ _Static_assert (__builtin_bitreverse16 (0x0001u) == 0x8000u, "bitreverse16");
+ #endif
+ #if __SIZEOF_INT__ == 4
+ _Static_assert (__builtin_bitreverse32 (0x12345678u) == 0x1e6a2c48u,
+ 		"bitreverse32");
+ #endif
+ #if __SIZEOF_LONG_LONG__ == 8
+ _Static_assert (__builtin_bitreverse64 (0x0123456789abcdefull)
+ 		== 0xf7b3d591e6a2c480ull, "bitreverse64");
+ #endif
+ #if __SIZEOF_INT128__ == 16
+ _Static_assert (__builtin_bitreverse128 (((unsigned __int128)
+ 					  0x0123456789abcdefull << 64)
+ 					 | 0x2468ace013579bdfull)
+ 		== (((unsigned __int128) 0xfbd9eac807351624ull << 64)
+ 		    | 0xf7b3d591e6a2c480ull), "bitreverse128");
+ #endif
+ #endif
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-3.c gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-3.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-3.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #if __SIZEOF_INT__ == 4 && __CHAR_BIT__ == 8
+ [[gnu::noipa]] bool
+ foo (unsigned x)
+ {
+   x &= 0x499a750a;
+   x |= 0x5a7c04f;
+   x = __builtin_bitreverse32 (x);
+   return (x & ~0x351848) == 0x4fc0a705;
+ }
+ 
+ [[gnu::noipa]] bool
+ bar (unsigned x)
+ {
+   x &= 0x499a750a;
+   x |= 0x5a7c04f;
+   x = __builtin_bitreverse32 (x);
+   return (x & ~0xac1812) == 0xf203e5a0;
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __SIZEOF_INT__ == 4 && __CHAR_BIT__ == 8
+   if (foo (~0) || !bar (~0))
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-4.c gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-4.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/builtin-bitreverse-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/builtin-bitreverse-4.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile { target int32 } } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ #define BS(X) __builtin_bitreverse32 (X)
+ 
+ unsigned
+ foo1 (unsigned a)
+ {
+   return BS (~ BS (a));
+ }
+ 
+ unsigned
+ foo2 (unsigned a)
+ {
+   return BS (BS (a) & 0xA0000);
+ }
+ 
+ unsigned
+ foo3 (unsigned a)
+ {
+   return BS (BS (a) | 0xA0000);
+ }
+ 
+ unsigned
+ foo4 (unsigned a)
+ {
+   return BS (BS (a) ^ 0xA0000);
+ }
+ 
+ unsigned
+ foo5 (unsigned a, unsigned b)
+ {
+   return BS (BS (a) & BS (b));
+ }
+ 
+ unsigned
+ foo6 (unsigned a, unsigned b)
+ {
+   return BS (BS (a) | BS (b));
+ }
+ 
+ unsigned
+ foo7 (unsigned a, unsigned b)
+ {
+   return BS (BS (a) ^ BS (b));
+ }
+ 
+ unsigned
+ foo8 (unsigned a)
+ {
+   return BS (BS (BS (BS (a))));
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "__builtin_bitreverse" "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-1.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-1.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,68 ----
+ /* Test that C23 warnings are produced about initializers that might
+  * not zero padding bits of structs or unions. Expected results are different
+  * from GNU11 because empty initializers zero padding bits.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=c23 -Wzero-init-padding-bits=all" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+ 
+   /* ZI because it omits c[0], c[1] */
+   struct B d = { .b = argc, .a = 2, .c[2].a = 3, .c[2].b = 4 }; 
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c[0] and c[2] as contagious */
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct B f = { argc, 2, {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U j = { .a = argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+ 
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+ 
+   /* All (struct) padding is explicitly initialized */
+   struct C p = { {}, .a.a = argc, .a.b = 4 };
+ 
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+ 
+   /* All (union) padding is explicitly initialized */
+   struct F s = { argc, {}, .b.a = 2 };
+ 
+   /* Empty initializer is overridden and therefore ineffective */
+   struct F t = { argc, {}, .b = {.a = 2} }; /* { dg-warning "padding might not be initialized to zero" } */
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-10.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-10.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-10.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-10.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (despite being enabled for unions)
+  * about initializers that might not zero padding bits (when configured to zero
+  * only padding bits of unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=unions -fzero-init-padding-bits=unions" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-11.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-11.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-11.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-11.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits (when configured to zero
+  * only padding bits of unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard -fzero-init-padding-bits=unions" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-12.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-12.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-12.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-12.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (by default) about
+  * initializers that might not zero padding bits (when configured to zero
+  * only padding bits of unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=unions" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-13.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-13.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-13.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-13.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (despite being enabled for structs
+  * and unions) about initializers that might not zero padding bits (when
+  * configured to zero padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=all -fzero-init-padding-bits=all" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-14.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-14.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-14.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-14.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (despite being enabled for unions)
+  * about initializers that might not zero padding bits (when configured to zero
+  * padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=unions -fzero-init-padding-bits=all" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-15.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-15.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-15.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-15.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits (when configured to zero
+  * padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard -fzero-init-padding-bits=all" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-16.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-16.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-16.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (by default) about
+  * initializers that might not zero padding bits (when configured to zero
+  * padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=all" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-17.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-17.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-17.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-17.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,51 ----
+ /* Test that no C23 warnings are produced about initializers of objects with
+  * static storage duration that might not have zeroed padding bits if they
+  * instead had automatic storage duration.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=c23 -Wzero-init-padding-bits=all" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main ()
+ {
+   static struct A a = {};
+   static struct B b = {};
+   static struct B c = { 1, 2 };
+   static struct B d = { .b = 1, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   static struct B e = { 1, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {},
+ 			.c[0].a = 3, .c[0].b = 4, .c[1].a = 5,
+ 			.c[1].b = 6, .c[2].a = 7, .c[2].b = 8 };
+ 
+   static struct B f = { 1, 2, {},
+ 			.c[0].a = 3, .c[0].b = 4, .c[1].a = 5,
+ 			.c[1].b = 6, .c[2].a = 7, .c[2].b = 8 };
+ 
+   static struct B g = { 1, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5,
+ 			.c[1].b = 6, .c[2].a = 7, .c[2].b = 8 };
+ 
+   static union U h = {};
+   static union U i = { 1 };
+   static union U j = { .a = 1 };
+   static union U k = { .b = 1 };
+   static struct D l = {};
+   static struct D m = { 1, 2 };
+   static struct D n = { 1, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+   static struct C o = { {} };
+   static struct C p = { {}, .a.a = 3, .a.b = 4 };
+   static struct E q = { 1, 2 };
+   static union V r = { 1 };
+   static struct F s = { 1, {}, .b.a = 2 };
+   static struct F t = { 1, {}, .b = {.a = 2} };
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-2.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-2.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,69 ----
+ /* Test that C23 warnings are only produced (when enabled for unions) about
+  * initializers that might not zero padding bits of unions. Expected results are
+  * different from GNU11 because empty initializers zero padding bits.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=c23 -Wzero-init-padding-bits=unions" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+ 
+   /* ZI because it omits c[0], c[1] */
+   struct B d = { .b = argc, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c[0] and c[2] as contagious */
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {}, 
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct B f = { argc, 2, {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized */
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6, 
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U j = { .a = argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+ 
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+ 
+   /* All (struct) padding is explicitly initialized */
+   struct C p = { {}, .a.a = argc, .a.b = 4 };
+ 
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+ 
+   /* All (union) padding is explicitly initialized */
+   struct F s = { argc, {}, .b.a = 2 };
+ 
+   /* Empty initializer is overridden and therefore ineffective */
+   struct F t = { argc, {}, .b = {.a = 2} }; /* { dg-warning "padding might not be initialized to zero" } */
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-3.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-3.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-3.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,7 ----
+ /* Test that no C23 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-4.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-4.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-4.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,69 ----
+ /* Test that no C23 warnings are produced (by default) about initializers
+  * that might not zero padding bits. Expected results are the same as GNU11
+  * despite the fact that empty initializers zero padding bits.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=c23" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+ 
+   /* ZI because it omits c[0], c[1] */
+   struct B d = { .b = argc, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c[0] and c[2] as contagious */
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct B f = { argc, 2, {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized */
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* Padding bits might not be initialized */
+   union U j = { .a = argc }; /* Padding bits might not be initialized */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+ 
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+ 
+   /* All (struct) padding is explicitly initialized */
+   struct C p = { {}, .a.a = argc, .a.b = 4 };
+ 
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+ 
+   /* All (union) padding is explicitly initialized */
+   struct F s = { argc, {}, .b.a = 2 };
+ 
+   /* Empty initializer is overridden and therefore ineffective */
+   struct F t = { argc, {}, .b = {.a = 2} };
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-5.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-5.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-5.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that C23 warnings are produced about initializers that might
+  * not zero padding bits of structs or unions (when configured not to zero
+  * padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=standard" } */
+ 
+ #include "c23-empty-init-warn-1.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-6.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-6.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-6.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that C23 warnings are only produced (when enabled for unions) about
+  * initializers that might not zero padding bits of unions (when configured not
+  * to zero padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=standard" } */
+ 
+ #include "c23-empty-init-warn-2.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-7.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-7.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-7.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits (when configured not to zero
+  * padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard -fzero-init-padding-bits=standard" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-8.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-8.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-8.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no C23 warnings are produced (by default) about
+  * initializers that might not zero padding bits (when configured not to zero
+  * padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=standard" } */
+ 
+ #include "c23-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-9.c gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-9.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/c23-empty-init-warn-9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/c23-empty-init-warn-9.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,69 ----
+ /* Test that C23 warnings are only produced (when enabled for structs and
+  * unions) about initializers that might not zero padding bits of structs (when
+  * configured to only zero padding bits of unions). Expected results are
+  * different from GNU11 because empty initializers zero padding bits.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=c23 -Wzero-init-padding-bits=all -fzero-init-padding-bits=unions" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+ 
+   /* ZI because it omits c[0], c[1] */
+   struct B d = { .b = argc, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c[0] and c[2] as contagious */
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct B f = { argc, 2, {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* Padding bits might not be initialized */
+   union U j = { .a = argc }; /* Padding bits might not be initialized */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+ 
+   /* Padding bits might not be initialized according to C23 but GCC treats
+      the explicitly initialized padding of c as contagious */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+ 
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+ 
+   /* All (struct) padding is explicitly initialized */
+   struct C p = { {}, .a.a = argc, .a.b = 4 };
+ 
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+ 
+   /* All (union) padding is explicitly initialized */
+   struct F s = { argc, {}, .b.a = 2 };
+ 
+   /* Empty initializer is overridden and therefore ineffective */
+   struct F t = { argc, {}, .b = {.a = 2} };
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-1.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-1.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,52 ----
+ /* Test that GNU11 warnings are produced about initializers that might
+  * not zero padding bits of structs or unions.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=gnu11 -Wzero-init-padding-bits=all" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+ 
+   /* ZI because it omits c[0], c[1] */
+   struct B d = { .b = argc, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {}, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   struct B f = { argc, 2, {}, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U j = { .a = argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 }; /* { dg-warning "padding might not be initialized to zero" } */
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+   struct C p = { {}, .a.a = argc, .a.b = 4 }; /* { dg-warning "padding might not be initialized to zero" } */
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+   struct F s = { argc, {}, .b.a = 2 }; /* { dg-warning "padding might not be initialized to zero" } */
+   struct F t = { argc, {}, .b = {.a = 2} }; /* { dg-warning "padding might not be initialized to zero" } */
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-10.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-10.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-10.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-10.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (despite being enabled for unions)
+  * about initializers that might not zero padding bits (when configured to zero
+  * only padding bits of unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=unions -fzero-init-padding-bits=unions" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-11.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-11.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-11.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-11.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits (when configured to zero
+  * only padding bits of unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard -fzero-init-padding-bits=unions" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-12.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-12.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-12.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-12.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (by default) about
+  * initializers that might not zero padding bits (when configured to zero
+  * only padding bits of unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=unions" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-13.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-13.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-13.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-13.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (despite being enabled for structs
+  * and unions) about initializers that might not zero padding bits (when
+  * configured to zero padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=all -fzero-init-padding-bits=all" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-14.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-14.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-14.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-14.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (despite being enabled for unions)
+  * about initializers that might not zero padding bits (when configured to zero
+  * padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=unions -fzero-init-padding-bits=all" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-15.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-15.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-15.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-15.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits (when configured to zero
+  * padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard -fzero-init-padding-bits=all" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-16.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-16.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-16.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (by default) about
+  * initializers that might not zero padding bits (when configured to zero
+  * padding bits of structs and unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=all" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-17.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-17.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-17.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-17.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,51 ----
+ /* Test that no GNU11 warnings are produced about initializers of objects with
+  * static storage duration that might not have zeroed padding bits if they
+  * instead had automatic storage duration.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=gnu11 -Wzero-init-padding-bits=all" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main ()
+ {
+   static struct A a = {};
+   static struct B b = {};
+   static struct B c = { 1, 2 };
+   static struct B d = { .b = 1, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   static struct B e = { 1, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {},
+                   .c[0].a = 3, .c[0].b = 4, .c[1].a = 5,
+                   .c[1].b = 6, .c[2].a = 7, .c[2].b = 8 };
+ 
+   static struct B f = { 1, 2, {},
+                   .c[0].a = 3, .c[0].b = 4, .c[1].a = 5,
+                   .c[1].b = 6, .c[2].a = 7, .c[2].b = 8 };
+ 
+   static struct B g = { 1, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5,
+                   .c[1].b = 6, .c[2].a = 7, .c[2].b = 8 };
+ 
+   static union U h = {};
+   static union U i = { 1 };
+   static union U j = { .a = 1 };
+   static union U k = { .b = 1 };
+   static struct D l = {};
+   static struct D m = { 1, 2 };
+   static struct D n = { 1, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+   static struct C o = { {} };
+   static struct C p = { {}, .a.a = 3, .a.b = 4 };
+   static struct E q = { 1, 2 };
+   static union V r = { 1 };
+   static struct F s = { 1, {}, .b.a = 2 };
+   static struct F t = { 1, {}, .b = {.a = 2} };
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-2.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-2.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,59 ----
+ /* Test that GNU11 warnings are only produced (when enabled for unions) about
+  * initializers that might not zero padding bits of unions.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=gnu11 -Wzero-init-padding-bits=unions" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+   struct B d = { .b = 1, .a = 2, .c[2].a = 3, .c[2].b = 4 }; /* ZI because it omits c[0], c[1] */
+ 
+   /* Padding bits might not be initialized */
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {}, 
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized */
+   struct B f = { argc, 2, {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized */
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6, 
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U j = { .a = argc }; /* { dg-warning "padding might not be initialized to zero" } */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+ 
+   /* Padding bits might not be initialized */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+ 
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+ 
+   /* Padding bits might not be initialized */
+   struct C p = { {}, .a.a = argc, .a.b = 4 };
+ 
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+   struct F s = { argc, {}, .b.a = 2 }; /* { dg-warning "padding might not be initialized to zero" } */
+   struct F t = { argc, {}, .b = {.a = 2} }; /* { dg-warning "padding might not be initialized to zero" } */
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-3.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-3.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-3.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,7 ----
+ /* Test that no GNU11 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-4.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-4.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-4.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,63 ----
+ /* Test that no GNU11 warnings are produced (by default) about initializers
+  * that might not zero padding bits.
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=gnu11" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+ 
+   /* ZI because it omits c[0], c[1] */
+   struct B d = { .b = argc, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   /* Padding bits might not be initialized */
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized */
+   struct B f = { argc, 2, {},
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   /* Padding bits might not be initialized */
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* Padding bits might not be initialized */
+   union U j = { .a = argc }; /* Padding bits might not be initialized */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+ 
+   /* Padding bits might not be initialized */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 };
+ 
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+ 
+   /* Padding bits might not be initialized */
+   struct C p = { {}, .a.a = argc, .a.b = 4 };
+ 
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+ 
+   /* Padding bits (of union) might not be initialized */
+   struct F s = { argc, {}, .b.a = 2 };
+   struct F t = { argc, {}, .b = {.a = 2} };
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-5.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-5.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-5.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that GNU11 warnings are produced about initializers that might
+  * not zero padding bits of structs or unions (when configured not to zero
+  * padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=standard" } */
+ 
+ #include "gnu11-empty-init-warn-1.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-6.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-6.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-6.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that GNU11 warnings are only produced (when enabled for unions) about
+  * initializers that might not zero padding bits of unions (when configured not
+  * to zero padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=standard" } */
+ 
+ #include "gnu11-empty-init-warn-2.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-7.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-7.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-7.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (when explicitly disabled) about
+  * initializers that might not zero padding bits (when configured not to zero
+  * padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-Wzero-init-padding-bits=standard -fzero-init-padding-bits=standard" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-8.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-8.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-8.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,8 ----
+ /* Test that no GNU11 warnings are produced (by default) about
+  * initializers that might not zero padding bits (when configured not to zero
+  * padding bits unless mandated by the language standard).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-fzero-init-padding-bits=standard" } */
+ 
+ #include "gnu11-empty-init-warn-4.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-9.c gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-9.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/gnu11-empty-init-warn-9.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,55 ----
+ /* Test that GNU11 warnings are only produced (when enabled for structs and
+  * unions) about initializers that might not zero padding bits of structs (when
+  * configured to only zero padding bits of unions).
+  */
+ /* { dg-do run } */
+ /* { dg-options "-std=gnu11 -Wzero-init-padding-bits=all -fzero-init-padding-bits=unions" } */
+ 
+ struct A { unsigned char a; long long b; };
+ struct B { unsigned char a; long long b; struct A c[3]; };
+ struct C { struct A a; };
+ struct D { unsigned char a; long long b; struct C c; };
+ struct E { long long a; long long b; };
+ union U { unsigned char a; long long b; };
+ union V { long long a; long long b; };
+ struct F { long long a; union U b; };
+ 
+ int
+ main (int argc, char *argv[])
+ {
+   struct A a = {}; /* ZI because it omits a, b */
+   struct B b = {}; /* ZI because it omits a, b, c */
+   struct B c = { argc, 2 }; /* ZI because it omits c[0], c[1], c[2] */
+ 
+   /* ZI because it omits c[0], c[1] */
+   struct B d = { .b = argc, .a = 2, .c[2].a = 3, .c[2].b = 4 };
+ 
+   struct B e = { argc, 2, .c[2] = {}, .c[1] = { 9 }, .c[0] = {}, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   struct B f = { argc, 2, {}, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6,
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   struct B g = { argc, 2, .c[0].a = 3, .c[0].b = 4, .c[1].a = 5, .c[1].b = 6, /* { dg-warning "padding might not be initialized to zero" } */
+ 		 .c[2].a = 7, .c[2].b = 8 };
+ 
+   union U h = {}; /* ZI because it omits a, b */
+   union U i = { argc }; /* Padding bits might not be initialized */
+   union U j = { .a = argc }; /* Padding bits might not be initialized */
+   union U k = { .b = argc }; /* Largest member is initialized */
+   struct D l = {}; /* ZI because it omits a, b, c */
+   struct D m = { argc, 2 }; /* ZI because it omits c */
+   struct D n = { argc, 2, {}, .c.a.a = 3, .c.a.b = 4 }; /* { dg-warning "padding might not be initialized to zero" } */
+   struct C o = { {} }; /* ZI because it omits a.a, a.b */
+   struct C p = { {}, .a.a = argc, .a.b = 4 }; /* { dg-warning "padding might not be initialized to zero" } */
+   struct E q = { argc, 2 }; /* No padding */
+   union V r = { argc }; /* No padding */
+ 
+   /* Padding bits (of union) might not be initialized */
+   struct F s = { argc, {}, .b.a = 2 };
+   struct F t = { argc, {}, .b = {.a = 2} };
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/pr125206.c gcc-17-20260517/gcc/testsuite/gcc.dg/pr125206.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/pr125206.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/pr125206.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -fgimple -fdump-tree-forwprop1-gimple" } */
+ 
+ struct S {
+   struct S *next;
+   int vals[5];
+ };
+ 
+ int __GIMPLE foo (struct S * s, int idx)
+ {
+   int D_2968;
+   int *_1;
+ 
+   /* In GIMPLE '*s' does not have to be aligned according to its type
+      so we have to preserve the alignment of the access when forwarding
+      the address.  */
+   _1 = &s->vals[idx];
+   D_2968 = __MEM <volatile int> ((volatile int *)_1);
+   return D_2968;
+ }
+ 
+ /* { dg-final { scan-tree-dump "__MEM <struct S, 32>" "forwprop1" { target lp64 } } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/pr125209.c gcc-17-20260517/gcc/testsuite/gcc.dg/pr125209.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/pr125209.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/pr125209.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,13 ----
+ /* PR rtl-optimization/125209 */
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fno-tree-sink" } */
+ 
+ int a, b;
+ volatile unsigned c;
+ extern void d(unsigned short);
+ int e(long f) { return a ? f : 0; }
+ int main() {
+   int g = e(c ^ !b);
+   d(g);
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/pr125261.c gcc-17-20260517/gcc/testsuite/gcc.dg/pr125261.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/pr125261.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/pr125261.c	Sun May 17 22:32:09 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Wuseless-cast" } */
+ 
+ 
+ static int i = _Generic(0., int: (int)0, default: 0);
+ static int j = _Generic(0, int: 0, default: (int)0, float: 0);
+ static int k = _Generic(0, default: 0, int: (int)0);	/* { dg-warning "useless" } */
+ 
+ /* If the active assocation cames later than the default, we do
+    not know that it is unused.  */
+ // static int l = _Generic(0, default: (int)0, int: 0);
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/torture/pr125250.c gcc-17-20260517/gcc/testsuite/gcc.dg/torture/pr125250.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/torture/pr125250.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/torture/pr125250.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do run } */
+ 
+ short g0, __chk, g9, g6;
+ _Bool g1;
+ void *g4;
+ 
+ void __attribute__((noipa)) f5(_Bool a2, int a5)
+ {
+   void *a1 = &a2;
+ lbl_br11:
+   *(_Bool *)a1 = 0;
+   a1 = &a5;
+   if (!a2)
+     {
+       g1 = *(_Bool *)g4;
+       if (g1)
+         {
+           g9 = -g9;
+           goto lbl_br11;
+         }
+     }
+   g6 = a5;
+ }
+ 
+ int main()
+ {
+   g4 = &g0;
+   f5(0, 8);
+   __chk = g6;
+   if (__chk != 8)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/torture/pr125290-1.c gcc-17-20260517/gcc/testsuite/gcc.dg/torture/pr125290-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/torture/pr125290-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/torture/pr125290-1.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,40 ----
+ /* PR tree-optimization/125290 */
+ /* { dg-do compile } */
+ 
+ int g21;
+ int g31, f14f16_c12;
+ void f14f16()
+ {
+     short v7;
+     long v9;
+     long v13;
+     if (g31)
+     {
+         g21 = 0;
+         switch (v7)
+         {
+             case 4:
+             case 66: break;
+             default: __builtin_unreachable();
+         }
+     }
+     else
+     {
+     lbl_bf2:
+         v9 = g21;
+     }
+     v13 = v9;
+     switch (v13)
+     {
+         case 55:
+         case 2: goto lbl_sw12;
+         default:
+             if (f14f16_c12)
+                 goto lbl_bf2;
+             else
+                 return;
+     }
+ lbl_sw12:
+     __builtin_unreachable();
+ }
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount7.c gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount7.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount7.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target popcount } */
+ /* { dg-require-effective-target int32plus } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ const unsigned m1  = 0x55555555UL;
+ const unsigned m2  = 0x33333333UL;
+ const unsigned m3  = 0x0F0F0F0FUL;
+ const unsigned m4  = 0x00FF00FFUL;
+ const unsigned m5  = 0x0000FFFFUL;
+ 
+ int Gia_WordCountOnes32c( unsigned uword )
+ {
+   uword = (uword & m1) + ((uword>>1) & m1);
+   uword = (uword & m2) + ((uword>>2) & m2);
+   uword = (uword & m3) + ((uword>>4) & m3);
+   uword = (uword & m4) + ((uword>>8) & m4);
+   return  (uword & m5) + (uword>>16);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.POPCOUNT" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount7_2.c gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount7_2.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount7_2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount7_2.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target popcount } */
+ /* { dg-require-effective-target int32plus } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ const unsigned m1  = 0x55555555UL;
+ const unsigned m2  = 0x33333333UL;
+ const unsigned m3  = 0x0F0F0F0FUL;
+ const unsigned m4  = 0x00FF00FFUL;
+ const unsigned m5  = 0x0000FFFFUL;
+ 
+ int Gia_WordCountOnes32c( unsigned uword )
+ {
+   uword = (uword & m1) + ((uword>>1) & m1);
+   uword = (uword & m2) + ((uword>>2) & m2);
+   uword = (uword & m3) + ((uword>>4) & m3);
+   uword = (uword & m4) + ((uword>>8) & m4);
+   return  (uword & m5) + ((uword>>16) & m5);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.POPCOUNT" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount8.c gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount8.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount8.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target popcount } */
+ /* { dg-require-effective-target int32plus } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ const unsigned m1  = 0x55555555UL;
+ const unsigned m2  = 0x33333333UL;
+ const unsigned m3  = 0x0F0F0F0FUL;
+ const unsigned m4  = 0x0000003F;
+ 
+ int pop32c(unsigned x) {
+   x = x - ((x >> 1) & m1);
+   x = (x & m2) + ((x >> 2) & m2);
+   x = (x + (x >> 4)) & m3;
+   x = x + (x >> 8);
+   x = x + (x >> 16);
+   return x & m4;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.POPCOUNT" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount9.c gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount9.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/popcount9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/popcount9.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target popcount } */
+ /* { dg-require-effective-target int32plus } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ const unsigned m1  = 0x55555555UL;
+ const unsigned m2  = 0x33333333UL;
+ const unsigned m3  = 0x0F0F0F0FUL;
+ const unsigned m4  = 0x0000003F;
+ 
+ int popc(unsigned x) {
+   x = x - ((x >> 1) & m1);
+   x = x - 3*((x >> 2) & m2);
+   x = (x + (x >> 4)) & m3;
+   x = x + (x >> 8);
+   x = x + (x >> 16);
+   return x & m4;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.POPCOUNT" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/pr112095.c gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/pr112095.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/pr112095.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/pr112095.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,127 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -fdump-tree-optimized" } */
+ 
+ typedef signed int s32;
+ typedef unsigned char u8;
+ typedef unsigned short u16;
+ typedef unsigned int u32;
+ typedef unsigned long u64;
+ typedef __attribute__((vector_size(4 * sizeof (unsigned int)))) unsigned int v4ui;
+ 
+ s32
+ sf (s32 a, s32 b)
+ {
+   s32 t1 = (~a) & b;
+   s32 t2 = a | b;
+   return t1 ^ t2;
+ }
+ 
+ s32
+ sg (s32 a, s32 b)
+ {
+   s32 t1 = (~a) | b;
+   s32 t2 = a & b;
+   return t1 ^ t2;
+ }
+ 
+ u8
+ f1 (u8 a, u8 b)
+ {
+   u8 t1 = (~a) & b;
+   u8 t2 = a | b;
+   return t1 ^ t2;
+ }
+ 
+ u8
+ g1 (u8 a, u8 b)
+ {
+   u8 t1 = (~a) | b;
+   u8 t2 = a & b;
+   return t1 ^ t2;
+ }
+ 
+ u16
+ f2 (u16 a, u16 b)
+ {
+   u16 t1 = (~a) & b;
+   u16 t2 = a | b;
+   return t1 ^ t2;
+ }
+ 
+ u16
+ g2 (u16 a, u16 b)
+ {
+   u16 t1 = (~a) | b;
+   u16 t2 = a & b;
+   return t1 ^ t2;
+ }
+ 
+ u32
+ f3 (u32 a, u32 b)
+ {
+   u32 t1 = (~a) & b;
+   u32 t2 = a | b;
+   return t1 ^ t2;
+ }
+ 
+ u32
+ g3 (u32 a, u32 b)
+ {
+   u32 t1 = (~a) | b;
+   u32 t2 = a & b;
+   return t1 ^ t2;
+ }
+ 
+ u64
+ f4 (u64 a, u64 b)
+ {
+   u64 t1 = (~a) & b;
+   u64 t2 = a | b;
+   return t1 ^ t2;
+ }
+ 
+ u64
+ g4 (u64 a, u64 b)
+ {
+   u64 t1 = (~a) | b;
+   u64 t2 = a & b;
+   return t1 ^ t2;
+ }
+ 
+ _Bool
+ bf (_Bool a, _Bool b)
+ {
+   _Bool t1 = (~a) & b;
+   _Bool t2 = a | b;
+   return t1 ^ t2;
+ }
+ 
+ _Bool
+ bg (_Bool a, _Bool b)
+ {
+   _Bool t1 = (~a) | b;
+   _Bool t2 = a & b;
+   return t1 ^ t2;
+ }
+ 
+ v4ui
+ vf (v4ui a, v4ui b)
+ {
+   v4ui t1 = (~a) & b;
+   v4ui t2 = a | b;
+   return t1 ^ t2;
+ }
+ 
+ v4ui
+ vg (v4ui a, v4ui b)
+ {
+   v4ui t1 = (~a) | b;
+   v4ui t2 = a & b;
+   return t1 ^ t2;
+ }
+ 
+ /* f* and vf should simplify to return a.  */
+ /* { dg-final { scan-tree-dump-times "return a_" 6 "optimized" } } */
+ 
+ /* g* and vg should simplify to ~a directly.  */
+ /* { dg-final { scan-tree-dump-times "= ~a" 6 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/pr124151.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ 
+ typedef struct {
+   _Bool : 1;
+ } Http2Identifier;
+ typedef struct {
+   _Bool is_end;
+   Http2Identifier identifier;
+ } Http2DataFrame;
+ typedef struct {
+   Http2Identifier identifier;
+   _Bool end_headers;
+ } Http2ContinuationFrame;
+ typedef struct {
+   union {
+     Http2DataFrame data;
+     Http2ContinuationFrame continuation;
+   };
+ } Http2Frame;
+ typedef struct {
+   Http2Identifier stream_identifier;
+ } Http2RawHeader;
+ Http2RawHeader parse_http2_continuation_frame_http2_raw_header;
+ Http2Frame gh2f;
+ void http2_send_and_receive_preface() {
+   Http2ContinuationFrame continuation_frame = {
+       parse_http2_continuation_frame_http2_raw_header.stream_identifier, 0};
+   Http2Frame frame = {.continuation = continuation_frame};
+   gh2f = frame;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/pr125259.c gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/pr125259.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/tree-ssa/pr125259.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/tree-ssa/pr125259.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-O2 -fdump-tree-forwprop1" } */
+ 
+ typedef __attribute__((__vector_size__(4))) char V4;
+ typedef __attribute__((__vector_size__(8))) char V8;
+ 
+ _BitInt(17) foo(V8 *xx)
+ {
+ 	V8 x = *xx;
+ 	V4 v = *(V4 *)&x;
+ 	return *(_BitInt(17) *)&v;
+ }
+ 
+ /* { dg-final { scan-tree-dump "VIEW_CONVERT_EXPR" "forwprop1" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/vect/pr94994.c gcc-17-20260517/gcc/testsuite/gcc.dg/vect/pr94994.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/vect/pr94994.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.dg/vect/pr94994.c	Sun May 17 22:32:10 2026
***************
*** 1,4 ****
--- 1,5 ----
  #include <stdint.h>
+ #include <stddef.h>
  #include "tree-vect.h"
  
  #define BLOCK_SIZE (sizeof (uint32_t))
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/vect/slp-reduc-15.c gcc-17-20260517/gcc/testsuite/gcc.dg/vect/slp-reduc-15.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/vect/slp-reduc-15.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/vect/slp-reduc-15.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,82 ----
+ /* { dg-do compile { target { x86 || aarch64-*-* } } } */
+ /* { dg-additional-options "-fgimple" } */
+ /* { dg-additional-options "-mavx2" { target x86 } } */
+ /* { dg-additional-options "-march=armv8.2-a+sve" { target aarch64-*-* } } */
+ 
+ /* Test that SLP reduction vectorization handles commutative operand swap
+    for .COND_ADD in multi-lane SLP where the reduction operand appears
+    at arg1 in some lanes and arg2 in others.  If-conversion can generate
+    COND_ADD with mixed reduction operand positions.
+ 
+    Without the IFN commutative swap fix, the multi-lane SLP group
+    would be rejected with "different reduc_idx N instead of M".  */
+ 
+ float cond_arr[1024];
+ float data_a[1024];
+ float data_b[1024];
+ float data_c[1024];
+ float data_d[1024];
+ 
+ void __GIMPLE (ssa, guessed_local(16535624), startwith("loop"))
+ foo (float * restrict p0, float * restrict p1,
+      float * restrict p2, float * restrict p3)
+ {
+   float s0;
+   float s1;
+   float s2;
+   float s3;
+   int i;
+   float _a;
+   float _b;
+   float _c;
+   float _d;
+   float _5;
+   _Bool _cond;
+   unsigned int _30;
+   unsigned int _31;
+ 
+   __BB(2, guessed_local(16535624)):
+   goto __BB3(precise(134217728));
+ 
+   __BB(3, loop_header(1), guessed_local(1057206200)):
+   s0_22 = __PHI (__BB5: s0_10, __BB2: 0.0f);
+   s1_24 = __PHI (__BB5: s1_11, __BB2: 0.0f);
+   s2_26 = __PHI (__BB5: s2_12, __BB2: 0.0f);
+   s3_28 = __PHI (__BB5: s3_13, __BB2: 0.0f);
+   i_27 = __PHI (__BB5: i_19, __BB2: 0);
+   _31 = __PHI (__BB5: _30, __BB2: 1024u);
+   _5 = cond_arr[i_27];
+   _cond = _5 > 0.0f;
+   _a = data_a[i_27];
+   _b = data_b[i_27];
+   _c = data_c[i_27];
+   _d = data_d[i_27];
+   /* s0, s1: reduction operand at position 1 (arg1) → reduc_idx=1 */
+   s0_10 = .COND_ADD (_cond, s0_22, _a, s0_22);
+   s1_11 = .COND_ADD (_cond, s1_24, _b, s1_24);
+   /* s2, s3: reduction operand at position 2 (arg2) → reduc_idx=2 */
+   s2_12 = .COND_ADD (_cond, _c, s2_26, s2_26);
+   s3_13 = .COND_ADD (_cond, _d, s3_28, s3_28);
+   i_19 = i_27 + 1;
+   _30 = _31 - 1u;
+   if (_30 != 0u)
+     goto __BB5(guessed(132118446));
+   else
+     goto __BB4(guessed(2099282));
+ 
+   __BB(5, guessed_local(1040670576)):
+   goto __BB3(precise(134217728));
+ 
+   __BB(4, guessed_local(16535624)):
+   *p0_40(D) = s0_10;
+   *p1_41(D) = s1_11;
+   *p2_42(D) = s2_12;
+   *p3_43(D) = s3_13;
+   return;
+ }
+ 
+ /* With the IFN commutative swap fix, these 4 reductions should be
+    vectorized using SLP despite different reduc_idx values (1 vs 2).  */
+ /* { dg-final { scan-tree-dump "swapped operands to match def types in" "vect" } } */
+ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "vect" } } */
+ 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.dg/vect/vect-scev-affine_1.c gcc-17-20260517/gcc/testsuite/gcc.dg/vect/vect-scev-affine_1.c
*** gcc-17-20260510/gcc/testsuite/gcc.dg/vect/vect-scev-affine_1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.dg/vect/vect-scev-affine_1.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target vect_float } */
+ 
+ float *e;
+ void f (float *f, float *g, char *h, int n,
+         int b, int c, int d)
+ {
+   float a = 0;
+   for (int i = 0; i < n; ++i) {
+     int j = b + i, k = c + i * d;
+     float l = g[j], m = h[i] ? g[k] : l;
+     a += f[i] * m;
+   }
+   *e = a;
+ }
+ 
+ /* { dg-final { scan-tree-dump-not {failed: evolution of base is not affine} "vect" { target aarch64*-*-* } } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_0.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_0.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_0.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_0.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mcpu=neoverse-v1 -mfix-cortex-a53-835769 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_1.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_1.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_1.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_1.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mfix-cortex-a53-835769 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_10.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_10.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_10.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_10.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mfix-cortex-a53-843419 -mcpu=neoverse-v1 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_11.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_11.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_11.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_11.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-march=armv9-a -mfix-cortex-a53-843419 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_12.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_12.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_12.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_12.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mfix-cortex-a53-843419 -march=armv9-a -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_13.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_13.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_13.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_13.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mcpu=cortex-a53 -mfix-cortex-a53-843419 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_14.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_14.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_14.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_14.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-march=armv8-a -mfix-cortex-a53-843419 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_15.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_15.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_15.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_15.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mcpu=neoverse-v1 -march=armv8-a -mfix-cortex-a53-843419 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_2.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_2.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_2.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_2.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mfix-cortex-a53-835769 -mcpu=neoverse-v1 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_3.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_3.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_3.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_3.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-march=armv9-a -mfix-cortex-a53-835769 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_4.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_4.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_4.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_4.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mfix-cortex-a53-835769 -march=armv9-a -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_5.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_5.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_5.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_5.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mcpu=cortex-a53 -mfix-cortex-a53-835769 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_6.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_6.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_6.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_6.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-march=armv8-a -mfix-cortex-a53-835769 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_7.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_7.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_7.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_7.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mcpu=neoverse-v1 -march=armv8-a -mfix-cortex-a53-835769 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_8.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_8.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_8.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_8.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mcpu=neoverse-v1 -mfix-cortex-a53-843419 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_9.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_9.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/erratas_opt_9.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/erratas_opt_9.c	Sun May 17 22:32:10 2026
***************
*** 1,5 ****
  /* { dg-do link } */
- /* { dg-skip-if "uses vxlink" { *-*-vxworks* } } */
  /* { dg-additional-options "-mfix-cortex-a53-843419 -###" } */
  
  int main()
--- 1,4 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/pr113856.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/pr113856.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/pr113856.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/pr113856.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-additional-options "-march=armv8-a+fp16" } */
+ 
+ /* Check that FP vector constants with only the low element nonzero are
+    materialized with scalar FMOV rather than a literal pool load.
+ 
+    PR target/113856.  */
+ 
+ typedef float vect64_float __attribute__((vector_size(8)));
+ typedef float vect128_float __attribute__((vector_size(16)));
+ typedef _Float16 vect64_half __attribute__((vector_size(8)));
+ typedef _Float16 vect128_half __attribute__((vector_size(16)));
+ typedef double vect128_double __attribute__((vector_size(16)));
+ 
+ vect64_float
+ f1 (void)
+ {
+   return (vect64_float) { 1.0f, 0.0f };
+ }
+ 
+ /* Existing duplicated-lane case.  */
+ vect64_float
+ f2 (void)
+ {
+   return (vect64_float) { 1.0f, 1.0f };
+ }
+ 
+ vect128_float
+ f3 (void)
+ {
+   return (vect128_float) { 1.0f, 0.0f, 0.0f, 0.0f };
+ }
+ 
+ vect64_half
+ f4 (void)
+ {
+   return (vect64_half) { (_Float16) 1.0, (_Float16) 0.0,
+                          (_Float16) 0.0, (_Float16) 0.0 };
+ }
+ 
+ vect128_half
+ f5 (void)
+ {
+   return (vect128_half) { (_Float16) 1.0, (_Float16) 0.0,
+                           (_Float16) 0.0, (_Float16) 0.0,
+                           (_Float16) 0.0, (_Float16) 0.0,
+                           (_Float16) 0.0, (_Float16) 0.0 };
+ }
+ 
+ vect128_double
+ f6 (void)
+ {
+   return (vect128_double) { 1.0, 0.0 };
+ }
+ 
+ /* f1 and f3: scalar FMOV into the low SF element.  */
+ /* { dg-final { scan-assembler-times {\tfmov\ts[0-9]+, 1\.0} 2 } } */
+ 
+ /* f2: existing vector duplicated-FMOV case.  */
+ /* { dg-final { scan-assembler-times {\tfmov\tv[0-9]+\.2s, 1\.0} 1 } } */
+ 
+ /* f4 and f5: scalar FMOV into the low HF element.  */
+ /* { dg-final { scan-assembler-times {\tfmov\th[0-9]+, 1\.0} 2 } } */
+ 
+ /* f6: scalar FMOV into the low DF element.  */
+ /* { dg-final { scan-assembler-times {\tfmov\td[0-9]+, 1\.0} 1 } } */
+ 
+ /* None of them should need a literal pool load.  */
+ /* { dg-final { scan-assembler-not {\tldr\tq[0-9]+,} } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/pr123286.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/pr123286.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/pr123286.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/pr123286.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,33 ----
+ /* PR middle-end/123286 */
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2 -fdump-tree-optimized" } */
+ 
+ #include <arm_neon.h>
+ #include <stdint.h>
+ 
+ uint64_t
+ f1 (uint64_t a)
+ {
+   uint64x1_t va;
+   uint64x1_t vz;
+ 
+   va = vdup_n_u64 (a);
+   vz = vdup_n_u64 (0);
+ 
+   return vqadd_u64 (va, vz)[0];
+ }
+ 
+ uint64_t
+ f2 (uint64_t a)
+ {
+   uint64x1_t va;
+   uint64x1_t vz;
+ 
+   va = vdup_n_u64 (0);
+   vz = vdup_n_u64 (a);
+ 
+   return vqadd_u64 (va, vz)[0];
+ }
+ 
+ /* Both SAT_ADD calls should fold away.  */
+ /* { dg-final { scan-tree-dump-not "\\.SAT_ADD" "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c	Sun May 17 22:32:10 2026
***************
*** 0 ****
--- 1,59 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=armv9-a -msve-vector-bits=256" } */
+ 
+ typedef __attribute__((__vector_size__(sizeof(int)*8))) signed int v8i;
+ typedef __attribute__((__vector_size__(sizeof(int)*8))) unsigned int v8u;
+ 
+ void g(v8i *a, v8i *b, v8u *c)
+ {
+   *c = *c - (v8u)(*a * *b);
+ }
+ 
+ v8u g_(v8i a, v8i b, v8u c)
+ {
+   return c - (v8u)(a * b);
+ }
+ 
+ void h(v8u *a, v8u *b, v8i *c)
+ {
+   *c = *c - (v8i)(*a * *b);
+ }
+ 
+ v8i h_(v8u a, v8u b, v8i c)
+ {
+   return c - (v8i)(a * b);
+ }
+ 
+ void x(v8u *a, v8u *b, v8i *c)
+ {
+   *c = *c + ((v8i)(-*a) * (v8i)*b);
+ }
+ 
+ v8i x_(v8u a, v8u b, v8i c)
+ {
+   return c + ((v8i)(-a) * (v8i)b);
+ }
+ 
+ void y(v8u *a, v8i *b,v8i *c)
+ {
+   *c = *c + ((v8i)(-*a) * *b);
+ }
+ 
+ v8i y_(v8u a, v8i b, v8i c)
+ {
+   return c + ((v8i)(-a) * b);
+ }
+ 
+ void z(v8i *a, v8u *b, v8u *c)
+ {
+   *c = *c + ((v8u)(-*a) * *b);
+ }
+ 
+ v8u z_(v8i a, v8u b, v8u c)
+ {
+   return c + ((v8u)(-a) * b);
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tmsb\\t" 5 } } */
+ /* { dg-final { scan-assembler-times "\\tmls\\t" 5 } } */
+ /* { dg-final { scan-assembler-not "\\tneg\\t" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c	Sun May 17 22:32:10 2026
*************** void g(v8i *a,v8i *b,v8u *c)
*** 13,16 ****
    *c = *c - (v8u)(*a * *b);
  }
  
! /* { dg-final { scan-tree-dump-times "\.FMA" 2 "widening_mul" } } */
--- 13,17 ----
    *c = *c - (v8u)(*a * *b);
  }
  
! /* { dg-final { scan-tree-dump-times "\.FMA" 1 "widening_mul" } } */
! /* { dg-final { scan-tree-dump-times "\.FNMA" 1 "widening_mul" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/arm/muldi-1.c gcc-17-20260517/gcc/testsuite/gcc.target/arm/muldi-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/arm/muldi-1.c	Sun May 10 22:32:11 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/arm/muldi-1.c	Sun May 17 22:32:11 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2" } */
+ /* { dg-require-effective-target arm32 } */
  
  long long ashll_fn (long long a)
  {
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/h8300/pr80770-2.c gcc-17-20260517/gcc/testsuite/gcc.target/h8300/pr80770-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/h8300/pr80770-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/h8300/pr80770-2.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2 -std=gnu99 -mint32" } */
+ 
+ 
+ int foop(int x) { x &= 0xf; x |= (x + 0x80); return x; }
+ int foox(int x) { x &= 0xf; x |= (x ^ 0x80); return x; }
+ 
+ /* { dg-final { scan-assembler-not "add" } } */
+ /* { dg-final { scan-assembler-not "xor" } } */
+ /* { dg-final { scan-assembler-times "and" 2 } } */
+ /* { dg-final { scan-assembler-times "or" 2 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/h8300/pr80770.c gcc-17-20260517/gcc/testsuite/gcc.target/h8300/pr80770.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/h8300/pr80770.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/h8300/pr80770.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,75 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2 -std=gnu99 -mint32" } */
+ 
+ 
+ struct S {
+   _Bool b0: 1;
+   _Bool b1: 1;
+   _Bool b2: 1;
+   _Bool b3: 1;
+   _Bool b4: 1;
+   _Bool b5: 1;
+   _Bool b6: 1;
+   _Bool b7: 1;
+   _Bool b8: 1;
+   _Bool b9: 1;
+   _Bool b10: 1;
+   _Bool b11: 1;
+   _Bool b12: 1;
+   _Bool b13: 1;
+   _Bool b14: 1;
+   _Bool b15: 1;
+   _Bool b16: 1;
+   _Bool b17: 1;
+   _Bool b18: 1;
+   _Bool b19: 1;
+   _Bool b20: 1;
+   _Bool b21: 1;
+   _Bool b22: 1;
+   _Bool b23: 1;
+   _Bool b24: 1;
+   _Bool b25: 1;
+   _Bool b26: 1;
+   _Bool b27: 1;
+   _Bool b28: 1;
+   _Bool b29: 1;
+   _Bool b30: 1;
+   _Bool b31: 1;
+ };
+ 
+ #define T(N) void fb##N (struct S *s) { s->b##N = !s->b##N; }
+ 
+ T(0)
+ T(1)
+ T(2)
+ T(3)
+ T(4)
+ T(5)
+ T(6)
+ T(7)
+ T(8)
+ T(9)
+ T(10)
+ T(11)
+ T(12)
+ T(13)
+ T(14)
+ T(15)
+ T(16)
+ T(17)
+ T(18)
+ T(19)
+ T(20)
+ T(21)
+ T(22)
+ T(23)
+ T(24)
+ T(25)
+ T(26)
+ T(27)
+ T(28)
+ T(29)
+ T(30)
+ T(31)
+ 
+ /* { dg-final { scan-assembler-times "xor\t|add.b\t|bnot\t" 32 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/avx-stv-1.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/avx-stv-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/avx-stv-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/avx-stv-1.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -mavx -mno-stackrealign" } */
+ 
+ __int128 a, b, c, z;
+ 
+ __int128 fun();
+ 
+ void foo_in(__int128 x)
+ {
+   z = (x ^ a ^ b ^ c);
+ }
+ 
+ __int128 foo_out()
+ {
+   return (z ^ a ^ b ^ c);
+ }
+ 
+ __int128 foo_inout(__int128 x)
+ {
+   return (x ^ a ^ b ^ c ^ z);
+ }
+ 
+ void foo_fun()
+ {
+   z = (fun() ^ a ^ b ^ c);
+ }
+ 
+ /* { dg-final { scan-assembler-times "vpinsrq" 3 } } */
+ /* { dg-final { scan-assembler-times "vpextrq" 2 } } */
+ /* { dg-final { scan-assembler-times "vpxor" 13 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr120870-1.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr120870-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr120870-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr120870-1.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do run } */
+ /* { dg-options "-O0 -march=x86-64-v3" } */
+ 
+ void
+ ext (long a, long b, long c, long d, long e, long f, long g)
+ {
+ }
+ 
+ void
+ tail (long a, long b)
+ {
+ }
+ 
+ __attribute__ ((preserve_none)) void
+ caller (long a, long b, long c, long d, long e, long f, long g)
+ {
+   __attribute__ ((aligned (32))) long x[4]; // for stack alignment
+   ext (a, b, c, d, e, f, g);
+   __attribute__ ((musttail)) return tail (a + b, b + c);
+ }
+ 
+ __attribute__ ((noipa))
+ static void
+ do_test ()
+ {
+   caller (1, 2, 3, 4, 5, 6, 7);
+ }
+ 
+ int
+ main (void)
+ {
+   if (__builtin_cpu_supports ("x86-64-v3"))
+     do_test ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr120870-2.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr120870-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr120870-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr120870-2.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run } */
+ /* { dg-options "-O0 -march=x86-64-v3" } */
+ 
+ #define preserve_none no_callee_saved_registers
+ 
+ #include "pr120870-1.c"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr124316.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr124316.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr124316.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr124316.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mptwrite" } */
+ #include <x86gprintrin.h>
+ 
+ unsigned long long ull;
+ unsigned u;
+ void foo()
+ {
+     _ptwrite64(ull);
+     _ptwrite32(u);
+ }
+ 
+ /* { dg-final { scan-assembler-times "ptwritel" 1 } } */
+ /* { dg-final { scan-assembler-times "ptwriteq" 1 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr125308.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr125308.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr125308.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr125308.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,12 ----
+ /* PR target/125308 */
+ /* { dg-do compile } */
+ /* { dg-options "-msse2 -O2 -ffloat-store" } */
+ 
+ float a[4];
+ 
+ void
+ foo ()
+ {
+   for (int i = 0; i < 4; i++)
+     a[i] = a[i] > 0 ? a[i] : 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr32803-2.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr32803-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr32803-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr32803-2.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Oz" } */
+ 
+ int foo()
+ {
+   return 200;
+ }
+ 
+ long fool()
+ {
+   return 200;
+ }
+ 
+ int bar()
+ {
+   return 512;
+ }
+ 
+ long barl()
+ {
+   return 512;
+ }
+ /* { dg-final { scan-assembler-times "xorl\[ \t\]*%eax, %eax" 4 } } */
+ /* { dg-final { scan-assembler-times "movb\[ \t\]*\\\$-56, %al" 2 } } */
+ /* { dg-final { scan-assembler-times "movb\[ \t\]*\\\$2, %ah" 2 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr32803-3.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr32803-3.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/pr32803-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/pr32803-3.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Os" } */
+ 
+ int foo()
+ {
+   return 200;
+ }
+ 
+ long fool()
+ {
+   return 200;
+ }
+ 
+ int bar()
+ {
+   return 512;
+ }
+ 
+ long barl()
+ {
+   return 512;
+ }
+ /* { dg-final { scan-assembler-times "movl\[\\t \]*\\\$200, %eax" 2 } } */
+ /* { dg-final { scan-assembler-times "movl\[\\t \]*\\\$512, %eax" 2 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/sse2-stv-3.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/sse2-stv-3.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/sse2-stv-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/sse2-stv-3.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -msse2 -mno-sse4 -mno-stackrealign" } */
+ 
+ __int128 a, b, c, z;
+ 
+ __int128 fun();
+ 
+ void foo_in(__int128 x)
+ {
+   z = (x ^ a ^ b ^ c);
+ }
+ 
+ __int128 foo_out()
+ {
+   return (z ^ a ^ b ^ c);
+ }
+ 
+ __int128 foo_inout(__int128 x)
+ {
+   return (x ^ a ^ b ^ c ^ z);
+ }
+ 
+ void foo_fun()
+ {
+   z = (fun() ^ a ^ b ^ c);
+ }
+ 
+ /* { dg-final { scan-assembler-times "punpcklqdq" 2 } } */
+ /* { dg-final { scan-assembler-times "movhlps" 1 } } */
+ /* { dg-final { scan-assembler-times "pxor" 9 } } */
+ /* { dg-final { scan-assembler-times "xorq" 8 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/sse2-stv-4.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/sse2-stv-4.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/sse2-stv-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/sse2-stv-4.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -msse2 -mno-sse4 -mno-stackrealign" } */
+ 
+ __int128 a, b, c, z;
+ 
+ void foo()
+ {
+   register __int128 x __asm("xmm0");
+   z = (x ^ a ^ b ^ c);
+ }
+ 
+ /* { dg-final { scan-assembler-times "pxor" 3 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/i386/sse2-stv-5.c gcc-17-20260517/gcc/testsuite/gcc.target/i386/sse2-stv-5.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/i386/sse2-stv-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/i386/sse2-stv-5.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2 -msse2 -mno-sse4 -mno-stackrealign" } */
+ 
+ __int128 m;
+ 
+ void foo()
+ {
+   register __int128 x __asm("xmm0");
+   register __int128 y __asm("xmm1");
+   m = x ^ y;
+ }
+ 
+ /* { dg-final { scan-assembler-times "pxor" 1 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/loongarch/la64/spaceship.c gcc-17-20260517/gcc/testsuite/gcc.target/loongarch/la64/spaceship.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/loongarch/la64/spaceship.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/loongarch/la64/spaceship.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,79 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #define TEST(T) \
+   int test_##T(T a, T b) \
+     { return (a == b) ? 0 : (a < b) ? -1 : 1; } \
+   int test_u##T(unsigned T a, unsigned T b) \
+     { return (a == b) ? 0 : (a < b) ? -1 : 1; }
+ 
+ TEST(char)
+ TEST(short)
+ TEST(int)
+ TEST(long)
+ 
+ /*
+ ** test_char:
+ **	slt	.*
+ **	slt	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** test_uchar:
+ **	sltu	.*
+ **	sltu	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** test_short:
+ **	slt	.*
+ **	slt	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** test_ushort:
+ **	sltu	.*
+ **	sltu	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** test_int:
+ **	slt	.*
+ **	slt	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** test_uint:
+ **	bstrpick\.d	.*,31,0
+ **	bstrpick\.d	.*,31,0
+ **	sltu	.*
+ **	sltu	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** test_long:
+ **	slt	.*
+ **	slt	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** test_ulong:
+ **	sltu	.*
+ **	sltu	.*
+ **	sub\.d	.*
+ **	jr	\$r1
+ */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/loongarch/pr96692.c gcc-17-20260517/gcc/testsuite/gcc.target/loongarch/pr96692.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/loongarch/pr96692.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/loongarch/pr96692.c	Sun May 17 22:32:11 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -O" { target lp64 } } */
+ /* { dg-options "-march=la32v1.0 -O" { target ilp32 } } */
+ 
+ int f(int a, int b, int c)
+ {
+     return (a ^ b) ^ (a | c);
+ }
+ 
+ /* { dg-final { scan-assembler-times "xor\t" 1 } } */
+ /* { dg-final { scan-assembler-times "andn\t" 1 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr114139.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr114139.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr114139.c	Sun May 10 22:32:12 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr114139.c	Sun May 17 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile { target { ! riscv_abi_e } } } */
! /* { dg-options "-O2 -fpic -mexplicit-relocs -mcpu=sifive-p450 -mabi=lp64d" } */
  
  static void *p;
  extern void *a[];
--- 1,5 ----
  /* { dg-do compile { target { ! riscv_abi_e } } } */
! /* { dg-options "-O2 -fpic -mexplicit-relocs -mcpu=sifive-p450 -march=unset -mabi=lp64d" } */
  
  static void *p;
  extern void *a[];
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr118170.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr118170.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr118170.c	Sun May 10 22:32:12 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr118170.c	Sun May 17 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do "compile" { target { ! riscv_abi_e } } } */
! /* { dg-options "-O2 -mcpu=tt-ascalon-d8 -mabi=lp64d" } */
  _Float16 f;
  
  void
--- 1,5 ----
  /* { dg-do "compile" { target { ! riscv_abi_e } } } */
! /* { dg-options "-O2 -mcpu=tt-ascalon-d8 -march=unset -mabi=lp64d" } */
  _Float16 f;
  
  void
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr80770-2.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr80770-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr80770-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr80770-2.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2 -std=gnu99" } */
+ 
+ 
+ int foop(int x) { x &= 0xf; x |= (x + 0x80); return x; }
+ int foox(int x) { x &= 0xf; x |= (x ^ 0x80); return x; }
+ 
+ /* { dg-final { scan-assembler-not "add" } } */
+ /* { dg-final { scan-assembler-not "xor" } } */
+ /* { dg-final { scan-assembler-times "andi\t" 2 } } */
+ /* { dg-final { scan-assembler-times "ori\t" 2 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr80770.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr80770.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/pr80770.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/pr80770.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,150 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-std=gnu99" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" } } */
+ 
+ 
+ struct S {
+   _Bool b0: 1;
+   _Bool b1: 1;
+   _Bool b2: 1;
+   _Bool b3: 1;
+   _Bool b4: 1;
+   _Bool b5: 1;
+   _Bool b6: 1;
+   _Bool b7: 1;
+   _Bool b8: 1;
+   _Bool b9: 1;
+   _Bool b10: 1;
+   _Bool b11: 1;
+   _Bool b12: 1;
+   _Bool b13: 1;
+   _Bool b14: 1;
+   _Bool b15: 1;
+   _Bool b16: 1;
+   _Bool b17: 1;
+   _Bool b18: 1;
+   _Bool b19: 1;
+   _Bool b20: 1;
+   _Bool b21: 1;
+   _Bool b22: 1;
+   _Bool b23: 1;
+   _Bool b24: 1;
+   _Bool b25: 1;
+   _Bool b26: 1;
+   _Bool b27: 1;
+   _Bool b28: 1;
+   _Bool b29: 1;
+   _Bool b30: 1;
+   _Bool b31: 1;
+   _Bool b32: 1;
+   _Bool b33: 1;
+   _Bool b34: 1;
+   _Bool b35: 1;
+   _Bool b36: 1;
+   _Bool b37: 1;
+   _Bool b38: 1;
+   _Bool b39: 1;
+   _Bool b40: 1;
+   _Bool b41: 1;
+   _Bool b42: 1;
+   _Bool b43: 1;
+   _Bool b44: 1;
+   _Bool b45: 1;
+   _Bool b46: 1;
+   _Bool b47: 1;
+   _Bool b48: 1;
+   _Bool b49: 1;
+   _Bool b50: 1;
+   _Bool b51: 1;
+   _Bool b52: 1;
+   _Bool b53: 1;
+   _Bool b54: 1;
+   _Bool b55: 1;
+   _Bool b56: 1;
+   _Bool b57: 1;
+   _Bool b58: 1;
+   _Bool b59: 1;
+   _Bool b60: 1;
+   _Bool b61: 1;
+   _Bool b62: 1;
+   _Bool b63: 1;
+ };
+ 
+ #define T(N) void fb##N (struct S *s) { s->b##N = !s->b##N; }
+ 
+ T(0)
+ T(1)
+ T(2)
+ T(3)
+ T(4)
+ T(5)
+ T(6)
+ T(7)
+ T(8)
+ T(9)
+ T(10)
+ T(11)
+ T(12)
+ T(13)
+ T(14)
+ T(15)
+ T(16)
+ T(17)
+ T(18)
+ T(19)
+ T(20)
+ T(21)
+ T(22)
+ T(23)
+ T(24)
+ T(25)
+ T(26)
+ T(27)
+ T(28)
+ T(29)
+ T(30)
+ T(31)
+ #if __riscv_xlen == 64
+ T(32)
+ T(33)
+ T(34)
+ T(35)
+ T(36)
+ T(37)
+ T(38)
+ T(39)
+ T(40)
+ T(41)
+ T(42)
+ T(43)
+ T(44)
+ T(45)
+ T(46)
+ T(47)
+ T(48)
+ T(49)
+ T(50)
+ T(51)
+ T(52)
+ T(53)
+ T(54)
+ T(55)
+ T(56)
+ T(57)
+ T(58)
+ T(59)
+ T(60)
+ T(61)
+ T(62)
+ T(63)
+ #endif
+ 
+ /* { dg-final { scan-assembler-times "lbu\t" 64 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "lbu\t" 32 { target rv32 } } } */
+ 
+ /* { dg-final { scan-assembler-times "xori\t" 64 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "xori\t" 32 { target rv32 } } } */
+ 
+ 
+ /* { dg-final { scan-assembler-times "sb\t" 64 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "sb\t" 32 { target rv32 } } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125215.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125215.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125215.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125215.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d -fno-vect-cost-model" } */
+ 
+ #include <stdint-gcc.h>
+ 
+ __attribute__((noipa)) 
+ void foo(uint8_t *d) 
+ {
+   d[0] = 128; d[1] = 135; d[2] = 130; d[3] = 149;
+   d[4] = 132; d[5] = 163; d[6] = 134; d[7] = 177;
+   d[8] = 136; d[9] = 191; d[10] = 138; d[11] = 205;
+   d[12] = 140; d[13] = 219; d[14] = 142; d[15] = 233;
+ }
+ 
+ int main()
+ {
+   uint8_t d[16];
+   uint8_t e[] = {128, 135, 130, 149, 132, 163, 134, 177, 136, 191, 138, 205, 140, 219, 142, 233};
+   foo(d);
+   for (int i = 0; i < 16; i++)
+     if (d[i] != e[i])
+       __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile } */
- /* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */
- 
- struct S { int a, b; } s[8];
- 
- void
- foo ()
- {
-   int i;
-   for (i = 0; i < 8; i++)
-     {
-       s[i].b = 0;
-       s[i].a = i;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "\{ 0, 0, 1, 0, 2, 0, ... \}" 1 "optimized" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */
- 
- struct S { int a, b; } s[8];
- 
- void
- foo ()
- {
-   int i;
-   for (i = 0; i < 8; i++)
-     {
-       s[i].b = 1;
-       s[i].a = i;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "\{ 0, 1, 1, 1, 2, 1, ... \}" 1 "optimized" } } */
- /* { dg-final { scan-assembler-times {slli\t[a-x0-9]+,\s*[a-x0-9]+,\s*32} 1 } } */
--- 0 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,19 ****
- /* { dg-do compile } */
- /* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */
- 
- struct S { int a, b; } s[8];
- 
- void
- foo ()
- {
-   int i;
-   for (i = 0; i < 8; i++)
-     {
-       s[i].b = i*3 + 100;
-       s[i].a = i + 200;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "\{ 200, 100, 201, 103, 202, 106, ... \}" 1 "optimized" } } */
- /* { dg-final { scan-assembler-times {vsll\.vx} 1 } } */
- /* { dg-final { scan-assembler-times {vor\.vv} 1 } } */
--- 0 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,19 ****
- /* { dg-do compile } */
- /* { dg-options "-march=rv64gc_zve32f_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */
- 
- struct S { int a, b; } s[8];
- 
- void
- foo ()
- {
-   int i;
-   for (i = 0; i < 8; i++)
-     {
-       s[i].b = i*3 + 100;
-       s[i].a = i + 200;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "\{ 200, 100, 201, 103, 202, 106, ... \}" 1 "optimized" } } */
- /* { dg-final { scan-assembler-times {vand\.vi} 1 } } */
- /* { dg-final { scan-assembler-times {vmseq\.vi} 1 } } */
--- 0 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-5.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-5.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-5.c	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,35 ****
- /* { dg-do compile } */
- /* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -O3 -fdump-tree-optimized-details" } */
- 
- struct S { int a, b; } s[8];
- 
- void
- foo ()
- {
-   int i;
-   for (i = 0; i < 8; i++)
-     {
-       s[i].b = 1;
-       s[i].a = i+1;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "\{ 1, 1, 2, 1, 3, 1, 4, 1 \}" 1 "optimized" } } */
- /* { dg-final { scan-assembler {vid\.v} } } */
- /* { dg-final { scan-assembler {vadd\.v} } } */
- /* { dg-final { scan-assembler {vor\.v} } } */
- 
- void
- foo2 ()
- {
-   int i;
-   for (i = 0; i < 8; i++)
-     {
-       s[i].b = 0;
-       s[i].a = i+1;
-     }
- }
- 
- /* { dg-final { scan-tree-dump-times "\{ 1, 0, 2, 0, 3, 0, 4, 0 \}" 1 "optimized" } } */
- /* { dg-final { scan-assembler {vid\.v} } } */
- /* { dg-final { scan-assembler {vadd\.v} } } */
--- 0 ----
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun May 17 22:32:12 2026
*************** sat_u_mul_##NT##_from_##WT##_fmt_7 (NT a
*** 785,788 ****
--- 785,826 ----
    sat_u_mul_##NT##_from_##WT##_fmt_7 (a, b)
  #define RUN_SAT_U_MUL_FMT_7_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_7(NT, WT, a, b)
  
+ #define DEF_SAT_U_MUL_FMT_8(NT, WT)             \
+ NT __attribute__((noinline))                    \
+ sat_u_mul_##NT##_from_##WT##_fmt_8 (NT a, NT b) \
+ {                                               \
+   WT x = (WT)a * (WT)b;                         \
+   NT max = -1;                                  \
+   return x >= (WT)(max) ? max : (NT)x;          \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_8(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_8(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_8 (a, b)
+ #define RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_8(NT, WT, a, b)
+ 
+ #define DEF_SAT_U_MUL_FMT_9(T)                                 \
+ T __attribute__((noinline))                                    \
+ sat_u_mul_##T##_fmt_9 (T a, T b)                               \
+ {                                                              \
+   T result;                                                    \
+   return __builtin_mul_overflow (a, b, &result) ? -1 : result; \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_9_WRAP(T) DEF_SAT_U_MUL_FMT_9(T)
+ #define RUN_SAT_U_MUL_FMT_9(T, a, b) sat_u_mul_##T##_fmt_9(a, b)
+ #define RUN_SAT_U_MUL_FMT_9_WRAP(T, a, b) RUN_SAT_U_MUL_FMT_9(T, a, b)
+ 
+ #define DEF_SAT_U_MUL_FMT_10(T)                                     \
+ T __attribute__((noinline))                                         \
+ sat_u_mul_##T##_fmt_10 (T a, T b)                                   \
+ {                                                                   \
+   T result;                                                         \
+   return __builtin_mul_overflow (a, b, &result) == 0 ? result : -1; \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_10_WRAP(T) DEF_SAT_U_MUL_FMT_10(T)
+ #define RUN_SAT_U_MUL_FMT_10(T, a, b) sat_u_mul_##T##_fmt_10(a, b)
+ #define RUN_SAT_U_MUL_FMT_10_WRAP(T, a, b) RUN_SAT_U_MUL_FMT_10(T, a, b)
+ 
  #endif
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u16.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u16.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u16.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u8.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u8.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-10-u8.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint8_t
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u16.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u16.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u16.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u8.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u8.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-11-u8.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint8_t
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u16-from-u64.rv64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u32-from-u64.rv64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u64-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u64-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u64-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u16.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u16.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u16.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-9-u8-from-u64.rv64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u16.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u16.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u16.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_9_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_9_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_9_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u8.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u8.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-10-u8.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_9_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_9_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u16.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u16.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u16.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_10_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_10_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_10_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u8.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u8.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-11-u8.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_10_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_10_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u16-from-u64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u32-from-u64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u64-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u64-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u64-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u128.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u128.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u128.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u16.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u16.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u16.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u32.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u32.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u32.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u64.c gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u64.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-9-u8-from-u64.c	Sun May 17 22:32:12 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_8_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_8_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gcc.target/xtensa/elim_callee_saved.c gcc-17-20260517/gcc/testsuite/gcc.target/xtensa/elim_callee_saved.c
*** gcc-17-20260510/gcc/testsuite/gcc.target/xtensa/elim_callee_saved.c	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gcc.target/xtensa/elim_callee_saved.c	Sun May 17 22:32:12 2026
*************** int __attribute__((optimize(0))) test3(i
*** 34,38 ****
    return bar() + a;
  }
  
! /* { dg-final { scan-assembler-times "mov\t|mov.n\t" 21 } } */
  /* { dg-final { scan-assembler-times "a15, 8" 2 } } */
--- 34,38 ----
    return bar() + a;
  }
  
! /* { dg-final { scan-assembler-times "mov\t|mov.n\t" 20 } } */
  /* { dg-final { scan-assembler-times "a15, 8" 2 } } */
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/PR100906.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/PR100906.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/PR100906.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/PR100906.f90	Sun May 17 22:32:12 2026
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-pedantic" }
  ! { dg-additional-sources PR100906.c }
  !
  ! Test the fix for PR100906
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/PR100911.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/PR100911.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/PR100911.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/PR100911.f90	Sun May 17 22:32:12 2026
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do run }
  ! { dg-additional-sources PR100911.c }
+ ! { dg-additional-options -Wno-pedantic }
  !
  ! Test the fix for PR100911
  ! 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/PR100915.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/PR100915.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/PR100915.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/PR100915.f90	Sun May 17 22:32:12 2026
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do run }
  ! { dg-additional-sources PR100915.c }
+ ! { dg-additional-options "-Wno-pedantic" }
  !
  ! Test the fix for PR100915
  ! 
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/PR94327.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/PR94327.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/PR94327.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/PR94327.f90	Sun May 17 22:32:12 2026
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do run }
  ! { dg-additional-sources PR94327.c }
+ ! { dg-additional-options -Wno-pedantic }
  !
  ! Test the fix for PR94327
  !
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/PR94331.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/PR94331.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/PR94331.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/PR94331.f90	Sun May 17 22:32:12 2026
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do run }
  ! { dg-additional-sources PR94331.c }
+ ! { dg-additional-options "-Wno-pedantic" }
  !
  ! Test the fix for PR94331
  !
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/bind_c_procs_4.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/bind_c_procs_4.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/bind_c_procs_4.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/bind_c_procs_4.f90	Sun May 17 22:32:13 2026
***************
*** 3,17 ****
  ! Contributed by G.Steinmetz
  
  function f() result(n) bind(c)      ! { dg-error "not C interoperable" }
    class(*), allocatable :: n
  end
  program p
    interface
!      function f() result(n) bind(c)
         integer :: n
       end
    end interface
    if ( f() /= 0 ) stop
  end
  
- ! { dg-prune-output "Type mismatch" }
--- 3,17 ----
  ! Contributed by G.Steinmetz
  
  function f() result(n) bind(c)      ! { dg-error "not C interoperable" }
+   ! { dg-error "Return type mismatch" "" { target "*-*-*" } .-1 }
    class(*), allocatable :: n
  end
  program p
    interface
!      function f() result(n) bind(c) ! { dg-error "Return type mismatch" }
         integer :: n
       end
    end interface
    if ( f() /= 0 ) stop
  end
  
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_25.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_25.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_25.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_25.f90	Sun May 17 22:32:13 2026
*************** module m_odbc_if
*** 11,17 ****
    implicit none
  
    interface sql_set_env_attr
!     function sql_set_env_attr_int( input_handle,attribute,value,length ) &
                                     result(res) bind(C,name="SQLSetEnvAttr")
        use, intrinsic :: iso_c_binding
        implicit none
--- 11,17 ----
    implicit none
  
    interface sql_set_env_attr
!     function sql_set_env_attr_int( input_handle,attribute,value,length ) & ! { dg-error "Type mismatch" }
                                     result(res) bind(C,name="SQLSetEnvAttr")
        use, intrinsic :: iso_c_binding
        implicit none
*************** module m_odbc_if
*** 21,27 ****
        integer(c_int), value :: length      
        integer(c_short) :: res
      end function
!     function sql_set_env_attr_ptr( input_handle,attribute,value,length ) &
                                     result(res) bind(C,name="SQLSetEnvAttr")
        use, intrinsic :: iso_c_binding
        implicit none
--- 21,27 ----
        integer(c_int), value :: length      
        integer(c_short) :: res
      end function
!     function sql_set_env_attr_ptr( input_handle,attribute,value,length ) & ! { dg-error "Type mismatch" }
                                     result(res) bind(C,name="SQLSetEnvAttr")
        use, intrinsic :: iso_c_binding
        implicit none
*************** module graph_partitions
*** 38,61 ****
    use,intrinsic :: iso_c_binding
  
    interface Cfun
!      subroutine cfunc1 (num, array) bind(c, name="Cfun")
         import :: c_int
         integer(c_int),value :: num
         integer(c_int)       :: array(*) ! <<< HERE: int[]
       end subroutine cfunc1
  
!      subroutine cfunf2 (num, array) bind(c, name="Cfun")
         import :: c_int, c_ptr
         integer(c_int),value :: num
         type(c_ptr),value    :: array ! <<< HERE: void*
       end subroutine cfunf2
    end interface
  end module graph_partitions
- 
- program test
-   use graph_partitions
-   integer(c_int) :: a(100)
- 
-   call Cfun (1, a)
-   call Cfun (2, C_NULL_PTR)
- end program test
--- 38,53 ----
    use,intrinsic :: iso_c_binding
  
    interface Cfun
!      subroutine cfunc1 (num, array) bind(c, name="Cfun") ! { dg-error "Type mismatch" }
         import :: c_int
         integer(c_int),value :: num
         integer(c_int)       :: array(*) ! <<< HERE: int[]
       end subroutine cfunc1
  
!      subroutine cfunf2 (num, array) bind(c, name="Cfun") ! { dg-error "Type mismatch" }
         import :: c_int, c_ptr
         integer(c_int),value :: num
         type(c_ptr),value    :: array ! <<< HERE: void*
       end subroutine cfunf2
    end interface
  end module graph_partitions
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_3.f03 gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_3.f03
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_3.f03	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_3.f03	Sun May 17 22:32:13 2026
***************
*** 2,15 ****
  program main
  use iso_c_binding
    interface
!      subroutine p1(f, a1, a2, a3, a4) bind(c, name='printf') ! Doubtful use ...
         import :: c_ptr, c_int, c_double
         type(c_ptr), value :: f
         integer(c_int), value :: a1, a3
         real(c_double), value :: a2, a4
       end subroutine p1
  
!      subroutine p2(f, a1, a2, a3, a4) bind(c, name='printf') ! ... with incompatible interfaces
         import :: c_ptr, c_int, c_double
         type(c_ptr), value :: f
         real(c_double), value :: a1, a3
--- 2,15 ----
  program main
  use iso_c_binding
    interface
!      subroutine p1(f, a1, a2, a3, a4) bind(c, name='printf') ! { dg-error "Type mismatch" }
         import :: c_ptr, c_int, c_double
         type(c_ptr), value :: f
         integer(c_int), value :: a1, a3
         real(c_double), value :: a2, a4
       end subroutine p1
  
!      subroutine p2(f, a1, a2, a3, a4) bind(c, name='printf') ! { dg-error "Type mismatch" }
         import :: c_ptr, c_int, c_double
         type(c_ptr), value :: f
         real(c_double), value :: a1, a3
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_34.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_34.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_34.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_34.f90	Sun May 17 22:32:13 2026
***************
*** 1,13 ****
  ! { dg-do compile }
  ! PR 94737 - global symbols are case-insensitive; an error should be
  ! reported if they match (see F2018, 9.2, paragraph 2).  Original
  ! test case by Lee Busby.
  
  module foo
  
  interface
! function func1(ii) result (k) bind(c, name="c_func")
!   integer :: ii
    integer :: k
  end function func1
  subroutine sub1(ii,jj) bind(c, name="c_Func") ! { dg-error "Global binding name" }
--- 1,15 ----
  ! { dg-do compile }
+ ! { dg-options "-pedantic" }
  ! PR 94737 - global symbols are case-insensitive; an error should be
  ! reported if they match (see F2018, 9.2, paragraph 2).  Original
  ! test case by Lee Busby.
  
+ ! Modified because this catches 
  module foo
  
  interface
!    function func1(ii) result (k) bind(c, name="c_func") ! { dg-error "Global binding name" }
!      integer :: ii
    integer :: k
  end function func1
  subroutine sub1(ii,jj) bind(c, name="c_Func") ! { dg-error "Global binding name" }
*************** contains
*** 20,25 ****
  function func2(ii) result (k) 
    integer :: ii
    integer :: k
!   k = func1(ii) ! { dg-error "Global binding name" }
  end function func2
  end module foo
--- 22,27 ----
  function func2(ii) result (k) 
    integer :: ii
    integer :: k
!   k = func1(ii)
  end function func2
  end module foo
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_36.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_36.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_36.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_36.f90	Sun May 17 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ ! { dg-do compile }
+ ! { dg-options -Wno-pedantic }
+ ! Special checks which are disabled without -pedantic.
+ 
+ module api
+   implicit none
+ 
+   ! Case insensitivity with different names.
+ 
+   interface
+      subroutine s9(a) bind(c, name="Quuux")
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int) :: a
+      end subroutine s9
+   end interface
+ 
+   interface
+      subroutine s10() bind(c, name="quuux")
+      end subroutine s10
+   end interface
+ 
+   interface
+      subroutine s11(a, n) bind(c, name="bla")
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int), value :: n
+        integer(c_int) :: a
+      end subroutine s11
+   end interface
+ 
+   interface
+      subroutine s12(a, n) bind(c, name="bla")
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int), value :: n
+        integer(c_int), dimension(*) :: a
+      end subroutine s12
+   end interface
+ 
+   interface
+      subroutine s13(a, n) bind(c, name="bla")
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int), value :: n
+        integer(c_int), dimension(n) :: a
+      end subroutine s13
+   end interface
+ 
+ end module
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_37.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_37.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/binding_label_tests_37.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/binding_label_tests_37.f90	Sun May 17 22:32:13 2026
***************
*** 0 ****
--- 1,127 ----
+ ! { dg-do compile }
+ module api
+   implicit none
+ 
+   interface
+     function f1(a) result(istat) & ! { dg-error "Type mismatch in argument" }
+              bind(c, name="foo")
+       use, intrinsic :: iso_c_binding, only :c_int
+       implicit none
+       integer(kind=c_int) :: a
+       integer(kind=c_int) :: istat
+     end function
+   end interface
+ 
+   interface
+     function f2(a) result(istat) & ! { dg-error "Type mismatch in argument" }
+              bind(c, name="foo")
+       use, intrinsic :: iso_c_binding, only : c_int, c_float
+       implicit none
+       real(kind=c_float) :: a  ! integer
+       integer(kind=c_int)      :: istat
+     end function
+  end interface
+ 
+  interface
+     subroutine s3(a) bind(C, name="bar")  ! { dg-error "VALUE attribute" }
+       use, intrinsic :: iso_c_binding, only :c_int
+       integer, value :: a
+     end subroutine s3
+  end interface
+ 
+  interface
+     subroutine s4(a) bind(C, name="bar")  ! { dg-error "VALUE attribute" }
+       use, intrinsic :: iso_c_binding, only :c_int
+       integer :: a
+     end subroutine s4
+  end interface
+ 
+  interface
+     function f5 (a) result(istat) bind(c, name="qux") ! { dg-error "Return type mismatch" }
+       use, intrinsic :: iso_c_binding, only : c_intptr_t, c_int
+       implicit none
+       integer(kind=c_intptr_t) :: a  ! integer
+       integer(kind=c_int)      :: istat
+     end function f5
+   end interface
+ 
+   interface
+      function f6(a) result(istat) bind(c, name="qux")  ! { dg-error "Return type mismatch" }
+       use, intrinsic :: iso_c_binding, only : c_intptr_t, c_float
+       implicit none
+       integer(kind=c_intptr_t) :: a  ! integer
+       real(kind=c_float)      :: istat
+     end function f6
+   end interface
+ 
+   interface
+      subroutine s7() bind(c, name="quux") ! { dg-error "Too many arguments" }
+      end subroutine s7
+   end interface
+ 
+   interface
+      subroutine s8(a) bind(c, name="quux")  ! { dg-error "Too many arguments" }
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int) :: a
+      end subroutine s8
+   end interface
+ 
+   interface
+      subroutine s9(a) bind(c, name="quuux")  ! { dg-error "Too many arguments" }
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int) :: a
+      end subroutine s9
+   end interface
+ 
+   interface
+      subroutine s10() bind(c, name="quuux")  ! { dg-error "Too many arguments" }
+      end subroutine s10
+   end interface
+ 
+   ! "bla" check with -pedantic only.
+ 
+   interface
+      subroutine s11(a, n) bind(c, name="bla")  ! { dg-error "Rank mismatch" }
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int), value :: n
+        integer(c_int) :: a
+      end subroutine s11
+   end interface
+ 
+   interface
+      subroutine s12(a, n) bind(c, name="bla") ! { dg-error "Rank mismatch" }
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int), value :: n
+        integer(c_int), dimension(*) :: a
+      end subroutine s12
+   end interface
+ 
+   interface
+      subroutine s14(a) bind(c, name="blubb") ! { dg-error "Type mismatch in argument" }
+        use, intrinsic :: iso_c_binding, only: c_ptr
+        type(c_ptr), value :: a
+      end subroutine s14
+   end interface
+ 
+   interface
+      subroutine s15(a) bind(c, name="blubb")  ! { dg-error "Type mismatch in argument" }
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer(c_int) :: a
+      end subroutine s15
+   end interface
+ 
+   interface
+      subroutine s16(a) bind(c, name="blabla") ! { dg-error "Array specification mismatch" }
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer, dimension(:) :: a
+      end subroutine s16
+   end interface
+ 
+   interface
+      subroutine s17(a) bind(c, name="blabla")  ! { dg-error "Array specification mismatch" }
+        use, intrinsic :: iso_c_binding, only : c_int
+        integer, dimension(*) :: a
+      end subroutine s17
+   end interface
+ 
+ end module
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/c_char_tests_4.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/c_char_tests_4.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/c_char_tests_4.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/c_char_tests_4.f90	Sun May 17 22:32:13 2026
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-pedantic" }
  !
  ! PR fortran/103828
  ! Check that we can pass many function args as C char, which are interoperable
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/c_char_tests_5.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/c_char_tests_5.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/c_char_tests_5.f90	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/c_char_tests_5.f90	Sun May 17 22:32:13 2026
***************
*** 1,5 ****
  ! { dg-do run }
! ! { dg-options "-fbackslash" }
  !
  ! PR fortran/103828
  ! Check that we can C char with non-ASCII values, which are interoperable
--- 1,5 ----
  ! { dg-do run }
! ! { dg-options "-fbackslash -Wno-pedantic" }
  !
  ! PR fortran/103828
  ! Check that we can C char with non-ASCII values, which are interoperable
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray/failed_images_2.f08 gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray/failed_images_2.f08
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray/failed_images_2.f08	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray/failed_images_2.f08	Sun May 17 22:32:13 2026
***************
*** 1,4 ****
! ! { dg-do run }
  
  program test_failed_images_2
    use iso_fortran_env
--- 1,4 ----
! ! { dg-do run { target sleep } }
  
  program test_failed_images_2
    use iso_fortran_env
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray/image_status_2.f08 gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray/image_status_2.f08
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray/image_status_2.f08	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray/image_status_2.f08	Sun May 17 22:32:13 2026
***************
*** 1,4 ****
! ! { dg-do run }
  
  program test_image_status_2
    use iso_fortran_env
--- 1,4 ----
! ! { dg-do run { target sleep } }
  
  program test_image_status_2
    use iso_fortran_env
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray/stopped_images_2.f08 gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray/stopped_images_2.f08
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray/stopped_images_2.f08	Sun May 10 22:32:13 2026
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray/stopped_images_2.f08	Sun May 17 22:32:13 2026
***************
*** 1,4 ****
! ! { dg-do run }
  
  program test_stopped_images_2
    use iso_fortran_env
--- 1,4 ----
! ! { dg-do run { target sleep } }
  
  program test_stopped_images_2
    use iso_fortran_env
diff -Nrcpad gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray_51.f90 gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray_51.f90
*** gcc-17-20260510/gcc/testsuite/gfortran.dg/coarray_51.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/gcc/testsuite/gfortran.dg/coarray_51.f90	Sun May 17 22:32:13 2026
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do link }
+ ! { dg-options "-fcoarray=shared -fdump-tree-original" }
+ !
+ ! Test that -fcoarray=shared is accepted and generates the same
+ ! library-based CAF calls as -fcoarray=lib.
+ 
+ program test
+   implicit none
+   integer :: x[*]
+   x = this_image ()
+   sync all
+ end program test
+ 
+ ! { dg-final { scan-tree-dump-times "_gfortran_caf_init \\(&argc, &argv\\);" 1 "original" } }
+ ! { dg-final { scan-tree-dump-times "_gfortran_caf_sync_all \\(" 1 "original" } }
diff -Nrcpad gcc-17-20260510/gcc/testsuite/lib/target-supports.exp gcc-17-20260517/gcc/testsuite/lib/target-supports.exp
*** gcc-17-20260510/gcc/testsuite/lib/target-supports.exp	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/testsuite/lib/target-supports.exp	Sun May 17 22:32:13 2026
*************** proc check_profiling_available { test_wh
*** 794,801 ****
  	    verbose "autofdo not supported"
  	    return 0
  	}
- 	puts $wrapper
- 	global srcdir
  	set status [remote_exec host "$wrapper true -v >/dev/null"]
  	if { [lindex $status 0] != 0 } {
  	    verbose "autofdo not supported because perf does not work"
--- 794,799 ----
diff -Nrcpad gcc-17-20260510/gcc/tree-cfg.cc gcc-17-20260517/gcc/tree-cfg.cc
*** gcc-17-20260510/gcc/tree-cfg.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-cfg.cc	Sun May 17 22:32:13 2026
*************** group_case_labels_stmt (gswitch *stmt)
*** 1712,1718 ****
    int old_size = gimple_switch_num_labels (stmt);
    int i, next_index, new_size;
    basic_block default_bb = NULL;
-   hash_set<tree> *removed_labels = NULL;
  
    default_bb = gimple_switch_default_bb (cfun, stmt);
  
--- 1712,1717 ----
*************** group_case_labels_stmt (gswitch *stmt)
*** 1728,1739 ****
        gcc_assert (base_case);
        base_bb = label_to_block (cfun, CASE_LABEL (base_case));
  
!       /* Discard cases that have the same destination as the default case or
! 	 whose destination blocks have already been removed as unreachable.  */
        if (base_bb == NULL
! 	  || base_bb == default_bb
! 	  || (removed_labels
! 	      && removed_labels->contains (CASE_LABEL (base_case))))
  	{
  	  i++;
  	  continue;
--- 1727,1735 ----
        gcc_assert (base_case);
        base_bb = label_to_block (cfun, CASE_LABEL (base_case));
  
!       /* Discard cases that have the same destination as the default case.  */
        if (base_bb == NULL
! 	  || base_bb == default_bb)
  	{
  	  i++;
  	  continue;
*************** group_case_labels_stmt (gswitch *stmt)
*** 1756,1763 ****
  	  /* Merge the cases if they jump to the same place,
  	     and their ranges are consecutive.  */
  	  if (merge_bb == base_bb
- 	      && (removed_labels == NULL
- 		  || !removed_labels->contains (CASE_LABEL (merge_case)))
  	      && wi::to_wide (CASE_LOW (merge_case)) == bhp1)
  	    {
  	      base_high
--- 1752,1757 ----
*************** group_case_labels_stmt (gswitch *stmt)
*** 1770,1815 ****
  	    break;
  	}
  
-       /* Discard cases that have an unreachable destination block.  */
-       if (EDGE_COUNT (base_bb->succs) == 0
- 	  && gimple_seq_unreachable_p (bb_seq (base_bb))
- 	  /* Don't optimize this if __builtin_unreachable () is the
- 	     implicitly added one by the C++ FE too early, before
- 	     -Wreturn-type can be diagnosed.  We'll optimize it later
- 	     during switchconv pass or any other cfg cleanup.  */
- 	  && (gimple_in_ssa_p (cfun)
- 	      || (LOCATION_LOCUS (gimple_location (last_nondebug_stmt (base_bb)))
- 		  != BUILTINS_LOCATION)))
- 	{
- 	  edge base_edge = find_edge (gimple_bb (stmt), base_bb);
- 	  if (base_edge != NULL)
- 	    {
- 	      for (gimple_stmt_iterator gsi = gsi_start_bb (base_bb);
- 		   !gsi_end_p (gsi); gsi_next (&gsi))
- 		if (glabel *stmt = dyn_cast <glabel *> (gsi_stmt (gsi)))
- 		  {
- 		    if (FORCED_LABEL (gimple_label_label (stmt))
- 			|| DECL_NONLOCAL (gimple_label_label (stmt)))
- 		      {
- 			/* Forced/non-local labels aren't going to be removed,
- 			   but they will be moved to some neighbouring basic
- 			   block. If some later case label refers to one of
- 			   those labels, we should throw that case away rather
- 			   than keeping it around and referring to some random
- 			   other basic block without an edge to it.  */
- 			if (removed_labels == NULL)
- 			  removed_labels = new hash_set<tree>;
- 			removed_labels->add (gimple_label_label (stmt));
- 		      }
- 		  }
- 		else
- 		  break;
- 	      remove_edge_and_dominated_blocks (base_edge);
- 	    }
- 	  i = next_index;
- 	  continue;
- 	}
- 
        if (new_size < i)
  	gimple_switch_set_label (stmt, new_size,
  				 gimple_switch_label (stmt, i));
--- 1764,1769 ----
*************** group_case_labels_stmt (gswitch *stmt)
*** 1822,1828 ****
    if (new_size < old_size)
      gimple_switch_set_num_labels (stmt, new_size);
  
-   delete removed_labels;
    return new_size < old_size;
  }
  
--- 1776,1781 ----
diff -Nrcpad gcc-17-20260510/gcc/tree-chrec.cc gcc-17-20260517/gcc/tree-chrec.cc
*** gcc-17-20260510/gcc/tree-chrec.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-chrec.cc	Sun May 17 22:32:13 2026
*************** keep_cast:
*** 1598,1603 ****
--- 1598,1628 ----
  						  CHREC_RIGHT (chrec)));
        res = chrec_convert_1 (type, res, at_stmt, use_overflow_semantics, from);
      }
+   /* Similar perform the trick that (unsigned T)(base + step) can be
+      folded to ((unsigned T)x + (unsigned T)step).  */
+   else if (use_overflow_semantics
+ 	   && TREE_CODE (chrec) == POLYNOMIAL_CHREC
+ 	   && INTEGRAL_TYPE_P (ct)
+ 	   && INTEGRAL_TYPE_P (type)
+ 	   && TYPE_OVERFLOW_UNDEFINED (type)
+ 	   /* Must be unsigned so we don't introduce any UB.  */
+ 	   && TYPE_UNSIGNED (type)
+ 	   /* The outer type must at least as wide than the inner type so we
+ 		 don't truncate when we fold and must the inner CHREC must be
+ 		 non-wrapping so we don't change the behavior when folding to
+ 		 a wider type.  */
+ 	  && TYPE_PRECISION (type) >= TYPE_PRECISION (ct)
+ 	  && (!TYPE_UNSIGNED (ct)
+ 	      || TYPE_PRECISION (type) == TYPE_PRECISION (ct)
+ 	      || nonwrapping_chrec_p (chrec)))
+     {
+       res = build_polynomial_chrec (CHREC_VARIABLE (chrec),
+ 				    fold_convert (type,
+ 						  CHREC_LEFT (chrec)),
+ 				    fold_convert (type,
+ 						  CHREC_RIGHT (chrec)));
+       res = chrec_convert_1 (type, res, at_stmt, use_overflow_semantics, from);
+     }
    else
      res = fold_convert (type, chrec);
  
diff -Nrcpad gcc-17-20260510/gcc/tree-scalar-evolution.cc gcc-17-20260517/gcc/tree-scalar-evolution.cc
*** gcc-17-20260510/gcc/tree-scalar-evolution.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-scalar-evolution.cc	Sun May 17 22:32:13 2026
*************** simplify_peeled_chrec (class loop *loop,
*** 1391,1400 ****
  	  && wi::to_widest (init_cond) == wi::to_widest (left_before)
  	  && !scev_probably_wraps_p (NULL_TREE, left_before, right, NULL,
  				     loop, false))
! 	return build_polynomial_chrec (loop->num, init_cond,
! 				       chrec_convert (TREE_TYPE (ev),
! 						      right, NULL,
! 						      false, NULL_TREE));
        return chrec_dont_know;
      }
  
--- 1391,1409 ----
  	  && wi::to_widest (init_cond) == wi::to_widest (left_before)
  	  && !scev_probably_wraps_p (NULL_TREE, left_before, right, NULL,
  				     loop, false))
! 	{
! 	  tree tp = TREE_TYPE (right);
! 
! 	  /* We need a sign-extension to make things like
! 	     u8(6, 4, 2) => i32(6, 4, 2), instead of i32(6, 260, 514).  */
! 	  if (TYPE_UNSIGNED (tp))
! 	    right = fold_convert (signed_type_for (tp), right);
! 
! 	  return build_polynomial_chrec (loop->num, init_cond,
! 					 chrec_convert (TREE_TYPE (ev),
! 							right, NULL,
! 							false, NULL_TREE));
! 	}
        return chrec_dont_know;
      }
  
diff -Nrcpad gcc-17-20260510/gcc/tree-sra.cc gcc-17-20260517/gcc/tree-sra.cc
*** gcc-17-20260510/gcc/tree-sra.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-sra.cc	Sun May 17 22:32:13 2026
*************** build_debug_ref_for_model (location_t lo
*** 2091,2106 ****
  }
  
  /* Construct a memory reference consisting of component_refs and array_refs to
!    a part of an aggregate *RES (which is of type TYPE).  The requested part
!    should have type EXP_TYPE at be the given OFFSET.  This function might not
!    succeed, it returns true when it does and only then *RES points to something
!    meaningful.  This function should be used only to build expressions that we
!    might need to present to user (e.g. in warnings).  In all other situations,
     build_ref_for_model or build_ref_for_offset should be used instead.  */
  
  static bool
  build_user_friendly_ref_for_offset (tree *res, tree type, HOST_WIDE_INT offset,
! 				    tree exp_type)
  {
    while (1)
      {
--- 2091,2110 ----
  }
  
  /* Construct a memory reference consisting of component_refs and array_refs to
!    a part of an aggregate *RES which is of type TYPE.  The requested part
!    should have type EXP_TYPE at the given OFFSET.  CUR_SIZE must be the size of
!    *RES unless it is known that *RES alone cannot be the result.  This function
!    might not succeed, it returns true when it does and only then *RES points to
!    something meaningful.
! 
!    This function should be used only to build expressions that we might need to
!    present to user (e.g. in warnings).  In all other situations,
     build_ref_for_model or build_ref_for_offset should be used instead.  */
  
  static bool
  build_user_friendly_ref_for_offset (tree *res, tree type, HOST_WIDE_INT offset,
! 				    HOST_WIDE_INT cur_size, tree exp_type,
! 				    HOST_WIDE_INT exp_size)
  {
    while (1)
      {
*************** build_user_friendly_ref_for_offset (tree
*** 2108,2114 ****
        tree tr_size, index, minidx;
        HOST_WIDE_INT el_size;
  
!       if (offset == 0 && exp_type
  	  && types_compatible_p (exp_type, type))
  	return true;
  
--- 2112,2119 ----
        tree tr_size, index, minidx;
        HOST_WIDE_INT el_size;
  
!       if (offset == 0
! 	  && cur_size == exp_size
  	  && types_compatible_p (exp_type, type))
  	return true;
  
*************** build_user_friendly_ref_for_offset (tree
*** 2146,2152 ****
  			     NULL_TREE);
  	      expr_ptr = &expr;
  	      if (build_user_friendly_ref_for_offset (expr_ptr, TREE_TYPE (fld),
! 						      offset - pos, exp_type))
  		{
  		  *res = expr;
  		  return true;
--- 2151,2158 ----
  			     NULL_TREE);
  	      expr_ptr = &expr;
  	      if (build_user_friendly_ref_for_offset (expr_ptr, TREE_TYPE (fld),
! 						      offset - pos, size,
! 						      exp_type, exp_size))
  		{
  		  *res = expr;
  		  return true;
*************** build_user_friendly_ref_for_offset (tree
*** 2169,2185 ****
  	  *res = build4 (ARRAY_REF, TREE_TYPE (type), *res, index,
  			 NULL_TREE, NULL_TREE);
  	  offset = offset % el_size;
  	  type = TREE_TYPE (type);
  	  break;
  
  	default:
! 	  if (offset != 0)
! 	    return false;
! 
! 	  if (exp_type)
! 	    return false;
! 	  else
! 	    return true;
  	}
      }
  }
--- 2175,2186 ----
  	  *res = build4 (ARRAY_REF, TREE_TYPE (type), *res, index,
  			 NULL_TREE, NULL_TREE);
  	  offset = offset % el_size;
+ 	  cur_size = el_size;
  	  type = TREE_TYPE (type);
  	  break;
  
  	default:
! 	  return false;
  	}
      }
  }
*************** create_artificial_child_access (struct a
*** 3070,3076 ****
    struct access *access = access_pool.allocate ();
    memset (access, 0, sizeof (struct access));
    if (!build_user_friendly_ref_for_offset (&expr, TREE_TYPE (expr), new_offset,
! 					   model->type))
      {
        access->grp_no_warning = true;
        expr = build_ref_for_model (EXPR_LOCATION (parent->base), parent->base,
--- 3071,3078 ----
    struct access *access = access_pool.allocate ();
    memset (access, 0, sizeof (struct access));
    if (!build_user_friendly_ref_for_offset (&expr, TREE_TYPE (expr), new_offset,
! 					   parent->size, model->type,
! 					   model->size))
      {
        access->grp_no_warning = true;
        expr = build_ref_for_model (EXPR_LOCATION (parent->base), parent->base,
*************** propagate_subaccesses_from_rhs (struct a
*** 3211,3218 ****
  	  tree t = lacc->base;
  
  	  lacc->type = racc->type;
  	  if (build_user_friendly_ref_for_offset (&t, TREE_TYPE (t),
! 						  lacc->offset, racc->type))
  	    {
  	      lacc->expr = t;
  	      lacc->grp_same_access_path = true;
--- 3213,3223 ----
  	  tree t = lacc->base;
  
  	  lacc->type = racc->type;
+ 	  /* We know racc and lacc are of different types so can pass -1 as
+ 	     cur_size.  */
  	  if (build_user_friendly_ref_for_offset (&t, TREE_TYPE (t),
! 						  lacc->offset, -1,
! 						  racc->type, racc->size))
  	    {
  	      lacc->expr = t;
  	      lacc->grp_same_access_path = true;
*************** propagate_subaccesses_from_rhs (struct a
*** 3270,3276 ****
  	}
  
        if (rchild->grp_unscalarizable_region
- 	  || (rchild->size % BITS_PER_UNIT) != 0
  	  || !budget_for_propagation_access (lacc->base))
  	{
  	  if (!lacc->grp_write && access_or_its_child_written (rchild))
--- 3275,3280 ----
*************** propagate_subaccesses_from_lhs (struct a
*** 3330,3336 ****
        HOST_WIDE_INT norm_offset = lchild->offset + norm_delta;
  
        if (lchild->grp_unscalarizable_region
- 	  || (lchild->size % BITS_PER_UNIT) != 0
  	  || child_would_conflict_in_acc (racc, norm_offset, lchild->size,
  					  &matching_acc)
  	  || !budget_for_propagation_access (racc->base))
--- 3334,3339 ----
diff -Nrcpad gcc-17-20260510/gcc/tree-ssa-ccp.cc gcc-17-20260517/gcc/tree-ssa-ccp.cc
*** gcc-17-20260510/gcc/tree-ssa-ccp.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-ssa-ccp.cc	Sun May 17 22:32:13 2026
*************** evaluate_stmt (gimple *stmt)
*** 2462,2467 ****
--- 2462,2495 ----
  	      val.mask = -1;
  	      break;
  
+ 	    case BUILT_IN_BITREVERSE8:
+ 	    case BUILT_IN_BITREVERSE16:
+ 	    case BUILT_IN_BITREVERSE32:
+ 	    case BUILT_IN_BITREVERSE64:
+ 	    case BUILT_IN_BITREVERSE128:
+ 	      val = get_value_for_expr (gimple_call_arg (stmt, 0), true);
+ 	      if (val.lattice_val == UNDEFINED)
+ 		break;
+ 	      else if (val.lattice_val == CONSTANT
+ 		       && val.value
+ 		       && TREE_CODE (val.value) == INTEGER_CST)
+ 		{
+ 		  tree type = TREE_TYPE (gimple_call_lhs (stmt));
+ 		  int prec = TYPE_PRECISION (type);
+ 		  wide_int wval = wi::to_wide (val.value);
+ 		  wval = wide_int::from (wval, prec, UNSIGNED);
+ 		  wide_int wmask = wide_int::from (val.mask, prec, UNSIGNED);
+ 		  val.value = wide_int_to_tree (type, wi::bitreverse (wval));
+ 		  val.mask = widest_int::from (wi::bitreverse (wmask),
+ 					       UNSIGNED);
+ 		  if (wi::sext (val.mask, prec) != -1)
+ 		    break;
+ 		}
+ 	      val.lattice_val = VARYING;
+ 	      val.value = NULL_TREE;
+ 	      val.mask = -1;
+ 	      break;
+ 
  	    default:;
  	    }
  	}
diff -Nrcpad gcc-17-20260510/gcc/tree-ssa-dom.cc gcc-17-20260517/gcc/tree-ssa-dom.cc
*** gcc-17-20260510/gcc/tree-ssa-dom.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-ssa-dom.cc	Sun May 17 22:32:13 2026
*************** record_edge_info (basic_block bb)
*** 524,529 ****
--- 524,534 ----
  	    {
  	      int i;
                int n_labels = gimple_switch_num_labels (switch_stmt);
+ 	      /* info contains NULL, error_mark_node or a value.
+ 		 error_mark signifies there are multiple values already.
+ 		 A NULL signifies there it is uninitialized.
+ 		 A value signifies that is the only value on that edge
+ 		 to that bb.  */
  	      tree *info = XCNEWVEC (tree, last_basic_block_for_fn (cfun));
  
  	      for (i = 0; i < n_labels; i++)
*************** record_edge_info (basic_block bb)
*** 531,553 ****
  		  tree label = gimple_switch_label (switch_stmt, i);
  		  basic_block target_bb
  		    = label_to_block (cfun, CASE_LABEL (label));
  		  if (CASE_HIGH (label)
  		      || !CASE_LOW (label)
  		      || info[target_bb->index])
  		    info[target_bb->index] = error_mark_node;
  		  else
! 		    info[target_bb->index] = label;
  		}
  
  	      FOR_EACH_EDGE (e, ei, bb->succs)
  		{
  		  basic_block target_bb = e->dest;
! 		  tree label = info[target_bb->index];
  
! 		  if (label != NULL && label != error_mark_node)
  		    {
  		      tree x = fold_convert_loc (loc, TREE_TYPE (index),
! 						 CASE_LOW (label));
  		      edge_info = new class edge_info (e);
  		      edge_info->record_simple_equiv (index, x);
  		    }
--- 536,562 ----
  		  tree label = gimple_switch_label (switch_stmt, i);
  		  basic_block target_bb
  		    = label_to_block (cfun, CASE_LABEL (label));
+ 		  /* The default case is a case with multiple values.
+ 		     If the value is already set then it has multiple values.  */
  		  if (CASE_HIGH (label)
  		      || !CASE_LOW (label)
  		      || info[target_bb->index])
  		    info[target_bb->index] = error_mark_node;
  		  else
! 		    /* Record the one value that can be on that edge to the
! 		       target_bb.  */
! 		    info[target_bb->index] = CASE_LOW (label);
  		}
  
  	      FOR_EACH_EDGE (e, ei, bb->succs)
  		{
  		  basic_block target_bb = e->dest;
! 		  tree value = info[target_bb->index];
  
! 		  if (value != NULL && value != error_mark_node)
  		    {
  		      tree x = fold_convert_loc (loc, TREE_TYPE (index),
! 						 value);
  		      edge_info = new class edge_info (e);
  		      edge_info->record_simple_equiv (index, x);
  		    }
diff -Nrcpad gcc-17-20260510/gcc/tree-ssa-forwprop.cc gcc-17-20260517/gcc/tree-ssa-forwprop.cc
*** gcc-17-20260510/gcc/tree-ssa-forwprop.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-ssa-forwprop.cc	Sun May 17 22:32:13 2026
*************** forward_propagate_addr_expr_1 (tree name
*** 856,863 ****
  	      new_base = build_fold_addr_expr (*def_rhs_basep);
  	      new_offset = TREE_OPERAND (rhs, 1);
  	    }
! 	  *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
! 				   new_base, new_offset);
  	  TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (rhs);
  	  TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (rhs);
  	  TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (rhs);
--- 856,865 ----
  	      new_base = build_fold_addr_expr (*def_rhs_basep);
  	      new_offset = TREE_OPERAND (rhs, 1);
  	    }
! 	  tree atype = TREE_TYPE (*def_rhs_basep);
! 	  if (TYPE_ALIGN (TREE_TYPE (rhs)) < TYPE_ALIGN (atype))
! 	    atype = build_aligned_type (atype, TYPE_ALIGN (TREE_TYPE (rhs)));
! 	  *def_rhs_basep = build2 (MEM_REF, atype, new_base, new_offset);
  	  TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (rhs);
  	  TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (rhs);
  	  TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (rhs);
*************** optimize_unreachable (basic_block bb)
*** 5262,5269 ****
  	}
        else
  	{
! 	  /* Todo: handle other cases.  Note that unreachable switch case
! 	     statements have already been removed.  */
  	  continue;
  	}
  
--- 5264,5270 ----
  	}
        else
  	{
! 	  /* Todo: handle other cases.  e.g. switch.  */
  	  continue;
  	}
  
diff -Nrcpad gcc-17-20260510/gcc/tree-ssa-loop-im.cc gcc-17-20260517/gcc/tree-ssa-loop-im.cc
*** gcc-17-20260510/gcc/tree-ssa-loop-im.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-ssa-loop-im.cc	Sun May 17 22:32:13 2026
*************** execute_sm (class loop *loop, im_mem_ref
*** 2323,2329 ****
    bool always_stored = ref_always_accessed_p (loop, ref, true);
    if (maybe_mt
        && (bb_in_transaction (loop_preheader_edge (loop)->src)
! 	  || (ref_can_have_store_data_races (ref->mem.ref) && ! always_stored)))
      multi_threaded_model_p = true;
  
    if (multi_threaded_model_p && !use_other_flag_var)
--- 2323,2336 ----
    bool always_stored = ref_always_accessed_p (loop, ref, true);
    if (maybe_mt
        && (bb_in_transaction (loop_preheader_edge (loop)->src)
! 	  || (ref_can_have_store_data_races (ref->mem.ref) && ! always_stored)
! 	  /* Do not speculate a load/store when that's not a noop, either
! 	     because the mode cannot be transferred or because there's
! 	     UB involved for out-of-bound values.  */
! 	  || !mode_can_transfer_bits (TYPE_MODE (TREE_TYPE (ref->mem.ref)))
! 	  || TREE_CODE (TREE_TYPE (ref->mem.ref)) == BOOLEAN_TYPE
! 	  || (TREE_CODE (ref->mem.ref) == COMPONENT_REF
! 	      && DECL_BIT_FIELD (TREE_OPERAND (ref->mem.ref, 1)))))
      multi_threaded_model_p = true;
  
    if (multi_threaded_model_p && !use_other_flag_var)
diff -Nrcpad gcc-17-20260510/gcc/tree-ssa-operands.cc gcc-17-20260517/gcc/tree-ssa-operands.cc
*** gcc-17-20260510/gcc/tree-ssa-operands.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-ssa-operands.cc	Sun May 17 22:32:14 2026
*************** operands_scanner::parse_ssa_operands ()
*** 976,981 ****
--- 976,987 ----
        append_vuse (gimple_vop (fn));
        goto do_default;
  
+     /* Switch index is the only operand that matters.  */
+     case GIMPLE_SWITCH:
+       get_expr_operands (gimple_switch_index_ptr (as_a <gswitch*> (stmt)),
+ 			 opf_use);
+       break;
+ 
      case GIMPLE_CALL:
        /* Add call-clobbered operands, if needed.  */
        maybe_add_call_vops (as_a <gcall *> (stmt));
diff -Nrcpad gcc-17-20260510/gcc/tree-ssa-phiopt.cc gcc-17-20260517/gcc/tree-ssa-phiopt.cc
*** gcc-17-20260510/gcc/tree-ssa-phiopt.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-ssa-phiopt.cc	Sun May 17 22:32:14 2026
*************** empty_bb_or_one_feeding_into_p (basic_bl
*** 819,824 ****
--- 819,829 ----
  	case CFN_BUILT_IN_BSWAP32:
  	case CFN_BUILT_IN_BSWAP64:
  	case CFN_BUILT_IN_BSWAP128:
+ 	case CFN_BUILT_IN_BITREVERSE8:
+ 	case CFN_BUILT_IN_BITREVERSE16:
+ 	case CFN_BUILT_IN_BITREVERSE32:
+ 	case CFN_BUILT_IN_BITREVERSE64:
+ 	case CFN_BUILT_IN_BITREVERSE128:
  	CASE_CFN_FFS:
  	CASE_CFN_PARITY:
  	CASE_CFN_POPCOUNT:
*************** cond_removal_in_builtin_zero_pattern (ba
*** 2578,2583 ****
--- 2583,2593 ----
      case CFN_BUILT_IN_BSWAP32:
      case CFN_BUILT_IN_BSWAP64:
      case CFN_BUILT_IN_BSWAP128:
+     case CFN_BUILT_IN_BITREVERSE8:
+     case CFN_BUILT_IN_BITREVERSE16:
+     case CFN_BUILT_IN_BITREVERSE32:
+     case CFN_BUILT_IN_BITREVERSE64:
+     case CFN_BUILT_IN_BITREVERSE128:
      CASE_CFN_FFS:
      CASE_CFN_PARITY:
      CASE_CFN_POPCOUNT:
diff -Nrcpad gcc-17-20260510/gcc/tree-ssa-uncprop.cc gcc-17-20260517/gcc/tree-ssa-uncprop.cc
*** gcc-17-20260510/gcc/tree-ssa-uncprop.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-ssa-uncprop.cc	Sun May 17 22:32:14 2026
*************** associate_equivalences_with_edges (void)
*** 176,181 ****
--- 176,186 ----
  	      && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (cond))
  	    {
  	      int i, n_labels = gimple_switch_num_labels (switch_stmt);
+ 	      /* info contains NULL, error_mark_node or a value.
+ 		 error_mark signifies there are multiple values already.
+ 		 A NULL signifies there it is uninitialized.
+ 		 A value signifies that is the only value on that edge
+ 		 to that bb.  */
  	      tree *info = XCNEWVEC (tree, last_basic_block_for_fn (cfun));
  
  	      /* Walk over the case label vector.  Record blocks
*************** associate_equivalences_with_edges (void)
*** 186,209 ****
  		  tree label = gimple_switch_label (switch_stmt, i);
  		  basic_block bb = label_to_block (cfun, CASE_LABEL (label));
  
  		  if (CASE_HIGH (label)
  		      || !CASE_LOW (label)
  		      || info[bb->index])
  		    info[bb->index] = error_mark_node;
  		  else
! 		    info[bb->index] = label;
  		}
  
  	      /* Now walk over the blocks to determine which ones were
  		 marked as being reached by a useful case label.  */
  	      for (i = 0; i < n_basic_blocks_for_fn (cfun); i++)
  		{
! 		  tree node = info[i];
  
! 		  if (node != NULL
! 		      && node != error_mark_node)
  		    {
! 		      tree x = fold_convert (TREE_TYPE (cond), CASE_LOW (node));
  		      struct edge_equivalency *equivalency;
  
  		      /* Record an equivalency on the edge from BB to basic
--- 191,219 ----
  		  tree label = gimple_switch_label (switch_stmt, i);
  		  basic_block bb = label_to_block (cfun, CASE_LABEL (label));
  
+ 		  /* The default case is a case with multiple values.
+ 		     If the value is already set then it has multiple
+ 		     values.  */
  		  if (CASE_HIGH (label)
  		      || !CASE_LOW (label)
  		      || info[bb->index])
  		    info[bb->index] = error_mark_node;
  		  else
! 		    /* Record the one value that can be on that edge to the
! 		       target_bb.  */
! 		    info[bb->index] = CASE_LOW (label);
  		}
  
  	      /* Now walk over the blocks to determine which ones were
  		 marked as being reached by a useful case label.  */
  	      for (i = 0; i < n_basic_blocks_for_fn (cfun); i++)
  		{
! 		  tree value = info[i];
  
! 		  if (value != NULL
! 		      && value != error_mark_node)
  		    {
! 		      tree x = fold_convert (TREE_TYPE (cond), value);
  		      struct edge_equivalency *equivalency;
  
  		      /* Record an equivalency on the edge from BB to basic
diff -Nrcpad gcc-17-20260510/gcc/tree-vect-slp.cc gcc-17-20260517/gcc/tree-vect-slp.cc
*** gcc-17-20260510/gcc/tree-vect-slp.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-vect-slp.cc	Sun May 17 22:32:14 2026
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1391,1396 ****
--- 1391,1397 ----
  	}
        else
  	{
+ 	  int comm_arg;
  	  if (first_reduc_idx != STMT_VINFO_REDUC_IDX (stmt_info)
  	      /* For SLP reduction groups the index isn't necessarily
  		 uniform but only that of the first stmt matters.  */
*************** vect_build_slp_tree_1 (vec_info *vinfo,
*** 1399,1407 ****
  		   && REDUC_GROUP_FIRST_ELEMENT (stmt_info))
  	      && !(first_reduc_idx != -1
  		   && STMT_VINFO_REDUC_IDX (stmt_info) != -1
! 		   && rhs_code.is_tree_code ()
! 		   && commutative_tree_code (tree_code (rhs_code))
! 		   && first_reduc_idx == 1 - STMT_VINFO_REDUC_IDX (stmt_info)))
  	    {
  	      if (dump_enabled_p ())
  		{
--- 1400,1409 ----
  		   && REDUC_GROUP_FIRST_ELEMENT (stmt_info))
  	      && !(first_reduc_idx != -1
  		   && STMT_VINFO_REDUC_IDX (stmt_info) != -1
! 		   && (comm_arg = first_commutative_argument
! 				    (rhs_code, TREE_TYPE (lhs))) >= 0
! 		   && (first_reduc_idx
! 		       == 2 * comm_arg + 1 - STMT_VINFO_REDUC_IDX (stmt_info))))
  	    {
  	      if (dump_enabled_p ())
  		{
*************** vect_analyze_slp_reduction (loop_vec_inf
*** 4726,4737 ****
  {
    slp_instance_kind kind = slp_inst_kind_reduc_group;
  
!   /* If there's no budget left bail out early.  */
!   if (*limit == 0)
!     return false;
! 
!   /* Try to gather a reduction chain.  */
    if (! force_single_lane
        && STMT_VINFO_DEF_TYPE (scalar_stmt) == vect_reduction_def
        && vect_analyze_slp_reduc_chain (vinfo, bst_map, scalar_stmt,
  				       max_tree_size, limit))
--- 4728,4737 ----
  {
    slp_instance_kind kind = slp_inst_kind_reduc_group;
  
!   /* Try to gather a reduction chain.  Only attempt if there's budget left
!      since chain analysis may build multi-lane trees that consume limit.  */
    if (! force_single_lane
+       && *limit != 0
        && STMT_VINFO_DEF_TYPE (scalar_stmt) == vect_reduction_def
        && vect_analyze_slp_reduc_chain (vinfo, bst_map, scalar_stmt,
  				       max_tree_size, limit))
*************** vect_slp_prune_covered_roots (slp_tree n
*** 9167,9172 ****
--- 9167,9190 ----
        vect_slp_prune_covered_roots (child, roots, visited);
  }
  
+ /* Hand over COST_VEC to the target COSTS grouped by SLP node.  */
+ 
+ static void
+ add_slp_costs (vector_costs *costs, stmt_vector_for_cost& cost_vec)
+ {
+   for (unsigned start = 0; start < cost_vec.length ();)
+     {
+       unsigned end = start + 1;
+       while (end < cost_vec.length ()
+ 	     && cost_vec[start].node == cost_vec[end].node)
+ 	end++;
+       costs->add_slp_cost (cost_vec[start].node,
+ 			   array_slice<stmt_info_for_cost>
+ 			     (cost_vec.begin () + start, end - start));
+       start = end;
+     }
+ }
+ 
  /* Analyze statements in SLP instances of VINFO.  Return true if the
     operations are supported. */
  
*************** vect_slp_analyze_operations (vec_info *v
*** 9252,9258 ****
  	  i++;
  	  if (loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo))
  	    {
! 	      add_stmt_costs (loop_vinfo->vector_costs, &cost_vec);
  	      cost_vec.release ();
  	    }
  	  else
--- 9270,9276 ----
  	  i++;
  	  if (loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo))
  	    {
! 	      add_slp_costs (loop_vinfo->vector_costs, cost_vec);
  	      cost_vec.release ();
  	    }
  	  else
*************** vect_bb_slp_scalar_cost (bb_vec_info vin
*** 9520,9526 ****
  /* Comparator for the loop-index sorted cost vectors.  */
  
  static int
! li_cost_vec_cmp (const void *a_, const void *b_)
  {
    auto *a = (const std::pair<unsigned, stmt_info_for_cost *> *)a_;
    auto *b = (const std::pair<unsigned, stmt_info_for_cost *> *)b_;
--- 9538,9544 ----
  /* Comparator for the loop-index sorted cost vectors.  */
  
  static int
! li_cost_vec_cmp (const void *a_, const void *b_, void *)
  {
    auto *a = (const std::pair<unsigned, stmt_info_for_cost *> *)a_;
    auto *b = (const std::pair<unsigned, stmt_info_for_cost *> *)b_;
*************** vect_bb_vectorization_profitable_p (bb_v
*** 9610,9617 ****
  	l = gimple_bb (cost->stmt_info->stmt)->loop_father->num;
        li_vector_costs.quick_push (std::make_pair (l, cost));
      }
!   li_scalar_costs.qsort (li_cost_vec_cmp);
!   li_vector_costs.qsort (li_cost_vec_cmp);
  
    /* Now cost the portions individually.  */
    unsigned vi = 0;
--- 9628,9635 ----
  	l = gimple_bb (cost->stmt_info->stmt)->loop_father->num;
        li_vector_costs.quick_push (std::make_pair (l, cost));
      }
!   li_scalar_costs.stablesort (li_cost_vec_cmp, NULL);
!   li_vector_costs.stablesort (li_cost_vec_cmp, NULL);
  
    /* Now cost the portions individually.  */
    unsigned vi = 0;
*************** vect_bb_vectorization_profitable_p (bb_v
*** 9651,9663 ****
  
        /* Complete the target-specific vector cost calculation.  */
        class vector_costs *vect_target_cost_data = init_cost (bb_vinfo, false);
        do
  	{
! 	  add_stmt_cost (vect_target_cost_data, li_vector_costs[vi].second);
  	  vi++;
  	}
        while (vi < li_vector_costs.length ()
  	     && li_vector_costs[vi].first == vl);
        vect_target_cost_data->finish_cost (scalar_target_cost_data);
        vec_prologue_cost = vect_target_cost_data->prologue_cost ();
        vec_inside_cost = vect_target_cost_data->body_cost ();
--- 9669,9683 ----
  
        /* Complete the target-specific vector cost calculation.  */
        class vector_costs *vect_target_cost_data = init_cost (bb_vinfo, false);
+       auto_vec<stmt_info_for_cost> tem;
        do
  	{
! 	  tem.safe_push (*li_vector_costs[vi].second);
  	  vi++;
  	}
        while (vi < li_vector_costs.length ()
  	     && li_vector_costs[vi].first == vl);
+       add_slp_costs (vect_target_cost_data, tem);
        vect_target_cost_data->finish_cost (scalar_target_cost_data);
        vec_prologue_cost = vect_target_cost_data->prologue_cost ();
        vec_inside_cost = vect_target_cost_data->body_cost ();
diff -Nrcpad gcc-17-20260510/gcc/tree-vect-stmts.cc gcc-17-20260517/gcc/tree-vect-stmts.cc
*** gcc-17-20260510/gcc/tree-vect-stmts.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-vect-stmts.cc	Sun May 17 22:32:14 2026
*************** get_load_store_type (vec_info  *vinfo, s
*** 2451,2456 ****
--- 2451,2457 ----
  	  || *memory_access_type == VMAT_STRIDED_SLP))
      {
        gather_scatter_info gs_info;
+       tree tem;
        if (SLP_TREE_LANES (slp_node) == 1
  	  && (!SLP_TREE_LOAD_PERMUTATION (slp_node).exists ()
  	      || single_element_p)
*************** get_load_store_type (vec_info  *vinfo, s
*** 2483,2496 ****
  	       && vect_use_grouped_gather (STMT_VINFO_DR_INFO (stmt_info),
  					   vectype, loop_vinfo,
  					   masked_p, group_size,
! 					   &gs_info, elsvals, ls_type))
  	{
  	  SLP_TREE_GS_SCALE (slp_node) = gs_info.scale;
  	  SLP_TREE_GS_BASE (slp_node) = error_mark_node;
  	  grouped_gather_fallback = *memory_access_type;
  	  *memory_access_type = VMAT_GATHER_SCATTER_IFN;
  	  ls->gs.ifn = gs_info.ifn;
! 	  vectype = *ls_type;
  	  ls->strided_offset_vectype = gs_info.offset_vectype;
  	}
      }
--- 2484,2497 ----
  	       && vect_use_grouped_gather (STMT_VINFO_DR_INFO (stmt_info),
  					   vectype, loop_vinfo,
  					   masked_p, group_size,
! 					   &gs_info, elsvals, &tem))
  	{
  	  SLP_TREE_GS_SCALE (slp_node) = gs_info.scale;
  	  SLP_TREE_GS_BASE (slp_node) = error_mark_node;
  	  grouped_gather_fallback = *memory_access_type;
  	  *memory_access_type = VMAT_GATHER_SCATTER_IFN;
  	  ls->gs.ifn = gs_info.ifn;
! 	  vectype = *ls_type = tem;
  	  ls->strided_offset_vectype = gs_info.offset_vectype;
  	}
      }
*************** vectorizable_store (vec_info *vinfo,
*** 8329,8337 ****
  	  && alignment_support_scheme != dr_aligned)
  	dump_printf_loc (MSG_NOTE, vect_location,
  			 "Vectorizing an unaligned access.\n");
- 
-       SLP_TREE_TYPE (slp_node) = store_vec_info_type;
-       slp_node->data = new vect_load_store_data (std::move (ls));
      }
  
    /* Transform.  */
--- 8330,8335 ----
*************** vectorizable_store (vec_info *vinfo,
*** 8358,8363 ****
--- 8356,8364 ----
  			     "prologue_cost = %d .\n",
  			     inside_cost, prologue_cost);
  
+ 	  SLP_TREE_TYPE (slp_node) = store_vec_info_type;
+ 	  slp_node->data = new vect_load_store_data (std::move (ls));
+ 
  	  return true;
  	}
        return vectorizable_scan_store (vinfo, stmt_info, slp_node, gsi);
*************** vectorizable_store (vec_info *vinfo,
*** 8532,8537 ****
--- 8533,8545 ----
  		   }
  	    }
  	}
+ 
+       if (costing_p)
+ 	/* Record the decomposition type for target access during costing.  */
+ 	ls.ls_type = lvectype;
+       else
+ 	gcc_assert (ls.ls_type == lvectype);
+ 
        unsigned align;
        if (alignment_support_scheme == dr_aligned)
  	align = known_alignment (DR_TARGET_ALIGNMENT (first_dr_info));
*************** vectorizable_store (vec_info *vinfo,
*** 8654,8659 ****
--- 8662,8670 ----
  			     "vect_model_store_cost: inside_cost = %d, "
  			     "prologue_cost = %d .\n",
  			     inside_cost, prologue_cost);
+ 
+ 	  SLP_TREE_TYPE (slp_node) = store_vec_info_type;
+ 	  slp_node->data = new vect_load_store_data (std::move (ls));
  	}
  
        return true;
*************** vectorizable_store (vec_info *vinfo,
*** 8886,8891 ****
--- 8897,8905 ----
  			     "vect_model_store_cost: inside_cost = %d, "
  			     "prologue_cost = %d .\n",
  			     inside_cost, prologue_cost);
+ 
+ 	  SLP_TREE_TYPE (slp_node) = store_vec_info_type;
+ 	  slp_node->data = new vect_load_store_data (std::move (ls));
  	}
  
        return true;
*************** vectorizable_store (vec_info *vinfo,
*** 9269,9279 ****
  	    }
  	}
  
!       if (costing_p && dump_enabled_p ())
! 	dump_printf_loc (MSG_NOTE, vect_location,
! 			 "vect_model_store_cost: inside_cost = %d, "
! 			 "prologue_cost = %d .\n",
! 			 inside_cost, prologue_cost);
  
        return true;
      }
--- 9283,9298 ----
  	    }
  	}
  
!       if (costing_p)
! 	{
! 	  if (dump_enabled_p ())
! 	    dump_printf_loc (MSG_NOTE, vect_location,
! 			     "vect_model_store_cost: inside_cost = %d, "
! 			     "prologue_cost = %d .\n",
! 			     inside_cost, prologue_cost);
! 	  SLP_TREE_TYPE (slp_node) = store_vec_info_type;
! 	  slp_node->data = new vect_load_store_data (std::move (ls));
! 	}
  
        return true;
      }
*************** vectorizable_store (vec_info *vinfo,
*** 9538,9543 ****
--- 9557,9565 ----
  			 "vect_model_store_cost: inside_cost = %d, "
  			 "prologue_cost = %d .\n",
  			 inside_cost, prologue_cost);
+ 
+       SLP_TREE_TYPE (slp_node) = store_vec_info_type;
+       slp_node->data = new vect_load_store_data (std::move (ls));
      }
  
    return true;
*************** vectorizable_load (vec_info *vinfo,
*** 9916,9921 ****
--- 9938,9963 ----
  
    if (costing_p) /* transformation not required.  */
      {
+       if (loop_vinfo
+ 	  && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
+ 	check_load_store_for_partial_vectors (loop_vinfo, vectype, slp_node,
+ 					      VLS_LOAD, group_size, &ls,
+ 					      mask_node, &ls.elsvals);
+ 
+       /* If the type needs padding we must zero inactive elements.
+ 	 Check if we can do that with a VEC_COND_EXPR and store the
+ 	 elsval we choose in MASKLOAD_ELSVAL.  */
+       if (ls.elsvals.length ()
+ 	  && type_mode_padding_p
+ 	  && !ls.elsvals.contains (MASK_LOAD_ELSE_ZERO)
+ 	  && !expand_vec_cond_expr_p (vectype, truth_type_for (vectype)))
+ 	{
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 			     "cannot zero inactive elements.\n");
+ 	  return false;
+ 	}
+ 
        if (mask_node
  	  && !vect_maybe_update_slp_op_vectype (mask_node,
  						mask_vectype))
*************** vectorizable_load (vec_info *vinfo,
*** 9926,9937 ****
  	  return false;
  	}
  
-       if (loop_vinfo
- 	  && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
- 	check_load_store_for_partial_vectors (loop_vinfo, vectype, slp_node,
- 					      VLS_LOAD, group_size, &ls,
- 					      mask_node, &ls.elsvals);
- 
        if (dump_enabled_p ()
  	  && memory_access_type != VMAT_ELEMENTWISE
  	  && !mat_gather_scatter_p (memory_access_type)
--- 9968,9973 ----
*************** vectorizable_load (vec_info *vinfo,
*** 9943,9965 ****
  
        if (memory_access_type == VMAT_LOAD_STORE_LANES)
  	vinfo->any_known_not_updated_vssa = true;
- 
-       SLP_TREE_TYPE (slp_node) = load_vec_info_type;
-       slp_node->data = new vect_load_store_data (std::move (ls));
-     }
- 
-   /* If the type needs padding we must zero inactive elements.
-      Check if we can do that with a VEC_COND_EXPR and store the
-      elsval we choose in MASKLOAD_ELSVAL.  */
-   if (elsvals.length ()
-       && type_mode_padding_p
-       && !elsvals.contains (MASK_LOAD_ELSE_ZERO)
-       && !expand_vec_cond_expr_p (vectype, truth_type_for (vectype)))
-     {
-       if (dump_enabled_p ())
- 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- 			 "cannot zero inactive elements.\n");
-       return false;
      }
  
    /* For now just use the first available else value.
--- 9979,9984 ----
*************** vectorizable_load (vec_info *vinfo,
*** 10045,10050 ****
--- 10064,10071 ----
  			     "vect_model_load_cost: inside_cost = %d, "
  			     "prologue_cost = %d .\n",
  			     inside_cost, prologue_cost);
+ 	  SLP_TREE_TYPE (slp_node) = load_vec_info_type;
+ 	  slp_node->data = new vect_load_store_data (std::move (ls));
  	  return true;
  	}
        if (hoist_p)
*************** vectorizable_load (vec_info *vinfo,
*** 10310,10315 ****
--- 10331,10342 ----
  	  ltype = build_aligned_type (ltype, align * BITS_PER_UNIT);
  	}
  
+       if (costing_p)
+ 	/* Record the composition type for target access during costing.  */
+ 	ls.ls_type = lvectype;
+       else
+ 	gcc_assert (ls.ls_type == lvectype);
+ 
        /* For SLP permutation support we need to load the whole group,
  	 not only the number of vector stmts the permutation result
  	 fits in.  */
*************** vectorizable_load (vec_info *vinfo,
*** 10457,10462 ****
--- 10484,10491 ----
  			     "vect_model_load_cost: inside_cost = %u, "
  			     "prologue_cost = 0 .\n",
  			     inside_cost);
+ 	  SLP_TREE_TYPE (slp_node) = load_vec_info_type;
+ 	  slp_node->data = new vect_load_store_data (std::move (ls));
  	}
  
        return true;
*************** vectorizable_load (vec_info *vinfo,
*** 10847,10852 ****
--- 10876,10883 ----
  			     "vect_model_load_cost: inside_cost = %u, "
  			     "prologue_cost = %u .\n",
  			     inside_cost, prologue_cost);
+ 	  SLP_TREE_TYPE (slp_node) = load_vec_info_type;
+ 	  slp_node->data = new vect_load_store_data (std::move (ls));
  	}
  
        return true;
*************** vectorizable_load (vec_info *vinfo,
*** 11280,11290 ****
  	    }
  	}
  
!       if (costing_p && dump_enabled_p ())
! 	dump_printf_loc (MSG_NOTE, vect_location,
! 			 "vect_model_load_cost: inside_cost = %u, "
! 			 "prologue_cost = %u .\n",
! 			 inside_cost, prologue_cost);
        return true;
      }
  
--- 11311,11326 ----
  	    }
  	}
  
!       if (costing_p)
! 	{
! 	  if (dump_enabled_p ())
! 	    dump_printf_loc (MSG_NOTE, vect_location,
! 			     "vect_model_load_cost: inside_cost = %u, "
! 			     "prologue_cost = %u .\n",
! 			     inside_cost, prologue_cost);
! 	  SLP_TREE_TYPE (slp_node) = load_vec_info_type;
! 	  slp_node->data = new vect_load_store_data (std::move (ls));
! 	}
        return true;
      }
  
*************** vectorizable_load (vec_info *vinfo,
*** 11947,11952 ****
--- 11983,11990 ----
  			 "vect_model_load_cost: inside_cost = %u, "
  			 "prologue_cost = %u .\n",
  			 inside_cost, prologue_cost);
+       SLP_TREE_TYPE (slp_node) = load_vec_info_type;
+       slp_node->data = new vect_load_store_data (std::move (ls));
      }
  
    return true;
diff -Nrcpad gcc-17-20260510/gcc/tree-vectorizer.cc gcc-17-20260517/gcc/tree-vectorizer.cc
*** gcc-17-20260510/gcc/tree-vectorizer.cc	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-vectorizer.cc	Sun May 17 22:32:14 2026
*************** vector_costs::add_stmt_cost (int count,
*** 1845,1850 ****
--- 1845,1861 ----
    return record_stmt_cost (stmt_info, where, cost);
  }
  
+ unsigned int
+ vector_costs::add_slp_cost (slp_tree,
+ 			    const array_slice<stmt_info_for_cost> &cost_vec)
+ {
+   unsigned int sum = 0;
+   for (auto item : cost_vec)
+     sum += ::add_stmt_cost (this, item.count, item.kind, item.stmt_info,
+ 			    item.node, item.vectype, item.misalign, item.where);
+   return sum;
+ }
+ 
  /* See the comment above the declaration for details.  */
  
  void
diff -Nrcpad gcc-17-20260510/gcc/tree-vectorizer.h gcc-17-20260517/gcc/tree-vectorizer.h
*** gcc-17-20260510/gcc/tree-vectorizer.h	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gcc/tree-vectorizer.h	Sun May 17 22:32:14 2026
*************** public:
*** 1777,1782 ****
--- 1777,1787 ----
  				      tree vectype, int misalign,
  				      vect_cost_model_location where);
  
+   /* Update the costs in response to adding costs in V which are all from
+      vectorizing NODE to the respective part.  */
+   virtual unsigned int add_slp_cost (slp_tree node,
+ 				     const array_slice<stmt_info_for_cost> &v);
+ 
    /* Finish calculating the cost of the code.  The results can be
       read back using the functions below.
  
diff -Nrcpad gcc-17-20260510/gnattools/ChangeLog gcc-17-20260517/gnattools/ChangeLog
*** gcc-17-20260510/gnattools/ChangeLog	Sun May 10 22:32:14 2026
--- gcc-17-20260517/gnattools/ChangeLog	Sun May 17 22:32:14 2026
***************
*** 1,3 ****
--- 1,10 ----
+ 2026-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/125232
+ 	* Makefile.in (ADA_FOR_BUILD): Delete.
+ 	(ADA_FOR_TARGET): Likewise.
+ 	(LDFLAGS): Set to @LDFLAGS@.
+ 
  2026-01-08  Olivier Hainque  <hainque@adacore.com>
  	    Alexandre Oliva  <oliva@adacore.com>
  
diff -Nrcpad gcc-17-20260510/libgcc/ChangeLog gcc-17-20260517/libgcc/ChangeLog
*** gcc-17-20260510/libgcc/ChangeLog	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcc/ChangeLog	Sun May 17 22:32:14 2026
***************
*** 1,3 ****
--- 1,11 ----
+ 2026-05-11  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config.host (hppa*64*-hp-hpux11*): Handle linking with GNU ld.
+ 	* config/pa/libgcc-hpux.ver: New file.
+ 	* config/pa/t-slibgcc-gld: New file.
+ 	* config/pa/t-slibgcc-hpux (SHLIB_LDFLAGS, INSTALL_SHLIB,
+ 	SHLIB_MKMAP, SHLIB_MAPFILES): Define.
+ 
  2026-05-04  Iain Buclaw  <ibuclaw@gdcproject.org>
  
  	* config/m32c/*: Delete entire directory.
diff -Nrcpad gcc-17-20260510/libgcc/config/pa/libgcc-hpux.ver gcc-17-20260517/libgcc/config/pa/libgcc-hpux.ver
*** gcc-17-20260510/libgcc/config/pa/libgcc-hpux.ver	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libgcc/config/pa/libgcc-hpux.ver	Sun May 17 22:32:14 2026
***************
*** 0 ****
--- 1,45 ----
+ # Copyright (C) 2025-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/>.
+ 
+ GCC_HPUX_12.0.0 {
+   __clz_tab
+   _U_Qfcmp
+   _U_Qfcnvfxt_quad_to_sgl
+   _U_Qfeq
+   _U_Qfne
+   _U_Qfgt
+   _U_Qfge
+   _U_Qflt
+   _U_Qfle
+   _U_Qfltgt
+   _U_Qfunle
+   _U_Qfunlt
+   _U_Qfunge
+   _U_Qfungt
+   _U_Qfuneq
+   _U_Qfunord
+   _U_Qford
+   _U_Qfcomp
+   _U_Qfneg
+   _U_Qfcopysign
+   __U_Qfcnvfxt_quad_to_sgl
+   _U_Qfcnvfxt_quad_to_usgl
+   _U_Qfcnvxf_usgl_to_quad
+   _U_Qfcnvfxt_quad_to_udbl
+   _U_Qfcnvxf_udbl_to_quad
+ }
diff -Nrcpad gcc-17-20260510/libgcc/config/pa/t-slibgcc-gld gcc-17-20260517/libgcc/config/pa/t-slibgcc-gld
*** gcc-17-20260510/libgcc/config/pa/t-slibgcc-gld	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libgcc/config/pa/t-slibgcc-gld	Sun May 17 22:32:14 2026
***************
*** 0 ****
--- 1,32 ----
+ # Copyright (C) 2001-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/>.
+ 
+ # Build a shared libgcc library with the GNU linker on PA.
+ 
+ SHLIB_EXT = .sl
+ SHLIB_SOLINK = @shlib_base_name@$(SHLIB_EXT)
+ SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)
+ SHLIB_LC =
+ 
+ SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \
+ 	-Wl,--version-script=$(SHLIB_MAP)
+ 
+ INSTALL_SHLIB = $(INSTALL_DATA) -m 555
+ 
+ SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
+ SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/pa/libgcc-hpux.ver
diff -Nrcpad gcc-17-20260510/libgcc/config/pa/t-slibgcc-hpux gcc-17-20260517/libgcc/config/pa/t-slibgcc-hpux
*** gcc-17-20260510/libgcc/config/pa/t-slibgcc-hpux	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcc/config/pa/t-slibgcc-hpux	Sun May 17 22:32:14 2026
*************** SHLIB_EXT = .sl
*** 22,24 ****
--- 22,31 ----
  SHLIB_SOLINK = @shlib_base_name@$(SHLIB_EXT)
  SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)
  SHLIB_LC =
+ 
+ SHLIB_LDFLAGS = -Wl,+h,$(SHLIB_SONAME)
+ 
+ INSTALL_SHLIB = $(INSTALL_DATA) -m 555
+ 
+ SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
+ SHLIB_MAPFILES = libgcc-std.ver
diff -Nrcpad gcc-17-20260510/libgcc/config.host gcc-17-20260517/libgcc/config.host
*** gcc-17-20260510/libgcc/config.host	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcc/config.host	Sun May 17 22:32:14 2026
*************** hppa*64*-*-hpux11*)
*** 709,715 ****
  	else
  	    tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver"
  	fi
! 	tmake_file="$tmake_file pa/t-slibgcc-hpux t-slibgcc-hpux"
  	tmake_file="$tmake_file pa/t-softfp-sfdftf t-softfp"
  	tm_file="$tm_file pa/pa64-hpux-lib.h"
  	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
--- 709,719 ----
  	else
  	    tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver"
  	fi
! 	if test $with_gnu_ld = yes; then
! 	    tmake_file="$tmake_file t-slibgcc-libgcc pa/t-slibgcc-gld"
! 	else
! 	    tmake_file="$tmake_file pa/t-slibgcc-hpux"
! 	fi
  	tmake_file="$tmake_file pa/t-softfp-sfdftf t-softfp"
  	tm_file="$tm_file pa/pa64-hpux-lib.h"
  	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
diff -Nrcpad gcc-17-20260510/libgcobol/ChangeLog gcc-17-20260517/libgcobol/ChangeLog
*** gcc-17-20260510/libgcobol/ChangeLog	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/ChangeLog	Sun May 17 22:32:14 2026
***************
*** 1,3 ****
--- 1,91 ----
+ 2026-05-12  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.h (class charmap_t): Remove an abort().
+ 	* common-defs.h (SUPERTYPE): Pairs integers for complex switch().
+ 	(cbl_file_mode_str): Remove unnecessary trailing semicolon.
+ 	* gcobolio.h: New cblc_referlet_t and cblc_refer_t structures;
+ 	eliminate obsolete structures.
+ 	* gmath.cc (__gg__pow): Improved parameter handling.
+ 	(__gg__add_fixed_phase1): Likewise.
+ 	(__gg__addf1_fixed_phase2): Likewise.
+ 	(__gg__fixed_phase2_assign_to_c): Likewise.
+ 	(__gg__add_float_phase1): Likewise.
+ 	(__gg__addf1_float_phase2): Likewise.
+ 	(__gg__float_phase2_assign_to_c): Likewise.
+ 	(__gg__addf3): Likewise.
+ 	(__gg__subtractf1_fixed_phase2): Likewise.
+ 	(__gg__subtractf2_fixed_phase1): Likewise.
+ 	(__gg__subtractf1_float_phase2): Likewise.
+ 	(__gg__subtractf2_float_phase1): Likewise.
+ 	(__gg__subtractf3): Likewise.
+ 	(__gg__multiplyf1_phase1): Likewise.
+ 	(__gg__multiplyf1_phase2): Likewise.
+ 	(__gg__multiplyf2): Likewise.
+ 	(__gg__dividef1_phase2): Likewise.
+ 	(__gg__dividef23): Likewise.
+ 	(__gg__dividef45): Likewise.
+ 	* inspect.cc (inspect_backward_format_1): Likewise.
+ 	(__gg__inspect_format_1): Likewise.
+ 	(inspect_backward_format_2): Likewise.
+ 	(__gg__inspect_format_2): Likewise.
+ 	(__gg__inspect_format_1_sbc): Likewise.
+ 	* intrinsic.cc (kahan_summation): Likewise.
+ 	(variance): Likewise.
+ 	(__gg__concat): Likewise.
+ 	(__gg__max): Likewise.
+ 	(__gg__mean): Likewise.
+ 	(__gg__median): Likewise.
+ 	(__gg__midrange): Likewise.
+ 	(__gg__min): Likewise.
+ 	(__gg__ord_min): Likewise.
+ 	(__gg__ord_max): Likewise.
+ 	(__gg__present_value): Likewise.
+ 	(__gg__range): Likewise.
+ 	(__gg__standard_deviation): Likewise.
+ 	(__gg__sum): Likewise.
+ 	(__gg__variance): Likewise.
+ 	(__gg__substitute): Likewise.
+ 	* libgcobol.cc (__gg__resize_int_p): Eliminate.
+ 	(__gg__resize_treeplet): Eliminate.
+ 	(initialize_program_state): Eliminate the use of obsolete variables.
+ 	(format_for_display_internal): Handle FldLiteralN; display up to
+ 	38 digits for __int128.
+ 	(compare_field_class): Rename to __gg__compare_field_class.
+ 	(__gg__compare_field_class): Likewise.
+ 	(interconvert): Correct codeset correction logic.
+ 	(__gg__compare_2): Use __gg__compare_field_class.
+ 	(__gg__move): Handle FldNumericBin5 correction.
+ 	(__gg__string): Improved parameter handling.
+ 	(display_both): Cope with missing codeset parameter.
+ 	(__gg__literaln_alpha_compare): Eliminate.
+ 	(__gg__unstring): Improved parameter handling.
+ 	(__gg__just_mangle_name): Improved codeset handling.
+ 	(__gg__convert): Formatting.
+ 	(__gg__set_data_member): Eliminate.
+ 	(__gg__show_int128): New function.
+ 	(__gg__compare_string_all): New function.
+ 	(__gg__compare_string_1): New function.
+ 	(ASCII_16): Abuse of the preprocessor to create a 1024-byte string
+ 	of ASCII spaces.
+ 	(ASCII_64): Likewise.
+ 	(ASCII_256): Likewise.
+ 	(ASCII_1024): Likewise.
+ 	(EBCDIC_16): Abuse of the preprocessor to create a 1024-byte string
+ 	of EBCDIC spaces.
+ 	(EBCDIC_64): Likewise.
+ 	(EBCDIC_256): Likewise.
+ 	(EBCDIC_1024): Likewise.
+ 	(__gg__compare_string_1a): New function.
+ 	(__gg__compare_string_1e): New function.
+ 	(__gg__compare_string_2): New function.
+ 	(__gg__compare_string_2a): New function.
+ 	(__gg__compare_string_4): New function.
+ 	(__gg__compare_string_4a): New function.
+ 	(__gg_compare_string_different): New function.
+ 	(__gg__compare_numeric_all): New function.
+ 	(__gg__compare_binary_to_string): New function.
+ 	* stringbin.cc (__gg__binary_to_string_ascii): Improved algorithm.
+ 
  2026-04-02  Robert Dubner  <rdubner@symas.com>
  
  	* Makefile.am: Include new libgcobol/inspect.cc file.
diff -Nrcpad gcc-17-20260510/libgcobol/charmaps.h gcc-17-20260517/libgcobol/charmaps.h
*** gcc-17-20260510/libgcobol/charmaps.h	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/charmaps.h	Sun May 17 22:32:14 2026
*************** class charmap_t
*** 536,542 ****
        switch(figconst)
          {
          case normal_value_e :
!           abort();
            break;
          case low_value_e    :
            const_char = low_value_character();
--- 536,542 ----
        switch(figconst)
          {
          case normal_value_e :
!           // Just leave it at zero
            break;
          case low_value_e    :
            const_char = low_value_character();
diff -Nrcpad gcc-17-20260510/libgcobol/common-defs.h gcc-17-20260517/libgcobol/common-defs.h
*** gcc-17-20260510/libgcobol/common-defs.h	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/common-defs.h	Sun May 17 22:32:14 2026
*************** enum cbl_field_type_t {
*** 160,165 ****
--- 160,170 ----
    FldPointer,
  };
  
+ /* In some places, I use SUPERTYPE for things like MOVES and COMPARES to
+    avoid lots of conditionals or complex multi-level switch() statements. */
+ 
+ #define SUPERTYPE(a, b) ((static_cast<int>(a)<<5)+(static_cast<int>(b)))
+ 
  
  /*  BINARY, COMP, COMPUTATIONAL, COMP-4, COMPUTATIONAL-4 are the same:
   *      Storage, by default, is big-endian.
*************** cbl_file_mode_str( cbl_file_mode_t mode
*** 427,433 ****
    case file_mode_any_e:    return "file_mode_any_e";
    }
    return "???";
! };
  
  enum module_type_t {
    module_activating_e,
--- 432,438 ----
    case file_mode_any_e:    return "file_mode_any_e";
    }
    return "???";
! }
  
  enum module_type_t {
    module_activating_e,
diff -Nrcpad gcc-17-20260510/libgcobol/gcobolio.h gcc-17-20260517/libgcobol/gcobolio.h
*** gcc-17-20260510/libgcobol/gcobolio.h	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/gcobolio.h	Sun May 17 22:32:14 2026
*************** typedef struct cblc_field_t
*** 65,70 ****
--- 65,85 ----
      int            alphabet;    // Same as cbl_field_t::codeset::language
      } cblc_field_t;
  
+ typedef struct cblc_referlet_t
+     {
+     cblc_field_t        *field;
+     size_t               offset;
+     size_t               size;
+     } cblc_referlet_t;
+ 
+ typedef struct cblc_refer_t
+     {
+     cblc_field_t        *field;
+     size_t               offset;
+     size_t               size;
+     int                  flags;
+     } cblc_refer_t;
+ 
  /*
   * Implementation details
   */
*************** typedef struct cblc_file_t
*** 133,158 ****
      int                  alphabet;         // Actually cbl_encoding_t
      } cblc_file_t;
  
- 
- /*  In various arithmetic routines implemented in libgcobol, it is oftent the
-     case that complicates lists of variables need to be conveyed.  For example,
-     "ADD A B C D GIVING E" and "ADD A TO B C D" are valid instructions.
-     
-     These treeplets (triplets of trees) were created to handle that.  */
- 
- extern cblc_field_t ** __gg__treeplet_1f;
- extern size_t       *  __gg__treeplet_1o;
- extern size_t       *  __gg__treeplet_1s;
- extern cblc_field_t ** __gg__treeplet_2f;
- extern size_t       *  __gg__treeplet_2o;
- extern size_t       *  __gg__treeplet_2s;
- extern cblc_field_t ** __gg__treeplet_3f;
- extern size_t       *  __gg__treeplet_3o;
- extern size_t       *  __gg__treeplet_3s;
- extern cblc_field_t ** __gg__treeplet_4f;
- extern size_t       *  __gg__treeplet_4o;
- extern size_t       *  __gg__treeplet_4s;
- 
- extern int *        __gg__fourplet_flags;
- 
  #endif
--- 148,151 ----
diff -Nrcpad gcc-17-20260510/libgcobol/gmath.cc gcc-17-20260517/libgcobol/gmath.cc
*** gcc-17-20260510/libgcobol/gmath.cc	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/gmath.cc	Sun May 17 22:32:14 2026
*************** extern "C"
*** 257,281 ****
  void
  __gg__pow(  cbl_arith_format_t,
              size_t,
              size_t,
              size_t,
        const cbl_round_t  *rounded,
              int           on_error_flag,
              int          *compute_error
              )
    {
!         cblc_field_t **A  = __gg__treeplet_1f;
!   const size_t       *A_o = __gg__treeplet_1o;
!   const size_t       *A_s = __gg__treeplet_1s;
!         cblc_field_t **B  = __gg__treeplet_2f;
!   const size_t       *B_o = __gg__treeplet_2o;
!   const size_t       *B_s = __gg__treeplet_2s;
!         cblc_field_t **C  = __gg__treeplet_3f;
!   const size_t       *C_o = __gg__treeplet_3o;
!   const size_t       *C_s = __gg__treeplet_3s;
! 
!   GCOB_FP128 avalue = __gg__float128_from_qualified_field(A[0], A_o[0], A_s[0]);
!   GCOB_FP128 bvalue = __gg__float128_from_qualified_field(B[0], B_o[0], B_s[0]);
    GCOB_FP128 tgt_value;
  
    if( avalue == 0 && bvalue == 0 )
--- 257,274 ----
  void
  __gg__pow(  cbl_arith_format_t,
              size_t,
+       const cblc_referlet_t *A,
              size_t,
+       const cblc_referlet_t *B,
              size_t,
+       const cblc_referlet_t *C,
        const cbl_round_t  *rounded,
              int           on_error_flag,
              int          *compute_error
              )
    {
!   GCOB_FP128 avalue = __gg__float128_from_qualified_field(A[0].field, A[0].offset, A[0].size);
!   GCOB_FP128 bvalue = __gg__float128_from_qualified_field(B[0].field, B[0].offset, B[0].size);
    GCOB_FP128 tgt_value;
  
    if( avalue == 0 && bvalue == 0 )
*************** __gg__pow(  cbl_arith_format_t,
*** 310,318 ****
      }
    if( !(*compute_error & compute_error_exp_minus_by_frac) )
      {
!     *compute_error |= conditional_stash(C[0],
!                                         C_o[0],
!                                         C_s[0],
                                          (on_error_flag & ON_SIZE_ERROR),
                                          tgt_value,
                                          *rounded);
--- 303,311 ----
      }
    if( !(*compute_error & compute_error_exp_minus_by_frac) )
      {
!     *compute_error |= conditional_stash(C[0].field,
!                                         C[0].offset,
!                                         C[0].size,
                                          (on_error_flag & ON_SIZE_ERROR),
                                          tgt_value,
                                          *rounded);
*************** extern "C"
*** 584,591 ****
--- 577,587 ----
  void
  __gg__add_fixed_phase1( cbl_arith_format_t ,
                          size_t nA,
+                   const cblc_referlet_t *AA,
                          size_t ,
+                         cblc_referlet_t *,
                          size_t ,
+                         cblc_referlet_t *,
                    const cbl_round_t  *,
                          int           ,
                          int          *compute_error
*************** __gg__add_fixed_phase1( cbl_arith_format
*** 595,606 ****
  
    // The result goes into the temporary phase1_result.
  
-         cblc_field_t **A  = __gg__treeplet_1f;
-   const size_t       *A_o = __gg__treeplet_1o;
-   const size_t       *A_s = __gg__treeplet_1s;
- 
    // Let us prime the pump with the first value of A[]
!   get_int256_from_qualified_field(phase1_result, phase1_rdigits, A[0], A_o[0], A_s[0]);
  
    // We now go into a loop adding each of the A[] values to phase1_result:
  
--- 591,598 ----
  
    // The result goes into the temporary phase1_result.
  
    // Let us prime the pump with the first value of A[]
!   get_int256_from_qualified_field(phase1_result, phase1_rdigits, AA[0].field, AA[0].offset, AA[0].size);
  
    // We now go into a loop adding each of the A[] values to phase1_result:
  
*************** __gg__add_fixed_phase1( cbl_arith_format
*** 608,614 ****
      {
      int temp_rdigits;
      int256 temp = {};
!     get_int256_from_qualified_field(temp, temp_rdigits, A[i], A_o[i], A_s[i]);
  
      // We have to scale the one with fewer rdigits to match the one with greater
      // rdigits:
--- 600,606 ----
      {
      int temp_rdigits;
      int256 temp = {};
!     get_int256_from_qualified_field(temp, temp_rdigits, AA[i].field, AA[i].offset, AA[i].size);
  
      // We have to scale the one with fewer rdigits to match the one with greater
      // rdigits:
*************** extern "C"
*** 640,662 ****
  void
  __gg__addf1_fixed_phase2( cbl_arith_format_t ,
                            size_t ,
                            size_t ,
                            size_t ,
                      const cbl_round_t  *rounded,
                            int           on_error_flag,
                            int          *compute_error
                            )
    {
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    // This is the assignment phase of an ADD Format 1
  
    // We take phase1_result and accumulate it into C
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
!   if( C[0]->type == FldFloat)
      {
      // The target we need to accumulate into is a floating-point number, so we
      // need to convert our fixed-point intermediate into floating point and
--- 632,653 ----
  void
  __gg__addf1_fixed_phase2( cbl_arith_format_t ,
                            size_t ,
+                           cblc_referlet_t *,
                            size_t ,
+                           cblc_referlet_t *,
                            size_t ,
+                     const cblc_referlet_t *C,
                      const cbl_round_t  *rounded,
                            int           on_error_flag,
                            int          *compute_error
                            )
    {
    // This is the assignment phase of an ADD Format 1
  
    // We take phase1_result and accumulate it into C
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
!   if( C[0].field->type == FldFloat)
      {
      // The target we need to accumulate into is a floating-point number, so we
      // need to convert our fixed-point intermediate into floating point and
*************** __gg__addf1_fixed_phase2( cbl_arith_form
*** 667,678 ****
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
!     GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
  
      value_a += value_b;
  
      // At this point, we assign running_sum to *C.
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          value_a,
                                          *rounded++);
--- 658,673 ----
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
!     GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[0].field,
!                                                              C[0].offset,
!                                                              C[0].size);
  
      value_a += value_b;
  
      // At this point, we assign running_sum to *C.
!     *compute_error |= conditional_stash(C[0].field,
!                                         C[0].offset,
!                                         C[0].size,
                                          on_size_error,
                                          value_a,
                                          *rounded++);
*************** __gg__addf1_fixed_phase2( cbl_arith_form
*** 687,696 ****
      int256 value_b = {};
      int rdigits_b;
  
!     get_int256_from_qualified_field(value_b, rdigits_b, C[0], C_o[0], C_s[0]);
  
!     // We have to scale the one with fewer rdigits to match the one with greater
!     // rdigits:
      if( rdigits_a > rdigits_b )
        {
        scale_int256_by_digits(value_b, rdigits_a - rdigits_b);
--- 682,695 ----
      int256 value_b = {};
      int rdigits_b;
  
!     get_int256_from_qualified_field(value_b,
!                                     rdigits_b,
!                                     C[0].field,
!                                     C[0].offset,
!                                     C[0].size);
  
!     // We have to scale the one with fewer rdigits to match the one with
!     // greater rdigits:
      if( rdigits_a > rdigits_b )
        {
        scale_int256_by_digits(value_b, rdigits_a - rdigits_b);
*************** __gg__addf1_fixed_phase2( cbl_arith_form
*** 712,718 ****
        }
  
        // At this point, we assign running_sum to *C.
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          value_a.i128[0],
                                          rdigits_a,
--- 711,719 ----
        }
  
        // At this point, we assign running_sum to *C.
!     *compute_error |= conditional_stash(C[0].field,
!                                         C[0].offset,
!                                         C[0].size,
                                          on_size_error,
                                          value_a.i128[0],
                                          rdigits_a,
*************** extern "C"
*** 724,731 ****
--- 725,735 ----
  void
  __gg__fixed_phase2_assign_to_c( cbl_arith_format_t ,
                                  size_t ,
+                                 cblc_referlet_t *,
                                  size_t ,
+                                 cblc_referlet_t *,
                                  size_t ,
+                           const cblc_referlet_t *CC,
                            const cbl_round_t  *rounded,
                                  int           on_error_flag,
                                  int          *compute_error
*************** __gg__fixed_phase2_assign_to_c( cbl_arit
*** 733,747 ****
    {
    // This is the assignment phase of an ADD or SUBTRACT Format 2
  
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
- 
    // We take phase1_result and put it into C
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
!   if( C[0]->type == FldFloat)
      {
      // The target we need to accumulate into is a floating-point number, so we
      // need to convert our fixed-point intermediate into floating point and
--- 737,746 ----
    {
    // This is the assignment phase of an ADD or SUBTRACT Format 2
  
    // We take phase1_result and put it into C
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
!   if( CC[0].field->type == FldFloat)
      {
      // The target we need to accumulate into is a floating-point number, so we
      // need to convert our fixed-point intermediate into floating point and
*************** __gg__fixed_phase2_assign_to_c( cbl_arit
*** 751,757 ****
      GCOB_FP128 value_a = (GCOB_FP128)phase1_result.i128[0];
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          value_a,
                                         *rounded++);
--- 750,756 ----
      GCOB_FP128 value_a = (GCOB_FP128)phase1_result.i128[0];
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
!     *compute_error |= conditional_stash(CC[0].field, CC[0].offset, CC[0].size,
                                          on_size_error,
                                          value_a,
                                         *rounded++);
*************** __gg__fixed_phase2_assign_to_c( cbl_arit
*** 769,775 ****
        *compute_error |= compute_error_overflow;
        }
  
!     if( C[0]->type == FldPointer )
        {
        // In case somebody does pointer arithmetic that goes negative, we need
        // to make the top 64 bits positive.  Otherwise, the conditional stash
--- 768,774 ----
        *compute_error |= compute_error_overflow;
        }
  
!     if( CC[0].field->type == FldPointer )
        {
        // In case somebody does pointer arithmetic that goes negative, we need
        // to make the top 64 bits positive.  Otherwise, the conditional stash
*************** __gg__fixed_phase2_assign_to_c( cbl_arit
*** 779,785 ****
        }
  
        // At this point, we assign that value to *C.
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          value_a.i128[0],
                                          rdigits_a,
--- 778,784 ----
        }
  
        // At this point, we assign that value to *C.
!     *compute_error |= conditional_stash(CC[0].field, CC[0].offset, CC[0].size,
                                          on_size_error,
                                          value_a.i128[0],
                                          rdigits_a,
*************** extern "C"
*** 791,798 ****
--- 790,800 ----
  void
  __gg__add_float_phase1( cbl_arith_format_t ,
                          size_t nA,
+                   const cblc_referlet_t *A,
                          size_t ,
+                         cblc_referlet_t *,
                          size_t ,
+                         cblc_referlet_t *,
                    const cbl_round_t  *,
                          int           ,
                          int          *compute_error
*************** __gg__add_float_phase1( cbl_arith_format
*** 802,819 ****
  
    // The result goes into the temporary phase1_result_ffloat.
  
-         cblc_field_t **A  = __gg__treeplet_1f;
-   const size_t       *A_o = __gg__treeplet_1o;
-   const size_t       *A_s = __gg__treeplet_1s;
- 
    // Let us prime the pump with the first value of A[]
!   phase1_result_float = __gg__float128_from_qualified_field(A[0], A_o[0], A_s[0]);
  
    // We now go into a loop adding each of the A[] values to phase1_result_flt:
  
    for( size_t i=1; i<nA; i++ )
      {
!     GCOB_FP128 temp = __gg__float128_from_qualified_field(A[i], A_o[i], A_s[i]);
      phase1_result_float = addition_helper_float(phase1_result_float,
                                                  temp,
                                                  compute_error);
--- 804,817 ----
  
    // The result goes into the temporary phase1_result_ffloat.
  
    // Let us prime the pump with the first value of A[]
!   phase1_result_float = __gg__float128_from_qualified_field(A[0].field, A[0].offset, A[0].size);
  
    // We now go into a loop adding each of the A[] values to phase1_result_flt:
  
    for( size_t i=1; i<nA; i++ )
      {
!     GCOB_FP128 temp = __gg__float128_from_qualified_field(A[i].field, A[i].offset, A[i].size);
      phase1_result_float = addition_helper_float(phase1_result_float,
                                                  temp,
                                                  compute_error);
*************** extern "C"
*** 824,847 ****
  void
  __gg__addf1_float_phase2( cbl_arith_format_t ,
                            size_t ,
                            size_t ,
                            size_t ,
                      const cbl_round_t  *rounded,
                            int           on_error_flag,
                            int          *compute_error
                            )
    {
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    // This is the assignment phase of an ADD Format 2
    // We take phase1_result and accumulate it into C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
    temp = addition_helper_float(temp, phase1_result_float, compute_error);
!   *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                        on_size_error,
                                        temp,
                                       *rounded++);
--- 822,844 ----
  void
  __gg__addf1_float_phase2( cbl_arith_format_t ,
                            size_t ,
+                           cblc_referlet_t *,
                            size_t ,
+                           cblc_referlet_t *,
                            size_t ,
+                     const cblc_referlet_t *C,
                      const cbl_round_t  *rounded,
                            int           on_error_flag,
                            int          *compute_error
                            )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    // This is the assignment phase of an ADD Format 2
    // We take phase1_result and accumulate it into C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
    temp = addition_helper_float(temp, phase1_result_float, compute_error);
!   *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                        on_size_error,
                                        temp,
                                       *rounded++);
*************** extern "C"
*** 851,872 ****
  void
  __gg__float_phase2_assign_to_c( cbl_arith_format_t ,
                            size_t ,
                            size_t ,
                            size_t ,
                      const cbl_round_t  *rounded,
                            int           on_error_flag,
                            int          *compute_error
                            )
    {
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    // This is the assignment phase of an ADD Format 2
      // We take phase1_result and put it into C
  
!   *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                        on_size_error,
                                        phase1_result_float,
                                       *rounded++);
--- 848,868 ----
  void
  __gg__float_phase2_assign_to_c( cbl_arith_format_t ,
                            size_t ,
+                           cblc_referlet_t *,
                            size_t ,
+                           cblc_referlet_t *,
                            size_t ,
+                     const cblc_referlet_t *C,
                      const cbl_round_t  *rounded,
                            int           on_error_flag,
                            int          *compute_error
                            )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    // This is the assignment phase of an ADD Format 2
      // We take phase1_result and put it into C
  
!   *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                        on_size_error,
                                        phase1_result_float,
                                       *rounded++);
*************** extern "C"
*** 876,883 ****
--- 872,882 ----
  void
  __gg__addf3(cbl_arith_format_t ,
              size_t nA,
+        const cblc_referlet_t *A,
              size_t ,
+             cblc_referlet_t *,
              size_t ,
+        const cblc_referlet_t *C,
        const cbl_round_t  *rounded,
              int           on_error_flag,
              int          *compute_error
*************** __gg__addf3(cbl_arith_format_t ,
*** 886,912 ****
    // This is an ADD Format 3.  Each A[i] gets accumulated into each C[i].  When
    // both are fixed, we do fixed arithmetic.  When either is a FldFloat, we
    // do floating-point arithmetic.
-         cblc_field_t **A  = __gg__treeplet_1f;
-   const size_t       *A_o = __gg__treeplet_1o;
-   const size_t       *A_s = __gg__treeplet_1s;
- 
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
    for(size_t i=0; i<nA; i++)
      {
!     if( A[i]->type == FldFloat || C[i]->type == FldFloat )
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i], A_o[i], A_s[i]);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i], C_o[i], C_s[i]);
  
        value_a = addition_helper_float(value_a, value_b, compute_error);
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                            on_size_error,
                                            value_a,
                                            *rounded++);
--- 885,903 ----
    // This is an ADD Format 3.  Each A[i] gets accumulated into each C[i].  When
    // both are fixed, we do fixed arithmetic.  When either is a FldFloat, we
    // do floating-point arithmetic.
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
    for(size_t i=0; i<nA; i++)
      {
!     if( A[i].field->type == FldFloat || C[i].field->type == FldFloat )
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i].field, A[i].offset, A[i].size);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i].field, C[i].offset, C[i].size);
  
        value_a = addition_helper_float(value_a, value_b, compute_error);
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
                                            value_a,
                                            *rounded++);
*************** __gg__addf3(cbl_arith_format_t ,
*** 920,927 ****
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a, rdigits_a, A[i], A_o[i], A_s[i]);
!       get_int256_from_qualified_field(value_b, rdigits_b, C[i], C_o[i], C_s[i]);
  
        // We have to scale the one with fewer rdigits to match the one with greater
        // rdigits:
--- 911,918 ----
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a, rdigits_a, A[i].field, A[i].offset, A[i].size);
!       get_int256_from_qualified_field(value_b, rdigits_b, C[i].field, C[i].offset, C[i].size);
  
        // We have to scale the one with fewer rdigits to match the one with greater
        // rdigits:
*************** __gg__addf3(cbl_arith_format_t ,
*** 946,952 ****
          }
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                            on_size_error,
                                            value_a.i128[0],
                                            rdigits_a,
--- 937,943 ----
          }
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
                                            value_a.i128[0],
                                            rdigits_a,
*************** extern "C"
*** 959,981 ****
  void
  __gg__subtractf1_fixed_phase2(cbl_arith_format_t ,
                                size_t ,
                                size_t ,
                                size_t ,
                          const cbl_round_t  *rounded,
                                int           on_error_flag,
                                int          *compute_error
                                )
    {
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    // This is the assignment phase of an ADD Format 1
  
    // We take phase1_result and subtrace it from C
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
!   if( C[0]->type == FldFloat)
      {
      // The target we need to accumulate into is a floating-point number, so we
      // need to convert our fixed-point intermediate into floating point and
--- 950,971 ----
  void
  __gg__subtractf1_fixed_phase2(cbl_arith_format_t ,
                                size_t ,
+                               cblc_referlet_t *,
                                size_t ,
+                               cblc_referlet_t *,
                                size_t ,
+                         const cblc_referlet_t *C,
                          const cbl_round_t  *rounded,
                                int           on_error_flag,
                                int          *compute_error
                                )
    {
    // This is the assignment phase of an ADD Format 1
  
    // We take phase1_result and subtrace it from C
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
!   if( C[0].field->type == FldFloat)
      {
      // The target we need to accumulate into is a floating-point number, so we
      // need to convert our fixed-point intermediate into floating point and
*************** __gg__subtractf1_fixed_phase2(cbl_arith_
*** 986,997 ****
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
!     GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
  
      value_b -= value_a;
  
      // At this point, we assign the difference to *C.
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          value_b,
                                          *rounded++);
--- 976,987 ----
      value_a /= __gg__power_of_ten(phase1_rdigits);
  
      // Pick up the target
!     GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
  
      value_b -= value_a;
  
      // At this point, we assign the difference to *C.
!     *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                          on_size_error,
                                          value_b,
                                          *rounded++);
*************** __gg__subtractf1_fixed_phase2(cbl_arith_
*** 1006,1012 ****
      int256 value_b = {};
      int rdigits_b;
  
!     get_int256_from_qualified_field(value_b, rdigits_b, C[0], C_o[0], C_s[0]);
  
      // We have to scale the one with fewer rdigits to match the one with greater
      // rdigits:
--- 996,1002 ----
      int256 value_b = {};
      int rdigits_b;
  
!     get_int256_from_qualified_field(value_b, rdigits_b, C[0].field, C[0].offset, C[0].size);
  
      // We have to scale the one with fewer rdigits to match the one with greater
      // rdigits:
*************** __gg__subtractf1_fixed_phase2(cbl_arith_
*** 1031,1037 ****
        }
  
        // At this point, we assign running_sum to *C.
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          value_b.i128[0],
                                          rdigits_b,
--- 1021,1027 ----
        }
  
        // At this point, we assign running_sum to *C.
!     *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                          on_size_error,
                                          value_b.i128[0],
                                          rdigits_b,
*************** extern "C"
*** 1043,1050 ****
--- 1033,1043 ----
  void
  __gg__subtractf2_fixed_phase1(cbl_arith_format_t ,
                                size_t nA,
+                         const cblc_referlet_t *AA,
                                size_t ,
+                         const cblc_referlet_t *BB,
                                size_t ,
+                               cblc_referlet_t *,
                          const cbl_round_t  *rounded,
                                int           on_error_flag,
                                int          *compute_error
*************** __gg__subtractf2_fixed_phase1(cbl_arith_
*** 1052,1066 ****
    {
    // This is the calculation phase of a fixed-point SUBTRACT Format 2
  
-         cblc_field_t **B  = __gg__treeplet_2f;
-   const size_t       *B_o = __gg__treeplet_2o;
-   const size_t       *B_s = __gg__treeplet_2s;
- 
    // Add up all the A values
    __gg__add_fixed_phase1( not_expected_e ,
                            nA,
                            0,
                            0,
                            rounded,
                            on_error_flag,
                            compute_error);
--- 1045,1058 ----
    {
    // This is the calculation phase of a fixed-point SUBTRACT Format 2
  
    // Add up all the A values
    __gg__add_fixed_phase1( not_expected_e ,
                            nA,
+                           AA,
                            0,
+                           NULL,
                            0,
+                           NULL,
                            rounded,
                            on_error_flag,
                            compute_error);
*************** __gg__subtractf2_fixed_phase1(cbl_arith_
*** 1073,1079 ****
    int256 value_b = {};
    int rdigits_b;
  
!   get_int256_from_qualified_field(value_b, rdigits_b, B[0], B_o[0], B_s[0]);
  
    // We have to scale the one with fewer rdigits to match the one with greater
    // rdigits:
--- 1065,1071 ----
    int256 value_b = {};
    int rdigits_b;
  
!   get_int256_from_qualified_field(value_b, rdigits_b, BB[0].field, BB[0].offset, BB[0].size);
  
    // We have to scale the one with fewer rdigits to match the one with greater
    // rdigits:
*************** extern "C"
*** 1104,1127 ****
  void
  __gg__subtractf1_float_phase2(cbl_arith_format_t ,
                                size_t ,
                                size_t ,
                                size_t ,
                          const cbl_round_t  *rounded,
                                int           on_error_flag,
                                int          *compute_error
                                )
    {
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    // This is the assignment phase of an SUBTRACT Format 2
    // We take phase1_result and subtract it from C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
    temp = subtraction_helper_float(temp, phase1_result_float, compute_error);
!   *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                        on_size_error,
                                        temp,
                                       *rounded++);
--- 1096,1118 ----
  void
  __gg__subtractf1_float_phase2(cbl_arith_format_t ,
                                size_t ,
+                               cblc_referlet_t *,
                                size_t ,
+                               cblc_referlet_t *,
                                size_t ,
+                         const cblc_referlet_t *C,
                          const cbl_round_t  *rounded,
                                int           on_error_flag,
                                int          *compute_error
                                )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    // This is the assignment phase of an SUBTRACT Format 2
    // We take phase1_result and subtract it from C
  
!   GCOB_FP128 temp = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
    temp = subtraction_helper_float(temp, phase1_result_float, compute_error);
!   *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                        on_size_error,
                                        temp,
                                       *rounded++);
*************** extern "C"
*** 1131,1138 ****
--- 1122,1132 ----
  void
  __gg__subtractf2_float_phase1(cbl_arith_format_t ,
                                size_t nA,
+                         const cblc_referlet_t *A,
                                size_t ,
+                         const cblc_referlet_t *B,
                                size_t ,
+                               cblc_referlet_t *,
                          const cbl_round_t  *rounded,
                                int           on_error_flag,
                                int          *compute_error
*************** __gg__subtractf2_float_phase1(cbl_arith_
*** 1140,1163 ****
    {
    // This is the calculation phase of a fixed-point SUBTRACT Format 2
  
-         cblc_field_t **B  = __gg__treeplet_2f;
-   const size_t       *B_o = __gg__treeplet_2o;
-   const size_t       *B_s = __gg__treeplet_2s;
- 
    // Add up all the A values
    __gg__add_float_phase1( not_expected_e ,
                            nA,
                            0,
                            0,
                            rounded,
                            on_error_flag,
                            compute_error
                            );
  
    // Subtract that subtotal from the B value:
!   GCOB_FP128 value_b = __gg__float128_from_qualified_field(B[0], B_o[0], B_s[0]);
! 
! 
    phase1_result_float = subtraction_helper_float(value_b, phase1_result_float, compute_error);
    }
  
--- 1134,1154 ----
    {
    // This is the calculation phase of a fixed-point SUBTRACT Format 2
  
    // Add up all the A values
    __gg__add_float_phase1( not_expected_e ,
                            nA,
+                           A,
                            0,
+                           NULL,
                            0,
+                           NULL,
                            rounded,
                            on_error_flag,
                            compute_error
                            );
  
    // Subtract that subtotal from the B value:
!   GCOB_FP128 value_b = __gg__float128_from_qualified_field(B[0].field, B[0].offset, B[0].size);
    phase1_result_float = subtraction_helper_float(value_b, phase1_result_float, compute_error);
    }
  
*************** extern "C"
*** 1165,1172 ****
--- 1156,1166 ----
  void
  __gg__subtractf3( cbl_arith_format_t ,
                    size_t nA,
+             const cblc_referlet_t *A,
                    size_t ,
+                   cblc_referlet_t *,
                    size_t ,
+             const cblc_referlet_t *C,
              const cbl_round_t  *rounded,
                    int           on_error_flag,
                    int          *compute_error
*************** __gg__subtractf3( cbl_arith_format_t ,
*** 1175,1200 ****
    // This is an ADD Format 3.  Each A[i] gets accumulated into each C[i].  Each
    // SUBTRACTION is treated separately.
  
-         cblc_field_t **A  = __gg__treeplet_1f;
-   const size_t       *A_o = __gg__treeplet_1o;
-   const size_t       *A_s = __gg__treeplet_1s;
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
    for(size_t i=0; i<nA; i++)
      {
!     if( A[i]->type == FldFloat || C[i]->type == FldFloat)
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i], A_o[i], A_s[i]);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i], C_o[i], C_s[i]);
  
        value_b = subtraction_helper_float(value_b, value_a, compute_error);
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                            on_size_error,
                                            value_b,
                                            *rounded++);
--- 1169,1187 ----
    // This is an ADD Format 3.  Each A[i] gets accumulated into each C[i].  Each
    // SUBTRACTION is treated separately.
  
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
    for(size_t i=0; i<nA; i++)
      {
!     if( A[i].field->type == FldFloat || C[i].field->type == FldFloat)
        {
!       GCOB_FP128 value_a = __gg__float128_from_qualified_field(A[i].field, A[i].offset, A[i].size);
!       GCOB_FP128 value_b = __gg__float128_from_qualified_field(C[i].field, C[i].offset, C[i].size);
  
        value_b = subtraction_helper_float(value_b, value_a, compute_error);
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
                                            value_b,
                                            *rounded++);
*************** __gg__subtractf3( cbl_arith_format_t ,
*** 1208,1215 ****
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a, rdigits_a, A[i], A_o[i], A_s[i]);
!       get_int256_from_qualified_field(value_b, rdigits_b, C[i], C_o[i], C_s[i]);
  
        // We have to scale the one with fewer rdigits to match the one with greater
        // rdigits:
--- 1195,1202 ----
        int256 value_b;
        int rdigits_b;
  
!       get_int256_from_qualified_field(value_a, rdigits_a, A[i].field, A[i].offset, A[i].size);
!       get_int256_from_qualified_field(value_b, rdigits_b, C[i].field, C[i].offset, C[i].size);
  
        // We have to scale the one with fewer rdigits to match the one with greater
        // rdigits:
*************** __gg__subtractf3( cbl_arith_format_t ,
*** 1235,1241 ****
          }
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                            on_size_error,
                                            value_b.i128[0],
                                            rdigits_b,
--- 1222,1228 ----
          }
  
          // At this point, we assign the sum to *C.
!       *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
                                            value_b.i128[0],
                                            rdigits_b,
*************** extern "C"
*** 1253,1260 ****
--- 1240,1250 ----
  void
  __gg__multiplyf1_phase1(cbl_arith_format_t ,
                          size_t ,
+                   const cblc_referlet_t *A,
                          size_t ,
+                         cblc_referlet_t *,
                          size_t ,
+                         cblc_referlet_t *,
                    const cbl_round_t  *,
                          int           ,
                          int          *)
*************** __gg__multiplyf1_phase1(cbl_arith_format
*** 1262,1286 ****
    // We are getting just the one value, which we are converting to the necessary
    // intermediate form
  
!         cblc_field_t **A  = __gg__treeplet_1f;
!   const size_t       *A_o = __gg__treeplet_1o;
!   const size_t       *A_s = __gg__treeplet_1s;
! 
!   if( A[0]->type == FldFloat )
      {
      multiply_intermediate_is_float = true;
!     multiply_intermediate_float = __gg__float128_from_qualified_field(A[0],
!                                                                       A_o[0],
!                                                                       A_s[0]);
      }
    else
      {
      multiply_intermediate_is_float = false;
      multiply_intermediate_int128 =
           __gg__binary_value_from_qualified_field(&multiply_intermediate_rdigits,
!                                                  A[0],
!                                                  A_o[0],
!                                                  A_s[0]);
      }
    }
  
--- 1252,1272 ----
    // We are getting just the one value, which we are converting to the necessary
    // intermediate form
  
!   if( A[0].field->type == FldFloat )
      {
      multiply_intermediate_is_float = true;
!     multiply_intermediate_float = __gg__float128_from_qualified_field(A[0].field,
!                                                                       A[0].offset,
!                                                                       A[0].size);
      }
    else
      {
      multiply_intermediate_is_float = false;
      multiply_intermediate_int128 =
           __gg__binary_value_from_qualified_field(&multiply_intermediate_rdigits,
!                                                  A[0].field,
!                                                  A[0].offset,
!                                                  A[0].size);
      }
    }
  
*************** extern "C"
*** 1348,1364 ****
  void
  __gg__multiplyf1_phase2(cbl_arith_format_t ,
                          size_t ,
                          size_t ,
                          size_t ,
                    const cbl_round_t  *rounded,
                          int           on_error_flag,
                          int          *compute_error
                          )
    {
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
--- 1334,1349 ----
  void
  __gg__multiplyf1_phase2(cbl_arith_format_t ,
                          size_t ,
+                         cblc_referlet_t *,
                          size_t ,
+                         cblc_referlet_t *,
                          size_t ,
+                   const cblc_referlet_t *C,
                    const cbl_round_t  *rounded,
                          int           on_error_flag,
                          int          *compute_error
                          )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1368,1388 ****
    if( multiply_intermediate_is_float )
      {
      a_value = multiply_intermediate_float;
!     if( C[0]->type == FldFloat )
        {
!       b_value = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
        goto float_float;
        }
      else
        {
        // float times fixed
!       b_value = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
        goto float_float;
        }
      }
    else
      {
!     if( C[0]->type == FldFloat )
        {
        // fixed * float
        a_value = (GCOB_FP128) multiply_intermediate_int128;
--- 1353,1373 ----
    if( multiply_intermediate_is_float )
      {
      a_value = multiply_intermediate_float;
!     if( C[0].field->type == FldFloat )
        {
!       b_value = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
        goto float_float;
        }
      else
        {
        // float times fixed
!       b_value = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
        goto float_float;
        }
      }
    else
      {
!     if( C[0].field->type == FldFloat )
        {
        // fixed * float
        a_value = (GCOB_FP128) multiply_intermediate_int128;
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1390,1396 ****
          {
          a_value /= (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
!       b_value = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
        goto float_float;
        }
      else
--- 1375,1381 ----
          {
          a_value /= (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
!       b_value = __gg__float128_from_qualified_field(C[0].field, C[0].offset, C[0].size);
        goto float_float;
        }
      else
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1402,1408 ****
  
        int cd_rdigits;
        __int128 ab_value = multiply_intermediate_int128;
!       __int128 cd_value = __gg__binary_value_from_qualified_field(&cd_rdigits, C[0], C_o[0], C_s[0]);
  
        int256 ABCD;
        int rdigits = multiply_intermediate_rdigits + cd_rdigits;
--- 1387,1393 ----
  
        int cd_rdigits;
        __int128 ab_value = multiply_intermediate_int128;
!       __int128 cd_value = __gg__binary_value_from_qualified_field(&cd_rdigits, C[0].field, C[0].offset, C[0].size);
  
        int256 ABCD;
        int rdigits = multiply_intermediate_rdigits + cd_rdigits;
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1415,1421 ****
          *compute_error |= compute_error_overflow;
          }
          // At this point, we assign running_sum to *C.
!       *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                            on_size_error,
                                            ABCD.i128[0],
                                            rdigits,
--- 1400,1406 ----
          *compute_error |= compute_error_overflow;
          }
          // At this point, we assign running_sum to *C.
!       *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                            on_size_error,
                                            ABCD.i128[0],
                                            rdigits,
*************** __gg__multiplyf1_phase2(cbl_arith_format
*** 1434,1440 ****
      }
    else
      {
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          a_value,
                                          *rounded);
--- 1419,1425 ----
      }
    else
      {
!     *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                          on_size_error,
                                          a_value,
                                          *rounded);
*************** extern "C"
*** 1447,1469 ****
  void
  __gg__multiplyf2( cbl_arith_format_t ,
                    size_t ,
                    size_t ,
                    size_t nC,
              const cbl_round_t  *rounded,
                    int           on_error_flag,
                    int          *compute_error
                    )
    {
-         cblc_field_t **A  = __gg__treeplet_1f;
-   const size_t       *A_o = __gg__treeplet_1o;
-   const size_t       *A_s = __gg__treeplet_1s;
-         cblc_field_t **B  = __gg__treeplet_2f;
-   const size_t       *B_o = __gg__treeplet_2o;
-   const size_t       *B_s = __gg__treeplet_2s;
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
    bool      got_float = false;
--- 1432,1447 ----
  void
  __gg__multiplyf2( cbl_arith_format_t ,
                    size_t ,
+             const cblc_referlet_t *A,
                    size_t ,
+             const cblc_referlet_t *B,
                    size_t nC,
+             const cblc_referlet_t *C,
              const cbl_round_t  *rounded,
                    int           on_error_flag,
                    int          *compute_error
                    )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
  
    bool      got_float = false;
*************** __gg__multiplyf2( cbl_arith_format_t ,
*** 1471,1480 ****
    int256    product_fix;
    int       product_fix_digits;
  
!   if( A[0]->type == FldFloat || B[0]->type == FldFloat )
      {
!     GCOB_FP128 a_value = __gg__float128_from_qualified_field(A[0], A_o[0], A_s[0]);
!     GCOB_FP128 b_value = __gg__float128_from_qualified_field(B[0], B_o[0], B_s[0]);
      product_float = multiply_helper_float(a_value, b_value, compute_error);
      got_float = true;
      }
--- 1449,1458 ----
    int256    product_fix;
    int       product_fix_digits;
  
!   if( A[0].field->type == FldFloat || B[0].field->type == FldFloat )
      {
!     GCOB_FP128 a_value = __gg__float128_from_qualified_field(A[0].field, A[0].offset, A[0].size);
!     GCOB_FP128 b_value = __gg__float128_from_qualified_field(B[0].field, B[0].offset, B[0].size);
      product_float = multiply_helper_float(a_value, b_value, compute_error);
      got_float = true;
      }
*************** __gg__multiplyf2( cbl_arith_format_t ,
*** 1482,1489 ****
      {
      int a_rdigits;
      int b_rdigits;
!     __int128 a_value = __gg__binary_value_from_qualified_field(&a_rdigits, A[0], A_o[0], A_s[0]);
!     __int128 b_value = __gg__binary_value_from_qualified_field(&b_rdigits, B[0], B_o[0], B_s[0]);
      product_fix_digits = a_rdigits + b_rdigits;
      multiply_int128_by_int128(product_fix, a_value, b_value);
      int overflow = squeeze_int256(product_fix, product_fix_digits);
--- 1460,1467 ----
      {
      int a_rdigits;
      int b_rdigits;
!     __int128 a_value = __gg__binary_value_from_qualified_field(&a_rdigits, A[0].field, A[0].offset, A[0].size);
!     __int128 b_value = __gg__binary_value_from_qualified_field(&b_rdigits, B[0].field, B[0].offset, B[0].size);
      product_fix_digits = a_rdigits + b_rdigits;
      multiply_int128_by_int128(product_fix, a_value, b_value);
      int overflow = squeeze_int256(product_fix, product_fix_digits);
*************** __gg__multiplyf2( cbl_arith_format_t ,
*** 1497,1510 ****
      {
      if( got_float )
        {
!       *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                            on_size_error,
                                            product_float,
                                            *rounded++);
        }
      else
        {
!       *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                            on_size_error,
                                            product_fix.i128[0],
                                            product_fix_digits,
--- 1475,1488 ----
      {
      if( got_float )
        {
!       *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
                                            product_float,
                                            *rounded++);
        }
      else
        {
!       *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                            on_size_error,
                                            product_fix.i128[0],
                                            product_fix_digits,
*************** extern "C"
*** 1829,1845 ****
  void
  __gg__dividef1_phase2(cbl_arith_format_t ,
                        size_t ,
                        size_t ,
                        size_t ,
                  const cbl_round_t  *rounded,
                        int           on_error_flag,
                        int          *compute_error
                        )
    {
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
--- 1807,1822 ----
  void
  __gg__dividef1_phase2(cbl_arith_format_t ,
                        size_t ,
+                       cblc_referlet_t *,
                        size_t ,
+                       cblc_referlet_t *,
                        size_t ,
+                 const cblc_referlet_t *C,
                  const cbl_round_t  *rounded,
                        int           on_error_flag,
                        int          *compute_error
                        )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1849,1869 ****
    if( multiply_intermediate_is_float )
      {
      a_value = multiply_intermediate_float;
!     if( C[0]->type == FldFloat )
        {
!       b_value = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
        goto float_float;
        }
      else
        {
        // float times fixed
!       b_value = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
        goto float_float;
        }
      }
    else
      {
!     if( C[0]->type == FldFloat )
        {
        // gixed * float
        a_value = (GCOB_FP128) multiply_intermediate_int128;
--- 1826,1850 ----
    if( multiply_intermediate_is_float )
      {
      a_value = multiply_intermediate_float;
!     if( C[0].field->type == FldFloat )
        {
!       b_value = __gg__float128_from_qualified_field(C[0].field,
!                                                     C[0].offset,
!                                                     C[0].size);
        goto float_float;
        }
      else
        {
        // float times fixed
!       b_value = __gg__float128_from_qualified_field(C[0].field,
!                                                     C[0].offset,
!                                                     C[0].size);
        goto float_float;
        }
      }
    else
      {
!     if( C[0].field->type == FldFloat )
        {
        // gixed * float
        a_value = (GCOB_FP128) multiply_intermediate_int128;
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1871,1877 ****
          {
          a_value /= (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
!       b_value = __gg__float128_from_qualified_field(C[0], C_o[0], C_s[0]);
        goto float_float;
        }
      else
--- 1852,1860 ----
          {
          a_value /= (GCOB_FP128)__gg__power_of_ten(multiply_intermediate_rdigits);
          }
!       b_value = __gg__float128_from_qualified_field(C[0].field,
!                                                     C[0].offset,
!                                                     C[0].size);
        goto float_float;
        }
      else
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1882,1888 ****
        // 64-bit "digits".  We need to multiply them to create a 256-bit result
  
        int dividend_rdigits;
!       __int128 dividend = __gg__binary_value_from_qualified_field(&dividend_rdigits, C[0], C_o[0], C_s[0]);
  
        int quotient_rdigits;
        int256 quotient;
--- 1865,1875 ----
        // 64-bit "digits".  We need to multiply them to create a 256-bit result
  
        int dividend_rdigits;
!       __int128 dividend = __gg__binary_value_from_qualified_field(
!                                                   &dividend_rdigits,
!                                                   C[0].field,
!                                                   C[0].offset,
!                                                   C[0].size);
  
        int quotient_rdigits;
        int256 quotient;
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1901,1907 ****
          *compute_error |= compute_error_overflow;
          }
          // At this point, we assign the quotient to *C.
!       *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                            on_size_error,
                                            quotient.i128[0],
                                            quotient_rdigits,
--- 1888,1894 ----
          *compute_error |= compute_error_overflow;
          }
          // At this point, we assign the quotient to *C.
!       *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                            on_size_error,
                                            quotient.i128[0],
                                            quotient_rdigits,
*************** __gg__dividef1_phase2(cbl_arith_format_t
*** 1921,1927 ****
      }
    else
      {
!     *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                          on_size_error,
                                          b_value,
                                          *rounded);
--- 1908,1914 ----
      }
    else
      {
!     *compute_error |= conditional_stash(C[0].field, C[0].offset, C[0].size,
                                          on_size_error,
                                          b_value,
                                          *rounded);
*************** extern "C"
*** 1934,1966 ****
  void
  __gg__dividef23(cbl_arith_format_t ,
                  size_t ,
                  size_t ,
                  size_t nC,
            const cbl_round_t  *rounded,
                  int           on_error_flag,
                  int          *compute_error
                  )
    {
-         cblc_field_t **A  = __gg__treeplet_1f;
-   const size_t       *A_o = __gg__treeplet_1o;
-   const size_t       *A_s = __gg__treeplet_1s;
-         cblc_field_t **B  = __gg__treeplet_2f;
-   const size_t       *B_o = __gg__treeplet_2o;
-   const size_t       *B_s = __gg__treeplet_2s;
-         cblc_field_t **C  = __gg__treeplet_3f;
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
!   if( A[0]->type == FldFloat ||  B[0]->type == FldFloat  )
      {
      GCOB_FP128 a_value;
      GCOB_FP128 b_value;
      GCOB_FP128 c_value;
!     a_value = __gg__float128_from_qualified_field(A[0], A_o[0], A_s[0]);
!     b_value = __gg__float128_from_qualified_field(B[0], B_o[0], B_s[0]);
      c_value = divide_helper_float(a_value, b_value, &error_this_time);
  
      *compute_error |= error_this_time;
--- 1921,1950 ----
  void
  __gg__dividef23(cbl_arith_format_t ,
                  size_t ,
+           const cblc_referlet_t *A,
                  size_t ,
+           const cblc_referlet_t *B,
                  size_t nC,
+           const cblc_referlet_t *C,
            const cbl_round_t  *rounded,
                  int           on_error_flag,
                  int          *compute_error
                  )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
!   if( A[0].field->type == FldFloat ||  B[0].field->type == FldFloat  )
      {
      GCOB_FP128 a_value;
      GCOB_FP128 b_value;
      GCOB_FP128 c_value;
!     a_value = __gg__float128_from_qualified_field(A[0].field,
!                                                   A[0].offset,
!                                                   A[0].size);
!     b_value = __gg__float128_from_qualified_field(B[0].field,
!                                                   B[0].offset,
!                                                   B[0].size);
      c_value = divide_helper_float(a_value, b_value, &error_this_time);
  
      *compute_error |= error_this_time;
*************** __gg__dividef23(cbl_arith_format_t ,
*** 1968,1974 ****
        {
        for(size_t i=0; i<nC; i++)
          {
!         *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                              on_size_error,
                                              c_value,
                                              *rounded++);
--- 1952,1958 ----
        {
        for(size_t i=0; i<nC; i++)
          {
!         *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                              on_size_error,
                                              c_value,
                                              *rounded++);
*************** __gg__dividef23(cbl_arith_format_t ,
*** 1979,1989 ****
      {
      // fixed divided by fixed
      int dividend_rdigits;
!     __int128 dividend = __gg__binary_value_from_qualified_field(&dividend_rdigits, A[0], A_o[0], A_s[0]);
  
      int divisor_rdigits;
!     __int128 divisor = __gg__binary_value_from_qualified_field(&divisor_rdigits, B[0], B_o[0], B_s[0]);
! 
      int quotient_rdigits;
      int256 quotient;
  
--- 1963,1980 ----
      {
      // fixed divided by fixed
      int dividend_rdigits;
!     __int128 dividend = __gg__binary_value_from_qualified_field(
!                                                     &dividend_rdigits,
!                                                     A[0].field,
!                                                     A[0].offset,
!                                                     A[0].size);
  
      int divisor_rdigits;
!     __int128 divisor = __gg__binary_value_from_qualified_field(
!                                                     &divisor_rdigits,
!                                                     B[0].field,
!                                                     B[0].offset,
!                                                     B[0].size);
      int quotient_rdigits;
      int256 quotient;
  
*************** __gg__dividef23(cbl_arith_format_t ,
*** 2001,2007 ****
          // At this point, we assign the quotient to *C.
        for(size_t i=0; i<nC; i++)
          {
!         *compute_error |= conditional_stash(C[i], C_o[i], C_s[i],
                                              on_size_error,
                                              quotient.i128[0],
                                              quotient_rdigits,
--- 1992,1998 ----
          // At this point, we assign the quotient to *C.
        for(size_t i=0; i<nC; i++)
          {
!         *compute_error |= conditional_stash(C[i].field, C[i].offset, C[i].size,
                                              on_size_error,
                                              quotient.i128[0],
                                              quotient_rdigits,
*************** extern "C"
*** 2015,2054 ****
  void
  __gg__dividef45(cbl_arith_format_t ,
                  size_t ,
                  size_t ,
                  size_t ,
                  cbl_round_t  *rounded_p,
                  int           on_error_flag,
                  int          *compute_error
                  )
    {
-         cblc_field_t **A  = __gg__treeplet_1f;  // Numerator
-   const size_t       *A_o = __gg__treeplet_1o;
-   const size_t       *A_s = __gg__treeplet_1s;
-         cblc_field_t **B  = __gg__treeplet_2f;  // Denominator
-   const size_t       *B_o = __gg__treeplet_2o;
-   const size_t       *B_s = __gg__treeplet_2s;
-         cblc_field_t **C  = __gg__treeplet_3f;  // Has remainder, then quotient
-   const size_t       *C_o = __gg__treeplet_3o;
-   const size_t       *C_s = __gg__treeplet_3s;
- 
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
!   if( A[0]->type == FldFloat ||  B[0]->type == FldFloat  )
      {
      GCOB_FP128 a_value;
      GCOB_FP128 b_value;
      GCOB_FP128 c_value;
!     a_value = __gg__float128_from_qualified_field(A[0], A_o[0], A_s[0]);
!     b_value = __gg__float128_from_qualified_field(B[0], B_o[0], B_s[0]);
      c_value = divide_helper_float(a_value, b_value, &error_this_time);
  
      *compute_error |= error_this_time;
  
      if( !error_this_time )
        {
!       *compute_error |= conditional_stash(C[1], C_o[1], C_s[1],
                                            on_size_error,
                                            c_value,
                                            *rounded_p++);
--- 2006,2042 ----
  void
  __gg__dividef45(cbl_arith_format_t ,
                  size_t ,
+           const cblc_referlet_t *A,
                  size_t ,
+           const cblc_referlet_t *B,
                  size_t ,
+           const cblc_referlet_t *C,
                  cbl_round_t  *rounded_p,
                  int           on_error_flag,
                  int          *compute_error
                  )
    {
    bool on_size_error = !!(on_error_flag & ON_SIZE_ERROR);
    int error_this_time=0;
  
!   if( A[0].field->type == FldFloat ||  B[0].field->type == FldFloat  )
      {
      GCOB_FP128 a_value;
      GCOB_FP128 b_value;
      GCOB_FP128 c_value;
!     a_value = __gg__float128_from_qualified_field(A[0].field,
!                                                   A[0].offset,
!                                                   A[0].size);
!     b_value = __gg__float128_from_qualified_field(B[0].field,
!                                                   B[0].offset,
!                                                   B[0].size);
      c_value = divide_helper_float(a_value, b_value, &error_this_time);
  
      *compute_error |= error_this_time;
  
      if( !error_this_time )
        {
!       *compute_error |= conditional_stash(C[1].field, C[1].offset, C[1].size,
                                            on_size_error,
                                            c_value,
                                            *rounded_p++);
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2057,2063 ****
        if( !*compute_error )
          {
          c_value = 0;
!         *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                              on_size_error,
                                              c_value,
                                              *rounded_p++);
--- 2045,2051 ----
        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++);
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2068,2077 ****
      {
      // fixed divided by fixed
      int dividend_rdigits;
!     __int128 dividend = __gg__binary_value_from_qualified_field(&dividend_rdigits, A[0], A_o[0], A_s[0]);
  
      int divisor_rdigits;
!     __int128 divisor = __gg__binary_value_from_qualified_field(&divisor_rdigits, B[0], B_o[0], B_s[0]);
  
      int quotient_rdigits;
      int256 quotient;
--- 2056,2073 ----
      {
      // fixed divided by fixed
      int dividend_rdigits;
!     __int128 dividend = __gg__binary_value_from_qualified_field(
!                                               &dividend_rdigits,
!                                               A[0].field,
!                                               A[0].offset,
!                                               A[0].size);
  
      int divisor_rdigits;
!     __int128 divisor = __gg__binary_value_from_qualified_field(
!                                               &divisor_rdigits,
!                                               B[0].field,
!                                               B[0].offset,
!                                               B[0].size);
  
      int quotient_rdigits;
      int256 quotient;
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2096,2123 ****
          {
          case truncation_e:
            {
!           *compute_error |= conditional_stash(C[1], C_o[1], C_s[1],
                                                on_size_error,
                                                quotient.i128[0],
                                                quotient_rdigits,
                                                *rounded_p++);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
!                                                         &unrounded_quotient_digits,
!                                                         C[1], C_o[1], C_s[1]);
            break;
            }
          default:
            {
!           conditional_stash(C[1], C_o[1], C_s[1],
                              false,
                              quotient.i128[0],
                              quotient_rdigits,
                              truncation_e);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
!                                                         &unrounded_quotient_digits,
!                                                         C[1], C_o[1], C_s[1]);
            // At this point, we assign the rounded quotient to *C.
!           *compute_error |= conditional_stash(C[1], C_o[1], C_s[1],
                                                on_size_error,
                                                quotient.i128[0],
                                                quotient_rdigits,
--- 2092,2127 ----
          {
          case truncation_e:
            {
!           *compute_error |= conditional_stash(C[1].field,
!                                               C[1].offset,
!                                               C[1].size,
                                                on_size_error,
                                                quotient.i128[0],
                                                quotient_rdigits,
                                                *rounded_p++);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
!                                                   &unrounded_quotient_digits,
!                                                   C[1].field,
!                                                   C[1].offset,
!                                                   C[1].size);
            break;
            }
          default:
            {
!           conditional_stash(C[1].field, C[1].offset, C[1].size,
                              false,
                              quotient.i128[0],
                              quotient_rdigits,
                              truncation_e);
            unrounded_quotient = __gg__binary_value_from_qualified_field(
!                                                   &unrounded_quotient_digits,
!                                                   C[1].field,
!                                                   C[1].offset,
!                                                   C[1].size);
            // At this point, we assign the rounded quotient to *C.
!           *compute_error |= conditional_stash(C[1].field,
!                                               C[1].offset,
!                                               C[1].size,
                                                on_size_error,
                                                quotient.i128[0],
                                                quotient_rdigits,
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2171,2177 ****
  
          if( !*compute_error )
            {
!           *compute_error |= conditional_stash(C[0], C_o[0], C_s[0],
                                                on_size_error,
                                                odividend.i128[0],
                                                temp_rdigits,
--- 2175,2183 ----
  
          if( !*compute_error )
            {
!           *compute_error |= conditional_stash(C[0].field,
!                                               C[0].offset,
!                                               C[0].size,
                                                on_size_error,
                                                odividend.i128[0],
                                                temp_rdigits,
diff -Nrcpad gcc-17-20260510/libgcobol/inspect.cc gcc-17-20260517/libgcobol/inspect.cc
*** gcc-17-20260510/libgcobol/inspect.cc	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/inspect.cc	Sun May 17 22:32:14 2026
*************** the_alpha_and_omega_backward( const norm
*** 820,826 ****
  
  static
  void
! inspect_backward_format_1(const size_t integers[])
    {
    size_t int_index = 0;
    size_t cblc_index = 0;
--- 820,827 ----
  
  static
  void
! inspect_backward_format_1(const size_t integers[],
!                           const cblc_referlet_t *params)
    {
    size_t int_index = 0;
    size_t cblc_index = 0;
*************** inspect_backward_format_1(const size_t i
*** 833,841 ****
    std::vector<id_2_result> id_2_results(n_identifier_2);
  
    // Pick up identifier_1, which is the string being inspected
!   const cblc_field_t *id1   = __gg__treeplet_1f[cblc_index];
!   size_t              id1_o = __gg__treeplet_1o[cblc_index];
!   size_t              id1_s = __gg__treeplet_1s[cblc_index];
    cblc_index += 1;
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1 = normalize_id(id1, id1_o, id1_s, id1->encoding);
--- 834,842 ----
    std::vector<id_2_result> id_2_results(n_identifier_2);
  
    // Pick up identifier_1, which is the string being inspected
!   const cblc_field_t *id1   = params[cblc_index].field ;
!   size_t              id1_o = params[cblc_index].offset;
!   size_t              id1_s = params[cblc_index].size  ;
    cblc_index += 1;
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1 = normalize_id(id1, id1_o, id1_s, id1->encoding);
*************** inspect_backward_format_1(const size_t i
*** 846,854 ****
      {
      // For each identifier_2, we pick up its value:
  
!     id_2_results[i].id2   = __gg__treeplet_1f  [cblc_index];
!     id_2_results[i].id2_o = __gg__treeplet_1o[cblc_index];
!     id_2_results[i].id2_s = __gg__treeplet_1s[cblc_index];
  
      cblc_index += 1;
      id_2_results[i].result = 0;
--- 847,855 ----
      {
      // For each identifier_2, we pick up its value:
  
!     id_2_results[i].id2   = params[cblc_index].field ;
!     id_2_results[i].id2_o = params[cblc_index].offset;
!     id_2_results[i].id2_s = params[cblc_index].size  ;
  
      cblc_index += 1;
      id_2_results[i].result = 0;
*************** inspect_backward_format_1(const size_t i
*** 873,886 ****
            next_comparand.operation = operation;
            next_comparand.identifier_3.length = 1;
  
!           const cblc_field_t *id4_before   = __gg__treeplet_1f  [cblc_index];
!           size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = __gg__treeplet_1f  [cblc_index];
!           size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
--- 874,887 ----
            next_comparand.operation = operation;
            next_comparand.identifier_3.length = 1;
  
!           const cblc_field_t *id4_before   = params[cblc_index].field ;
!           size_t              id4_before_o = params[cblc_index].offset;
!           size_t              id4_before_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = params[cblc_index].field ;
!           size_t              id4_after_o = params[cblc_index].offset;
!           size_t              id4_after_s = params[cblc_index].size  ;
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
*************** inspect_backward_format_1(const size_t i
*** 923,941 ****
              next_comparand.id_2_index = i;
              next_comparand.operation = operation;
  
!             const cblc_field_t *id3   = __gg__treeplet_1f[cblc_index];
!             size_t              id3_o = __gg__treeplet_1o[cblc_index];
!             size_t              id3_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
!             const cblc_field_t *id4_before   = __gg__treeplet_1f[cblc_index];
!             size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!             size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
!             const cblc_field_t *id4_after   = __gg__treeplet_1f[cblc_index];
!             size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!             size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
              next_comparand.identifier_3
--- 924,942 ----
              next_comparand.id_2_index = i;
              next_comparand.operation = operation;
  
!             const cblc_field_t *id3   = params[cblc_index].field ;
!             size_t              id3_o = params[cblc_index].offset;
!             size_t              id3_s = params[cblc_index].size  ;
              cblc_index += 1;
  
!             const cblc_field_t *id4_before   = params[cblc_index].field ;
!             size_t              id4_before_o = params[cblc_index].offset;
!             size_t              id4_before_s = params[cblc_index].size  ;
              cblc_index += 1;
  
!             const cblc_field_t *id4_after   = params[cblc_index].field ;
!             size_t              id4_after_o = params[cblc_index].offset;
!             size_t              id4_after_s = params[cblc_index].size  ;
              cblc_index += 1;
  
              next_comparand.identifier_3
*************** inspect_backward_format_1(const size_t i
*** 1173,1183 ****
  
  extern "C"
  void
! __gg__inspect_format_1(int backward, size_t integers[])
    {
    if( backward )
      {
!     return inspect_backward_format_1(integers);
      }
  
    size_t int_index = 0;
--- 1174,1186 ----
  
  extern "C"
  void
! __gg__inspect_format_1( int backward,
!                         size_t integers[],
!                         const cblc_referlet_t *params)
    {
    if( backward )
      {
!     return inspect_backward_format_1(integers, params);
      }
  
    size_t int_index = 0;
*************** __gg__inspect_format_1(int backward, siz
*** 1191,1199 ****
    std::vector<id_2_result> id_2_results(n_identifier_2);
  
    // Pick up identifier_1, which is the string being inspected
!   const cblc_field_t *id1   = __gg__treeplet_1f[cblc_index];
!   size_t              id1_o = __gg__treeplet_1o[cblc_index];
!   size_t              id1_s = __gg__treeplet_1s[cblc_index];
    cblc_index += 1;
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1
--- 1194,1202 ----
    std::vector<id_2_result> id_2_results(n_identifier_2);
  
    // Pick up identifier_1, which is the string being inspected
!   const cblc_field_t *id1   = params[cblc_index].field ;
!   size_t              id1_o = params[cblc_index].offset;
!   size_t              id1_s = params[cblc_index].size  ;
    cblc_index += 1;
    // normalize it, according to the language specification.
    normalized_operand normalized_id_1
*************** __gg__inspect_format_1(int backward, siz
*** 1205,1213 ****
      {
      // For each identifier_2, we pick up its value:
  
!     id_2_results[i].id2   = __gg__treeplet_1f  [cblc_index];
!     id_2_results[i].id2_o = __gg__treeplet_1o[cblc_index];
!     id_2_results[i].id2_s = __gg__treeplet_1s[cblc_index];
  
      cblc_index += 1;
      id_2_results[i].result = 0;
--- 1208,1216 ----
      {
      // For each identifier_2, we pick up its value:
  
!     id_2_results[i].id2   = params[cblc_index].field ;
!     id_2_results[i].id2_o = params[cblc_index].offset;
!     id_2_results[i].id2_s = params[cblc_index].size  ;
  
      cblc_index += 1;
      id_2_results[i].result = 0;
*************** __gg__inspect_format_1(int backward, siz
*** 1232,1245 ****
            next_comparand.operation = operation;
            next_comparand.identifier_3.length = 1;
  
!           const cblc_field_t *id4_before   = __gg__treeplet_1f  [cblc_index];
!           size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = __gg__treeplet_1f  [cblc_index];
!           size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
--- 1235,1248 ----
            next_comparand.operation = operation;
            next_comparand.identifier_3.length = 1;
  
!           const cblc_field_t *id4_before   = params[cblc_index].field ;
!           size_t              id4_before_o = params[cblc_index].offset;
!           size_t              id4_before_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = params[cblc_index].field ;
!           size_t              id4_after_o = params[cblc_index].offset;
!           size_t              id4_after_s = params[cblc_index].size  ;
            cblc_index += 1;
  
            normalized_operand normalized_id_4_before
*************** __gg__inspect_format_1(int backward, siz
*** 1282,1300 ****
              next_comparand.id_2_index = i;
              next_comparand.operation = operation;
  
!             const cblc_field_t *id3   = __gg__treeplet_1f[cblc_index];
!             size_t              id3_o = __gg__treeplet_1o[cblc_index];
!             size_t              id3_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
!             const cblc_field_t *id4_before   = __gg__treeplet_1f[cblc_index];
!             size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!             size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
!             const cblc_field_t *id4_after   = __gg__treeplet_1f[cblc_index];
!             size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!             size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
              next_comparand.identifier_3
--- 1285,1303 ----
              next_comparand.id_2_index = i;
              next_comparand.operation = operation;
  
!             const cblc_field_t *id3   = params[cblc_index].field ;
!             size_t              id3_o = params[cblc_index].offset;
!             size_t              id3_s = params[cblc_index].size  ;
              cblc_index += 1;
  
!             const cblc_field_t *id4_before   = params[cblc_index].field ;
!             size_t              id4_before_o = params[cblc_index].offset;
!             size_t              id4_before_s = params[cblc_index].size  ;
              cblc_index += 1;
  
!             const cblc_field_t *id4_after   = params[cblc_index].field ;
!             size_t              id4_after_o = params[cblc_index].offset;
!             size_t              id4_after_s = params[cblc_index].size  ;
              cblc_index += 1;
  
              next_comparand.identifier_3
*************** __gg__inspect_format_1(int backward, siz
*** 1531,1537 ****
  
  static
  void
! inspect_backward_format_2(const size_t integers[])
    {
    size_t int_index = 0;
    size_t cblc_index = 0;
--- 1534,1541 ----
  
  static
  void
! inspect_backward_format_2(const size_t integers[],
!                           const cblc_referlet_t *params)
    {
    size_t int_index = 0;
    size_t cblc_index = 0;
*************** inspect_backward_format_2(const size_t i
*** 1539,1547 ****
    // Reference the language specification for the meanings of identifier_X
  
    // Pick up identifier_1, which is the string being inspected
!   cblc_field_t *id1   = __gg__treeplet_1f[cblc_index];
!   size_t        id1_o = __gg__treeplet_1o[cblc_index];
!   size_t        id1_s = __gg__treeplet_1s[cblc_index];
    cblc_index += 1;
  
    // normalize it, according to the language specification.
--- 1543,1551 ----
    // Reference the language specification for the meanings of identifier_X
  
    // Pick up identifier_1, which is the string being inspected
!   cblc_field_t *id1   = params[cblc_index].field ;
!   size_t        id1_o = params[cblc_index].offset;
!   size_t        id1_s = params[cblc_index].size  ;
    cblc_index += 1;
  
    // normalize it, according to the language specification.
*************** inspect_backward_format_2(const size_t i
*** 1564,1582 ****
          comparand next_comparand = {};
          next_comparand.operation = operation;
  
!         const cblc_field_t *id5   = __gg__treeplet_1f[cblc_index];
!         size_t              id5_o = __gg__treeplet_1o[cblc_index];
!         size_t              id5_s = __gg__treeplet_1s[cblc_index];
          cblc_index += 1;
  
!         const cblc_field_t *id4_before   = __gg__treeplet_1f[cblc_index];
!         size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!         size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
          cblc_index += 1;
  
!         const cblc_field_t *id4_after   = __gg__treeplet_1f  [cblc_index];
!         size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!         size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
          cblc_index += 1;
  
          next_comparand.identifier_5
--- 1568,1586 ----
          comparand next_comparand = {};
          next_comparand.operation = operation;
  
!         const cblc_field_t *id5   = params[cblc_index].field ;
!         size_t              id5_o = params[cblc_index].offset;
!         size_t              id5_s = params[cblc_index].size  ;
          cblc_index += 1;
  
!         const cblc_field_t *id4_before   = params[cblc_index].field ;
!         size_t              id4_before_o = params[cblc_index].offset;
!         size_t              id4_before_s = params[cblc_index].size  ;
          cblc_index += 1;
  
!         const cblc_field_t *id4_after   = params[cblc_index].field ;
!         size_t              id4_after_o = params[cblc_index].offset;
!         size_t              id4_after_s = params[cblc_index].size  ;
          cblc_index += 1;
  
          next_comparand.identifier_5
*************** inspect_backward_format_2(const size_t i
*** 1623,1646 ****
            comparand next_comparand = {};
            next_comparand.operation = operation;
  
!           const cblc_field_t *id3   = __gg__treeplet_1f[cblc_index];
!           size_t              id3_o = __gg__treeplet_1o[cblc_index];
!           size_t              id3_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id5   = __gg__treeplet_1f[cblc_index];
!           size_t              id5_o = __gg__treeplet_1o[cblc_index];
!           size_t              id5_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id4_before   = __gg__treeplet_1f[cblc_index];
!           size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = __gg__treeplet_1f[cblc_index];
!           size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
            next_comparand.identifier_3 = normalize_id(id3, id3_o, id3_s, id1->encoding);
--- 1627,1650 ----
            comparand next_comparand = {};
            next_comparand.operation = operation;
  
!           const cblc_field_t *id3   = params[cblc_index].field ;
!           size_t              id3_o = params[cblc_index].offset;
!           size_t              id3_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           const cblc_field_t *id5   = params[cblc_index].field ;
!           size_t              id5_o = params[cblc_index].offset;
!           size_t              id5_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           const cblc_field_t *id4_before   = params[cblc_index].field ;
!           size_t              id4_before_o = params[cblc_index].offset;
!           size_t              id4_before_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = params[cblc_index].field ;
!           size_t              id4_after_o = params[cblc_index].offset;
!           size_t              id4_after_s = params[cblc_index].size  ;
            cblc_index += 1;
  
            next_comparand.identifier_3 = normalize_id(id3, id3_o, id3_s, id1->encoding);
*************** inspect_backward_format_2(const size_t i
*** 1889,1909 ****
  
  extern "C"
  void
! __gg__inspect_format_2(int backward, size_t integers[])
    {
    if( backward )
      {
!     return inspect_backward_format_2(integers);
      }
    size_t int_index = 0;
    size_t cblc_index = 0;
  
    // Reference the language specification for the meanings of identifier_X
  
!   // Pick up identifier_1, which is the string being inspected
!   cblc_field_t *id1   = __gg__treeplet_1f[cblc_index];
!   size_t        id1_o = __gg__treeplet_1o[cblc_index];
!   size_t        id1_s = __gg__treeplet_1s[cblc_index];
    cblc_index += 1;
  
    // normalize it, according to the language specification.
--- 1893,1915 ----
  
  extern "C"
  void
! __gg__inspect_format_2( int backward,
!                         size_t integers[],
!                         const cblc_referlet_t *params)
    {
    if( backward )
      {
!     return inspect_backward_format_2(integers, params);
      }
    size_t int_index = 0;
    size_t cblc_index = 0;
  
    // Reference the language specification for the meanings of identifier_X
  
!   // id1 is the string being inspected
!   cblc_field_t *id1   = params[cblc_index].field;
!   size_t        id1_o = params[cblc_index].offset;
!   size_t        id1_s = params[cblc_index].size;
    cblc_index += 1;
  
    // normalize it, according to the language specification.
*************** __gg__inspect_format_2(int backward, siz
*** 1927,1945 ****
          comparand next_comparand = {} ;
          next_comparand.operation = operation;
  
!         const cblc_field_t *id5   = __gg__treeplet_1f[cblc_index];
!         size_t              id5_o = __gg__treeplet_1o[cblc_index];
!         size_t              id5_s = __gg__treeplet_1s[cblc_index];
          cblc_index += 1;
  
!         const cblc_field_t *id4_before   = __gg__treeplet_1f[cblc_index];
!         size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!         size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
          cblc_index += 1;
  
!         const cblc_field_t *id4_after   = __gg__treeplet_1f  [cblc_index];
!         size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!         size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
          cblc_index += 1;
  
          next_comparand.identifier_5
--- 1933,1951 ----
          comparand next_comparand = {} ;
          next_comparand.operation = operation;
  
!         const cblc_field_t *id5   = params[cblc_index].field;
!         size_t              id5_o = params[cblc_index].offset;
!         size_t              id5_s = params[cblc_index].size;
          cblc_index += 1;
  
!         const cblc_field_t *id4_before   = params[cblc_index].field;
!         size_t              id4_before_o = params[cblc_index].offset;
!         size_t              id4_before_s = params[cblc_index].size;
          cblc_index += 1;
  
!         const cblc_field_t *id4_after   = params[cblc_index].field;
!         size_t              id4_after_o = params[cblc_index].offset;
!         size_t              id4_after_s = params[cblc_index].size;
          cblc_index += 1;
  
          next_comparand.identifier_5
*************** __gg__inspect_format_2(int backward, siz
*** 1984,2007 ****
            comparand next_comparand = {};
            next_comparand.operation = operation;
  
!           const cblc_field_t *id3   = __gg__treeplet_1f[cblc_index];
!           size_t              id3_o = __gg__treeplet_1o[cblc_index];
!           size_t              id3_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id5   = __gg__treeplet_1f[cblc_index];
!           size_t              id5_o = __gg__treeplet_1o[cblc_index];
!           size_t              id5_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id4_before   = __gg__treeplet_1f[cblc_index];
!           size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = __gg__treeplet_1f[cblc_index];
!           size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
            next_comparand.identifier_3 = normalize_id(id3,
--- 1990,2013 ----
            comparand next_comparand = {};
            next_comparand.operation = operation;
  
!           const cblc_field_t *id3   = params[cblc_index].field;
!           size_t              id3_o = params[cblc_index].offset;
!           size_t              id3_s = params[cblc_index].size;
            cblc_index += 1;
  
!           const cblc_field_t *id5   = params[cblc_index].field;
!           size_t              id5_o = params[cblc_index].offset;
!           size_t              id5_s = params[cblc_index].size;
            cblc_index += 1;
  
!           const cblc_field_t *id4_before   = params[cblc_index].field;
!           size_t              id4_before_o = params[cblc_index].offset;
!           size_t              id4_before_s = params[cblc_index].size;
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = params[cblc_index].field;
!           size_t              id4_after_o = params[cblc_index].offset;
!           size_t              id4_after_s = params[cblc_index].size;
            cblc_index += 1;
  
            next_comparand.identifier_3 = normalize_id(id3,
*************** __gg__inspect_format_4( int backward,
*** 2608,2620 ****
  
  extern "C"
  void
! __gg__inspect_format_1_sbc(int backward, size_t integers[])
    {
    // When this routine is called, we know we are working in a single-byte-coded
    // codeset like ASCII or EBCDIC.
    if( backward )
      {
!     return inspect_backward_format_1(integers);
      }
  
    size_t int_index = 0;
--- 2614,2628 ----
  
  extern "C"
  void
! __gg__inspect_format_1_sbc( int backward,
!                             size_t integers[],
!                             const cblc_referlet_t *params)
    {
    // When this routine is called, we know we are working in a single-byte-coded
    // codeset like ASCII or EBCDIC.
    if( backward )
      {
!     return inspect_backward_format_1(integers, params);
      }
  
    size_t int_index = 0;
*************** __gg__inspect_format_1_sbc(int backward,
*** 2628,2636 ****
    std::vector<id_2_result> id_2_results(n_identifier_2);
  
    // Pick up identifier_1, which is the string being inspected
!   const cblc_field_t *id1   = __gg__treeplet_1f[cblc_index];
!   size_t              id1_o = __gg__treeplet_1o[cblc_index];
!   size_t              id1_s = __gg__treeplet_1s[cblc_index];
    cblc_index += 1;
    // normalize it, according to the language specification.
    std::string normalized_id_1
--- 2636,2644 ----
    std::vector<id_2_result> id_2_results(n_identifier_2);
  
    // Pick up identifier_1, which is the string being inspected
!   const cblc_field_t *id1   = params[cblc_index].field ;
!   size_t              id1_o = params[cblc_index].offset;
!   size_t              id1_s = params[cblc_index].size  ;
    cblc_index += 1;
    // normalize it, according to the language specification.
    std::string normalized_id_1
*************** __gg__inspect_format_1_sbc(int backward,
*** 2642,2650 ****
      {
      // For each identifier_2, we pick up its value:
  
!     id_2_results[i].id2   = __gg__treeplet_1f  [cblc_index];
!     id_2_results[i].id2_o = __gg__treeplet_1o[cblc_index];
!     id_2_results[i].id2_s = __gg__treeplet_1s[cblc_index];
  
      cblc_index += 1;
      id_2_results[i].result = 0;
--- 2650,2658 ----
      {
      // For each identifier_2, we pick up its value:
  
!     id_2_results[i].id2   = params[cblc_index].field ;
!     id_2_results[i].id2_o = params[cblc_index].offset;
!     id_2_results[i].id2_s = params[cblc_index].size  ;
  
      cblc_index += 1;
      id_2_results[i].result = 0;
*************** __gg__inspect_format_1_sbc(int backward,
*** 2668,2681 ****
            next_comparand.operation = operation;
            next_comparand.identifier_3 = " ";
  
!           const cblc_field_t *id4_before   = __gg__treeplet_1f  [cblc_index];
!           size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = __gg__treeplet_1f  [cblc_index];
!           size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!           size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
            cblc_index += 1;
  
            std::string normalized_id_4_before
--- 2676,2689 ----
            next_comparand.operation = operation;
            next_comparand.identifier_3 = " ";
  
!           const cblc_field_t *id4_before   = params[cblc_index].field ;
!           size_t              id4_before_o = params[cblc_index].offset;
!           size_t              id4_before_s = params[cblc_index].size  ;
            cblc_index += 1;
  
!           const cblc_field_t *id4_after   = params[cblc_index].field ;
!           size_t              id4_after_o = params[cblc_index].offset;
!           size_t              id4_after_s = params[cblc_index].size  ;
            cblc_index += 1;
  
            std::string normalized_id_4_before
*************** __gg__inspect_format_1_sbc(int backward,
*** 2712,2730 ****
              next_comparand.id_2_index = i;
              next_comparand.operation = operation;
  
!             const cblc_field_t *id3   = __gg__treeplet_1f[cblc_index];
!             size_t              id3_o = __gg__treeplet_1o[cblc_index];
!             size_t              id3_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
!             const cblc_field_t *id4_before   = __gg__treeplet_1f[cblc_index];
!             size_t              id4_before_o = __gg__treeplet_1o[cblc_index];
!             size_t              id4_before_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
!             const cblc_field_t *id4_after   = __gg__treeplet_1f[cblc_index];
!             size_t              id4_after_o = __gg__treeplet_1o[cblc_index];
!             size_t              id4_after_s = __gg__treeplet_1s[cblc_index];
              cblc_index += 1;
  
              next_comparand.identifier_3 = normalize_id_sbc(id3,
--- 2720,2738 ----
              next_comparand.id_2_index = i;
              next_comparand.operation = operation;
  
!             const cblc_field_t *id3   = params[cblc_index].field ;
!             size_t              id3_o = params[cblc_index].offset;
!             size_t              id3_s = params[cblc_index].size  ;
              cblc_index += 1;
  
!             const cblc_field_t *id4_before   = params[cblc_index].field ;
!             size_t              id4_before_o = params[cblc_index].offset;
!             size_t              id4_before_s = params[cblc_index].size  ;
              cblc_index += 1;
  
!             const cblc_field_t *id4_after   = params[cblc_index].field ;
!             size_t              id4_after_o = params[cblc_index].offset;
!             size_t              id4_after_s = params[cblc_index].size  ;
              cblc_index += 1;
  
              next_comparand.identifier_3 = normalize_id_sbc(id3,
diff -Nrcpad gcc-17-20260510/libgcobol/intrinsic.cc gcc-17-20260517/libgcobol/intrinsic.cc
*** gcc-17-20260510/libgcobol/intrinsic.cc	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/intrinsic.cc	Sun May 17 22:32:14 2026
*************** get_value_as_double_from_qualified_field
*** 424,433 ****
  
  static
  GCOB_FP128 kahan_summation(size_t ncount,
!                           cblc_field_t **source,
!                     const size_t        *source_o,
!                     const size_t        *source_s,
!                     const int           *flags,
                            size_t        *k_count)
    {
    // We use compensated addition.  Look up Kahan summation.
--- 424,430 ----
  
  static
  GCOB_FP128 kahan_summation(size_t ncount,
!                      const cblc_refer_t *refers,
                            size_t        *k_count)
    {
    // We use compensated addition.  Look up Kahan summation.
*************** GCOB_FP128 kahan_summation(size_t ncount
*** 446,464 ****
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, source[i], flags[i]);
  
      for(;;)
        {
!       input = __gg__float128_from_qualified_field(source[i],
!                                                   source_o[i],
!                                                   source_s[i]);
        y = input - kahan_c;
        t = sum + y;
        kahan_c = (t - sum) - y ;
        sum = t;
        *k_count += 1;
!       if( !update_refer_state_for_all(state, source[i]) )
          {
          // There is nothing left to do.
          break;
--- 443,461 ----
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, refers[i].field, refers[i].flags);
  
      for(;;)
        {
!       input = __gg__float128_from_qualified_field(refers[i].field,
!                                                   refers[i].offset,
!                                                   refers[i].size);
        y = input - kahan_c;
        t = sum + y;
        kahan_c = (t - sum) - y ;
        sum = t;
        *k_count += 1;
!       if( !update_refer_state_for_all(state, refers[i].field) )
          {
          // There is nothing left to do.
          break;
*************** GCOB_FP128 kahan_summation(size_t ncount
*** 471,480 ****
  static
  GCOB_FP128
  variance( size_t         ncount,
!           cblc_field_t **source,
!     const size_t        *source_o,
!     const size_t        *source_s,
!     const int           *flags)
    {
    // In order to avoid catastrophic cancellation, we are going to use an
    // algorithm that is a bit wasteful of time, but is described as particularly
--- 468,474 ----
  static
  GCOB_FP128
  variance( size_t         ncount,
!      const cblc_refer_t *refers)
    {
    // In order to avoid catastrophic cancellation, we are going to use an
    // algorithm that is a bit wasteful of time, but is described as particularly
*************** variance( size_t         ncount,
*** 487,496 ****
      // as an offset in the second stage:
      size_t k_count;
      GCOB_FP128 offset = kahan_summation( ncount,
!                                         source,
!                                         source_o,
!                                         source_s,
!                                         flags,
                                          &k_count);
      offset /= k_count;
  
--- 481,487 ----
      // as an offset in the second stage:
      size_t k_count;
      GCOB_FP128 offset = kahan_summation( ncount,
!                                          refers,
                                          &k_count);
      offset /= k_count;
  
*************** variance( size_t         ncount,
*** 506,518 ****
      for(size_t i=0; i<ncount; i++)
        {
        refer_state_for_all state;
!       build_refer_state_for_all(state, source[i], flags[i]);
  
        for(;;)
          {
!         newValue  = __gg__float128_from_qualified_field(source[i],
!                                                         source_o[i],
!                                                         source_s[i]);
          newValue -= offset;
  
          count += 1;
--- 497,509 ----
      for(size_t i=0; i<ncount; i++)
        {
        refer_state_for_all state;
!       build_refer_state_for_all(state, refers[i].field, refers[i].flags);
  
        for(;;)
          {
!         newValue  = __gg__float128_from_qualified_field(refers[i].field,
!                                                         refers[i].offset,
!                                                         refers[i].size);
          newValue -= offset;
  
          count += 1;
*************** variance( size_t         ncount,
*** 520,526 ****
          mean += delta / count;
          delta2 = newValue - mean;
          M2 += delta * delta2;
!         if( !update_refer_state_for_all(state, source[i]) )
            {
            // There is nothing left to do.
            break;
--- 511,517 ----
          mean += delta / count;
          delta2 = newValue - mean;
          M2 += delta * delta2;
!         if( !update_refer_state_for_all(state, refers[i].field) )
            {
            // There is nothing left to do.
            break;
*************** __gg__combined_datetime(cblc_field_t *de
*** 1258,1278 ****
  extern "C"
  void
  __gg__concat( cblc_field_t *dest,
!               size_t ncount)
    {
    size_t bytes = 0;
    size_t offset = 0;
    for(size_t i=0; i<ncount; i++)
      {
!     bytes += __gg__treeplet_1s[i];
      }
    __gg__adjust_dest_size(dest, bytes);
    for(size_t i=0; i<ncount; i++)
      {
      memcpy( dest->data + offset,
!             __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i],
!             __gg__treeplet_1s[i]);
!     offset += __gg__treeplet_1s[i];
      }
    }
  
--- 1249,1270 ----
  extern "C"
  void
  __gg__concat( cblc_field_t *dest,
!               size_t ncount,
!         const cblc_refer_t *refers)
    {
    size_t bytes = 0;
    size_t offset = 0;
    for(size_t i=0; i<ncount; i++)
      {
!     bytes += refers[i].size;
      }
    __gg__adjust_dest_size(dest, bytes);
    for(size_t i=0; i<ncount; i++)
      {
      memcpy( dest->data + offset,
!             refers[i].field->data + refers[i].offset,
!             refers[i].size);
!     offset += refers[i].size;
      }
    }
  
*************** __gg__log10(cblc_field_t *dest,
*** 1998,2009 ****
  extern "C"
  void
  __gg__max(cblc_field_t *dest,
!           size_t ncount)
    {
    // FUNCTION MAX
  
!   if( (    __gg__treeplet_1f[0]->type == FldAlphanumeric
!         || __gg__treeplet_1f[0]->type == FldLiteralA) )
      {
      cblc_field_t  *best_field      ;
      unsigned char *best_location = nullptr  ;
--- 1990,2002 ----
  extern "C"
  void
  __gg__max(cblc_field_t *dest,
!           size_t ncount,
!     const cblc_refer_t *refers)
    {
    // FUNCTION MAX
  
!   if( (    refers[0].field->type == FldAlphanumeric
!         || refers[0].field->type == FldLiteralA) )
      {
      cblc_field_t  *best_field      ;
      unsigned char *best_location = nullptr  ;
*************** __gg__max(cblc_field_t *dest,
*** 2017,2042 ****
        {
        refer_state_for_all state;
  
!       build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
  
        for(;;)
          {
          if( first_time )
            {
            first_time      = false;
!           best_field      = __gg__treeplet_1f[i];
!           best_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!           best_length     = __gg__treeplet_1s[i];
!           best_attr       = __gg__treeplet_1f[i]->attr;
!           best_flags      = __gg__fourplet_flags[i];
            }
          else
            {
!           cblc_field_t  *candidate_field      = __gg__treeplet_1f[i];
!           unsigned char *candidate_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!           size_t         candidate_length     = __gg__treeplet_1s[i];
!           int            candidate_attr       = __gg__treeplet_1f[i]->attr;
!           int            candidate_flags      = __gg__fourplet_flags[i];
  
            int compare_result = __gg__compare_2(
                                   candidate_field,
--- 2010,2035 ----
        {
        refer_state_for_all state;
  
!       build_refer_state_for_all(state, refers[i].field, refers[i].flags);
  
        for(;;)
          {
          if( first_time )
            {
            first_time      = false;
!           best_field      = refers[i].field;
!           best_location   = refers[i].field->data + refers[i].offset;
!           best_length     = refers[i].size;
!           best_attr       = refers[i].field->attr;
!           best_flags      = refers[i].flags;
            }
          else
            {
!           cblc_field_t  *candidate_field      = refers[i].field;
!           unsigned char *candidate_location   = refers[i].field->data + refers[i].offset;
!           size_t         candidate_length     = refers[i].size;
!           int            candidate_attr       = refers[i].field->attr;
!           int            candidate_flags      = refers[i].flags;
  
            int compare_result = __gg__compare_2(
                                   candidate_field,
*************** __gg__max(cblc_field_t *dest,
*** 2059,2065 ****
              best_flags      = candidate_flags      ;
              }
            }
!         if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
            {
            // There is nothing left to do.
            break;
--- 2052,2058 ----
              best_flags      = candidate_flags      ;
              }
            }
!         if( !update_refer_state_for_all(state, refers[i].field) )
            {
            // There is nothing left to do.
            break;
*************** __gg__max(cblc_field_t *dest,
*** 2080,2103 ****
      for(size_t i=0; i<ncount; i++)
        {
        refer_state_for_all state;
!       build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
  
        for(;;)
          {
          if( first_time )
            {
            first_time = false;
!           retval = __gg__float128_from_qualified_field(__gg__treeplet_1f[i], __gg__treeplet_1o[i], __gg__treeplet_1s[i]);
            }
          else
            {
!           GCOB_FP128 candidate = __gg__float128_from_qualified_field(__gg__treeplet_1f[i], __gg__treeplet_1o[i], __gg__treeplet_1s[i]);
            if( candidate >= retval )
              {
              retval = candidate;
              }
            }
!         if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
            {
            // There is nothing left to do for that input.
            break;
--- 2073,2096 ----
      for(size_t i=0; i<ncount; i++)
        {
        refer_state_for_all state;
!       build_refer_state_for_all(state, refers[i].field, refers[i].flags);
  
        for(;;)
          {
          if( first_time )
            {
            first_time = false;
!           retval = __gg__float128_from_qualified_field(refers[i].field, refers[i].offset, refers[i].size);
            }
          else
            {
!           GCOB_FP128 candidate = __gg__float128_from_qualified_field(refers[i].field, refers[i].offset, refers[i].size);
            if( candidate >= retval )
              {
              retval = candidate;
              }
            }
!         if( !update_refer_state_for_all(state, refers[i].field) )
            {
            // There is nothing left to do for that input.
            break;
*************** __gg__upper_case( cblc_field_t *dest,
*** 2182,2196 ****
  extern "C"
  void
  __gg__mean( cblc_field_t *dest,
!             size_t ninputs)
    {
    // FUNCTION MEAN
    size_t k_count;
    GCOB_FP128 sum = kahan_summation(ninputs,
!                                   __gg__treeplet_1f,
!                                   __gg__treeplet_1o,
!                                   __gg__treeplet_1s,
!                                   __gg__fourplet_flags,
                                    &k_count);
    sum /= k_count;
    __gg__float128_to_field(dest,
--- 2175,2187 ----
  extern "C"
  void
  __gg__mean( cblc_field_t *dest,
!             size_t ninputs,
!       const cblc_refer_t *refers)
    {
    // FUNCTION MEAN
    size_t k_count;
    GCOB_FP128 sum = kahan_summation(ninputs,
!                                    refers,
                                    &k_count);
    sum /= k_count;
    __gg__float128_to_field(dest,
*************** __gg__mean( cblc_field_t *dest,
*** 2202,2208 ****
  extern "C"
  void
  __gg__median( cblc_field_t *dest,
!               size_t        ncount)
    {
    // FUNCTION MEDIAN
  
--- 2193,2200 ----
  extern "C"
  void
  __gg__median( cblc_field_t *dest,
!               size_t        ncount,
!         const cblc_refer_t *refers)
    {
    // FUNCTION MEDIAN
  
*************** __gg__median( cblc_field_t *dest,
*** 2222,2228 ****
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
  
      for(;;)
        {
--- 2214,2220 ----
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, refers[i].field, refers[i].flags);
  
      for(;;)
        {
*************** __gg__median( cblc_field_t *dest,
*** 2234,2244 ****
          }
  
        assert(the_list);
!       the_list[k_count] = __gg__float128_from_qualified_field(__gg__treeplet_1f[i],
!                                                               __gg__treeplet_1o[i],
!                                                               __gg__treeplet_1s[i]);
        k_count += 1;
!       if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
          {
          // There is nothing left to do.
          break;
--- 2226,2236 ----
          }
  
        assert(the_list);
!       the_list[k_count] = __gg__float128_from_qualified_field(refers[i].field,
!                                                               refers[i].offset,
!                                                               refers[i].size);
        k_count += 1;
!       if( !update_refer_state_for_all(state, refers[i].field) )
          {
          // There is nothing left to do.
          break;
*************** __gg__median( cblc_field_t *dest,
*** 2267,2273 ****
  extern "C"
  void
  __gg__midrange( cblc_field_t *dest,
!                 size_t        ncount)
    {
    // FUNCTION MIDRANGE
    GCOB_FP128 val;
--- 2259,2266 ----
  extern "C"
  void
  __gg__midrange( cblc_field_t *dest,
!                 size_t        ncount,
!           const cblc_refer_t *refers)
    {
    // FUNCTION MIDRANGE
    GCOB_FP128 val;
*************** __gg__midrange( cblc_field_t *dest,
*** 2278,2289 ****
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
      for(;;)
        {
!       val = __gg__float128_from_qualified_field(__gg__treeplet_1f[i],
!                                                 __gg__treeplet_1o[i],
!                                                 __gg__treeplet_1s[i]);
        if( first_time )
          {
          first_time = false;
--- 2271,2282 ----
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, refers[i].field, refers[i].flags);
      for(;;)
        {
!       val = __gg__float128_from_qualified_field(refers[i].field,
!                                                 refers[i].offset,
!                                                 refers[i].size);
        if( first_time )
          {
          first_time = false;
*************** __gg__midrange( cblc_field_t *dest,
*** 2292,2298 ****
          }
        min = std::min(min, val);
        max = std::max(max, val);
!       if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
          {
          // There is nothing left to do for that input.
          break;
--- 2285,2291 ----
          }
        min = std::min(min, val);
        max = std::max(max, val);
!       if( !update_refer_state_for_all(state, refers[i].field) )
          {
          // There is nothing left to do for that input.
          break;
*************** __gg__midrange( cblc_field_t *dest,
*** 2309,2320 ****
  extern "C"
  void
  __gg__min(cblc_field_t *dest,
!           size_t ncount)
    {
    // FUNCTION MIN
  
!   if( (    __gg__treeplet_1f[0]->type == FldAlphanumeric
!         || __gg__treeplet_1f[0]->type == FldLiteralA) )
      {
      cblc_field_t  *best_field               ;
      unsigned char *best_location = nullptr  ;
--- 2302,2314 ----
  extern "C"
  void
  __gg__min(cblc_field_t *dest,
!           size_t ncount,
!     const cblc_refer_t *refers)
    {
    // FUNCTION MIN
  
!   if( (    refers[0].field->type == FldAlphanumeric
!         || refers[0].field->type == FldLiteralA) )
      {
      cblc_field_t  *best_field               ;
      unsigned char *best_location = nullptr  ;
*************** __gg__min(cblc_field_t *dest,
*** 2328,2353 ****
        {
        refer_state_for_all state;
  
!       build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
  
        for(;;)
          {
          if( first_time )
            {
            first_time      = false;
!           best_field      = __gg__treeplet_1f[i];
!           best_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!           best_length     = __gg__treeplet_1s[i];
!           best_attr       = __gg__treeplet_1f[i]->attr;
!           best_flags      = __gg__fourplet_flags[i];
            }
          else
            {
!           cblc_field_t  *candidate_field      = __gg__treeplet_1f[i];
!           unsigned char *candidate_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!           size_t         candidate_length     = __gg__treeplet_1s[i];
!           int            candidate_attr       = __gg__treeplet_1f[i]->attr;
!           int            candidate_flags      = __gg__fourplet_flags[i];
  
            int compare_result = __gg__compare_2(
                                   candidate_field,
--- 2322,2347 ----
        {
        refer_state_for_all state;
  
!       build_refer_state_for_all(state, refers[i].field, refers[i].flags);
  
        for(;;)
          {
          if( first_time )
            {
            first_time      = false;
!           best_field      = refers[i].field;
!           best_location   = refers[i].field->data + refers[i].offset;
!           best_length     = refers[i].size;
!           best_attr       = refers[i].field->attr;
!           best_flags      = refers[i].flags;
            }
          else
            {
!           cblc_field_t  *candidate_field      = refers[i].field;
!           unsigned char *candidate_location   = refers[i].field->data + refers[i].offset;
!           size_t         candidate_length     = refers[i].size;
!           int            candidate_attr       = refers[i].field->attr;
!           int            candidate_flags      = refers[i].flags;
  
            int compare_result = __gg__compare_2(
                                   candidate_field,
*************** __gg__min(cblc_field_t *dest,
*** 2370,2376 ****
              best_flags      = candidate_flags      ;
              }
            }
!         if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
            {
            // There is nothing left to do.
            break;
--- 2364,2370 ----
              best_flags      = candidate_flags      ;
              }
            }
!         if( !update_refer_state_for_all(state, refers[i].field) )
            {
            // There is nothing left to do.
            break;
*************** __gg__min(cblc_field_t *dest,
*** 2391,2414 ****
      for(size_t i=0; i<ncount; i++)
        {
        refer_state_for_all state;
!       build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
  
        for(;;)
          {
          if( first_time )
            {
            first_time = false;
!           retval = __gg__float128_from_qualified_field(__gg__treeplet_1f[i], __gg__treeplet_1o[i], __gg__treeplet_1s[i]);
            }
          else
            {
!           GCOB_FP128 candidate = __gg__float128_from_qualified_field(__gg__treeplet_1f[i], __gg__treeplet_1o[i], __gg__treeplet_1s[i]);
            if( candidate < retval )
              {
              retval = candidate;
              }
            }
!         if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
            {
            // There is nothing left to do for that input.
            break;
--- 2385,2408 ----
      for(size_t i=0; i<ncount; i++)
        {
        refer_state_for_all state;
!       build_refer_state_for_all(state, refers[i].field, refers[i].flags);
  
        for(;;)
          {
          if( first_time )
            {
            first_time = false;
!           retval = __gg__float128_from_qualified_field(refers[i].field, refers[i].offset, refers[i].size);
            }
          else
            {
!           GCOB_FP128 candidate = __gg__float128_from_qualified_field(refers[i].field, refers[i].offset, refers[i].size);
            if( candidate < retval )
              {
              retval = candidate;
              }
            }
!         if( !update_refer_state_for_all(state, refers[i].field) )
            {
            // There is nothing left to do for that input.
            break;
*************** __gg__ord(cblc_field_t *dest,
*** 3193,3199 ****
  extern "C"
  void
  __gg__ord_min(cblc_field_t *dest,
!               size_t ninputs)
    {
    // Sets dest to the one-based ordinal position of the first occurrence
    // of the biggest element in the list of refs[]
--- 3187,3194 ----
  extern "C"
  void
  __gg__ord_min(cblc_field_t *dest,
!               size_t ninputs,
!     const cblc_refer_t *refers)
    {
    // Sets dest to the one-based ordinal position of the first occurrence
    // of the biggest element in the list of refs[]
*************** __gg__ord_min(cblc_field_t *dest,
*** 3216,3222 ****
      {
      refer_state_for_all state;
  
!     build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
      for(;;)
        {
        running_position += 1;
--- 3211,3217 ----
      {
      refer_state_for_all state;
  
!     build_refer_state_for_all(state, refers[i].field, refers[i].flags);
      for(;;)
        {
        running_position += 1;
*************** __gg__ord_min(cblc_field_t *dest,
*** 3224,3247 ****
          {
          // We have to initialize the comparisons:
          retval          = running_position;
!         best            = __gg__treeplet_1f[i];
!         best_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!         best_length     = __gg__treeplet_1s[i];
!         best_attr       = __gg__treeplet_1f[i]->attr;
!         best_flags      = __gg__fourplet_flags[i];
          }
        else
          {
          // We need to save the current adjustments, because __gg__compare
          // is free to modify .location
!         candidate_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!         candidate_length     = __gg__treeplet_1s[i];
!         candidate_attr       = __gg__treeplet_1f[i]->attr;
!         candidate_flags      = __gg__fourplet_flags[i];
  
          int compare_result =
            __gg__compare_2(
!             __gg__treeplet_1f[i],
              candidate_location,
              candidate_length,
              candidate_attr,
--- 3219,3242 ----
          {
          // We have to initialize the comparisons:
          retval          = running_position;
!         best            = refers[i].field;
!         best_location   = refers[i].field->data + refers[i].offset;
!         best_length     = refers[i].size;
!         best_attr       = refers[i].field->attr;
!         best_flags      = refers[i].flags;
          }
        else
          {
          // We need to save the current adjustments, because __gg__compare
          // is free to modify .location
!         candidate_location   = refers[i].field->data + refers[i].offset;
!         candidate_length     = refers[i].size;
!         candidate_attr       = refers[i].field->attr;
!         candidate_flags      = refers[i].flags;
  
          int compare_result =
            __gg__compare_2(
!             refers[i].field,
              candidate_location,
              candidate_length,
              candidate_attr,
*************** __gg__ord_min(cblc_field_t *dest,
*** 3255,3268 ****
          if( compare_result < 0 )
            {
            retval          = running_position;
!           best            = __gg__treeplet_1f[i];
            best_location   = candidate_location;
            best_length     = candidate_length;
            best_attr       = candidate_attr;
            best_flags      = candidate_flags;
            }
          }
!       if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
          {
          // There is nothing left to do for that input.
          break;
--- 3250,3263 ----
          if( compare_result < 0 )
            {
            retval          = running_position;
!           best            = refers[i].field;
            best_location   = candidate_location;
            best_length     = candidate_length;
            best_attr       = candidate_attr;
            best_flags      = candidate_flags;
            }
          }
!       if( !update_refer_state_for_all(state, refers[i].field) )
          {
          // There is nothing left to do for that input.
          break;
*************** __gg__ord_min(cblc_field_t *dest,
*** 3281,3287 ****
  extern "C"
  void
  __gg__ord_max(cblc_field_t *dest,
!               size_t ninputs)
    {
    // Sets dest to the one-based ordinal position of the first occurrence
    // of the biggest element in the list of refs[]
--- 3276,3283 ----
  extern "C"
  void
  __gg__ord_max(cblc_field_t *dest,
!               size_t ninputs,
!     const cblc_refer_t *refers)
    {
    // Sets dest to the one-based ordinal position of the first occurrence
    // of the biggest element in the list of refs[]
*************** __gg__ord_max(cblc_field_t *dest,
*** 3304,3310 ****
      {
      refer_state_for_all state;
  
!     build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
      for(;;)
        {
        running_position += 1;
--- 3300,3306 ----
      {
      refer_state_for_all state;
  
!     build_refer_state_for_all(state, refers[i].field, refers[i].flags);
      for(;;)
        {
        running_position += 1;
*************** __gg__ord_max(cblc_field_t *dest,
*** 3312,3335 ****
          {
          // We have to initialize the comparisons:
          retval          = running_position;
!         best            = __gg__treeplet_1f[i];
!         best_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!         best_length     = __gg__treeplet_1s[i];
!         best_attr       = __gg__treeplet_1f[i]->attr;
!         best_flags      = __gg__fourplet_flags[i];
          }
        else
          {
          // We need to save the current adjustments, because __gg__compare
          // is free to modify .location
!         candidate_location   = __gg__treeplet_1f[i]->data + __gg__treeplet_1o[i];
!         candidate_length     = __gg__treeplet_1s[i];
!         candidate_attr       = __gg__treeplet_1f[i]->attr;
!         candidate_flags      = __gg__fourplet_flags[i];
  
          int compare_result =
            __gg__compare_2(
!             __gg__treeplet_1f[i],
              candidate_location,
              candidate_length,
              candidate_attr,
--- 3308,3331 ----
          {
          // We have to initialize the comparisons:
          retval          = running_position;
!         best            = refers[i].field;
!         best_location   = refers[i].field->data + refers[i].offset;
!         best_length     = refers[i].size;
!         best_attr       = refers[i].field->attr;
!         best_flags      = refers[i].flags;
          }
        else
          {
          // We need to save the current adjustments, because __gg__compare
          // is free to modify .location
!         candidate_location   = refers[i].field->data + refers[i].offset;
!         candidate_length     = refers[i].size;
!         candidate_attr       = refers[i].field->attr;
!         candidate_flags      = refers[i].flags;
  
          int compare_result =
            __gg__compare_2(
!             refers[i].field,
              candidate_location,
              candidate_length,
              candidate_attr,
*************** __gg__ord_max(cblc_field_t *dest,
*** 3343,3356 ****
          if( compare_result > 0 )
            {
            retval          = running_position;
!           best            = __gg__treeplet_1f[i];
            best_location   = candidate_location;
            best_length     = candidate_length;
            best_attr       = candidate_attr;
            best_flags      = candidate_flags;
            }
          }
!       if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
          {
          // There is nothing left to do for that input.
          break;
--- 3339,3352 ----
          if( compare_result > 0 )
            {
            retval          = running_position;
!           best            = refers[i].field;
            best_location   = candidate_location;
            best_length     = candidate_length;
            best_attr       = candidate_attr;
            best_flags      = candidate_flags;
            }
          }
!       if( !update_refer_state_for_all(state, refers[i].field) )
          {
          // There is nothing left to do for that input.
          break;
*************** __gg__pi(cblc_field_t *dest)
*** 3383,3389 ****
  extern "C"
  void
  __gg__present_value(cblc_field_t *dest,
!                     size_t        ncount)
    {
    GCOB_FP128 discount = 0;;
    GCOB_FP128 denom = 1;
--- 3379,3386 ----
  extern "C"
  void
  __gg__present_value(cblc_field_t *dest,
!                     size_t        ncount,
!               const cblc_refer_t *refers)
    {
    GCOB_FP128 discount = 0;;
    GCOB_FP128 denom = 1;
*************** __gg__present_value(cblc_field_t *dest,
*** 3393,3407 ****
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
      for(;;)
        {
        if(first_time)
          {
          first_time = false;
!         GCOB_FP128 arg1 = __gg__float128_from_qualified_field(__gg__treeplet_1f[i],
!                                                              __gg__treeplet_1o[i],
!                                                              __gg__treeplet_1s[i]);
          if( arg1 <= GCOB_FP128_LITERAL(-1.0) )
            {
            exception_raise(ec_argument_function_e);
--- 3390,3404 ----
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, refers[i].field, refers[i].flags);
      for(;;)
        {
        if(first_time)
          {
          first_time = false;
!         GCOB_FP128 arg1 = __gg__float128_from_qualified_field(refers[i].field,
!                                                              refers[i].offset,
!                                                              refers[i].size);
          if( arg1 <= GCOB_FP128_LITERAL(-1.0) )
            {
            exception_raise(ec_argument_function_e);
*************** __gg__present_value(cblc_field_t *dest,
*** 3411,3423 ****
          }
        else
          {
!         GCOB_FP128 arg = __gg__float128_from_qualified_field(__gg__treeplet_1f[i],
!                                                             __gg__treeplet_1o[i],
!                                                             __gg__treeplet_1s[i]);
          denom *= discount;
          retval += arg * denom;
          }
!       if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
          {
          // There is nothing left to do for that input.
          break;
--- 3408,3420 ----
          }
        else
          {
!         GCOB_FP128 arg = __gg__float128_from_qualified_field(refers[i].field,
!                                                             refers[i].offset,
!                                                             refers[i].size);
          denom *= discount;
          retval += arg * denom;
          }
!       if( !update_refer_state_for_all(state, refers[i].field) )
          {
          // There is nothing left to do for that input.
          break;
*************** __gg__present_value(cblc_field_t *dest,
*** 3433,3439 ****
  extern "C"
  void
  __gg__range(cblc_field_t *dest,
!             size_t        ncount)
    {
    // FUNCTION RANGE
    bool first_time = true;
--- 3430,3437 ----
  extern "C"
  void
  __gg__range(cblc_field_t *dest,
!             size_t        ncount,
!       const cblc_refer_t *refers)
    {
    // FUNCTION RANGE
    bool first_time = true;
*************** __gg__range(cblc_field_t *dest,
*** 3445,3456 ****
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, __gg__treeplet_1f[i], __gg__fourplet_flags[i]);
      for(;;)
        {
!       val = __gg__float128_from_qualified_field(__gg__treeplet_1f[i],
!                                                 __gg__treeplet_1o[i],
!                                                 __gg__treeplet_1s[i]);
        if( first_time )
          {
          first_time = false;
--- 3443,3454 ----
    for(size_t i=0; i<ncount; i++)
      {
      refer_state_for_all state;
!     build_refer_state_for_all(state, refers[i].field, refers[i].flags);
      for(;;)
        {
!       val = __gg__float128_from_qualified_field(refers[i].field,
!                                                 refers[i].offset,
!                                                 refers[i].size);
        if( first_time )
          {
          first_time = false;
*************** __gg__range(cblc_field_t *dest,
*** 3459,3465 ****
          }
        min = std::min(min, val);
        max = std::max(max, val);
!       if( !update_refer_state_for_all(state, __gg__treeplet_1f[i]) )
          {
          // There is nothing left to do.
          break;
--- 3457,3463 ----
          }
        min = std::min(min, val);
        max = std::max(max, val);
!       if( !update_refer_state_for_all(state, refers[i].field) )
          {
          // There is nothing left to do.
          break;
*************** __gg__sqrt( cblc_field_t *dest,
*** 3803,3816 ****
  extern "C"
  void
  __gg__standard_deviation( cblc_field_t *dest,
!                           size_t        ninputs)
    {
    // FUNCTION STANDARD-DEVIATION
    GCOB_FP128 retval = variance(ninputs,
!                               __gg__treeplet_1f,
!                               __gg__treeplet_1o,
!                               __gg__treeplet_1s,
!                               __gg__fourplet_flags);
    retval = FP128_FUNC(sqrt)(retval);
  
    __gg__float128_to_field(dest,
--- 3801,3812 ----
  extern "C"
  void
  __gg__standard_deviation( cblc_field_t *dest,
!                           size_t        ninputs,
!                     const cblc_refer_t *refers)
    {
    // FUNCTION STANDARD-DEVIATION
    GCOB_FP128 retval = variance(ninputs,
!                                refers);
    retval = FP128_FUNC(sqrt)(retval);
  
    __gg__float128_to_field(dest,
*************** __gg__standard_deviation( cblc_field_t *
*** 3822,3836 ****
  extern "C"
  void
  __gg__sum(cblc_field_t *dest,
!           size_t        ninputs)
    {
    // FUNCTION SUM
    size_t k_count;
    GCOB_FP128 sum = kahan_summation(ninputs,
!                                   __gg__treeplet_1f,
!                                   __gg__treeplet_1o,
!                                   __gg__treeplet_1s,
!                                   __gg__fourplet_flags,
                                    &k_count);
    __gg__float128_to_field(dest,
                            sum,
--- 3818,3830 ----
  extern "C"
  void
  __gg__sum(cblc_field_t *dest,
!           size_t        ninputs,
!     const cblc_refer_t *refers)
    {
    // FUNCTION SUM
    size_t k_count;
    GCOB_FP128 sum = kahan_summation(ninputs,
!                                    refers,
                                    &k_count);
    __gg__float128_to_field(dest,
                            sum,
*************** __gg__test_day_yyyyddd( cblc_field_t *de
*** 3951,3964 ****
  extern "C"
  void
  __gg__variance( cblc_field_t *dest,
!                 size_t        ncount)
    {
    // FUNCTION VARIANCE
    GCOB_FP128 retval = variance(ncount,
!                               __gg__treeplet_1f,
!                               __gg__treeplet_1o,
!                               __gg__treeplet_1s,
!                               __gg__fourplet_flags);
    __gg__float128_to_field(dest,
                            retval,
                            truncation_e,
--- 3945,3956 ----
  extern "C"
  void
  __gg__variance( cblc_field_t *dest,
!               size_t ncount,
!         const cblc_refer_t *refers)
    {
    // FUNCTION VARIANCE
    GCOB_FP128 retval = variance(ncount,
!                                refers);
    __gg__float128_to_field(dest,
                            retval,
                            truncation_e,
*************** strcaselaststr( const char *haystack,
*** 5493,5514 ****
  
  extern "C"
  void
! __gg__substitute( cblc_field_t *dest,
!             const cblc_field_t *arg1_f,
!                   size_t        arg1_o,
!                   size_t        arg1_s,
!                   size_t        N,
!             const uint8_t      *control)
    {
    // arg2 is the Group 1 triplet.
    // arg3 is the Group 2 triplet
-   cblc_field_t **arg2_f = __gg__treeplet_1f;
-   size_t        *arg2_o = __gg__treeplet_1o;
-   size_t        *arg2_s = __gg__treeplet_1s;
-   cblc_field_t **arg3_f = __gg__treeplet_2f;
-   const size_t  *arg3_o = __gg__treeplet_2o;
-   const size_t  *arg3_s = __gg__treeplet_2s;
- 
    ssize_t retval_size;
    retval_size = 256;
    char  *retval = static_cast<char *>(malloc(retval_size));
--- 5485,5501 ----
  
  extern "C"
  void
! __gg__substitute( const cblc_referlet_t *arg2,
!                   const cblc_referlet_t *arg3,
!                         cblc_field_t    *dest,
!                   const cblc_field_t    *arg1_f,
!                         size_t           arg1_o,
!                         size_t           arg1_s,
!                         size_t           N,
!                   const uint8_t         *control)
    {
    // arg2 is the Group 1 triplet.
    // arg3 is the Group 2 triplet
    ssize_t retval_size;
    retval_size = 256;
    char  *retval = static_cast<char *>(malloc(retval_size));
*************** __gg__substitute( cblc_field_t *dest,
*** 5534,5540 ****
  
    for( size_t i=0; i<N; i++ )
      {
!     if( arg2_s[i] == 0 )
        {
        exception_raise(ec_argument_function_e);
        goto bugout;
--- 5521,5527 ----
  
    for( size_t i=0; i<N; i++ )
      {
!     if( arg2[i].size == 0 )
        {
        exception_raise(ec_argument_function_e);
        goto bugout;
*************** __gg__substitute( cblc_field_t *dest,
*** 5545,5560 ****
          {
          pflasts[i] = strcasestr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i],
                                  is_ebcdic);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strcaselaststr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i],
                                  is_ebcdic);
          }
        else
--- 5532,5547 ----
          {
          pflasts[i] = strcasestr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size,
                                  is_ebcdic);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strcaselaststr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size,
                                  is_ebcdic);
          }
        else
*************** __gg__substitute( cblc_field_t *dest,
*** 5568,5582 ****
          {
          pflasts[i] = strstr(haystack,
                              haystack_e,
!                             PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                             PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i]);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strlaststr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i]);
          }
        else
          {
--- 5555,5569 ----
          {
          pflasts[i] = strstr(haystack,
                              haystack_e,
!                             PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                             PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strlaststr(haystack,
                                  haystack_e,
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)),
!                                 PTRCAST(char, (arg2[i].field->data+arg2[i].offset)) + arg2[i].size);
          }
        else
          {
*************** __gg__substitute( cblc_field_t *dest,
*** 5592,5598 ****
        {
        // Let's make sure that there is enough room in the case that we add this
        // arg
!       while( outdex - (ssize_t)arg2_s[i] + (ssize_t)arg3_s[i]
                                                                   > retval_size )
          {
          retval_size *= 2;
--- 5579,5585 ----
        {
        // Let's make sure that there is enough room in the case that we add this
        // arg
!       while( outdex - (ssize_t)arg2[i].size + (ssize_t)arg3[i].size
                                                                   > retval_size )
          {
          retval_size *= 2;
*************** __gg__substitute( cblc_field_t *dest,
*** 5612,5619 ****
            continue;
            }
  
!         const char *needle   = PTRCAST(char, arg2_f[i]->data+arg2_o[i]);
!         const char *needle_e = PTRCAST(char, arg2_f[i]->data+arg2_o[i]) + arg2_s[i];
          matched = (control[i] & substitute_anycase_e) && iscasematch(
                                                                   haystack,
                                                                   haystack_e,
--- 5599,5606 ----
            continue;
            }
  
!         const char *needle   = PTRCAST(char, arg2[i].field->data+arg2[i].offset);
!         const char *needle_e = PTRCAST(char, arg2[i].field->data+arg2[i].offset) + arg2[i].size;
          matched = (control[i] & substitute_anycase_e) && iscasematch(
                                                                   haystack,
                                                                   haystack_e,
*************** __gg__substitute( cblc_field_t *dest,
*** 5630,5638 ****
          }
        if( matched )
          {
!         haystack += arg2_s[i];
!         memcpy(retval + outdex, arg3_f[i]->data + arg3_o[i], arg3_s[i]);
!         outdex += arg3_s[i];
          did_something = true;
          break;
          }
--- 5617,5625 ----
          }
        if( matched )
          {
!         haystack += arg2[i].size;
!         memcpy(retval + outdex, arg3[i].field->data + arg3[i].offset, arg3[i].size);
!         outdex += arg3[i].size;
          did_something = true;
          break;
          }
diff -Nrcpad gcc-17-20260510/libgcobol/libgcobol.cc gcc-17-20260517/libgcobol/libgcobol.cc
*** gcc-17-20260510/libgcobol/libgcobol.cc	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/libgcobol.cc	Sun May 17 22:32:14 2026
*************** size_t      __gg__entry_index
*** 162,211 ****
  // Setting this variable to 'true' suppresses the error condition.
  static bool sv_suppress_eof_ec = false;
  
- // What follows are arrays that are used by features like INSPECT, STRING,
- // UNSTRING, and, particularly, arithmetic_operation.  These features are
- // characterized by having unknown, and essentially unlimited, numbers of
- // variables. Consider, for example, ADD A B C D ... TO L M N O ...
- 
- // Although originally implemented with malloc/free, that's terribly inefficient
- // on its face; arithmetic is done frequently.  The next step was to malloc
- // buffers just once, and have them grow as needed, but that resulted in a lot
- // of code being laid down, because it meant checking each buffer size at
- // run-time, and laying down the code to be executed if the size was inadequate.
- //
- // The current solution is to make the pointers to the arrays of values global,
- // and initialize them with space for MIN_FIELD_BLOCK_SIZE values.  Thus, at
- // compile time, we can ignore all tests for fewer than MIN_FIELD_BLOCK_SIZE
- // (which is generally the case).  Only when N is greater than the MIN do we
- // have to check the current run-time size and, if necessary, expand the buffer
- // with realloc.
- size_t       __gg__arithmetic_rounds_size      = 0     ;
- int *        __gg__arithmetic_rounds           = NULL  ;
- 
- size_t       __gg__fourplet_flags_size         = 0     ;
- int *        __gg__fourplet_flags              = NULL  ;
- 
- static size_t         treeplet_1_size          = 0     ;
- cblc_field_t ** __gg__treeplet_1f              = NULL  ;
- size_t       *  __gg__treeplet_1o              = NULL  ;
- size_t       *  __gg__treeplet_1s              = NULL  ;
- 
- static size_t         treeplet_2_size          = 0     ;
- cblc_field_t ** __gg__treeplet_2f              = NULL  ;
- size_t       *  __gg__treeplet_2o              = NULL  ;
- size_t       *  __gg__treeplet_2s              = NULL  ;
- 
- static size_t         treeplet_3_size          = 0     ;
- cblc_field_t ** __gg__treeplet_3f              = NULL  ;
- size_t       *  __gg__treeplet_3o              = NULL  ;
- size_t       *  __gg__treeplet_3s              = NULL  ;
- 
- static size_t         treeplet_4_size          = 0     ;
- cblc_field_t ** __gg__treeplet_4f              = NULL  ;
- size_t       *  __gg__treeplet_4o              = NULL  ;
- size_t       *  __gg__treeplet_4s              = NULL  ;
- 
- 
  // This value is increased every time PROCEDURE DIVISION is processed.  It is
  // used to keep track of local variables.
  size_t      __gg__unique_prog_id              = 0    ;
--- 162,167 ----
*************** __gg__get_default_currency_string()
*** 588,652 ****
    return currency_signs(__gg__default_currency_sign).c_str();
    }
  
- extern "C"
- void
- __gg__resize_int_p( size_t *size,
-                     int    **block,
-                     size_t  new_size)
-   {
-   if( new_size > *size )
-     {
-     *size = new_size;
-     *block = static_cast<int *>(realloc(*block, new_size * sizeof(int)));
-     }
-   }
- 
- extern "C"
- void
- __gg__resize_treeplet(int     ngroup,
-                       size_t  new_size)
-   {
-   switch( ngroup )
-     {
-     case 1:
-       if( new_size > treeplet_1_size )
-         {
-         treeplet_1_size = new_size;
-         __gg__treeplet_1f = static_cast<cblc_field_t **>(realloc(__gg__treeplet_1f, new_size * sizeof(cblc_field_t *)));
-         __gg__treeplet_1o = static_cast<size_t *>(realloc(__gg__treeplet_1o, new_size * sizeof(size_t)));
-         __gg__treeplet_1s = static_cast<size_t *>(realloc(__gg__treeplet_1s, new_size * sizeof(size_t)));
-         }
-     break;
-     case 2:
-       if( new_size > treeplet_2_size )
-         {
-         treeplet_2_size = new_size;
-         __gg__treeplet_2f = static_cast<cblc_field_t **>(realloc(__gg__treeplet_2f, new_size * sizeof(cblc_field_t *)));
-         __gg__treeplet_2o = static_cast<size_t *>(realloc(__gg__treeplet_2o, new_size * sizeof(size_t)));
-         __gg__treeplet_2s = static_cast<size_t *>(realloc(__gg__treeplet_2s, new_size * sizeof(size_t)));
-         }
-     break;
-     case 3:
-       if( new_size > treeplet_3_size )
-         {
-         treeplet_3_size = new_size;
-         __gg__treeplet_3f = static_cast<cblc_field_t **>(realloc(__gg__treeplet_3f, new_size * sizeof(cblc_field_t *)));
-         __gg__treeplet_3o = static_cast<size_t *>(realloc(__gg__treeplet_3o, new_size * sizeof(size_t)));
-         __gg__treeplet_3s = static_cast<size_t *>(realloc(__gg__treeplet_3s, new_size * sizeof(size_t)));
-         }
-     break;
-     case 4:
-       if( new_size > treeplet_4_size )
-         {
-         treeplet_4_size = new_size;
-         __gg__treeplet_4f = static_cast<cblc_field_t **>(realloc(__gg__treeplet_4f, new_size * sizeof(cblc_field_t *)));
-         __gg__treeplet_4o = static_cast<size_t *>(realloc(__gg__treeplet_4o, new_size * sizeof(size_t)));
-         __gg__treeplet_4s = static_cast<size_t *>(realloc(__gg__treeplet_4s, new_size * sizeof(size_t)));
-         }
-     break;
-     }
-   }
- 
  static void
  initialize_program_state()
    {
--- 544,549 ----
*************** initialize_program_state()
*** 654,673 ****
    program_state initial_value = {};
    program_states.push_back(initial_value);
    __gg__currency_signs = program_states.back().rt_currency_signs;
- 
-   // This is where we initialize the various tables that have
-   // MIN_FIELD_BLOCK_SIZE elements:
- 
-   __gg__resize_int_p(&__gg__arithmetic_rounds_size,
-                      &__gg__arithmetic_rounds,
-                       MIN_FIELD_BLOCK_SIZE );
-   __gg__resize_int_p(&__gg__fourplet_flags_size,
-                      &__gg__fourplet_flags,
-                       MIN_FIELD_BLOCK_SIZE );
-   __gg__resize_treeplet(1, MIN_FIELD_BLOCK_SIZE);
-   __gg__resize_treeplet(2, MIN_FIELD_BLOCK_SIZE);
-   __gg__resize_treeplet(3, MIN_FIELD_BLOCK_SIZE);
-   __gg__resize_treeplet(4, MIN_FIELD_BLOCK_SIZE);
    }
  
  extern "C"
--- 551,556 ----
*************** format_for_display_internal(char **dest,
*** 3399,3404 ****
--- 3282,3288 ----
      case FldNumericBinary:
      case FldPacked:
      case FldNumericBin5:
+     case FldLiteralN:
        {
        int dummy;
        int digits;
*************** format_for_display_internal(char **dest,
*** 3441,3447 ****
              digits = 19;
              break;
            case 16:
!             digits = MAX_FIXED_POINT_DIGITS;
              break;
            default:
              warnx("%s(): %s has capacity %ld\n",
--- 3325,3339 ----
              digits = 19;
              break;
            case 16:
!             // digits = MAX_FIXED_POINT_DIGITS;
!             /* This requires some context.  Although we generally operate on
!                the basis of MAX_FIXED_POINT_DIGITS (currently 37, which gives
!                one digit of headroom for rounding and such), a PIC X(16) COMP-X
!                provides for an honest 128-bits of binary value.  If that is set
!                to HIGH-VALUE, the decimal representation requires 39 decimal
!                digits.  So, we do that here so that the DISPLAY of that value
!                is accurate. */
!             digits = 39;
              break;
            default:
              warnx("%s(): %s has capacity %ld\n",
*************** get_float128( const cblc_field_t *field,
*** 4010,4018 ****
    return retval;
    }
  
! static
  int
! compare_field_class(const cblc_field_t  *conditional,
                      unsigned char       *conditional_location,
                      int                  conditional_length,
                      cblc_field_t        *list)
--- 3902,3910 ----
    return retval;
    }
  
! extern "C"
  int
! __gg__compare_field_class(const cblc_field_t  *conditional,
                      unsigned char       *conditional_location,
                      int                  conditional_length,
                      cblc_field_t        *list)
*************** interconvert( char **allocated_left,
*** 4346,4422 ****
    *allocated_left  = nullptr;
    *allocated_right = nullptr;
  
-   bool convert_left_to_right = false;
-   bool convert_right_to_left = false;
- 
-   size_t converted_length;
-   const char *converted;
    if( *encoding_left == *encoding_right )
      {
      // This is both the most-seen situation, and, happily, the easiest to
      // handle.  We just do nothing.
      }
-   else if(   *encoding_left  == __gg__national_encoding
-           || *encoding_right == __gg__national_encoding )
-     {
-     // The encodings are different, but at least one is the national encoding.
-     // Convert the other one to be national as well:
-     if( *encoding_left != __gg__national_encoding )
-       {
-       convert_left_to_right = true;
-       }
-     else
-       {
-       convert_right_to_left = true;
-       }
-     }
    else
      {
!     // We have two different encodings, and neither of them are national.  This
!     // can happen when a file descriptor has a specific codeset that doesn't
!     // match the national codeset.  We will convert the narrower to the wider;
!     // if they are both the same width we will pick one arbitrarily.
      const charmap_t *charmap_left  = __gg__get_charmap(*encoding_left);
      const charmap_t *charmap_right = __gg__get_charmap(*encoding_right);
!     if( charmap_right->stride() >= charmap_left->stride() )
        {
!       convert_left_to_right = true;
        }
      else
        {
!       convert_right_to_left = true;
        }
-     }
  
!   if( convert_left_to_right )
!     {
!     // Convert the left side to the right encoding
!     converted = __gg__iconverter(*encoding_left,
!                                  *encoding_right,
!                                  *left_string,
!                                  *left_length,
!                                  &converted_length);
!     *encoding_left = *encoding_right ;
!     *allocated_left = static_cast<char *>(malloc(converted_length));
!     massert(*allocated_left);
!     *left_string = *allocated_left;
!     *left_length = converted_length;
!     memcpy(*left_string, converted, *left_length);
!     }
!   if( convert_right_to_left )
!     {
!     // Convert the right side to the left_encoding
!     converted = __gg__iconverter(*encoding_right,
!                                  *encoding_left,
!                                  *right_string,
!                                  *right_length,
!                                  &converted_length);
!     *encoding_right = *encoding_left ;
!     *allocated_right = static_cast<char *>(malloc(converted_length));
!     massert(*allocated_right);
!     *right_string = *allocated_right;
!     *right_length = converted_length;
!     memcpy(right_string, converted, *right_length);
      }
    }
  
--- 4238,4328 ----
    *allocated_left  = nullptr;
    *allocated_right = nullptr;
  
    if( *encoding_left == *encoding_right )
      {
      // This is both the most-seen situation, and, happily, the easiest to
      // handle.  We just do nothing.
      }
    else
      {
!     bool convert_left_to_right = false;
!     bool convert_right_to_left = false;
!     size_t converted_length;
!     const char *converted;
! 
!     // We are dealing with two different encodings
      const charmap_t *charmap_left  = __gg__get_charmap(*encoding_left);
      const charmap_t *charmap_right = __gg__get_charmap(*encoding_right);
!     if( charmap_left->stride() == charmap_right->stride() )
        {
!       // The strides are the same.  If one is display, convert the other to
!       // display.  If one is national, convert the other to national
!       if( *encoding_left  == __gg__display_encoding )
!         {
!         convert_right_to_left = true;
!         }
!       else if(*encoding_right  == __gg__display_encoding )
!         {
!         convert_left_to_right = true;
!         }
!       else if(*encoding_left  == __gg__national_encoding )
!         {
!         convert_right_to_left = true;
!         }
!       else if(*encoding_right  == __gg__national_encoding )
!         {
!         convert_left_to_right = true;
!         }
!       else
!         {
!         // The strides are the same, but we don't know anything about the
!         // encodings.  Toss a coin:
!         convert_right_to_left = true;
!         }
        }
      else
        {
!       // The two strides are different.  Convert the narrow to the wider:
!       if( charmap_left->stride() > charmap_right->stride() )
!         {
!         convert_right_to_left = true;
!         }
!       else
!         {
!         convert_left_to_right = true;
!         }
        }
  
!     if( convert_left_to_right )
!       {
!       // Convert the left side to the right encoding
!       converted = __gg__iconverter(*encoding_left,
!                                    *encoding_right,
!                                    *left_string,
!                                    *left_length,
!                                    &converted_length);
!       *encoding_left = *encoding_right ;
!       *allocated_left = static_cast<char *>(malloc(converted_length));
!       massert(*allocated_left);
!       *left_string = *allocated_left;
!       *left_length = converted_length;
!       memcpy(*left_string, converted, *left_length);
!       }
!     if( convert_right_to_left )
!       {
!       // Convert the right side to the left_encoding
!       converted = __gg__iconverter(*encoding_right,
!                                    *encoding_left,
!                                    *right_string,
!                                    *right_length,
!                                    &converted_length);
!       *encoding_right = *encoding_left ;
!       *allocated_right = static_cast<char *>(malloc(converted_length));
!       massert(*allocated_right);
!       *right_string = *allocated_right;
!       *right_length = converted_length;
!       memcpy(*right_string, converted, *right_length);
!       }
      }
    }
  
*************** __gg__compare_2(cblc_field_t  *left_side
*** 4544,4550 ****
  
    if( right_side->type == FldClass )
      {
!     return compare_field_class( left_side,
                                  left_location,
                                  left_length,
                                  right_side);
--- 4450,4456 ----
  
    if( right_side->type == FldClass )
      {
!     return __gg__compare_field_class( left_side,
                                  left_location,
                                  left_length,
                                  right_side);
*************** __gg__move( cblc_field_t        *fdest,
*** 6093,6098 ****
--- 5999,6033 ----
  
                source_size   = fsource->digits;
  
+               // We have to deal with the special case of moving a pure binary
+               // value to an alphanumeric, which starts with a source_size
+               // of zero.
+               if( source_size == 0 )
+                 {
+                 switch(fsource->capacity)
+                   {
+                   case 1:
+                     source_size = 3;
+                     break;
+                   case 2:
+                     source_size = 5;
+                     break;
+                   case 3:
+                   case 4:
+                     source_size = 10;
+                     break;
+                   case 5:
+                   case 6:
+                   case 7:
+                   case 8:
+                     source_size = 20;
+                     break;
+                   default:
+                     source_size = 39;
+                     break;
+                   }
+                 }
+ 
                // Turn the integer value into a string:
                __gg__binary_to_string_encoded(ach,
                                               source_size,
*************** __gg__move( cblc_field_t        *fdest,
*** 6109,6115 ****
                // Specifically, we'll move pach to point to the first
                // character that isn't zero.
  
!               if( fsource->attr & intermediate_e )
                  {
                  while(source_size > 1)  // This ensures we leave one '0'
                    {
--- 6044,6050 ----
                // Specifically, we'll move pach to point to the first
                // character that isn't zero.
  
!               if( fsource->attr & intermediate_e || fsource->digits == 0)
                  {
                  while(source_size > 1)  // This ensures we leave one '0'
                    {
*************** normalize_for_inspect_format_4(const cbl
*** 7363,7369 ****
  
  extern "C"
  int
! __gg__string(const size_t integers[])
    {
    // The first integer is the count of identifier-2 values.  Call it N
    // The following N integers are the counts of each of the identifier-1 values,
--- 7298,7304 ----
  
  extern "C"
  int
! __gg__string(const size_t integers[], const cblc_referlet_t *ref)
    {
    // The first integer is the count of identifier-2 values.  Call it N
    // The following N integers are the counts of each of the identifier-1 values,
*************** __gg__string(const size_t integers[])
*** 7376,7391 ****
    // That's followed by identifier2 for N2
    // And so on
  
-   cblc_field_t **ref   = __gg__treeplet_1f;
-   const size_t  *ref_o = __gg__treeplet_1o;
-   const size_t  *ref_s = __gg__treeplet_1s;
- 
    static const int INDEX_OF_POINTER = 1;
  
    size_t index_cblc = 0 ;
  
    // Pick up the target
!   const cblc_field_t *tgt = ref[index_cblc];
  
    // Pick up the target encoding, which according to the ISO specification
    // controls all the parameters.
--- 7311,7322 ----
    // That's followed by identifier2 for N2
    // And so on
  
    static const int INDEX_OF_POINTER = 1;
  
    size_t index_cblc = 0 ;
  
    // Pick up the target
!   const cblc_field_t *tgt = ref[index_cblc].field;
  
    // Pick up the target encoding, which according to the ISO specification
    // controls all the parameters.
*************** __gg__string(const size_t integers[])
*** 7394,7401 ****
    int stride = charmap->stride();
  
    // Pick up the rest of the parameters
!   size_t tgt_o              = ref_o[index_cblc];
!   size_t tgt_s              = ref_s[index_cblc];
    index_cblc += 1;
  
    char  *dest         = reinterpret_cast<char *>(tgt->data + tgt_o);
--- 7325,7332 ----
    int stride = charmap->stride();
  
    // Pick up the rest of the parameters
!   size_t tgt_o = ref[index_cblc].offset;
!   size_t tgt_s = ref[index_cblc].size;
    index_cblc += 1;
  
    char  *dest         = reinterpret_cast<char *>(tgt->data + tgt_o);
*************** __gg__string(const size_t integers[])
*** 7407,7420 ****
    // Pick up the pointer, if any
    size_t pointer = 0;
    int overflow = 0;
!   if( ref[INDEX_OF_POINTER] )
      {
      int rdigits;
      int p  = (size_t)__gg__binary_value_from_qualified_field(
                                                      &rdigits,
!                                                     ref  [INDEX_OF_POINTER],
!                                                     ref_o[INDEX_OF_POINTER],
!                                                     ref_s[INDEX_OF_POINTER]
                                                      );
      if( p<0 )
        {
--- 7338,7351 ----
    // Pick up the pointer, if any
    size_t pointer = 0;
    int overflow = 0;
!   if( ref[INDEX_OF_POINTER].field )
      {
      int rdigits;
      int p  = (size_t)__gg__binary_value_from_qualified_field(
                                                      &rdigits,
!                                                     ref[INDEX_OF_POINTER].field,
!                                                     ref[INDEX_OF_POINTER].offset,
!                                                     ref[INDEX_OF_POINTER].size
                                                      );
      if( p<0 )
        {
*************** __gg__string(const size_t integers[])
*** 7441,7449 ****
  
        // Pick up the identifier_2 DELIMITED BY value
        std::u32string str_id2 = normalize_for_inspect_format_4(
!                                                         ref[index_cblc],
!                                                         ref_o[index_cblc],
!                                                         ref_s[index_cblc],
                                                          tgt_encoding);
        index_cblc += 1;
  
--- 7372,7380 ----
  
        // Pick up the identifier_2 DELIMITED BY value
        std::u32string str_id2 = normalize_for_inspect_format_4(
!                                                         ref[index_cblc].field,
!                                                         ref[index_cblc].offset,
!                                                         ref[index_cblc].size,
                                                          tgt_encoding);
        index_cblc += 1;
  
*************** __gg__string(const size_t integers[])
*** 7451,7459 ****
          {
          // Pick up the next id-1 source string for the current id-2 delimiter
          std::u32string str_id1 = normalize_for_inspect_format_4(
!                                                         ref[index_cblc],
!                                                         ref_o[index_cblc],
!                                                         ref_s[index_cblc],
                                                          tgt_encoding);
          index_cblc += 1;
  
--- 7382,7390 ----
          {
          // Pick up the next id-1 source string for the current id-2 delimiter
          std::u32string str_id1 = normalize_for_inspect_format_4(
!                                                         ref[index_cblc].field,
!                                                         ref[index_cblc].offset,
!                                                         ref[index_cblc].size,
                                                          tgt_encoding);
          index_cblc += 1;
  
*************** __gg__string(const size_t integers[])
*** 7507,7517 ****
        }
  
      // Update the pointer, if there is one
!     if( ref[INDEX_OF_POINTER] )
        {
!       __gg__int128_to_qualified_field(ref  [INDEX_OF_POINTER],
!                                       ref_o[INDEX_OF_POINTER],
!                                       ref_s[INDEX_OF_POINTER],
                                        (__int128)(pointer+1),
                                        0,
                                        truncation_e,
--- 7438,7448 ----
        }
  
      // Update the pointer, if there is one
!     if( ref[INDEX_OF_POINTER].field )
        {
!       __gg__int128_to_qualified_field(ref[INDEX_OF_POINTER].field,
!                                       ref[INDEX_OF_POINTER].offset,
!                                       ref[INDEX_OF_POINTER].size,
                                        (__int128)(pointer+1),
                                        0,
                                        truncation_e,
*************** display_both(cblc_field_t  *field,
*** 7539,7544 ****
--- 7470,7481 ----
    static size_t display_string_size = MINIMUM_ALLOCATION_SIZE;
    static char *display_string = static_cast<char *>(malloc(display_string_size));
  
+   if( field->type == FldLiteralA && field->encoding == custom_encoding_e )
+     {
+     field->encoding = DEFAULT_SOURCE_ENCODING;
+     }
+ 
+ 
    cbl_encoding_t encoding = format_for_display_internal(
                                              &display_string,
                                              &display_string_size,
*************** __gg__assign_value_from_stack(cblc_field
*** 9399,9435 ****
  
  extern "C"
  int
! __gg__literaln_alpha_compare(      char         *left_side,
!                              const cblc_field_t *right,
!                              size_t              offset,
!                              size_t              length,
!                              int                 flags)
!   {
!   int retval;
!   if( length == 0 )
!     {
!     length = right->capacity;
!     }
! 
!   cbl_encoding_t right_encoding = right->encoding;
!   if( right->attr & hex_encoded_e )
!     {
!     right_encoding = iconv_CP1252_e;
!     }
!   retval = compare_strings(   left_side,
!                               strlen(left_side),
!                               false,
!                               reinterpret_cast<char *>((right->data + offset)),
!                               length,
!                               !!(flags & REFER_T_MOVE_ALL),
!                               right_encoding,
!                               right_encoding);
!   return retval;
!   }
! 
! extern "C"
! int
! __gg__unstring( const cblc_field_t *id1,        // The string being unstring
                  size_t              id1_o,
                  size_t              id1_s,
                  size_t ndelimiteds,       // The number of DELIMITED entries
--- 9336,9346 ----
  
  extern "C"
  int
! __gg__unstring( const cblc_referlet_t *id2,
!                 const cblc_referlet_t *id4,
!                 const cblc_referlet_t *id5,
!                 const cblc_referlet_t *id6,
!                 const cblc_field_t *id1,        // The string being unstring
                  size_t              id1_o,
                  size_t              id1_s,
                  size_t ndelimiteds,       // The number of DELIMITED entries
*************** __gg__unstring( const cblc_field_t *id1,
*** 9452,9474 ****
    // resolved.  Each might have an identifier-5 delimiter, and each might have
    // an identifier-6 count.
  
-   // The delimiting strings; one per ndelimiteds
-   cblc_field_t **id2         = __gg__treeplet_1f;
-   const size_t        *id2_o = __gg__treeplet_1o;
-   const size_t        *id2_s = __gg__treeplet_1s;
-   // The delimited string; one per nreceiver
-   cblc_field_t **id4         = __gg__treeplet_2f;
-   const size_t        *id4_o = __gg__treeplet_2o;
-   const size_t        *id4_s = __gg__treeplet_2s;
-   // The delimiting string; one per receiver
-   cblc_field_t **id5         = __gg__treeplet_3f;
-   const size_t        *id5_o = __gg__treeplet_3o;
-   const size_t        *id5_s = __gg__treeplet_3s;
-   // The count of characters examined;  one per receiver
-   cblc_field_t **id6         = __gg__treeplet_4f;
-   const size_t        *id6_o = __gg__treeplet_4o;
-   const size_t        *id6_s = __gg__treeplet_4s;
- 
    // Initialize the state variables
    int overflow = 0;
    int tally = 0;
--- 9363,9368 ----
*************** __gg__unstring( const cblc_field_t *id1,
*** 9546,9557 ****
          break;
          }
        // We will peel off enough characters to fit the receiving id4:
!       size_t id_4_size = id4_s[receiver]/stride_id1;
!       if( id4[receiver]->attr & separate_e )
          {
          // The receiver is NumericDisplay with a separate sign, so, as per
          // the spec, we reduce the size by one character.
!         id_4_size = id4_s[receiver] - 1;
          }
  
        // Make sure id_4_size doesn't take us past the end of the universe
--- 9440,9451 ----
          break;
          }
        // We will peel off enough characters to fit the receiving id4:
!       size_t id_4_size = id4[receiver].size/stride_id1;
!       if( id4[receiver].field->attr & separate_e )
          {
          // The receiver is NumericDisplay with a separate sign, so, as per
          // the spec, we reduce the size by one character.
!         id_4_size = id4[receiver].size - 1;
          }
  
        // Make sure id_4_size doesn't take us past the end of the universe
*************** __gg__unstring( const cblc_field_t *id1,
*** 9569,9577 ****
                                                 &bytes_converted );
        char *duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
        // Put the converted string into place:
!       __gg__field_from_string(id4[receiver],
!                         id4_o[receiver],
!                         id4_s[receiver],
                          duped,
                          bytes_converted);
        free(duped);
--- 9463,9471 ----
                                                 &bytes_converted );
        char *duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
        // Put the converted string into place:
!       __gg__field_from_string(id4[receiver].field,
!                         id4[receiver].offset,
!                         id4[receiver].size,
                          duped,
                          bytes_converted);
        free(duped);
*************** __gg__unstring( const cblc_field_t *id1,
*** 9589,9597 ****
    for( size_t i=0; i<ndelimiteds; i++ )
      {
      std::u32string delimiter
!         = normalize_for_inspect_format_4(id2[i],
!                                          id2_o[i],
!                                          id2_s[i],
                                           id1->encoding);
      delimiters.push_back(delimiter);
      }
--- 9483,9491 ----
    for( size_t i=0; i<ndelimiteds; i++ )
      {
      std::u32string delimiter
!         = normalize_for_inspect_format_4(id2[i].field,
!                                          id2[i].offset,
!                                          id2[i].size,
                                           id1->encoding);
      delimiters.push_back(delimiter);
      }
*************** __gg__unstring( const cblc_field_t *id1,
*** 9667,9675 ****
                             &bytes_converted );
      char *duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
      // Put the converted string into place:
!     __gg__field_from_string(id4[nreceiver],
!                       id4_o[nreceiver],
!                       id4_s[nreceiver],
                        duped,
                        bytes_converted);
      free(duped);
--- 9561,9569 ----
                             &bytes_converted );
      char *duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
      // Put the converted string into place:
!     __gg__field_from_string(id4[nreceiver].field,
!                       id4[nreceiver].offset,
!                       id4[nreceiver].size,
                        duped,
                        bytes_converted);
      free(duped);
*************** __gg__unstring( const cblc_field_t *id1,
*** 9677,9683 ****
      left = best_location + (best_delimiter > -1
                              ? delimiters[best_delimiter].size()
                              : 0) ;
!     if( id5[nreceiver] )
        {
        // The caller wants to know what the delimiter was:
        if( best_delimiter > -1 )
--- 9571,9577 ----
      left = best_location + (best_delimiter > -1
                              ? delimiters[best_delimiter].size()
                              : 0) ;
!     if( id5[nreceiver].field )
        {
        // The caller wants to know what the delimiter was:
        if( best_delimiter > -1 )
*************** __gg__unstring( const cblc_field_t *id1,
*** 9689,9697 ****
                               delimiters[best_delimiter].size()*width_of_utf32,
                               &bytes_converted );
          duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
!         __gg__field_from_string(id5[nreceiver],
!                           id5_o[nreceiver],
!                           id5_s[nreceiver],
                            duped,
                            bytes_converted);
          free(duped);
--- 9583,9591 ----
                               delimiters[best_delimiter].size()*width_of_utf32,
                               &bytes_converted );
          duped = static_cast<char *>(__gg__memdup(converted, bytes_converted));
!         __gg__field_from_string(id5[nreceiver].field,
!                           id5[nreceiver].offset,
!                           id5[nreceiver].size,
                            duped,
                            bytes_converted);
          free(duped);
*************** __gg__unstring( const cblc_field_t *id1,
*** 9699,9717 ****
        else
          {
          // We didn't find a delimiter
!         __gg__field_from_string(id5[nreceiver],
!                           id5_o[nreceiver],
!                           id5_s[nreceiver],
                            "",
                            0);
          }
        }
  
!     if( id6[nreceiver] )
        {
!       __gg__int128_to_qualified_field(id6[nreceiver],
!                                       id6_o[nreceiver],
!                                       id6_s[nreceiver],
                                        (__int128)examined,
                                        0,
                                        truncation_e,
--- 9593,9611 ----
        else
          {
          // We didn't find a delimiter
!         __gg__field_from_string(id5[nreceiver].field,
!                           id5[nreceiver].offset,
!                           id5[nreceiver].size,
                            "",
                            0);
          }
        }
  
!     if( id6[nreceiver].field )
        {
!       __gg__int128_to_qualified_field(id6[nreceiver].field,
!                                       id6[nreceiver].offset,
!                                       id6[nreceiver].size,
                                        (__int128)examined,
                                        0,
                                        truncation_e,
*************** __gg__just_mangle_name( const cblc_field
*** 11019,11033 ****
    static char ach_unmangled[1024];
    static char ach_mangled[1024];
  
    assert(field);
    assert(field->data);
  
    size_t         length;
    length = field->capacity;
  
    // We need ach_name to be in ASCII:
    size_t charsout;
!   const char *converted = __gg__iconverter(field->encoding,
                                             __gg__console_encoding,
                                             PTRCAST(char, field->data),
                                             length,
--- 10913,10938 ----
    static char ach_unmangled[1024];
    static char ach_mangled[1024];
  
+ 
    assert(field);
    assert(field->data);
  
    size_t         length;
    length = field->capacity;
  
+   cbl_encoding_t encoding = field->encoding;
+   if( field->type == FldLiteralA )
+     {
+     // This is a little complicated.  FldLiteralA means somebody said
+     // CALL "LiteralName"m and we know that such things are in the
+     // display_encoding.  The parser assumes this, and so it doesn't set the
+     // encoding in the field, although it probably should.
+     encoding = DEFAULT_SOURCE_ENCODING;
+     }
+ 
    // We need ach_name to be in ASCII:
    size_t charsout;
!   const char *converted = __gg__iconverter(encoding,
                                             __gg__console_encoding,
                                             PTRCAST(char, field->data),
                                             length,
*************** __gg__convert(cblc_field_t *dest,
*** 12254,12260 ****
                int           /*source_format*/,
                int           dest_format)
    {
!   /* convert formulations: 
     *  1. ANY to ALNUM HEX, or NAT HEX
     *  2. HEX to BYTE
     *  3. ALNUM to NAT, ALNUM HEX, or NAT HEX
--- 12159,12165 ----
                int           /*source_format*/,
                int           dest_format)
    {
!   /* convert formulations:
     *  1. ANY to ALNUM HEX, or NAT HEX
     *  2. HEX to BYTE
     *  3. ALNUM to NAT, ALNUM HEX, or NAT HEX
*************** __gg__convert(cblc_field_t *dest,
*** 12267,12284 ****
     *convert_any_e        = 0x03, // i.e., both
     *convert_byte_e       = 0x04,
     *convert_hex_e        = 0x08, // may be combined with alpha or national
!    *convert_just_bit_e   = 0x10, 
     *convert_just_e       = 0x18, // combined with HEX
!    *convert_rjust_bit_e  = 0x20, 
     *convert_rjust_e      = 0x38, // combined with JUSTIFY
     */
!   cbl_encoding_t tgt_enc = (dest_format & convert_nat_e) 
                           ? __gg__national_encoding
                           : __gg__display_encoding;
    const charmap_t *charmap_tgt = __gg__get_charmap(tgt_enc);
  
    charmap_t *charmap_dest = __gg__get_charmap(dest->encoding);
!   
    if( dest_format & convert_hex_e )
      {
      size_t nbytes;
--- 12172,12189 ----
     *convert_any_e        = 0x03, // i.e., both
     *convert_byte_e       = 0x04,
     *convert_hex_e        = 0x08, // may be combined with alpha or national
!    *convert_just_bit_e   = 0x10,
     *convert_just_e       = 0x18, // combined with HEX
!    *convert_rjust_bit_e  = 0x20,
     *convert_rjust_e      = 0x38, // combined with JUSTIFY
     */
!   cbl_encoding_t tgt_enc = (dest_format & convert_nat_e)
                           ? __gg__national_encoding
                           : __gg__display_encoding;
    const charmap_t *charmap_tgt = __gg__get_charmap(tgt_enc);
  
    charmap_t *charmap_dest = __gg__get_charmap(dest->encoding);
! 
    if( dest_format & convert_hex_e )
      {
      size_t nbytes;
*************** __gg__convert(cblc_field_t *dest,
*** 12369,12374 ****
--- 12274,12287 ----
      }
    }
  
+ /*
+    gg_printf("Message: \n", NULL_TREE);
+    gg_call(VOID,
+           "__gg__show_int128",
+           value,
+           NULL_TREE);
+    gg_printf("\n", NULL_TREE);
+ */
  
  extern "C"
  __int128
*************** __gg__look_at_pointer(void *ptr)
*** 12395,12404 ****
  
  extern "C"
  void
! __gg__set_data_member(cblc_field_t *field, unsigned char *data)
    {
!   // This function is used to hide the initialization of the ->data member
!   // from the compiler.  This avoids the bug that causes n-squared time in the
!   // middle end for a -O0 compiler when doing a -fpie compilation.
!   field->data = data;
    }
--- 12308,13005 ----
  
  extern "C"
  void
! __gg__show_int128(__int128 val)
    {
!   if( val < 0 )
!     {
!     fprintf(stderr, "-");
!     val = -val;
!     }
!   char ach[128];
!   if(val == 0)
!     {
!     fprintf(stderr, "0");
!     return;
!     }
!   int index = 0;
!   while(val)
!     {
!     ach[index++] = '0' + val % 10;
!     val /= 10;
!     }
!   ach[index++] = '\0';
!   while( index > 0 )
!     {
!     fprintf(stderr, "%c", ach[--index]);
!     }
    }
+ 
+ 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".
+ 
+   // We are comparing the left data to the right data, where the right
+   // data is repeated as necessary to match the length of the left.
+ 
+   /* There are unanswered questions about display, versus national, and
+      how to handle different user-defined alphabets for display and national
+      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 )
+     {
+     while( index < length_left )
+       {
+       unsigned char ch_l = collated(left[index]);
+       unsigned char ch_r = collated(right[index % length_right]);
+ 
+       if( ch_l != ch_r )
+         {
+         *result =  ch_l < ch_r ? -1 : +1 ;
+         break;
+         }
+       index += 1;
+       }
+     }
+   else if ( stride == 2 )
+     {
+     length_left /= 2;
+     length_right /= 2;
+     const unsigned short *l = reinterpret_cast<const unsigned short *>(left);
+     const unsigned short *r = reinterpret_cast<const unsigned short *>(right);
+     while( index < length_left )
+      {
+       unsigned short ch_l = l[index];
+       unsigned short ch_r = r[index % length_right];
+       if( ch_l != ch_r )
+         {
+         *result =  ch_l < ch_r ? -1 : +1 ;
+         break;
+         }
+       index += 1;
+       }
+     }
+   else
+     {
+     length_left /= 4;
+     length_right /= 4;
+     const unsigned long *l = reinterpret_cast<const unsigned long *>(left);
+     const unsigned long *r = reinterpret_cast<const unsigned long *>(right);
+     while( index < length_left )
+       {
+       unsigned long ch_l = l[index];
+       unsigned long ch_r = r[index % length_right];
+       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,
+                         cbl_char_t      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;
+   unsigned char char_space = char_space_;
+ 
+   size_t length = std::min(length_left, length_right);
+   size_t index = 0;
+   while( index < length )
+     {
+     unsigned char ch_l = collated(left[index]);
+     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;
+       }
+     while( index < length_right )
+       {
+       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 "                "
+ #define ASCII_64    ASCII_16  ASCII_16  ASCII_16  ASCII_16
+ #define ASCII_256   ASCII_64  ASCII_64  ASCII_64  ASCII_64
+ #define ASCII_1024  ASCII_256 ASCII_256 ASCII_256 ASCII_256
+ 
+ #define EBCDIC_16 "@@@@@@@@@@@@@@@@"
+ #define EBCDIC_64    EBCDIC_16  EBCDIC_16  EBCDIC_16  EBCDIC_16
+ #define EBCDIC_256   EBCDIC_64  EBCDIC_64  EBCDIC_64  EBCDIC_64
+ #define EBCDIC_1024  EBCDIC_256 EBCDIC_256 EBCDIC_256 EBCDIC_256
+ 
+ static const unsigned char  ascii_1024[1025] =  ASCII_1024;
+ 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,
+                          size_t          length_right,
+                          cbl_char_t      )
+   {
+   // 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
+       {
+       // We need to compare the trailing characters of left to inferred spaces
+       // on the right.
+       left += length;
+       length_left -= length;
+       while( length_left )
+         {
+         size_t this_time = std::min(1024UL, length_left);
+         *result = memcmp(left, ascii_1024, this_time);
+         if( *result )
+           {
+           break;
+           }
+         left += this_time;
+         length_left -= this_time;
+         }
+       }
+     else if( length < length_right ) // Left is shorter than Right
+       {
+       // We need to compare the trailing characters of left to inferred spaces
+       // on the right.
+       right += length;
+       length_right -= length;
+       while( length_right )
+         {
+         size_t this_time = std::min(1024UL, length_right);
+         *result = memcmp(ascii_1024, right, this_time);
+         if( *result )
+           {
+           break;
+           }
+         right += this_time;
+         length_right -= this_time;
+         }
+       }
+     }
+   return;
+   }
+ 
+ extern "C"
+ void
+ __gg__compare_string_1e( int            *result,
+                    const unsigned char  *left,
+                          size_t          length_left,
+                    const unsigned char  *right,
+                          size_t          length_right,
+                          cbl_char_t      )
+   {
+   // 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
+       {
+       // We need to compare the trailing characters of left to inferred spaces
+       // on the right.
+       left += length;
+       length_left -= length;
+       while( length_left )
+         {
+         size_t this_time = std::min(1024UL, length_left);
+         *result = memcmp(left, ebcdic_1024, this_time);
+         if( *result )
+           {
+           break;
+           }
+         left += this_time;
+         length_left -= this_time;
+         }
+       }
+     else if( length < length_right ) // Left is shorter than Right
+       {
+       // We need to compare the trailing characters of left to inferred spaces
+       // on the right.
+       right += length;
+       length_right -= length;
+       while( length_right )
+         {
+         size_t this_time = std::min(1024UL, length_right);
+         *result = memcmp(ebcdic_1024, right, this_time);
+         if( *result )
+           {
+           break;
+           }
+         right += this_time;
+         length_right -= this_time;
+         }
+       }
+     }
+   return;
+   }
+ 
+ extern "C"
+ void
+ __gg__compare_string_2( int            *result,
+                    const unsigned short  *left,
+                          size_t          length_left,
+                    const unsigned short  *right,
+                          size_t          length_right,
+                          cbl_char_t      char_space_)
+   {
+   // This compares USHORT character strings:
+   *result = 0;
+   unsigned short char_space = char_space_;
+ 
+   length_left  /= 2;
+   length_right /= 2;
+   size_t length = std::min(length_left, length_right);
+   size_t index = 0;
+   while( index < length )
+     {
+     unsigned short ch_l = collated(left[index]);
+     unsigned short 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 short ch_l = collated(left[index]);
+       if( ch_l != char_space )
+         {
+         *result =  ch_l < char_space ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     while( index < length_right )
+       {
+       unsigned short ch_r = collated(right[index]);
+       if( char_space != ch_r )
+         {
+         *result =  char_space < ch_r ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     }
+   done:
+   return;
+   }
+ 
+ extern "C"
+ void
+ __gg__compare_string_2a( int            *result,
+                    const unsigned short  *left,
+                          size_t          length_left,
+                    const unsigned short  *right,
+                          size_t          length_right,
+                          cbl_char_t      char_space_)
+   {
+   // This compares USHORT character strings:
+   *result = 0;
+   unsigned short char_space = char_space_;
+ 
+   length_left  /= 2;
+   length_right /= 2;
+   size_t length = std::min(length_left, length_right);
+   size_t index = 0;
+   while( index < length )
+     {
+     unsigned short ch_l = left[index];
+     unsigned short ch_r = 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 short ch_l = left[index];
+       if( ch_l != char_space )
+         {
+         *result =  ch_l < char_space ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     while( index < length_right )
+       {
+       unsigned short ch_r = right[index];
+       if( char_space != ch_r )
+         {
+         *result =  char_space < ch_r ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     }
+   done:
+   return;
+   }
+ 
+ extern "C"
+ void
+ __gg__compare_string_4( int             *result,
+                    const unsigned long  *left,
+                          size_t          length_left,
+                    const unsigned long  *right,
+                          size_t          length_right,
+                          cbl_char_t      char_space_)
+   {
+   // This compares ULONG character strings:
+   *result = 0;
+   unsigned long char_space = char_space_;
+ 
+   length_left  /= 4;
+   length_right /= 4;
+   size_t length = std::min(length_left, length_right);
+   size_t index = 0;
+   while( index < length )
+     {
+     unsigned long ch_l = collated(left[index]);
+     unsigned long 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 long ch_l = collated(left[index]);
+       if( ch_l != char_space )
+         {
+         *result =  ch_l < char_space ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     while( index < length_right )
+       {
+       unsigned long ch_r = collated(right[index]);
+       if( char_space != ch_r )
+         {
+         *result =  char_space < ch_r ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     }
+   done:
+   return;
+   }
+ 
+ extern "C"
+ void
+ __gg__compare_string_4a( int             *result,
+                    const unsigned long  *left,
+                          size_t          length_left,
+                    const unsigned long  *right,
+                          size_t          length_right,
+                          cbl_char_t      char_space_)
+   {
+   // This compares ULONG character strings:
+   *result = 0;
+   unsigned long char_space = char_space_;
+ 
+   length_left  /= 4;
+   length_right /= 4;
+   size_t length = std::min(length_left, length_right);
+   size_t index = 0;
+   while( index < length )
+     {
+     unsigned long ch_l = left[index];
+     unsigned long ch_r = 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 long ch_l = left[index];
+       if( ch_l != char_space )
+         {
+         *result =  ch_l < char_space ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     while( index < length_right )
+       {
+       unsigned long ch_r = right[index];
+       if( char_space != ch_r )
+         {
+         *result =  char_space < ch_r ? -1 : +1 ;
+         goto done;
+         }
+       index += 1;
+       }
+     }
+   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. */
+   charmap_t *charmap = __gg__get_charmap(encoding_left);
+   int stride = charmap->stride();
+   cbl_char_t space = charmap->mapped_character(ascii_space);
+   size_t nbytes;
+   const unsigned char *converted = reinterpret_cast<unsigned char *>(
+                                     __gg__iconverter(encoding_right,
+                                                      encoding_left,
+                                                      right,
+                                                      length_right,
+                                                      &nbytes));
+   switch(stride)
+     {
+     case 1:
+       {
+       __gg__compare_string_1a( result,
+                                left,
+                                length_left,
+                                converted,
+                                nbytes,
+                                space);
+       break;
+       }
+ 
+     case 2:
+       {
+       __gg__compare_string_2(result,
+                              reinterpret_cast<const unsigned short *>(left),
+                              length_left,
+                              reinterpret_cast<const unsigned short *>(converted),
+                              nbytes,
+                              space);
+       break;
+       }
+ 
+     case 4:
+       {
+       __gg__compare_string_4(result,
+                              reinterpret_cast<const unsigned long *>(left),
+                              length_left,
+                              reinterpret_cast<const unsigned long *>(converted),
+                              nbytes,
+                              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 = reinterpret_cast<unsigned char *>(ach);
+   if( digits == 0 )
+     {
+     // Go for maximum length:
+     __gg__binary_to_string_ascii(ach, 38, value);
+     // Find the first non-zero digit:
+     while(digits > 1)
+       {
+       if( *pach != ascii_zero )
+         {
+         break;
+         }
+       digits -= 1;
+       pach += 1;
+       }
+     }
+   else
+     {
+     __gg__binary_to_string_ascii(ach, digits, value);
+     }
+ 
+   // we need to convert the ascii numeric string to the same encoding as the
+   // string:
+   const charmap_t *charmap = __gg__get_charmap(encoding);
+   size_t nbytes;
+   const char *converted = __gg__iconverter( DEFAULT_SOURCE_ENCODING,
+                                             encoding ,
+                                             ach,
+                                             digits,
+                                             &nbytes);
+   *result = 0;
+   for(size_t i=0; i<digits; i++)
+     {
+     cbl_char_t chl = charmap->getch(converted, i);
+     cbl_char_t chr = charmap->getch(string, i % length);
+ 
+     chl = collated(chl);
+     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 = reinterpret_cast<unsigned char *>(ach);
+   if( digits == 0 )
+     {
+     // Go for maximum length:
+     __gg__binary_to_string_ascii(ach, 38, value);
+     // Find the first non-zero digit:
+     while(digits > 1)
+       {
+       if( *pach != ascii_zero )
+         {
+         break;
+         }
+       digits -= 1;
+       pach += 1;
+       }
+     }
+   else
+     {
+     __gg__binary_to_string_ascii(ach, digits, value);
+     }
+   // ach is digits characters in DEFAULT_SOURCE_ENCODING.
+   // we need to convert the ascii numeric string to the right-side encoding
+   charmap_t *charmap = __gg__get_charmap(encoding);
+   cbl_char_t space = charmap->mapped_character(ascii_space);
+   size_t nbytes;
+   char *converted = __gg__iconverter( DEFAULT_SOURCE_ENCODING,
+                                       encoding ,
+                                       ach,
+                                       digits,
+                                       &nbytes);
+   switch( charmap->stride() )
+     {
+     case 1:
+       __gg__compare_string_1(result,
+                              reinterpret_cast<unsigned char *>(converted),
+                              nbytes,
+                              reinterpret_cast<unsigned char *>(right),
+                              length,
+                              space);
+       break;
+     case 2:
+       __gg__compare_string_2(result,
+                              reinterpret_cast<unsigned short *>(converted),
+                              nbytes,
+                              reinterpret_cast<unsigned short *>(right),
+                              length,
+                              space);
+       break;
+     case 4:
+       __gg__compare_string_4(result,
+                              reinterpret_cast<unsigned long *>(converted),
+                              nbytes,
+                              reinterpret_cast<unsigned long *>(right),
+                              length,
+                              space);
+       break;
+     }
+   return;
+   }
+ 
diff -Nrcpad gcc-17-20260510/libgcobol/stringbin.cc gcc-17-20260517/libgcobol/stringbin.cc
*** gcc-17-20260510/libgcobol/stringbin.cc	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgcobol/stringbin.cc	Sun May 17 22:32:14 2026
*************** bool
*** 270,299 ****
  __gg__binary_to_string_ascii(char *result, int digits, __int128 value)
    {
    zero_char = ascii_zero;
  
!   // Note that this routine does not terminate the generated string with a
!   // NUL.  This routine is sometimes used to generate a NumericDisplay string
!   // of digits in place, with no terminator.
!   __int128 mask = __gg__power_of_ten(digits);
  
!   COMBINED combined;
!   if( value < 0 )
!     {
!     value = -value;
!     }
  
!   // A non-zero retval means the number was too big to fit into the desired
!   // number of digits:
!   bool retval = !!(value / mask);
  
!   // mask off the bottom digits to avoid garbage when value is too large
!   value %= mask;
  
!   combined.start = 0;
!   combined.run = digits;
!   combined.val128 = value;
!   string_from_combined(combined);
!   memcpy(result, combined_string, digits);
    return retval;
    }
  
--- 270,318 ----
  __gg__binary_to_string_ascii(char *result, int digits, __int128 value)
    {
    zero_char = ascii_zero;
+   bool retval; // True means the value was too big to fit into digits
+   if( digits < 39 )
+     {
+     // Note that this routine does not terminate the generated string with a
+     // NUL.  This routine is sometimes used to generate a NumericDisplay string
+     // of digits in place, with no terminator.
+     __int128 mask = __gg__power_of_ten(digits);
  
!     COMBINED combined;
!     if( value < 0 )
!       {
!       value = -value;
!       }
  
!     // A non-zero retval means the number was too big to fit into the desired
!     // number of digits:
!     retval = !!(value / mask);
  
!     // mask off the bottom digits to avoid garbage when value is too large
!     value %= mask;
  
!     combined.start = 0;
!     combined.run = digits;
!     combined.val128 = value;
!     string_from_combined(combined);
!     memcpy(result, combined_string, digits);
!     return retval;
!     }
!   else
!     {
!     // We assume that this is a PIC X(16) COMP-X, so the value is always
!     // positive.
!     COMBINED combined;
!     // A non-zero retval means the number was too big to fit into the desired
!     // number of digits:
!     retval = false;
  
!     combined.start = 0;
!     combined.run = digits;
!     combined.val128 = value;
!     string_from_combined(combined);
!     memcpy(result, combined_string, digits);
!     }
    return retval;
    }
  
diff -Nrcpad gcc-17-20260510/libgfortran/ChangeLog gcc-17-20260517/libgfortran/ChangeLog
*** gcc-17-20260510/libgfortran/ChangeLog	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgfortran/ChangeLog	Sun May 17 22:32:14 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-05-16  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* caf/shmem/sync.h (lock_t): Rename to caf_shmem_lock_t.
+ 	* caf/shmem.c: Adapt uses.
+ 
  2026-05-08  Harald Anlauf  <anlauf@gmx.de>
  
  	PR libfortran/125087
diff -Nrcpad gcc-17-20260510/libgfortran/caf/shmem/sync.h gcc-17-20260517/libgfortran/caf/shmem/sync.h
*** gcc-17-20260510/libgfortran/caf/shmem/sync.h	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgfortran/caf/shmem/sync.h	Sun May 17 22:32:14 2026
*************** typedef struct {
*** 43,49 ****
    caf_shmem_condvar *triggers;
  } sync_t;
  
! typedef caf_shmem_mutex lock_t;
  
  typedef int event_t;
  
--- 43,49 ----
    caf_shmem_condvar *triggers;
  } sync_t;
  
! typedef caf_shmem_mutex caf_shmem_lock_t;
  
  typedef int event_t;
  
diff -Nrcpad gcc-17-20260510/libgfortran/caf/shmem.c gcc-17-20260517/libgfortran/caf/shmem.c
*** gcc-17-20260510/libgfortran/caf/shmem.c	Sun May 10 22:32:15 2026
--- gcc-17-20260517/libgfortran/caf/shmem.c	Sun May 17 22:32:14 2026
*************** _gfortran_caf_register (size_t size, caf
*** 273,279 ****
      case CAF_REGTYPE_LOCK_ALLOC:
      case CAF_REGTYPE_CRITICAL:
        {
! 	lock_t *addr;
  	bool created;
  	size_t alloc_size;
  
--- 273,279 ----
      case CAF_REGTYPE_LOCK_ALLOC:
      case CAF_REGTYPE_CRITICAL:
        {
! 	caf_shmem_lock_t *addr;
  	bool created;
  	size_t alloc_size;
  
*************** _gfortran_caf_register (size_t size, caf
*** 286,292 ****
  	alloc_size = size;
  #endif
  	addr = alloc_get_memory_by_id_created (&local->ai,
! 					       alloc_size * sizeof (lock_t),
  					       next_memid, &created);
  
  	if (created)
--- 286,292 ----
  	alloc_size = size;
  #endif
  	addr = alloc_get_memory_by_id_created (&local->ai,
! 					       alloc_size * sizeof (caf_shmem_lock_t),
  					       next_memid, &created);
  
  	if (created)
*************** _gfortran_caf_register (size_t size, caf
*** 296,302 ****
  	    for (size_t c = 0; c < alloc_size; ++c)
  	      initialize_shared_errorcheck_mutex (&addr[c]);
  	  }
! 	size *= sizeof (lock_t);
  
  	allocator_unlock (&local->ai.alloc);
  	mem = addr;
--- 296,302 ----
  	    for (size_t c = 0; c < alloc_size; ++c)
  	      initialize_shared_errorcheck_mutex (&addr[c]);
  	  }
! 	size *= sizeof (caf_shmem_lock_t);
  
  	allocator_unlock (&local->ai.alloc);
  	mem = addr;
*************** _gfortran_caf_lock (caf_token_t token, s
*** 1503,1509 ****
    const size_t lock_index = index;
    (void) image_index; // Prevent unused warnings.
  #endif
!   lock_t *lock = &((lock_t *) MEMTOK (token))[lock_index];
    int res;
  
    res = acquired_lock ? caf_shmem_mutex_trylock (lock)
--- 1503,1509 ----
    const size_t lock_index = index;
    (void) image_index; // Prevent unused warnings.
  #endif
!   caf_shmem_lock_t *lock = &((caf_shmem_lock_t *) MEMTOK (token))[lock_index];
    int res;
  
    res = acquired_lock ? caf_shmem_mutex_trylock (lock)
*************** _gfortran_caf_unlock (caf_token_t token,
*** 1547,1553 ****
    const size_t lock_index = index;
    (void) image_index; // Prevent unused warnings.
  #endif
!   lock_t *lock = &((lock_t *) MEMTOK (token))[lock_index];
    int res;
  
    res = caf_shmem_mutex_unlock (lock);
--- 1547,1553 ----
    const size_t lock_index = index;
    (void) image_index; // Prevent unused warnings.
  #endif
!   caf_shmem_lock_t *lock = &((caf_shmem_lock_t *) MEMTOK (token))[lock_index];
    int res;
  
    res = caf_shmem_mutex_unlock (lock);
diff -Nrcpad gcc-17-20260510/libgomp/ChangeLog gcc-17-20260517/libgomp/ChangeLog
*** gcc-17-20260510/libgomp/ChangeLog	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/ChangeLog	Sun May 17 22:32:15 2026
***************
*** 1,3 ****
--- 1,32 ----
+ 2026-05-16  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* env.c (initialize_env): Check GOMP_DEFAULT_STACKSIZE for
+ 	non-zero.
+ 
+ 2026-05-13  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* libgomp.texi: the Add missing closing brace.
+ 
+ 2026-05-13  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* env.c (omp_control_tool): Stub implementation for omp_control_tool.
+ 	* fortran.c (omp_control_tool_, omp_control_tool_8_): Add.
+ 	* libgomp.map (OMP_6.0): Add for omp_control_tool*.
+ 	* libgomp.texi (Tool Control Routine): Add for omp_control_tool.
+ 	(OpenMP 6.0): Mark omp_pause_stop_tool as implemented.
+ 	* omp.h.in (omp_pause_resource_t): Add omp_pause_stop_tool.
+ 	(omp_control_tool_result_t): Add.
+ 	(omp_control_tool_t): Add.
+ 	* omp_lib.f90.in (omp_lib_kinds): Add omp_pause_stop_tool and
+ 	omp_control_tool/omp_control_tool_result parameters.
+ 	(omp_lib): Add omp_control_tool interface.
+ 	* omp_lib.h.in: Add omp_pause_stop_tool and
+ 	omp_control_tool/omp_control_tool_result parameters; add
+ 	omp_control_tool interface.
+ 	* testsuite/libgomp.c/omp-control-tools-1.c: New test.
+ 	* testsuite/libgomp.fortran/omp-control-tools-1.f: New test.
+ 	* testsuite/libgomp.fortran/omp-control-tools-1.f90: New test.
+ 
  2026-05-05  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-17-20260510/libgomp/env.c gcc-17-20260517/libgomp/env.c
*** gcc-17-20260510/libgomp/env.c	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/env.c	Sun May 17 22:32:15 2026
*************** initialize_env (void)
*** 2473,2479 ****
  
    if ((none != NULL && gomp_get_icv_flag (none->flags, GOMP_ICV_STACKSIZE))
        || (all != NULL && gomp_get_icv_flag (all->flags, GOMP_ICV_STACKSIZE))
!       || GOMP_DEFAULT_STACKSIZE)
      {
        int err;
  
--- 2473,2479 ----
  
    if ((none != NULL && gomp_get_icv_flag (none->flags, GOMP_ICV_STACKSIZE))
        || (all != NULL && gomp_get_icv_flag (all->flags, GOMP_ICV_STACKSIZE))
!       || GOMP_DEFAULT_STACKSIZE != 0)
      {
        int err;
  
*************** initialize_env (void)
*** 2510,2513 ****
--- 2510,2528 ----
  
    goacc_profiling_initialize ();
  }
+ 
+ 
+ /* Stub implementation; to be moved to ompt.cc once implemented.  */
+ 
+ ialias (omp_control_tool)
+ 
+ omp_control_tool_result_t
+ omp_control_tool (omp_control_tool_t command, int modifier, void *arg)
+ {
+   (void) command;
+   (void) modifier;
+   (void) arg;
+   return omp_control_tool_notool;
+ }
+ 
  #endif /* LIBGOMP_OFFLOADED_ONLY */
diff -Nrcpad gcc-17-20260510/libgomp/fortran.c gcc-17-20260517/libgomp/fortran.c
*** gcc-17-20260510/libgomp/fortran.c	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/fortran.c	Sun May 17 22:32:15 2026
*************** ialias_redirect (omp_get_interop_str)
*** 103,108 ****
--- 103,109 ----
  ialias_redirect (omp_get_interop_name)
  ialias_redirect (omp_get_interop_type_desc)
  ialias_redirect (omp_get_interop_rc_desc)
+ ialias_redirect (omp_control_tool)
  #endif
  
  #ifndef LIBGOMP_GNU_SYMBOL_VERSIONING
*************** omp_display_env_8_ (const int64_t *verbo
*** 872,875 ****
--- 873,888 ----
    omp_display_env (!!*verbose);
  }
  
+ omp_control_tool_result_t
+ omp_control_tool_ (omp_control_tool_t command, int32_t modifier)
+ {
+   return omp_control_tool (command, modifier, NULL);
+ }
+ 
+ omp_control_tool_result_t
+ omp_control_tool_8_ (omp_control_tool_t command, int64_t modifier)
+ {
+   return omp_control_tool (command, (int32_t) modifier, NULL);
+ }
+ 
  #endif /* LIBGOMP_OFFLOADED_ONLY */
diff -Nrcpad gcc-17-20260510/libgomp/libgomp.map gcc-17-20260517/libgomp/libgomp.map
*** gcc-17-20260510/libgomp/libgomp.map	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/libgomp.map	Sun May 17 22:32:15 2026
*************** OMP_5.2 {
*** 240,245 ****
--- 240,252 ----
  	omp_in_explicit_task_;
  } OMP_5.1.1;
  
+ OMP_6.0 {
+   global:
+ 	omp_control_tool;
+ 	omp_control_tool_;
+ 	omp_control_tool_8_;
+ } OMP_5.2;
+ 
  GOMP_1.0 {
    global:
  	GOMP_atomic_end;
diff -Nrcpad gcc-17-20260510/libgomp/libgomp.texi gcc-17-20260517/libgomp/libgomp.texi
*** gcc-17-20260510/libgomp/libgomp.texi	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/libgomp.texi	Sun May 17 22:32:15 2026
*************** to address of matching mapped list item
*** 644,650 ****
  @item Multi-word directives now use underscore by default @tab N @tab
  @item Relaxed Fortran restrictions to the @code{aligned} clause @tab N @tab
  @item Mapping lambda captures @tab N @tab
! @item New @code{omp_pause_stop_tool} constant for omp_pause_resource @tab N @tab
  @item In Fortran (fixed and free source form), spaces between directive names are mandatory
        @tab N @tab
  @item Update of the map-type decay for mapping and @code{declare_mapper}
--- 644,651 ----
  @item Multi-word directives now use underscore by default @tab N @tab
  @item Relaxed Fortran restrictions to the @code{aligned} clause @tab N @tab
  @item Mapping lambda captures @tab N @tab
! @item New @code{omp_pause_stop_tool} constant for @code{omp_pause_resource}
!       @tab Y @tab
  @item In Fortran (fixed and free source form), spaces between directive names are mandatory
        @tab N @tab
  @item Update of the map-type decay for mapping and @code{declare_mapper}
*************** specification in version 5.2.
*** 709,715 ****
  * Event Routine::
  * Interoperability Routines::
  * Memory Management Routines::
! @c * Tool Control Routine::
  * Environment Display Routine::
  @end menu
  
--- 710,716 ----
  * Event Routine::
  * Interoperability Routines::
  * Memory Management Routines::
! * Tool Control Routine::
  * Environment Display Routine::
  @end menu
  
*************** was already deallocated or when the used
*** 3940,3949 ****
  
  
  
! @c @node Tool Control Routine
! @c @section Tool Control Routine
! @c
! @c FIXME
  
  @node Environment Display Routine
  @section Environment Display Routine
--- 3941,4014 ----
  
  
  
! @node Tool Control Routine
! @section Tool Control Routine
! 
! Routine that supports the use of the OpenMP tools interface (OMPT).
! 
! @menu
! * omp_control_tool:: pass commands to a tool
! @end menu
! 
! @node omp_control_tool
! @subsection @code{omp_control_tool} -- pass commands to a tool
! @table @asis
! @item @emph{Description}:
! The @code{omp_control_tool} routine can be used to pass commands to a tool. The
! values for @var{modifier} and @var{arg} are specific for the particular tool;
! for Fortran, @var{arg} is NULL.  The following predefined values for
! @var{command} are supported by all tools:
! 
! @itemize
! @item @code{omp_control_tool_start}: Request that monitoring is started or resumed;
!       it has no effect if monitoring is already on or was turned off permanently.
! @item @code{omp_control_tool_pause}: Request that monitoring is temporarily paused;
!       it has no effect if monitoring is already paused or stopped.
! @item @code{omp_control_tool_flush}: Request flushing of any buffered data,
!       independently whether monitoring is currently active.
! @item @code{omp_control_tool_end}: Request that monitoring is turned off
!       permanently, flushing all output and terminating the tool.
! @end itemize
! 
! For the listed standard commands, the @var{modifier} and @var{arg} arguments
! are ignored by the tool.
! 
! Negative return values indicate that the tool has not processed the command;
! in particular, the return value is @code{omp_control_tool_notool} if OMPT is
! inactive and no tool is active; if it is active but no callback is registered
! for the tool-control event, @code{omp_control_tool_nocallback} is returned.
! On success, @code{omp_control_tool_success} is returned and
! @code{omp_control_tool_ignored} indicates that the tool received the command
! but ignored it. Positive return values greater than 64 are tool specific.
! 
! GCC implements the OpenMP 6.0 version of this function for C and C++, which is
! not compatible with its type signature in previous versions of the OpenMP
! specification.  In older versions, the type @code{int} was used for the
! @var{command} argument in place of the enumerated type
! @code{omp_control_tool_t}; the return type likewise changed from @code{int} to
! @code{omp_control_tool_result_t}.
! 
! @item @emph{C/C++}:
! @multitable @columnfractions .20 .80
! @item @emph{Prototype}: @tab @code{omp_control_tool_result_t omp_control_tool(}
! @item                   @tab @code{  omp_control_tool_t command, int modifier, void *arg)}
! @end multitable
! 
! @item @emph{Fortran}:
! @multitable @columnfractions .20 .80
! @item @emph{Interface}: @tab @code{integer (kind=omp_control_tool_result_kind) &}
! @item                   @tab @code{   function omp_control_tool(command, modifier)}
! @item                   @tab @code{integer (kind=omp_control_tool_kind) command}
! @item                   @tab @code{integer :: modifier}
! @end multitable
! 
! @c @item @emph{See also}:
! 
! @item @emph{Reference}:
! @uref{https://www.openmp.org, OpenMP specification v6.0}, Section 31.1
! @end table
! 
! 
  
  @node Environment Display Routine
  @section Environment Display Routine
diff -Nrcpad gcc-17-20260510/libgomp/omp.h.in gcc-17-20260517/libgomp/omp.h.in
*** gcc-17-20260510/libgomp/omp.h.in	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/omp.h.in	Sun May 17 22:32:15 2026
*************** typedef struct __attribute__((__aligned_
*** 102,108 ****
  typedef enum omp_pause_resource_t
  {
    omp_pause_soft = 1,
!   omp_pause_hard = 2
  } omp_pause_resource_t;
  
  typedef __INTPTR_TYPE__ omp_intptr_t;
--- 102,109 ----
  typedef enum omp_pause_resource_t
  {
    omp_pause_soft = 1,
!   omp_pause_hard = 2,
!   omp_pause_stop_tool = 3
  } omp_pause_resource_t;
  
  typedef __INTPTR_TYPE__ omp_intptr_t;
*************** typedef enum omp_interop_rc_t
*** 240,245 ****
--- 241,261 ----
    omp_irc_other = -6
  } omp_interop_rc_t;
  
+ typedef enum omp_control_tool_t {
+     omp_control_tool_start = 1,
+     omp_control_tool_pause = 2,
+     omp_control_tool_flush = 3,
+     omp_control_tool_end = 4,
+     omp_control_tool_max = __INT32_MAX__
+ } omp_control_tool_t;
+ 
+ typedef enum omp_control_tool_result_t {
+     omp_control_tool_notool = -2,
+     omp_control_tool_nocallback = -1,
+     omp_control_tool_success = 0,
+     omp_control_tool_ignored = 1
+ } omp_control_tool_result_t;
+ 
  #ifdef __cplusplus
  extern "C" {
  # define __GOMP_NOTHROW throw ()
*************** extern const char *omp_get_interop_rc_de
*** 435,440 ****
--- 451,459 ----
  extern int omp_get_device_from_uid (const char *) __GOMP_NOTHROW;
  extern const char *omp_get_uid_from_device (int) __GOMP_NOTHROW;
  
+ extern omp_control_tool_result_t omp_control_tool (omp_control_tool_t, int,
+ 						   void*) __GOMP_NOTHROW;
+ 
  #ifdef __cplusplus
  }
  #endif
diff -Nrcpad gcc-17-20260510/libgomp/omp_lib.f90.in gcc-17-20260517/libgomp/omp_lib.f90.in
*** gcc-17-20260510/libgomp/omp_lib.f90.in	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/omp_lib.f90.in	Sun May 17 22:32:15 2026
***************
*** 24,32 ****
  !  <http://www.gnu.org/licenses/>.
  
        module omp_lib_kinds
!         use iso_c_binding, only: c_int, c_intptr_t
          implicit none
!         private :: c_int, c_intptr_t
          integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@
          integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@
          integer, parameter :: omp_sched_kind = 4
--- 24,32 ----
  !  <http://www.gnu.org/licenses/>.
  
        module omp_lib_kinds
!         use iso_c_binding, only: c_int, c_intptr_t, c_int32_t
          implicit none
!         private :: c_int, c_intptr_t, c_int32_t
          integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@
          integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@
          integer, parameter :: omp_sched_kind = 4
***************
*** 44,49 ****
--- 44,51 ----
          integer, parameter :: omp_interop_fr_kind = c_int
          integer, parameter :: omp_interop_property_kind = c_int
          integer, parameter :: omp_interop_rc_kind = c_int
+         integer, parameter :: omp_control_tool_kind = c_int32_t
+         integer, parameter :: omp_control_tool_result_kind = c_int
          integer (omp_sched_kind), parameter :: omp_sched_static = 1
          integer (omp_sched_kind), parameter :: omp_sched_dynamic = 2
          integer (omp_sched_kind), parameter :: omp_sched_guided = 3
***************
*** 88,93 ****
--- 90,97 ----
                   parameter :: omp_pause_soft = 1
          integer (kind=omp_pause_resource_kind), &
                   parameter :: omp_pause_hard = 2
+         integer (kind=omp_pause_resource_kind), &
+                  parameter :: omp_pause_tool = 3
          integer (kind=omp_alloctrait_key_kind), &
                   parameter :: omp_atk_sync_hint = 1
          integer (kind=omp_alloctrait_key_kind), &
***************
*** 215,220 ****
--- 219,238 ----
          integer (omp_interop_rc_kind), parameter :: omp_irc_type_ptr = -4
          integer (omp_interop_rc_kind), parameter :: omp_irc_type_str = -5
          integer (omp_interop_rc_kind), parameter :: omp_irc_other = -6
+         integer (omp_control_tool_kind), parameter :: omp_control_tool_start = 1
+         integer (omp_control_tool_kind), parameter :: omp_control_tool_pause = 2
+         integer (omp_control_tool_kind), parameter :: omp_control_tool_flush = 3
+         integer (omp_control_tool_kind), parameter :: omp_control_tool_end = 4
+         integer (omp_control_tool_kind), &
+           parameter :: omp_control_tool_max = huge(0_omp_control_tool_kind)
+         integer (omp_control_tool_result_kind), &
+           parameter :: omp_control_tool_notool = -2
+         integer (omp_control_tool_result_kind), &
+           parameter :: omp_control_tool_nocallback = -1
+         integer (omp_control_tool_result_kind), &
+           parameter :: omp_control_tool_success = 0
+         integer (omp_control_tool_result_kind), &
+           parameter :: omp_control_tool_ignored = 1
  
          type omp_alloctrait
            integer (kind=omp_alloctrait_key_kind) key
***************
*** 1041,1058 ****
          interface omp_get_uid_from_device
            ! Deviation from OpenMP 6.0: VALUE added.
            character(:) function omp_get_uid_from_device (device_num)
!             use iso_c_binding
              pointer :: omp_get_uid_from_device
              integer(c_int32_t), intent(in), value :: device_num
            end function omp_get_uid_from_device
  
            character(:) function omp_get_uid_from_device_8 (device_num)
!             use iso_c_binding
              pointer :: omp_get_uid_from_device_8
              integer(c_int64_t), intent(in), value :: device_num
            end function omp_get_uid_from_device_8
          end interface omp_get_uid_from_device
  
  #if _OPENMP >= 201811
  !GCC$ ATTRIBUTES DEPRECATED :: omp_get_nested, omp_set_nested
  !GCC$ ATTRIBUTES DEPRECATED :: omp_lock_hint_kind, omp_lock_hint_none
--- 1059,1091 ----
          interface omp_get_uid_from_device
            ! Deviation from OpenMP 6.0: VALUE added.
            character(:) function omp_get_uid_from_device (device_num)
!             use iso_c_binding, only: c_int32_t
              pointer :: omp_get_uid_from_device
              integer(c_int32_t), intent(in), value :: device_num
            end function omp_get_uid_from_device
  
            character(:) function omp_get_uid_from_device_8 (device_num)
!             use iso_c_binding, only: c_int64_t
              pointer :: omp_get_uid_from_device_8
              integer(c_int64_t), intent(in), value :: device_num
            end function omp_get_uid_from_device_8
          end interface omp_get_uid_from_device
  
+         interface omp_control_tool
+           integer (kind=omp_control_tool_result_kind) function &
+               omp_control_tool (command, modifier)
+             import :: omp_control_tool_result_kind, omp_control_tool_kind
+             integer (kind=omp_control_tool_kind) command
+             integer(4) modifier
+           end function
+           integer (kind=omp_control_tool_result_kind) function &
+               omp_control_tool_8 (command, modifier)
+             import :: omp_control_tool_result_kind, omp_control_tool_kind
+             integer (kind=omp_control_tool_kind) command
+             integer(8) modifier
+           end function
+         end interface omp_control_tool
+ 
  #if _OPENMP >= 201811
  !GCC$ ATTRIBUTES DEPRECATED :: omp_get_nested, omp_set_nested
  !GCC$ ATTRIBUTES DEPRECATED :: omp_lock_hint_kind, omp_lock_hint_none
diff -Nrcpad gcc-17-20260510/libgomp/omp_lib.h.in gcc-17-20260517/libgomp/omp_lib.h.in
*** gcc-17-20260510/libgomp/omp_lib.h.in	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libgomp/omp_lib.h.in	Sun May 17 22:32:15 2026
***************
*** 79,92 ****
--- 79,96 ----
        parameter (omp_pause_resource_kind = 4)
        integer (omp_pause_resource_kind) omp_pause_soft
        integer (omp_pause_resource_kind) omp_pause_hard
+       integer (omp_pause_resource_kind) omp_pause_tool
        parameter (omp_pause_soft = 1)
        parameter (omp_pause_hard = 2)
+       parameter (omp_pause_tool = 3)
  
        integer omp_allocator_handle_kind, omp_alloctrait_key_kind
        integer omp_alloctrait_val_kind, omp_memspace_handle_kind
        integer omp_event_handle_kind
        integer omp_interop_kind, omp_interop_fr_kind
        integer omp_interop_property_kind, omp_interop_rc_kind
+       integer omp_control_tool_kind
+       integer omp_control_tool_result_kind
        parameter (omp_allocator_handle_kind = @INTPTR_T_KIND@)
        parameter (omp_alloctrait_key_kind = 4)
        parameter (omp_alloctrait_val_kind = @INTPTR_T_KIND@)
***************
*** 96,101 ****
--- 100,107 ----
        parameter (omp_interop_fr_kind = 4)
        parameter (omp_interop_property_kind = 4)
        parameter (omp_interop_rc_kind = 4)
+       parameter (omp_control_tool_kind = 4)
+       parameter (omp_control_tool_result_kind = 4)
        integer (omp_alloctrait_key_kind) omp_atk_sync_hint
        integer (omp_alloctrait_key_kind) omp_atk_alignment
        integer (omp_alloctrait_key_kind) omp_atk_access
***************
*** 244,249 ****
--- 250,273 ----
        parameter (omp_irc_type_ptr = -4)
        parameter (omp_irc_type_str = -5)
        parameter (omp_irc_other = -6)
+       integer (omp_control_tool_kind) omp_control_tool_start
+       integer (omp_control_tool_kind) omp_control_tool_pause
+       integer (omp_control_tool_kind) omp_control_tool_flush
+       integer (omp_control_tool_kind) omp_control_tool_end
+       integer (omp_control_tool_kind) omp_control_tool_max
+       parameter (omp_control_tool_start = 1)
+       parameter (omp_control_tool_pause = 2)
+       parameter (omp_control_tool_flush = 3)
+       parameter (omp_control_tool_end = 4)
+       parameter (omp_control_tool_max = huge(1_omp_control_tool_kind))
+       integer (omp_control_tool_result_kind) omp_control_tool_notool
+       integer (omp_control_tool_result_kind) omp_control_tool_nocallback
+       integer (omp_control_tool_result_kind) omp_control_tool_success
+       integer (omp_control_tool_result_kind) omp_control_tool_ignored
+       parameter (omp_control_tool_notool = -2)
+       parameter (omp_control_tool_nocallback = -1)
+       parameter (omp_control_tool_success = 0)
+       parameter (omp_control_tool_ignored = 1)
  
        type omp_alloctrait
          integer (omp_alloctrait_key_kind) key
***************
*** 662,664 ****
--- 686,703 ----
            integer(c_int64_t), intent(in), value :: device_num
          end function omp_get_uid_from_device_8
        end interface omp_get_uid_from_device
+ 
+       interface omp_control_tool
+         integer (kind=omp_control_tool_result_kind) function                    &
+      &      omp_control_tool (command, modifier)
+           import
+           integer (kind=omp_control_tool_kind) command
+           integer(4) modifier
+         end function
+         integer (kind=omp_control_tool_result_kind) function                    &
+      &      omp_control_tool_8 (command, modifier)
+           import
+           integer (kind=omp_control_tool_kind) command
+           integer(8) modifier
+         end function
+       end interface omp_control_tool
diff -Nrcpad gcc-17-20260510/libgomp/testsuite/libgomp.c/omp-control-tools-1.c gcc-17-20260517/libgomp/testsuite/libgomp.c/omp-control-tools-1.c
*** gcc-17-20260510/libgomp/testsuite/libgomp.c/omp-control-tools-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libgomp/testsuite/libgomp.c/omp-control-tools-1.c	Sun May 17 22:32:15 2026
***************
*** 0 ****
--- 1,21 ----
+ #include <omp.h>
+ 
+ int
+ main ()
+ {
+   omp_control_tool_t cmd = omp_control_tool_start;
+   omp_control_tool_result_t res;
+   res = omp_control_tool (omp_control_tool_start, 1, nullptr);
+   if (res != omp_control_tool_notool)
+     __builtin_abort ();
+   if (omp_control_tool_start != 1
+       || omp_control_tool_pause != 2
+       || omp_control_tool_flush != 3
+       || omp_control_tool_end != 4
+       || omp_control_tool_max != 2147483647 /* INT32_MAX */
+       || omp_control_tool_notool != -2
+       || omp_control_tool_nocallback != -1
+       || omp_control_tool_success != 0
+       || omp_control_tool_ignored != 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260510/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f gcc-17-20260517/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f
*** gcc-17-20260510/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f	Sun May 17 22:32:15 2026
***************
*** 0 ****
--- 1,17 ----
+        !use omp_lib
+        implicit none
+        include "omp_lib.h"
+        if (omp_control_tool(omp_control_tool_start, 1)                          &
+      &    /= omp_control_tool_notool) stop 1
+        if (omp_control_tool_start /= 1                                          &
+      &    .or. omp_control_tool_pause /= 2                                      &
+      &    .or. omp_control_tool_flush /= 3                                      &
+      &    .or. omp_control_tool_end /= 4                                        &
+      &    .or. omp_control_tool_max /= 2147483647                               & ! INT32_MAX
+      &    .or. omp_control_tool_notool /= -2                                    &
+      &    .or. omp_control_tool_nocallback /= -1                                &
+      &    .or. omp_control_tool_success /= 0                                    &
+      &    .or. omp_control_tool_ignored /= 1) stop 2
+        if (kind(omp_control_tool_result_kind) /= 4                              &
+      &    .or. omp_control_tool_kind /= 4) stop 3
+        end
diff -Nrcpad gcc-17-20260510/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f90 gcc-17-20260517/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f90
*** gcc-17-20260510/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f90	Sun May 17 22:32:15 2026
***************
*** 0 ****
--- 1,17 ----
+        use omp_lib
+        implicit none
+        !include "omp_lib.h"
+        if (omp_control_tool(omp_control_tool_start, 1)                          &
+      &    /= omp_control_tool_notool) stop 1
+        if (omp_control_tool_start /= 1                                          &
+      &    .or. omp_control_tool_pause /= 2                                      &
+      &    .or. omp_control_tool_flush /= 3                                      &
+      &    .or. omp_control_tool_end /= 4                                        &
+      &    .or. omp_control_tool_max /= 2147483647                               & ! INT32_MAX
+      &    .or. omp_control_tool_notool /= -2                                    &
+      &    .or. omp_control_tool_nocallback /= -1                                &
+      &    .or. omp_control_tool_success /= 0                                    &
+      &    .or. omp_control_tool_ignored /= 1) stop 2
+        if (kind(omp_control_tool_result_kind) /= 4                              &
+      &    .or. omp_control_tool_kind /= 4) stop 3
+        end
diff -Nrcpad gcc-17-20260510/libstdc++-v3/ChangeLog gcc-17-20260517/libstdc++-v3/ChangeLog
*** gcc-17-20260510/libstdc++-v3/ChangeLog	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libstdc++-v3/ChangeLog	Sun May 17 22:32:15 2026
***************
*** 1,3 ****
--- 1,172 ----
+ 2026-05-16  Dragon Archer  <dragon-archer@outlook.com>
+ 
+ 	PR libstdc++/125228
+ 	* src/c++11/debug.cc: Replace assert with __glibcxx_assert,
+ 	and remove the include of <cassert>.
+ 	* src/c++17/floating_to_chars.cc: Likewise, but redefine
+ 	assert as __glibcxx_assert.
+ 
+ 2026-05-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/125312
+ 	* acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Copy header
+ 	into cwd instead of including it via an absolute path.
+ 	* configure: Regenerate.
+ 
+ 2026-05-16  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR libstdc++/107815
+ 	* testsuite/20_util/to_chars/float128_c++23.cc (test): Remove
+ 	Solaris workaround.
+ 
+ 2026-05-15  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/optional [__cpp_lib_optional_range_support]:
+ 	Replace <bits/stl_iterator.h> include with <bits/range_access.h>.
+ 	* include/std/stacktrace: Likewise.
+ 
+ 2026-05-15  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* testsuite/std/format/debug_nonunicode.cc: Pass ISO-8859-1 as
+ 	exec-charset and make sure that it is supported.
+ 	* testsuite/std/format/fill_nonunicode.cc: Likewise.
+ 
+ 2026-05-14  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/type_traits (__type_identity, __type_identity_t)
+ 	[__cpp_lib_type_identity]: Define as alias to type_identity
+ 	and its nested type respectively.
+ 
+ 2026-05-14  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/113761
+ 	* include/bits/random.h
+ 	(piecewise_constant_distribution::param_type::_M_initialize)
+ 	(piecewise_linear_distribution::param_type::_M_initialize): Remove.
+ 	(piecewise_constant_distribution::param_type::_M_configure)
+ 	(piecewise_linear_distribution::param_type::_M_configure): Define.
+ 	(piecewise_constant_distribution::param_type::_M_initialize2)
+ 	(piecewise_linear_distribution::param_type::_M_initialize2): Declare.
+ 	* include/bits/random.tcc (__detail::__load_first2): Define.
+ 	(piecewise_constant_distribution::param_type::_M_initialize)
+ 	(piecewise_linear_distribution::param_type::_M_initialize):
+ 	Rename to...
+ 	(piecewise_constant_distribution::param_type::_M_configure)
+ 	(piecewise_linear_distribution::param_type::_M_configure):
+ 	Renamed implementation of _M_initialize, that removes checks for
+ 	default values.
+ 	(piecewise_constant_distribution::param_type::_M_initialize2)
+ 	(piecewise_linear_distribution::param_type::_M_initialize2): Define.
+ 	(piecewise_constant_distribution::param_type::param_type)
+ 	(piecewise_linear_distribution::param_type::param_type):
+ 	Exit early for less that two intervals. Use _M_initialize2 to handle
+ 	two intervals case. Reserve _M_int for iterators case.
+ 	* testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc:
+ 	Test input and forward iterators, in addition to random_access ones.
+ 	* testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc:
+ 	Likewise.
+ 	* testsuite/26_numerics/random/piecewise_constant_distribution/cons/fallback.cc:
+ 	New test.
+ 	* testsuite/26_numerics/random/piecewise_linear_distribution/cons/fallback.cc:
+ 	New test.
+ 
+ 2026-05-14  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng_neg.cc:
+ 	Removed preprocessor checks, add dg-require-effective-target.
+ 
+ 2026-05-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/shared_ptr_atomic.h: Remove trailing whitespace.
+ 
+ 2026-05-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/std/time/clock/local/io.cc: Call test_format.
+ 
+ 2026-05-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/std/time/clock/utc/leap_second_info-2.cc: Fix sign
+ 	compare warning. Tweak comment.
+ 
+ 2026-05-13  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* configure: Rebuild.
+ 
+ 2026-05-13  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/114400
+ 	* include/std/string_view (operator<=>): Use type_identity_t
+ 	instead of __type_identity_t.
+ 
+ 2026-05-13  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/119739
+ 	* testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng_neg.cc:
+ 	New test.
+ 
+ 2026-05-13  Álvaro Begué  <alvaro.begue@gmail.com>
+ 	    Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/124852
+ 	* src/c++20/tzdb.cc (on_day): Rename to...
+ 	(on_day_month): Rename from on_day.
+ 	(on_day_month::on_day_t, on_day_month::on_day): Define.
+ 	(operator>>(istream&, on_day_t&&)): Factored out of
+ 	operator>>(istream&, on_day&).
+ 	(operator>>(istream&, on_day&)): Use on_day_t parser.
+ 	(operator>>(istream&, ZoneInfo&)): Replace the integer DAY
+ 	parser with on_day_t for the UNTIL field.
+ 	* testsuite/std/time/time_zone/until_day_on.cc: New test.
+ 
+ 2026-05-13  Álvaro Begué  <alvaro.begue@gmail.com>
+ 
+ 	PR libstdc++/124851
+ 	* src/c++20/tzdb.cc (ZoneInfo::ZoneInfo(sys_info&&)): Store
+ 	stdoff only in m_offset (subtract info.save).
+ 	(ZoneInfo::ZoneInfo(const pair<sys_info, string_view>&)):
+ 	Likewise.
+ 	(ZoneInfo::offset()): Document new semantics.
+ 	(ZoneInfo::to(sys_info&)): Add m_save back to offset() when
+ 	populating sys_info::offset.
+ 	* testsuite/std/time/time_zone/numeric_save.cc: New test.
+ 
+ 2026-05-12  Jonathan Wakely  <jwakely@redhat.com>
+ 	    Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/123165
+ 	* acinclude.m4 (libtool_VERSION): Bump version.
+ 	* config/abi/pre/gnu.ver (GLIBCXX_3.4.36): Add new symbol
+ 	version and export new symbol.
+ 	* configure: Regenerate.
+ 	* include/std/chrono (__detail::__recent_leap_second_info):
+ 	Declare new function and make it a friend of varous classes.
+ 	(leap_second): Make private constructor constexpr. Remove friend
+ 	declaration for get_leap_second_info.
+ 	(__detail::__get_leap_second_info): Use new function for times
+ 	past the hardcoded expiry.
+ 	* src/c++20/tzdb.cc (tzdb_list::_Node::fixed_leaps): Move array
+ 	of leap seconds here from _S_read_leap_seconds.
+ 	(fixed_expiry, num_leap_seconds): New globals.
+ 	(__detail::__recent_leap_second_info): Define new function.
+ 	(tzdb_list::_Node::_S_read_leap_seconds): Populate vector from
+ 	_Node::fixed_leaps. Rename bool variable to clarify meaning.
+ 	(tzdb_list::_Node::_S_replace_head): Update num_leap_seconds
+ 	when updating the tzdb_list.
+ 	* testsuite/util/testsuite_abi.cc: Update known_versions and
+ 	latestp.
+ 	* testsuite/std/time/clock/utc/leap_second_info-2.cc: New test.
+ 
+ 2026-05-12  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* acinclude.m4 (GLIBXX_ENABLE_LIBSTDCXX_TIME) [vxworks*]:
+ 	Enable monotonic and realtime clocks.
+ 	* configure: Rebuilt.
+ 
+ 2026-05-11  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/format (__formatter_str::_M_format_range):
+ 	Reorder constexpr checks, to reduce number of instantiations.
+ 
  2026-05-07  Jonathan Wakely  <jwakely@redhat.com>
  
  	PR libstdc++/78302
diff -Nrcpad gcc-17-20260510/libstdc++-v3/acinclude.m4 gcc-17-20260517/libstdc++-v3/acinclude.m4
*** gcc-17-20260510/libstdc++-v3/acinclude.m4	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libstdc++-v3/acinclude.m4	Sun May 17 22:32:15 2026
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1785,1790 ****
--- 1785,1792 ----
        # VxWorks has nanosleep as soon as the kernel is configured with
        # INCLUDE_POSIX_TIMERS, which is normally/most-often the case.
        vxworks*)
+         ac_has_clock_monotonic=yes
+         ac_has_clock_realtime=yes
          ac_has_nanosleep=yes
          ;;
        gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
*************** AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS
*** 3755,3760 ****
--- 3757,3771 ----
      esac
    fi
  
+   # The $glibcxx_builddir/include/$target/bits/atomic_word.h header is created
+   # by include/Makefile so isn't available during configure. Copy it from the
+   # source dir to $PWD so that we don't include it using an absolute path,
+   # which does not work for win32 native builds (PR libstdc++/125312).
+   if ! $LN_S "${glibcxx_srcdir}/config/${atomic_word_dir}/atomic_word.h" ./
+   then
+     AC_MSG_ERROR([cannot create ./atomic_word.h])
+   fi
+ 
    if test "$atomic_builtins_link_tests" = yes; then
  
      # Do link tests.
*************** AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS
*** 3763,3769 ****
  
      AC_CACHE_CHECK([for atomic builtins for _Atomic_word],
  	glibcxx_cv_atomic_word,
! 	[AC_TRY_LINK([#include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"],
  		     [_Atomic_word a = 0, b;
  		      b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);],
  		     [glibcxx_cv_atomic_word=yes],
--- 3774,3780 ----
  
      AC_CACHE_CHECK([for atomic builtins for _Atomic_word],
  	glibcxx_cv_atomic_word,
! 	[AC_TRY_LINK([#include "atomic_word.h"],
  		     [_Atomic_word a = 0, b;
  		      b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);],
  		     [glibcxx_cv_atomic_word=yes],
*************** AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS
*** 3779,3785 ****
  
      cat > conftest.$ac_ext << EOF
  [#]line __oline__ "configure"
! [#]include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int main()
  {
    _Atomic_word a = 0, b;
--- 3790,3796 ----
  
      cat > conftest.$ac_ext << EOF
  [#]line __oline__ "configure"
! [#]include "atomic_word.h"
  int main()
  {
    _Atomic_word a = 0, b;
*************** EOF
*** 3799,3804 ****
--- 3810,3817 ----
      rm -f conftest*
    fi
  
+   rm -f ./atomic_word.h
+ 
    CXXFLAGS="$old_CXXFLAGS"
    AC_LANG_RESTORE
  
*************** changequote([,])dnl
*** 4085,4091 ****
  fi
  
  # For libtool versioning info, format is CURRENT:REVISION:AGE
! libtool_VERSION=6:35:0
  
  # Everything parsed; figure out what files and settings to use.
  case $enable_symvers in
--- 4098,4104 ----
  fi
  
  # For libtool versioning info, format is CURRENT:REVISION:AGE
! libtool_VERSION=6:36:0
  
  # Everything parsed; figure out what files and settings to use.
  case $enable_symvers in
diff -Nrcpad gcc-17-20260510/libstdc++-v3/config/abi/pre/gnu.ver gcc-17-20260517/libstdc++-v3/config/abi/pre/gnu.ver
*** gcc-17-20260510/libstdc++-v3/config/abi/pre/gnu.ver	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libstdc++-v3/config/abi/pre/gnu.ver	Sun May 17 22:32:15 2026
*************** GLIBCXX_3.4.35 {
*** 2623,2628 ****
--- 2623,2635 ----
  
  } GLIBCXX_3.4.34;
  
+ # GCC 17.1.0
+ GLIBCXX_3.4.36 {
+ 
+     _ZNSt6chrono8__detail25__recent_leap_second_infoERNS_16leap_second_infoEj;
+ 
+ } GLIBCXX_3.4.35;
+ 
  # Symbols in the support library (libsupc++) have their own tag.
  CXXABI_1.3 {
  
diff -Nrcpad gcc-17-20260510/libstdc++-v3/configure gcc-17-20260517/libstdc++-v3/configure
*** gcc-17-20260510/libstdc++-v3/configure	Sun May 10 22:32:16 2026
--- gcc-17-20260517/libstdc++-v3/configure	Sun May 17 22:32:15 2026
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 16422,16427 ****
--- 16422,16436 ----
      esac
    fi
  
+   # The $glibcxx_builddir/include/$target/bits/atomic_word.h header is created
+   # by include/Makefile so isn't available during configure. Copy it from the
+   # source dir to $PWD so that we don't include it using an absolute path,
+   # which does not work for win32 native builds (PR libstdc++/125312).
+   if ! $LN_S "${glibcxx_srcdir}/config/${atomic_word_dir}/atomic_word.h" ./
+   then
+     as_fn_error $? "cannot create ./atomic_word.h" "$LINENO" 5
+   fi
+ 
    if test "$atomic_builtins_link_tests" = yes; then
  
      # Do link tests.
*************** else
*** 16438,16444 ****
  fi
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
! #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int
  main ()
  {
--- 16447,16453 ----
  fi
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
! #include "atomic_word.h"
  int
  main ()
  {
*************** $as_echo "$glibcxx_cv_atomic_word" >&6;
*** 16468,16475 ****
      # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16471 "configure"
! #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int main()
  {
    _Atomic_word a = 0, b;
--- 16477,16484 ----
      # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16480 "configure"
! #include "atomic_word.h"
  int main()
  {
    _Atomic_word a = 0, b;
*************** $as_echo "$glibcxx_cv_atomic_word" >&6;
*** 16495,16500 ****
--- 16504,16511 ----
      rm -f conftest*
    fi
  
+   rm -f ./atomic_word.h
+ 
    CXXFLAGS="$old_CXXFLAGS"
    ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
*************** $as_echo "mutex" >&6; }
*** 16614,16620 ****
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16617 "configure"
  int main()
  {
    _Decimal32 d1;
--- 16625,16631 ----
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16628 "configure"
  int main()
  {
    _Decimal32 d1;
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 16656,16662 ****
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16659 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
--- 16667,16673 ----
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16670 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 21473,21478 ****
--- 21484,21491 ----
        # VxWorks has nanosleep as soon as the kernel is configured with
        # INCLUDE_POSIX_TIMERS, which is normally/most-often the case.
        vxworks*)
+         ac_has_clock_monotonic=yes
+         ac_has_clock_realtime=yes
          ac_has_nanosleep=yes
          ;;
        gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
*************** $as_echo "$as_me: WARNING: === Symbol ve
*** 51418,51424 ****
  fi
  
  # For libtool versioning info, format is CURRENT:REVISION:AGE
! libtool_VERSION=6:35:0
  
  # Everything parsed; figure out what files and settings to use.
  case $enable_symvers in
--- 51431,51437 ----
  fi
  
  # For libtool versioning info, format is CURRENT:REVISION:AGE
! libtool_VERSION=6:36:0
  
  # Everything parsed; figure out what files and settings to use.
  case $enable_symvers in
*************** $as_echo "$glibcxx_cv_libbacktrace_atomi
*** 54145,54151 ****
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 54148 "configure"
  #include <stddef.h>
  int main()
  {
--- 54158,54164 ----
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 54161 "configure"
  #include <stddef.h>
  int main()
  {
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/bits/random.h gcc-17-20260517/libstdc++-v3/include/bits/random.h
*** gcc-17-20260510/libstdc++-v3/include/bits/random.h	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/bits/random.h	Sun May 17 22:32:15 2026
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 6466,6472 ****
  
        private:
  	void
! 	_M_initialize();
  
  	std::vector<_RealType> _M_int;
  	std::vector<double> _M_den;
--- 6466,6475 ----
  
        private:
  	void
! 	_M_configure();
! 
! 	void
! 	_M_initialize2(const _RealType* __ints, _RealType __den);
  
  	std::vector<_RealType> _M_int;
  	std::vector<double> _M_den;
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 6746,6752 ****
  
        private:
  	void
! 	_M_initialize();
  
  	std::vector<_RealType> _M_int;
  	std::vector<double> _M_den;
--- 6749,6758 ----
  
        private:
  	void
! 	_M_configure();
! 
! 	void
! 	_M_initialize2(const _RealType* __ints, const _RealType* __dens);
  
  	std::vector<_RealType> _M_int;
  	std::vector<double> _M_den;
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/bits/random.tcc gcc-17-20260517/libstdc++-v3/include/bits/random.tcc
*** gcc-17-20260510/libstdc++-v3/include/bits/random.tcc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/bits/random.tcc	Sun May 17 22:32:15 2026
*************** namespace __detail
*** 2945,2962 ****
    template<typename _RealType>
      void
      piecewise_constant_distribution<_RealType>::param_type::
!     _M_initialize()
      {
-       if (_M_int.size() < 2
- 	  || (_M_int.size() == 2
- 	      && _M_int[0] == _RealType(0)
- 	      && _M_int[1] == _RealType(1)))
- 	{
- 	  _M_int.clear();
- 	  _M_den.clear();
- 	  return;
- 	}
- 
        const double __sum = std::accumulate(_M_den.begin(),
  					   _M_den.end(), 0.0);
        __glibcxx_assert(__sum > 0);
--- 2945,2952 ----
    template<typename _RealType>
      void
      piecewise_constant_distribution<_RealType>::param_type::
!     _M_configure()
      {
        const double __sum = std::accumulate(_M_den.begin(),
  					   _M_den.end(), 0.0);
        __glibcxx_assert(__sum > 0);
*************** namespace __detail
*** 2976,2981 ****
--- 2966,3011 ----
      }
  
    template<typename _RealType>
+     void
+     piecewise_constant_distribution<_RealType>::param_type::
+     _M_initialize2(const _RealType* __ints, _RealType __den)
+     {
+       if (__ints[0] == _RealType(0) && __ints[1] == _RealType(1))
+ 	return;
+ 
+       _M_int.reserve(2);
+       _M_int.push_back(__ints[0]);
+       _M_int.push_back(__ints[1]);
+ 
+       _M_den.reserve(1);
+       _M_den.push_back(__den);
+       _M_configure();
+     }
+ 
+ namespace __detail
+ {
+   template<typename _InputIterator, typename _RealType>
+     bool
+     __load_first2(_InputIterator& __first, _InputIterator __last,
+ 		  _RealType* __out)
+     {
+       if (__first == __last)
+ 	return false;
+ 
+       *__out = *__first;
+       ++__first;
+       if (__first == __last)
+ 	return false;
+ 
+       ++__out;
+       *__out = *__first;
+       ++__first;
+       return true;
+     }
+ } // namespace __detail
+ 
+ 
+   template<typename _RealType>
      template<typename _InputIteratorB, typename _InputIteratorW>
        piecewise_constant_distribution<_RealType>::param_type::
        param_type(_InputIteratorB __bbegin,
*************** namespace __detail
*** 2983,3003 ****
  		 _InputIteratorW __wbegin)
        : _M_int(), _M_den(), _M_cp()
        {
! 	if (__bbegin != __bend)
! 	  {
! 	    for (;;)
! 	      {
! 		_M_int.push_back(*__bbegin);
! 		++__bbegin;
! 		if (__bbegin == __bend)
! 		  break;
  
! 		_M_den.push_back(*__wbegin);
! 		++__wbegin;
! 	      }
  	  }
  
! 	_M_initialize();
        }
  
    template<typename _RealType>
--- 3013,3051 ----
  		 _InputIteratorW __wbegin)
        : _M_int(), _M_den(), _M_cp()
        {
! 	_RealType __ints[2];
! 	if (!__detail::__load_first2(__bbegin, __bend, __ints))
! 	  return;
  
! 	if (__bbegin == __bend)
! 	  {
! 	    _M_initialize2(__ints, *__wbegin);
! 	    return;
  	  }
  
! #if __glibcxx_concepts // C++ >= C++20
! 	if constexpr (sized_sentinel_for<_InputIteratorB, _InputIteratorB>
! 			|| forward_iterator<_InputIteratorB>)
! 	  _M_int.reserve(2 + size_t(ranges::distance(__bbegin, __bend)));
! #else
! #pragma GCC diagnostic push
! #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
! 	if constexpr (is_convertible<__iter_category_t<_InputIteratorB>,
! 				     forward_iterator_tag>::value)
! 	  _M_int.reserve(2 + size_t(std::distance(__bbegin, __bend)));
! #pragma GCC diagnostic pop
! #endif
! 
! 	_M_int.push_back(__ints[0]);
! 	_M_int.push_back(__ints[1]);
! 	for (; __bbegin != __bend; ++__bbegin)
! 	  _M_int.push_back(*__bbegin);
! 
! 	_M_den.reserve(_M_int.size() - 1);
! 	for (size_t __k = 0; __k < _M_int.size() - 1; (void)++__k, ++__wbegin)
! 	  _M_den.push_back(*__wbegin);
! 
! 	_M_configure();
        }
  
    template<typename _RealType>
*************** namespace __detail
*** 3006,3020 ****
        param_type(initializer_list<_RealType> __bl, _Func __fw)
        : _M_int(), _M_den(), _M_cp()
        {
! 	_M_int.reserve(__bl.size());
! 	for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter)
! 	  _M_int.push_back(*__biter);
  
  	_M_den.reserve(_M_int.size() - 1);
  	for (size_t __k = 0; __k < _M_int.size() - 1; ++__k)
  	  _M_den.push_back(__fw(0.5 * (_M_int[__k + 1] + _M_int[__k])));
  
! 	_M_initialize();
        }
  
    template<typename _RealType>
--- 3054,3076 ----
        param_type(initializer_list<_RealType> __bl, _Func __fw)
        : _M_int(), _M_den(), _M_cp()
        {
! 	if (__bl.size() < 2)
! 	  return;
! 
! 	if (__bl.size() == 2)
! 	  {
! 	    const _RealType *__ints = __bl.begin();
! 	    _RealType __den = __fw(0.5 * (__ints[1] + __ints[0]));
! 	    _M_initialize2(__ints, __den);
! 	    return;
! 	  }
  
+ 	_M_int = __bl;
  	_M_den.reserve(_M_int.size() - 1);
  	for (size_t __k = 0; __k < _M_int.size() - 1; ++__k)
  	  _M_den.push_back(__fw(0.5 * (_M_int[__k + 1] + _M_int[__k])));
  
! 	_M_configure();
        }
  
    template<typename _RealType>
*************** namespace __detail
*** 3025,3030 ****
--- 3081,3093 ----
        {
  	const size_t __n = __nw == 0 ? 1 : __nw;
  	const _RealType __delta = (__xmax - __xmin) / __n;
+ 	if (__n == 1)
+ 	  {
+ 	    _RealType __ints[2] = { __xmin, __xmin + __delta };
+ 	    _RealType __den = __fw(__xmin * 0.5 * __delta);
+ 	    _M_initialize2(__ints, __den);
+ 	    return;
+ 	  }
  
  	_M_int.reserve(__n + 1);
  	for (size_t __k = 0; __k <= __nw; ++__k)
*************** namespace __detail
*** 3034,3040 ****
  	for (size_t __k = 0; __k < __nw; ++__k)
  	  _M_den.push_back(__fw(_M_int[__k] + 0.5 * __delta));
  
! 	_M_initialize();
        }
  
    template<typename _RealType>
--- 3097,3103 ----
  	for (size_t __k = 0; __k < __nw; ++__k)
  	  _M_den.push_back(__fw(_M_int[__k] + 0.5 * __delta));
  
! 	_M_configure();
        }
  
    template<typename _RealType>
*************** namespace __detail
*** 3159,3177 ****
    template<typename _RealType>
      void
      piecewise_linear_distribution<_RealType>::param_type::
!     _M_initialize()
      {
-       if (_M_int.size() < 2
- 	  || (_M_int.size() == 2
- 	      && _M_int[0] == _RealType(0)
- 	      && _M_int[1] == _RealType(1)
- 	      && _M_den[0] == _M_den[1]))
- 	{
- 	  _M_int.clear();
- 	  _M_den.clear();
- 	  return;
- 	}
- 
        double __sum = 0.0;
        _M_cp.reserve(_M_int.size() - 1);
        _M_m.reserve(_M_int.size() - 1);
--- 3222,3229 ----
    template<typename _RealType>
      void
      piecewise_linear_distribution<_RealType>::param_type::
!     _M_configure()
      {
        double __sum = 0.0;
        _M_cp.reserve(_M_int.size() - 1);
        _M_m.reserve(_M_int.size() - 1);
*************** namespace __detail
*** 3194,3200 ****
  
        //  Make sure the last cumulative probablility is one.
        _M_cp[_M_cp.size() - 1] = 1.0;
!      }
  
    template<typename _RealType>
      template<typename _InputIteratorB, typename _InputIteratorW>
--- 3246,3272 ----
  
        //  Make sure the last cumulative probablility is one.
        _M_cp[_M_cp.size() - 1] = 1.0;
!     }
! 
!   template<typename _RealType>
!     void
!     piecewise_linear_distribution<_RealType>::param_type::
!     _M_initialize2(const _RealType* __ints, const _RealType* __dens)
!     {
!       if (__ints[0] == _RealType(0)
! 	  && __ints[1] == _RealType(1)
! 	  && __dens[0] == __dens[1])
! 	return;
! 
!       _M_int.reserve(2);
!       _M_int.push_back(__ints[0]);
!       _M_int.push_back(__ints[1]);
! 
!       _M_den.reserve(2);
!       _M_den.push_back(__dens[0]);
!       _M_den.push_back(__dens[1]);
!       _M_configure();
!     }
  
    template<typename _RealType>
      template<typename _InputIteratorB, typename _InputIteratorW>
*************** namespace __detail
*** 3204,3216 ****
  		 _InputIteratorW __wbegin)
        : _M_int(), _M_den(), _M_cp(), _M_m()
        {
! 	for (; __bbegin != __bend; ++__bbegin, (void) ++__wbegin)
  	  {
! 	    _M_int.push_back(*__bbegin);
! 	    _M_den.push_back(*__wbegin);
  	  }
  
! 	_M_initialize();
        }
  
    template<typename _RealType>
--- 3276,3318 ----
  		 _InputIteratorW __wbegin)
        : _M_int(), _M_den(), _M_cp(), _M_m()
        {
! 	_RealType __ints[2];
! 	if (!__detail::__load_first2(__bbegin, __bend, __ints))
! 	  return;
! 
! 	if (__bbegin == __bend)
  	  {
! 	    _RealType __dens[2];
! 	    __dens[0] = *__wbegin;
! 	    ++__wbegin;
! 	    __dens[1] = *__wbegin;
! 	    _M_initialize2(__ints, __dens);
! 	    return;
  	  }
  
! #if __glibcxx_concepts // C++ >= C++20
! 	if constexpr (sized_sentinel_for<_InputIteratorB, _InputIteratorB>
! 			|| forward_iterator<_InputIteratorB>)
! 	  _M_int.reserve(2 + size_t(ranges::distance(__bbegin, __bend)));
! #else
! #pragma GCC diagnostic push
! #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
! 	if constexpr (is_convertible<__iter_category_t<_InputIteratorB>,
! 				     forward_iterator_tag>::value)
! 	  _M_int.reserve(2 + size_t(std::distance(__bbegin, __bend)));
! #pragma GCC diagnostic pop
! #endif
! 
! 	_M_int.push_back(__ints[0]);
! 	_M_int.push_back(__ints[1]);
! 	for (; __bbegin != __bend; ++__bbegin)
! 	  _M_int.push_back(*__bbegin);
! 
! 	_M_den.reserve(_M_int.size());
! 	for (size_t __i = 0; __i < _M_int.size(); (void)++__i, ++__wbegin)
! 	  _M_den.push_back(*__wbegin);
! 
! 	_M_configure();
        }
  
    template<typename _RealType>
*************** namespace __detail
*** 3219,3233 ****
        param_type(initializer_list<_RealType> __bl, _Func __fw)
        : _M_int(), _M_den(), _M_cp(), _M_m()
        {
! 	_M_int.reserve(__bl.size());
! 	_M_den.reserve(__bl.size());
! 	for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter)
  	  {
! 	    _M_int.push_back(*__biter);
! 	    _M_den.push_back(__fw(*__biter));
  	  }
  
! 	_M_initialize();
        }
  
    template<typename _RealType>
--- 3321,3344 ----
        param_type(initializer_list<_RealType> __bl, _Func __fw)
        : _M_int(), _M_den(), _M_cp(), _M_m()
        {
! 	if (__bl.size() < 2)
! 	  return;
! 
! 	if (__bl.size() == 2)
  	  {
! 	    const _RealType *__ints = __bl.begin();
! 	    _RealType __den[2];
! 	    __den[0] = __fw(__ints[0]);
! 	    __den[1] = __fw(__ints[1]);
! 	    _M_initialize2(__ints, __den);
! 	    return;
  	  }
  
! 	_M_int = __bl;
! 	_M_den.reserve(__bl.size());
! 	for (_RealType __b : __bl)
! 	  _M_den.push_back(__fw(__b));
! 	_M_configure();
        }
  
    template<typename _RealType>
*************** namespace __detail
*** 3238,3243 ****
--- 3349,3363 ----
        {
  	const size_t __n = __nw == 0 ? 1 : __nw;
  	const _RealType __delta = (__xmax - __xmin) / __n;
+ 	if (__n == 1)
+ 	  {
+ 	    _RealType __ints[2] = { __xmin, __xmin + __delta };
+ 	    _RealType __dens[2];
+ 	    __dens[0] = __fw(__ints[0]);
+ 	    __dens[1] = __fw(__ints[1]);
+ 	    _M_initialize2(__ints, __dens);
+ 	    return;
+ 	  }
  
  	_M_int.reserve(__n + 1);
  	_M_den.reserve(__n + 1);
*************** namespace __detail
*** 3247,3253 ****
  	    _M_den.push_back(__fw(_M_int[__k] + __delta));
  	  }
  
! 	_M_initialize();
        }
  
    template<typename _RealType>
--- 3367,3373 ----
  	    _M_den.push_back(__fw(_M_int[__k] + __delta));
  	  }
  
! 	_M_configure();
        }
  
    template<typename _RealType>
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/bits/shared_ptr_atomic.h gcc-17-20260517/libstdc++-v3/include/bits/shared_ptr_atomic.h
*** gcc-17-20260510/libstdc++-v3/include/bits/shared_ptr_atomic.h	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/bits/shared_ptr_atomic.h	Sun May 17 22:32:15 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 501,507 ****
  	{
  	  auto __old_ptr = __ptr;
  	  _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
! 	  uintptr_t __old_pi 
  	    = _AtomicRef(&_M_val).fetch_sub(1, memory_order_relaxed) - 1u;
  	  _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
  
--- 501,507 ----
  	{
  	  auto __old_ptr = __ptr;
  	  _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
! 	  uintptr_t __old_pi
  	    = _AtomicRef(&_M_val).fetch_sub(1, memory_order_relaxed) - 1u;
  	  _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
  
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/std/chrono gcc-17-20260517/libstdc++-v3/include/std/chrono
*** gcc-17-20260510/libstdc++-v3/include/std/chrono	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/std/chrono	Sun May 17 22:32:16 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 131,136 ****
--- 131,143 ----
        leap_second_info
        get_leap_second_info(const utc_time<_Duration>& __ut);
  
+     /// @cond undocumented
+     namespace __detail
+     {
+       bool __recent_leap_second_info(leap_second_info&, unsigned);
+     }
+     /// @endcond
+ 
      /** A clock that measures Universal Coordinated Time (UTC).
       *
       * The epoch is 1970-01-01 00:00:00.
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2818,2823 ****
--- 2825,2833 ----
        friend class leap_second;
        friend struct time_zone::_Impl;
        friend class time_zone_link;
+ 
+       friend bool
+       __detail::__recent_leap_second_info(leap_second_info&, unsigned);
      };
  
      class time_zone_link
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2943,2958 ****
  	{ return __x.date() <=> __y; }
  
      private:
!       explicit leap_second(seconds::rep __s) : _M_s(__s) { }
  
        friend struct tzdb_list::_Node;
  
        friend const tzdb& reload_tzdb();
  
-       template<typename _Duration>
- 	friend leap_second_info
- 	get_leap_second_info(const utc_time<_Duration>&);
- 
        seconds _M_s; // == date().time_since_epoch() * value().count()
      };
  
--- 2953,2964 ----
  	{ return __x.date() <=> __y; }
  
      private:
!       constexpr explicit leap_second(seconds::rep __s) : _M_s(__s) { }
  
        friend struct tzdb_list::_Node;
  
        friend const tzdb& reload_tzdb();
  
        seconds _M_s; // == date().time_since_epoch() * value().count()
      };
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 3217,3222 ****
--- 3223,3231 ----
  
  namespace __detail
  {
+     // This function is inline to support fast conversions between utc_time
+     // and sys_time when possible, without requiring a chrono::tzdb object
+     // to be constructed.
      inline leap_second_info
      __get_leap_second_info(sys_seconds __ss, bool __is_utc)
      {
*************** namespace __detail
*** 3252,3316 ****
  	1435708800, // 1 Jul 2015
  	1483228800, // 1 Jan 2017
        };
        // The list above is known to be valid until (at least) this date
        // and only contains positive leap seconds.
        constexpr sys_seconds __expires(1798416000s); // 2026-12-28 00:00:00 UTC
  
- #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
        if (__ss > __expires)
  	{
! 	  // Use updated leap_seconds from tzdb.
! 	  size_t __n = std::size(__leaps);
! 
! 	  auto __db = get_tzdb_list().begin();
! 	  auto __first = __db->leap_seconds.begin() + __n;
! 	  auto __last = __db->leap_seconds.end();
! 	  auto __pos = std::upper_bound(__first, __last, __ss);
! 	  seconds __elapsed(__n);
! 	  for (auto __i = __first; __i != __pos; ++__i)
! 	    __elapsed += __i->value();
  
! 	  if (__is_utc)
! 	    {
! 	      // Convert utc_time to sys_time:
! 	      __ss -= __elapsed;
! 	      // See if that sys_time is before (or during) previous leap sec:
! 	      if (__pos != __first && __ss < __pos[-1])
! 		{
! 		  if ((__ss + 1s) >= __pos[-1])
! 		    return {true, __elapsed};
! 		  __elapsed -= __pos[-1].value();
! 		}
! 	    }
! 	  return {false, __elapsed};
! 	}
!       else
  #endif
! 	{
! 	  seconds::rep __s = __ss.time_since_epoch().count();
! 	  const seconds::rep* __first = std::begin(__leaps);
! 	  const seconds::rep* __last = std::end(__leaps);
  
! 	  // Don't bother searching the list if we're after the last one.
! 	  if (__s > (__last[-1] + (__last - __first) + 1))
! 	    return { false, seconds(__last - __first) };
  
! 	  auto __pos = std::upper_bound(__first, __last, __s);
! 	  seconds __elapsed{__pos - __first};
! 	  if (__is_utc)
  	    {
! 	      // Convert utc_time to sys_time:
! 	      __s -= __elapsed.count();
! 	      // See if that sys_time is before (or during) previous leap sec:
! 	      if (__pos != __first && __s < __pos[-1])
! 		{
! 		  if ((__s + 1) >= __pos[-1])
! 		    return {true, __elapsed};
! 		  --__elapsed;
! 		}
  	    }
- 	  return {false, __elapsed};
  	}
      }
  } // namespace __detail
  
--- 3261,3316 ----
  	1435708800, // 1 Jul 2015
  	1483228800, // 1 Jan 2017
        };
+ 
+       // The default result for times after the last leap year.
+       constexpr leap_second_info __after_last{
+ 	.is_leap_second = false,
+ 	.elapsed = seconds(std::size(__leaps))
+       };
+ 
        // The list above is known to be valid until (at least) this date
        // and only contains positive leap seconds.
        constexpr sys_seconds __expires(1798416000s); // 2026-12-28 00:00:00 UTC
  
        if (__ss > __expires)
  	{
! #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI // use chrono::tzdb
! 	  // Call into the library because it might have knowledge of new
! 	  // leap seconds loaded at runtime from the tzdata files.
  
! 	  // We misuse leap_second_info here to pass {bool, seconds} inputs:
! 	  leap_second_info __info{ .is_leap_second = __is_utc,
! 				   .elapsed = __ss.time_since_epoch() };
! 	  // If this returns true, then __info holds the output result:
! 	  if (__detail::__recent_leap_second_info(__info, std::size(__leaps)))
! 	    return __info;
  #endif
! 	  return __after_last;
! 	}
  
!       seconds::rep __s = __ss.time_since_epoch().count();
!       const seconds::rep* __first = std::begin(__leaps);
!       const seconds::rep* __last = std::end(__leaps);
  
!       // Don't bother searching the list if we're after the last one.
!       if (__s > (__last[-1] + (__last - __first) + 1))
! 	return __after_last;
! 
!       auto __pos = std::upper_bound(__first, __last, __s);
!       seconds __elapsed{__pos - __first};
!       if (__is_utc)
! 	{
! 	  // Convert utc_time to sys_time:
! 	  __s -= __elapsed.count();
! 	  // See if that sys_time is before (or during) previous leap sec:
! 	  if (__pos != __first && __s < __pos[-1])
  	    {
! 	      if ((__s + 1) >= __pos[-1])
! 		return {true, __elapsed};
! 	      --__elapsed;
  	    }
  	}
+       return {false, __elapsed};
      }
  } // namespace __detail
  
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/std/format gcc-17-20260517/libstdc++-v3/include/std/format
*** gcc-17-20260510/libstdc++-v3/include/std/format	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/std/format	Sun May 17 22:32:16 2026
*************** namespace __format
*** 1438,1454 ****
  	{
  	  using _Range = remove_reference_t<_Rg>;
  	  using _String_view = basic_string_view<_CharT>;
! 	  if constexpr (!is_lvalue_reference_v<_Rg>)
! 	    return _M_format_range<_Range&>(__rg, __fc);
! 	  else if constexpr (!is_const_v<_Range>
! 			       && __simply_formattable_range<_Range, _CharT>)
! 	    return _M_format_range<const _Range&>(__rg, __fc);
! 	  else if constexpr (ranges::contiguous_range<_Rg>)
  	    {
  	      _String_view __str(ranges::data(__rg),
  				 size_t(ranges::distance(__rg)));
  	      return format(__str, __fc);
  	    }
  	  else
  	    {
  	      auto __handle_debug = [this, &__rg]<typename _NOut>(_NOut __nout)
--- 1438,1454 ----
  	{
  	  using _Range = remove_reference_t<_Rg>;
  	  using _String_view = basic_string_view<_CharT>;
! 	  if constexpr (ranges::contiguous_range<_Rg>)
  	    {
  	      _String_view __str(ranges::data(__rg),
  				 size_t(ranges::distance(__rg)));
  	      return format(__str, __fc);
  	    }
+ 	  else if constexpr (!is_const_v<_Range>
+ 			        && __simply_formattable_range<_Range, _CharT>)
+ 	    return _M_format_range<const _Range&>(__rg, __fc);
+ 	  else if constexpr (!is_lvalue_reference_v<_Rg>)
+ 	    return _M_format_range<_Range&>(__rg, __fc);
  	  else
  	    {
  	      auto __handle_debug = [this, &__rg]<typename _NOut>(_NOut __nout)
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/std/optional gcc-17-20260517/libstdc++-v3/include/std/optional
*** gcc-17-20260510/libstdc++-v3/include/std/optional	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/std/optional	Sun May 17 22:32:16 2026
***************
*** 62,68 ****
  #ifdef __cpp_lib_optional_range_support // C++ >= 26
  # include <bits/formatfwd.h>
  # include <bits/ranges_base.h>
! # include <bits/stl_iterator.h>
  #endif
  
  namespace std _GLIBCXX_VISIBILITY(default)
--- 62,68 ----
  #ifdef __cpp_lib_optional_range_support // C++ >= 26
  # include <bits/formatfwd.h>
  # include <bits/ranges_base.h>
! # include <bits/range_access.h>
  #endif
  
  namespace std _GLIBCXX_VISIBILITY(default)
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/std/stacktrace gcc-17-20260517/libstdc++-v3/include/std/stacktrace
*** gcc-17-20260510/libstdc++-v3/include/std/stacktrace	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/std/stacktrace	Sun May 17 22:32:16 2026
***************
*** 45,53 ****
  #include <bits/memory_resource.h>
  #include <bits/stl_algobase.h>
  #include <bits/stl_algo.h>
- #include <bits/stl_iterator.h>
  #include <bits/stl_uninitialized.h>
  #include <bits/stl_tempbuf.h> // __get_temporary_buffer
  #include <ext/numeric_traits.h>
  
  namespace std _GLIBCXX_VISIBILITY(default)
--- 45,53 ----
  #include <bits/memory_resource.h>
  #include <bits/stl_algobase.h>
  #include <bits/stl_algo.h>
  #include <bits/stl_uninitialized.h>
  #include <bits/stl_tempbuf.h> // __get_temporary_buffer
+ #include <bits/range_access.h>
  #include <ext/numeric_traits.h>
  
  namespace std _GLIBCXX_VISIBILITY(default)
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/std/string_view gcc-17-20260517/libstdc++-v3/include/std/string_view
*** gcc-17-20260510/libstdc++-v3/include/std/string_view	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/std/string_view	Sun May 17 22:32:16 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 621,626 ****
--- 621,629 ----
    // type (see N3766).
  
  #if __cpp_lib_three_way_comparison
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 3950. std::basic_string_view comparison operators are overspecified 
+ 
    template<typename _CharT, typename _Traits>
      [[nodiscard]]
      constexpr bool
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 633,639 ****
      [[nodiscard]]
      constexpr auto
      operator<=>(basic_string_view<_CharT, _Traits> __x,
! 		__type_identity_t<basic_string_view<_CharT, _Traits>> __y)
      noexcept
      -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0))
      { return __detail::__char_traits_cmp_cat<_Traits>(__x.compare(__y)); }
--- 636,642 ----
      [[nodiscard]]
      constexpr auto
      operator<=>(basic_string_view<_CharT, _Traits> __x,
! 		type_identity_t<basic_string_view<_CharT, _Traits>> __y)
      noexcept
      -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0))
      { return __detail::__char_traits_cmp_cat<_Traits>(__x.compare(__y)); }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/include/std/type_traits gcc-17-20260517/libstdc++-v3/include/std/type_traits
*** gcc-17-20260510/libstdc++-v3/include/std/type_traits	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/include/std/type_traits	Sun May 17 22:32:16 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 164,169 ****
--- 164,189 ----
      using __conditional_t
        = typename __conditional<_Cond>::template type<_If, _Else>;
  
+ #ifdef __cpp_lib_type_identity // C++ >= 20
+   /** Identity metafunction.
+    * @since C++20
+    * @{
+    */
+   template<typename _Tp>
+     struct type_identity { using type = _Tp; };
+ 
+   template<typename _Tp>
+     using type_identity_t = typename type_identity<_Tp>::type;
+   /// @}
+ 
+   /// @cond undocumented
+   template <typename _Tp>
+     using __type_identity = type_identity<_Tp>;
+ 
+   template<typename _Tp>
+     using __type_identity_t = typename type_identity<_Tp>::type;
+   /// @endcond
+ #else
    /// @cond undocumented
    template <typename _Type>
      struct __type_identity
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 171,177 ****
--- 191,200 ----
  
    template<typename _Tp>
      using __type_identity_t = typename __type_identity<_Tp>::type;
+   /// @endcond
+ #endif
  
+   /// @cond undocumented
    namespace __detail
    {
      // A variadic alias template that resolves to its first argument.
*************** template<typename _Ret, typename _Fn, ty
*** 3955,3973 ****
    /// @}
  #endif // __cpp_lib_remove_cvref
  
- #ifdef __cpp_lib_type_identity // C++ >= 20
-   /** * Identity metafunction.
-    * @since C++20
-    * @{
-    */
-   template<typename _Tp>
-     struct type_identity { using type = _Tp; };
- 
-   template<typename _Tp>
-     using type_identity_t = typename type_identity<_Tp>::type;
-   /// @}
- #endif
- 
  #ifdef __cpp_lib_unwrap_ref // C++ >= 20
    /** Unwrap a reference_wrapper
     * @since C++20
--- 3978,3983 ----
diff -Nrcpad gcc-17-20260510/libstdc++-v3/src/c++11/debug.cc gcc-17-20260517/libstdc++-v3/src/c++11/debug.cc
*** gcc-17-20260510/libstdc++-v3/src/c++11/debug.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/src/c++11/debug.cc	Sun May 17 22:32:16 2026
***************
*** 33,39 ****
  #include <debug/safe_local_iterator.h>
  #include <debug/vector>
  
- #include <cassert>
  #include <cstdio>	// for std::fprintf, stderr
  #include <cstdlib>	// for std::abort
  #include <cctype>	// for std::isspace.
--- 33,38 ----
*************** namespace
*** 888,894 ****
    void
    print_named_name(PrintContext& ctx, const _Parameter::_Named& named)
    {
!     assert(named._M_name);
      pretty_print(ctx, named._M_name, print_word);
    }
  
--- 887,893 ----
    void
    print_named_name(PrintContext& ctx, const _Parameter::_Named& named)
    {
!     __glibcxx_assert(named._M_name);
      pretty_print(ctx, named._M_name, print_word);
    }
  
*************** namespace
*** 985,991 ****
  	print_iterator_state(ctx, iterator);
        else if (__builtin_strcmp(fname, "sequence") == 0)
  	{
! 	  assert(iterator._M_sequence);
  	  print_address(ctx, iterator._M_sequence);
  	}
        else if (__builtin_strcmp(fname, "seq_type") == 0)
--- 984,990 ----
  	print_iterator_state(ctx, iterator);
        else if (__builtin_strcmp(fname, "sequence") == 0)
  	{
! 	  __glibcxx_assert(iterator._M_sequence);
  	  print_address(ctx, iterator._M_sequence);
  	}
        else if (__builtin_strcmp(fname, "seq_type") == 0)
*************** namespace
*** 999,1041 ****
    void
    print_field(PrintContext& ctx, const _Parameter& param, const char* fname)
    {
!     assert(param._M_kind != _Parameter::__unused_param);
  
      const auto& variant = param._M_variant;
      switch (param._M_kind)
      {
      case _Parameter::__iterator:
        if (!print_iterator_field(ctx, fname, variant._M_iterator))
! 	assert(false);
        break;
  
      case _Parameter::__sequence:
        if (!print_instance_field(ctx, fname, variant._M_sequence))
! 	assert(false);
        break;
  
      case _Parameter::__integer:
        if (!print_named_field(ctx, fname, variant._M_integer))
! 	assert(false);
        break;
  
      case _Parameter::__string:
        if (!print_named_field(ctx, fname, variant._M_string))
! 	assert(false);
        break;
  
      case _Parameter::__instance:
        if (!print_instance_field(ctx, fname, variant._M_instance))
! 	assert(false);
        break;
  
      case _Parameter::__iterator_value_type:
        if (!print_type_field(ctx, fname, variant._M_iterator_value_type))
! 	assert(false);
        break;
  
      default:
!       assert(false);
        break;
      }
    }
--- 998,1040 ----
    void
    print_field(PrintContext& ctx, const _Parameter& param, const char* fname)
    {
!     __glibcxx_assert(param._M_kind != _Parameter::__unused_param);
  
      const auto& variant = param._M_variant;
      switch (param._M_kind)
      {
      case _Parameter::__iterator:
        if (!print_iterator_field(ctx, fname, variant._M_iterator))
! 	__glibcxx_assert(false);
        break;
  
      case _Parameter::__sequence:
        if (!print_instance_field(ctx, fname, variant._M_sequence))
! 	__glibcxx_assert(false);
        break;
  
      case _Parameter::__integer:
        if (!print_named_field(ctx, fname, variant._M_integer))
! 	__glibcxx_assert(false);
        break;
  
      case _Parameter::__string:
        if (!print_named_field(ctx, fname, variant._M_string))
! 	__glibcxx_assert(false);
        break;
  
      case _Parameter::__instance:
        if (!print_instance_field(ctx, fname, variant._M_instance))
! 	__glibcxx_assert(false);
        break;
  
      case _Parameter::__iterator_value_type:
        if (!print_type_field(ctx, fname, variant._M_iterator_value_type))
! 	__glibcxx_assert(false);
        break;
  
      default:
!       __glibcxx_assert(false);
        break;
      }
    }
*************** namespace
*** 1198,1206 ****
  	  }
  
  	// Get the parameter number
! 	assert(*str >= '1' && *str <= '9');
  	size_t param_index = *str - '0' - 1;
! 	assert(param_index < num_parameters);
  	const auto& param = parameters[param_index];
  
  	// '.' separates the parameter number from the field
--- 1197,1205 ----
  	  }
  
  	// Get the parameter number
! 	__glibcxx_assert(*str >= '1' && *str <= '9');
  	size_t param_index = *str - '0' - 1;
! 	__glibcxx_assert(param_index < num_parameters);
  	const auto& param = parameters[param_index];
  
  	// '.' separates the parameter number from the field
*************** namespace
*** 1208,1214 ****
  	++str;
  	if (*str != '.')
  	  {
! 	    assert(*str == ';');
  	    ++str;
  	    if (param._M_kind == _Parameter::__integer)
  	      print_integer(ctx, param._M_variant._M_integer._M_value);
--- 1207,1213 ----
  	++str;
  	if (*str != '.')
  	  {
! 	    __glibcxx_assert(*str == ';');
  	    ++str;
  	    if (param._M_kind == _Parameter::__integer)
  	      print_integer(ctx, param._M_variant._M_integer._M_value);
*************** namespace
*** 1226,1233 ****
  	++str;
  	while (*str != ';')
  	  {
! 	    assert(*str);
! 	    assert(field_idx < max_field_len - 1);
  	    field[field_idx++] = *str++;
  	  }
  	++str;
--- 1225,1232 ----
  	++str;
  	while (*str != ';')
  	  {
! 	    __glibcxx_assert(*str);
! 	    __glibcxx_assert(field_idx < max_field_len - 1);
  	    field[field_idx++] = *str++;
  	  }
  	++str;
*************** namespace __gnu_debug
*** 1382,1388 ****
      print_literal(ctx, "Error: ");
  
      // Print the error message
!     assert(_M_text);
      print_string(ctx, _M_text, -1, _M_parameters, _M_num_parameters);
      print_literal(ctx, ".\n");
  
--- 1381,1387 ----
      print_literal(ctx, "Error: ");
  
      // Print the error message
!     __glibcxx_assert(_M_text);
      print_string(ctx, _M_text, -1, _M_parameters, _M_num_parameters);
      print_literal(ctx, ".\n");
  
diff -Nrcpad gcc-17-20260510/libstdc++-v3/src/c++17/floating_to_chars.cc gcc-17-20260517/libstdc++-v3/src/c++17/floating_to_chars.cc
*** gcc-17-20260510/libstdc++-v3/src/c++17/floating_to_chars.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/src/c++17/floating_to_chars.cc	Sun May 17 22:32:16 2026
***************
*** 26,32 ****
  
  #include <bit>
  #include <cfenv>
- #include <cassert>
  #include <cmath>
  #include <cstdio>
  #include <cstring>
--- 26,31 ----
*************** namespace
*** 106,111 ****
--- 105,113 ----
  
    namespace ryu
    {
+ #pragma push_macro("assert")
+ #undef assert
+ #define assert __glibcxx_assert
  #include "ryu/common.h"
  #include "ryu/digit_table.h"
  #include "ryu/d2s_intrinsics.h"
*************** namespace
*** 123,128 ****
--- 125,131 ----
  # include "ryu/ryu_generic_128.h"
  # include "ryu/generic_128.c"
      } // namespace generic128
+ #pragma pop_macro("assert")
  
      using generic128::floating_decimal_128;
      using generic128::generic_binary_to_decimal;
diff -Nrcpad gcc-17-20260510/libstdc++-v3/src/c++20/tzdb.cc gcc-17-20260517/libstdc++-v3/src/c++20/tzdb.cc
*** gcc-17-20260510/libstdc++-v3/src/c++20/tzdb.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/src/c++20/tzdb.cc	Sun May 17 22:32:16 2026
***************
*** 36,41 ****
--- 36,42 ----
  #include <memory>     // atomic<shared_ptr<T>>
  #include <mutex>      // mutex
  #include <iomanip>    // quoted
+ #include <span>
  #if defined __GTHREADS && ! defined _GLIBCXX_HAS_GTHREADS
  # include <ext/concurrence.h> // __gnu_cxx::__mutex
  #endif
*************** namespace std::chrono
*** 196,201 ****
--- 197,205 ----
      static const tzdb& _S_replace_head(shared_ptr<_Node>, shared_ptr<_Node>);
  
      static pair<vector<leap_second>, bool> _S_read_leap_seconds();
+ 
+     // This is here because _Node is a friend so can call private constructor.
+     static const leap_second fixed_leaps[];
    };
  
    // Implementation of the private constructor used for the singleton object.
*************** namespace std::chrono
*** 214,220 ****
    constinit atomic<tzdb_list::_Node*> tzdb_list::_Node::_S_head_cache{nullptr};
  #endif
  
!   // The data structures defined in this file (Rule, on_day, at_time etc.)
    // are used to represent the information parsed from the tzdata.zi file
    // described at https://man7.org/linux/man-pages/man8/zic.8.html#FILES
  
--- 218,224 ----
    constinit atomic<tzdb_list::_Node*> tzdb_list::_Node::_S_head_cache{nullptr};
  #endif
  
!   // The data structures defined in this file (Rule, on_month_day, at_time etc.)
    // are used to represent the information parsed from the tzdata.zi file
    // described at https://man7.org/linux/man-pages/man8/zic.8.html#FILES
  
*************** namespace std::chrono
*** 303,309 ****
      };
  
      // The IN and ON fields of a RULE record, e.g. "March lastSunday".
!     struct on_day
      {
        using rep = uint_least16_t;
        // Equivalent to Kind, chrono::month, chrono::day, chrono::weekday,
--- 307,313 ----
      };
  
      // The IN and ON fields of a RULE record, e.g. "March lastSunday".
!     struct on_month_day
      {
        using rep = uint_least16_t;
        // Equivalent to Kind, chrono::month, chrono::day, chrono::weekday,
*************** namespace std::chrono
*** 367,373 ****
  	return ymd;
        }
  
!       friend istream& operator>>(istream&, on_day&);
      };
  
      // Wrapper for two chrono::year values, which reads the FROM and TO
--- 371,385 ----
  	return ymd;
        }
  
!       struct on_day_t // tag type for reading ON and DAY fields only
!       {
! 	on_month_day& parent;
! 	friend istream& operator>>(istream&, on_day_t&&);
!       };
! 
!       on_day_t on_day() { return on_day_t{*this}; }
! 
!       friend istream& operator>>(istream&, on_month_day&);
      };
  
      // Wrapper for two chrono::year values, which reads the FROM and TO
*************** namespace std::chrono
*** 478,489 ****
  
        ZoneInfo(sys_info&& info)
        : m_buf(std::move(info.abbrev)), m_expanded(true), m_save(info.save),
! 	m_offset(info.offset), m_until(info.end)
        { }
  
        ZoneInfo(const pair<sys_info, string_view>& info)
!       : m_expanded(true), m_save(info.first.save), m_offset(info.first.offset),
! 	m_until(info.first.end)
        {
  	if (info.second.size())
  	  {
--- 490,502 ----
  
        ZoneInfo(sys_info&& info)
        : m_buf(std::move(info.abbrev)), m_expanded(true), m_save(info.save),
! 	m_offset(info.offset - seconds(info.save)), m_until(info.end)
        { }
  
        ZoneInfo(const pair<sys_info, string_view>& info)
!       : m_expanded(true), m_save(info.first.save),
! 	m_offset(info.first.offset - seconds(info.first.save)),
!        	m_until(info.first.end)
        {
  	if (info.second.size())
  	  {
*************** namespace std::chrono
*** 494,500 ****
  	m_buf += info.first.abbrev;
        }
  
!       // STDOFF: Seconds from UTC during standard time.
        seconds
        offset() const noexcept { return m_offset; }
  
--- 507,513 ----
  	m_buf += info.first.abbrev;
        }
  
!       // STDOFF: Seconds from UTC during standard time (without any save).
        seconds
        offset() const noexcept { return m_offset; }
  
*************** namespace std::chrono
*** 539,545 ****
  	  return false;
  
  	info.end = until();
! 	info.offset = offset();
  	info.save = minutes(m_save);
  	info.abbrev = format();
  	format_abbrev_str(info); // expand %z
--- 552,558 ----
  	  return false;
  
  	info.end = until();
! 	info.offset = offset() + seconds(m_save);
  	info.save = minutes(m_save);
  	info.abbrev = format();
  	format_abbrev_str(info); // expand %z
*************** namespace std::chrono
*** 589,597 ****
      // A RULE record from the tzdata.zi timezone info file.
      struct Rule
      {
!       // This allows on_day to reuse padding of at_time.
        // This keeps the size to 8 bytes and the alignment to 4 bytes.
!       struct datetime : at_time { on_day day; };
  
        // TODO combining name+letters into a single string (like in ZoneInfo)
        // would save sizeof(string) and make Rule fit in a single cacheline.
--- 602,610 ----
      // A RULE record from the tzdata.zi timezone info file.
      struct Rule
      {
!       // This allows on_month_day to reuse padding of at_time.
        // This keeps the size to 8 bytes and the alignment to 4 bytes.
!       struct datetime : at_time { on_month_day day; };
  
        // TODO combining name+letters into a single string (like in ZoneInfo)
        // would save sizeof(string) and make Rule fit in a single cacheline.
*************** namespace std::chrono
*** 653,669 ****
  	    << ' ' << r.when.day.get_month() << ' ';
  	switch (r.when.day.kind)
  	{
! 	case on_day::DayOfMonth:
  	  out << (unsigned)r.when.day.get_day();
  	  break;
! 	case on_day::LastWeekday:
  	  out << "last" << weekday(r.when.day.day_of_week);
  	  break;
! 	case on_day::LessEq:
  	  out << weekday(r.when.day.day_of_week) << " <= "
  	    << r.when.day.day_of_month;
  	  break;
! 	case on_day::GreaterEq:
  	  out << weekday(r.when.day.day_of_week) << " >= "
  	    << r.when.day.day_of_month;
  	  break;
--- 666,682 ----
  	    << ' ' << r.when.day.get_month() << ' ';
  	switch (r.when.day.kind)
  	{
! 	case on_month_day::DayOfMonth:
  	  out << (unsigned)r.when.day.get_day();
  	  break;
! 	case on_month_day::LastWeekday:
  	  out << "last" << weekday(r.when.day.day_of_week);
  	  break;
! 	case on_month_day::LessEq:
  	  out << weekday(r.when.day.day_of_week) << " <= "
  	    << r.when.day.day_of_month;
  	  break;
! 	case on_month_day::GreaterEq:
  	  out << weekday(r.when.day.day_of_week) << " >= "
  	    << r.when.day.day_of_month;
  	  break;
*************** namespace std::chrono
*** 1251,1306 ****
    }
  #endif // TZDB_DISABLED
  
    // Return leap_second values, and a bool indicating whether the values are
    // current (true), or potentially out of date (false).
    pair<vector<leap_second>, bool>
    tzdb_list::_Node::_S_read_leap_seconds()
    {
!     // This list is valid until at least 2026-12-28 00:00:00 UTC.
!     constexpr auto expires = sys_days{2026y/12/28};
!     vector<leap_second> leaps
!     {
!       (leap_second)  78796800, // 1 Jul 1972
!       (leap_second)  94694400, // 1 Jan 1973
!       (leap_second) 126230400, // 1 Jan 1974
!       (leap_second) 157766400, // 1 Jan 1975
!       (leap_second) 189302400, // 1 Jan 1976
!       (leap_second) 220924800, // 1 Jan 1977
!       (leap_second) 252460800, // 1 Jan 1978
!       (leap_second) 283996800, // 1 Jan 1979
!       (leap_second) 315532800, // 1 Jan 1980
!       (leap_second) 362793600, // 1 Jul 1981
!       (leap_second) 394329600, // 1 Jul 1982
!       (leap_second) 425865600, // 1 Jul 1983
!       (leap_second) 489024000, // 1 Jul 1985
!       (leap_second) 567993600, // 1 Jan 1988
!       (leap_second) 631152000, // 1 Jan 1990
!       (leap_second) 662688000, // 1 Jan 1991
!       (leap_second) 709948800, // 1 Jul 1992
!       (leap_second) 741484800, // 1 Jul 1993
!       (leap_second) 773020800, // 1 Jul 1994
!       (leap_second) 820454400, // 1 Jan 1996
!       (leap_second) 867715200, // 1 Jul 1997
!       (leap_second) 915148800, // 1 Jan 1999
!       (leap_second)1136073600, // 1 Jan 2006
!       (leap_second)1230768000, // 1 Jan 2009
!       (leap_second)1341100800, // 1 Jul 2012
!       (leap_second)1435708800, // 1 Jul 2015
!       (leap_second)1483228800, // 1 Jan 2017
!     };
  
! #if 0
!     // This optimization isn't valid if the file has additional leap seconds
!     // defined since the library was compiled, but the system clock has been
!     // set to a time before the hardcoded expiration date.
!     if (system_clock::now() < expires)
!       return {std::move(leaps), true};
! #endif
  
  #ifndef TZDB_DISABLED
      if (ifstream ls{zoneinfo_file(leaps_file)})
        {
! 	auto exp_year = year_month_day(expires).year();
  	std::string s, w;
  	s.reserve(80); // Avoid later reallocations.
  	while (std::getline(ls, s))
--- 1264,1431 ----
    }
  #endif // TZDB_DISABLED
  
+ // These are the same values as the array in the <chrono> header, but might
+ // contain additional leap seconds if the libstdc++.so used at runtime is
+ // newer than the <chrono> header used to compile parts of the application.
+ constexpr leap_second tzdb_list::_Node::fixed_leaps[] {
+ #define LS leap_second
+   LS(  78796800), // 1 Jul 1972
+   LS(  94694400), // 1 Jan 1973
+   LS( 126230400), // 1 Jan 1974
+   LS( 157766400), // 1 Jan 1975
+   LS( 189302400), // 1 Jan 1976
+   LS( 220924800), // 1 Jan 1977
+   LS( 252460800), // 1 Jan 1978
+   LS( 283996800), // 1 Jan 1979
+   LS( 315532800), // 1 Jan 1980
+   LS( 362793600), // 1 Jul 1981
+   LS( 394329600), // 1 Jul 1982
+   LS( 425865600), // 1 Jul 1983
+   LS( 489024000), // 1 Jul 1985
+   LS( 567993600), // 1 Jan 1988
+   LS( 631152000), // 1 Jan 1990
+   LS( 662688000), // 1 Jan 1991
+   LS( 709948800), // 1 Jul 1992
+   LS( 741484800), // 1 Jul 1993
+   LS( 773020800), // 1 Jul 1994
+   LS( 820454400), // 1 Jan 1996
+   LS( 867715200), // 1 Jul 1997
+   LS( 915148800), // 1 Jan 1999
+   LS(1136073600), // 1 Jan 2006
+   LS(1230768000), // 1 Jan 2009
+   LS(1341100800), // 1 Jul 2012
+   LS(1435708800), // 1 Jul 2015
+   LS(1483228800), // 1 Jan 2017
+   // If new leap seconds get defined they should be added here.
+   // Negative leap seconds are represented as -1 * timestamp.
+ #undef LS
+ };
+ 
+ namespace
+ {
+   // The expiry date corresponding to the list above.
+   // tzdata 2026a leapseconds list expires at 2026-12-28 00:00:00 UTC
+   constexpr seconds fixed_expiry{1798416000u};
+ 
+   // This holds the most up-to-date number of leap seconds known at runtime.
+   // Initially zero, updated when _S_read_leap_seconds() is called.
+   constinit atomic<unsigned> num_leap_seconds{0};
+ }
+ 
+   namespace __detail
+   {
+     // Called by chrono::__detail::__get_leap_second_info in <chrono>
+     // to get leap_second_info for times after the expiry date in the header.
+     // The caller provides the time being queried in `info.elapsed` and
+     // whether that is a UTC time in `info.is_leap_second`.
+     // If it returns true, this function did the lookup and updated `info`.
+     // If this returns false, it means the hardcoded list of leap seconds
+     // in the header should be used for the lookup.
+     bool
+     __recent_leap_second_info(leap_second_info& info,
+ 			      unsigned num_positive_leaps)
+     {
+       // Extract the input args from info:
+       const auto [is_utc, secs] = info;
+       // And then reuse info for the output result:
+       info.is_leap_second = false;
+       info.elapsed = seconds(num_positive_leaps);
+ 
+       auto update_info = [&](span<const leap_second> leaps)
+       {
+ 	if (leaps.size() == num_positive_leaps)
+ 	  return false; // No new leap seconds, use the array in the header.
+ 
+ 	// info.elapsed already contains the first N leap seconds,
+ 	// so we only search the end of the span.
+ 	auto first = leaps.begin() + num_positive_leaps;
+ 	auto pos = std::upper_bound(first, leaps.end(), sys_seconds(secs));
+ 	for (auto i = first; i != pos; ++i)
+ 	  info.elapsed += i->value();
+ 
+ 	if (is_utc)
+ 	  {
+ 	    // This should never happen, but check it so that pos[-1] is valid:
+ 	    if (num_positive_leaps == 0) [[unlikely]]
+ 	      return false;
+ 
+ 	    // Convert utc_time to sys_time:
+ 	    sys_seconds ss(secs - info.elapsed);
+ 	    // See if that sys_time is before (or during) previous leap sec:
+ 	    if (ss < pos[-1])
+ 	      {
+ 		if ((ss + 1s) >= pos[-1])
+ 		  info.is_leap_second = true;
+ 		else
+ 		  info.elapsed -= pos[-1].value();
+ 	      }
+ 	  }
+ 	return true;
+       };
+ 
+       using _Node = tzdb_list::_Node;
+ 
+       // If the caller was compiled using an older GCC with an older expiry
+       // time in the header than the `fixed_expiry` defined above, we might
+       // be able to answer the query easily using the static `fixed_leaps`.
+       if (secs <= fixed_expiry)
+ 	return update_info(_Node::fixed_leaps);
+ 
+       constexpr auto num_fixed_leaps = std::size(_Node::fixed_leaps);
+ 
+       auto num_leaps = num_leap_seconds.load(memory_order::relaxed);
+       if (num_leaps == num_fixed_leaps)
+ 	// A leapseconds file has been read and has no new leap seconds:
+ 	return update_info(_Node::fixed_leaps);
+       else if (num_leaps != 0)
+ 	// The tzdb_list has been initialized and contains a tzdb object
+ 	// with new leap seconds, which we want to use here.
+ 	// The relaxed load above does not synchronize with anything, so to
+ 	// ensure that the get_tzdb_list() below will see a tzdb object set
+ 	// by _S_replace_head, we load num_leap_seconds again with acquire
+ 	// ordering:
+ 	(void) num_leap_seconds.load(memory_order::acquire);
+       else
+ 	{
+ 	  // The tzdb_list has not been initialized yet, so we don't know
+ 	  // the correct number of leap seconds.
+ 	  // We use _S_read_leap_seconds() to read the leapseconds file.
+ 	  // If that tells us there are no new leapseconds, we don't need
+ 	  // to parse all of tzdata.zi and initialize a whole tzdb object.
+ 	  if (_Node::_S_read_leap_seconds().first.size() == num_fixed_leaps)
+ 	    {
+ 	      // There are no new leap seconds. remember that so that the next
+ 	      // call to this function can just use fixed_leaps.
+ 	      num_leap_seconds.compare_exchange_strong(num_leaps,
+ 						       num_fixed_leaps,
+ 						       memory_order::relaxed);
+ 	      return update_info(_Node::fixed_leaps);
+ 	    }
+ 	  // else there are new leap seconds. We init tzdb_list so that the
+ 	  // new leap seconds are persisted in a tzdb object.
+ 	}
+ 
+       // Use updated leap_seconds from tzdb.
+       return update_info(get_tzdb_list().begin()->leap_seconds);
+     }
+   }
+ 
    // Return leap_second values, and a bool indicating whether the values are
    // current (true), or potentially out of date (false).
    pair<vector<leap_second>, bool>
    tzdb_list::_Node::_S_read_leap_seconds()
    {
!     // Populate the vector with the leap seconds we already know about:
!     vector<leap_second> leaps(fixed_leaps, std::end(fixed_leaps));
  
!     bool read_leaps_file = false;
  
  #ifndef TZDB_DISABLED
      if (ifstream ls{zoneinfo_file(leaps_file)})
        {
! 	constexpr year exp_year
! 	  = year_month_day(sys_days(duration_cast<days>(fixed_expiry))).year();
! 
  	std::string s, w;
  	s.reserve(80); // Avoid later reallocations.
  	while (std::getline(ls, s))
*************** namespace std::chrono
*** 1309,1314 ****
--- 1434,1440 ----
  
  	    if (!s.starts_with("Leap"))
  	      continue;
+ 
  	    istringstream li(std::move(s));
  	    li.exceptions(ios::failbit);
  	    li.ignore(4);
*************** namespace std::chrono
*** 1339,1350 ****
  		      leaps.push_back(ls);
  		  }
  	      }
! 	    s = std::move(li).str(); // return storage to s
  	  }
! 	return {std::move(leaps), true};
        }
  #endif
!     return {std::move(leaps), false};
    }
  
  #ifndef TZDB_DISABLED
--- 1465,1478 ----
  		      leaps.push_back(ls);
  		  }
  	      }
! 	    s = std::move(li).str(); // give allocated storage back to s
  	  }
! 
! 	read_leaps_file = true;
        }
  #endif
! 
!     return {std::move(leaps), read_leaps_file};
    }
  
  #ifndef TZDB_DISABLED
*************** namespace std::chrono
*** 1413,1418 ****
--- 1541,1553 ----
      _S_head_owner = std::move(new_head);
  #endif
      _S_cache_list_head(new_head_ptr);
+ 
+     // This allows __recent_leap_second_info() to know that it can use
+     // get_tzdb_list()->begin()->leap_seconds to get new leap seconds.
+     // The release op here synchronizes with the acquire op there.
+     num_leap_seconds.store(new_head_ptr->db.leap_seconds.size(),
+ 			   memory_order::release);
+ 
      return new_head_ptr->db;
    }
  
*************** namespace std::chrono
*** 2199,2220 ****
        }
      };
  
!     istream& operator>>(istream& in, on_day& to)
      {
!       on_day on{};
!       abbrev_month m{};
!       in >> m;
!       on.month = static_cast<unsigned>(m.m);
        int c = ws(in).peek();
        if ('0' <= c && c <= '9')
  	{
- 	  on.kind = on_day::DayOfMonth;
  	  unsigned d;
  	  in >> d;
  	  if (d <= 31) [[likely]]
  	    {
  	      on.day_of_month = d;
- 	      to = on;
  	      return in;
  	    }
  	}
--- 2334,2358 ----
        }
      };
  
!     // Read the day-component of an on_month_day expression (everything after
!     // the month).  Three forms are accepted: a plain day-of-month number,
!     // "lastXxx" where Xxx is a weekday name (LastWeekday), or "Xxx<=N" or
!     // "Xxx>=N" (LessEq / GreaterEq).  On failure the function sets failbit
!     // and leaves `to.parent` unchanged.
!     istream& operator>>(istream& in, on_month_day::on_day_t&& to)
      {
!       using enum on_month_day::Kind;
! 
!       on_month_day& on = to.parent;
        int c = ws(in).peek();
        if ('0' <= c && c <= '9')
  	{
  	  unsigned d;
  	  in >> d;
  	  if (d <= 31) [[likely]]
  	    {
+ 	      on.kind = DayOfMonth;
  	      on.day_of_month = d;
  	      return in;
  	    }
  	}
*************** namespace std::chrono
*** 2223,2231 ****
  	  in.ignore(4);
  	  if (abbrev_weekday w{}; in >> w) [[likely]]
  	    {
! 	      on.kind = on_day::LastWeekday;
  	      on.day_of_week = w.wd.c_encoding();
- 	      to = on;
  	      return in;
  	    }
  	}
--- 2361,2368 ----
  	  in.ignore(4);
  	  if (abbrev_weekday w{}; in >> w) [[likely]]
  	    {
! 	      on.kind = LastWeekday;
  	      on.day_of_week = w.wd.c_encoding();
  	      return in;
  	    }
  	}
*************** namespace std::chrono
*** 2237,2250 ****
  	    {
  	      if (in.get() == '=')
  		{
- 		  on.kind = c == '<' ? on_day::LessEq : on_day::GreaterEq;
- 		  on.day_of_week = w.wd.c_encoding();
  		  unsigned d;
  		  in >> d;
  		  if (d <= 31) [[likely]]
  		    {
  		      on.day_of_month = d;
- 		      to = on;
  		      return in;
  		    }
  		}
--- 2374,2386 ----
  	    {
  	      if (in.get() == '=')
  		{
  		  unsigned d;
  		  in >> d;
  		  if (d <= 31) [[likely]]
  		    {
+ 		      on.kind = c == '<' ? LessEq : GreaterEq;
+ 		      on.day_of_week = w.wd.c_encoding();
  		      on.day_of_month = d;
  		      return in;
  		    }
  		}
*************** namespace std::chrono
*** 2254,2259 ****
--- 2390,2406 ----
        return in;
      }
  
+     istream& operator>>(istream& in, on_month_day& to)
+     {
+       on_month_day md{};
+       abbrev_month m{};
+       in >> m;
+       md.month = static_cast<unsigned>(m.m);
+       if (in >> md.on_day())
+ 	to = md;
+       return in;
+     }
+ 
      istream& operator>>(istream& in, at_time& at)
      {
        int sign = 1;
*************** namespace std::chrono
*** 2356,2367 ****
        in.exceptions(ios::goodbit); // Don't throw ios::failure if YEAR absent.
        if (int y = int(year::max()); in >> y)
  	{
! 	  abbrev_month m{January};
! 	  int d = 1;
  	  at_time t{};
! 	  // XXX DAY should support ON format, e.g. lastSun or Sun>=8
! 	  in >> m >> d >> t;
! 	  inf.m_until = sys_days(year(y)/m.m/day(d)) + seconds(t.time);
  	  if (t.indicator != at_time::Universal)
  	    { // UNTIL uses "the rules in effect just before the transition"
  	      // adjust by STDOFF
--- 2503,2518 ----
        in.exceptions(ios::goodbit); // Don't throw ios::failure if YEAR absent.
        if (int y = int(year::max()); in >> y)
  	{
! 	  on_month_day on{ .kind = on_month_day::DayOfMonth,
! 			   .month = 1, .day_of_month = 1 };
  	  at_time t{};
! 	  if (abbrev_month m{January}; in >> m)
! 	    {
! 	      on.month = static_cast<unsigned>(m.m);
! 	      in >> on.on_day() >> t;
! 	    }
! 	  year_month_day ymd = on.pin(year(y));
! 	  inf.m_until = sys_days(ymd) + seconds(t.time);
  	  if (t.indicator != at_time::Universal)
  	    { // UNTIL uses "the rules in effect just before the transition"
  	      // adjust by STDOFF
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc gcc-17-20260517/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc	Sun May 17 22:32:16 2026
*************** test(std::chars_format fmt = std::chars_
*** 52,61 ****
      std::numbers::inv_sqrt3_v<std::float128_t>,
      std::numbers::egamma_v<std::float128_t>,
      std::numbers::phi_v<std::float128_t>,
- // Solaris has non-conforming printf, see PR98384 and PR107815.
- #if !(defined(__sun__) && defined(__svr4__))
      std::numeric_limits<std::float128_t>::max()
- #endif
    };
    char str1[10000], str2[10000];
    for (auto u : tests)
--- 52,58 ----
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/fallback.cc gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/fallback.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/fallback.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/fallback.cc	Sun May 17 22:32:16 2026
***************
*** 0 ****
--- 1,108 ----
+ // { dg-do run { target c++11 } }
+ // { dg-require-cstdint "" }
+ 
+ #include <random>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ 
+ using dist = std::piecewise_linear_distribution<>;
+ 
+ template<typename... Args>
+ bool
+ is_default(Args&&... args)
+ {
+   std::piecewise_constant_distribution<> u(std::forward<Args>(args)...);
+ 
+   std::vector<double> ints = u.intervals();
+   if (ints.size() != 2 || ints[0] != 0.0 || ints[1] != 1.0)
+     return false;
+ 
+   std::vector<double> dens = u.densities();
+   if (dens.size() != 1 || dens[0] != 1.0)
+     return false;
+ 
+   return true;
+ }
+ 
+ template<template<typename> class Range>
+ void
+ test_it_pair()
+ {
+   double wt[2];
+   double x[3];
+ 
+   Range<double> r0(x, x);
+   VERIFY( is_default(r0.begin(), r0.end(), wt) );
+ 
+   x[0] = 4.2;
+   Range<double> r1a(x, x+1);
+   VERIFY( is_default(r1a.begin(), r1a.end(), wt) );
+ 
+   x[0] = 0.0;
+   Range<double> r1b(x, x+1);
+   VERIFY( is_default(r1b.begin(), r1b.end(), wt) );
+ 
+   x[1] = 1.0;
+   wt[0] = 13.0;
+   Range<double> r2a(x, x+2);
+   VERIFY( is_default(r2a.begin(), r2a.end(), wt) );
+ 
+   wt[0] = 4.2;
+   Range<double> r2b(x, x+2);
+   VERIFY( is_default(r2b.begin(), r2b.end(), wt) );
+ 
+   x[1] = 0.5;
+   Range<double> r2c(x, x+2);
+   VERIFY( !is_default(r2c.begin(), r2c.end(), wt) );
+ 
+   x[2] = 1.0;
+   wt[1] = 2.0;
+   Range<double> r3(x, x+3);
+   VERIFY( !is_default(r3.begin(), r3.end(), wt) );
+ }
+ 
+ void test_init_list()
+ {
+   auto c = [](double x) { return 10; };
+   VERIFY(  is_default(std::initializer_list<double>{}, c) );
+   VERIFY(  is_default(std::initializer_list<double>{4.2}, c) );
+   VERIFY(  is_default(std::initializer_list<double>{0.0, 1.0}, c) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5}, c) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5, 1.0}, c) );
+ 
+   auto rel = [](double x) { return x + 10; };
+   VERIFY(  is_default(std::initializer_list<double>{}, rel) );
+   VERIFY(  is_default(std::initializer_list<double>{4.2}, rel) );
+   VERIFY(  is_default(std::initializer_list<double>{0.0, 1.0}, rel) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5}, rel) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5, 1.0}, rel) );
+ }
+ 
+ void test_xbound()
+ {
+   auto c = [](double x) { return 10; };
+   VERIFY(  is_default(0, 0.0, 1.0, c) );
+   VERIFY( !is_default(0, 0.0, 0.5, c) );
+   VERIFY(  is_default(1, 0.0, 1.0, c) );
+   VERIFY( !is_default(1, 0.0, 0.5, c) );
+   VERIFY( !is_default(2, 0.0, 1.0, c) );
+ 
+   auto rel = [](double x) { return x + 10; };
+   VERIFY(  is_default(0, 0.0, 1.0, rel) );
+   VERIFY( !is_default(0, 0.0, 0.5, rel) );
+   VERIFY(  is_default(1, 0.0, 1.0, rel) );
+   VERIFY( !is_default(1, 0.0, 0.5, rel) );
+   VERIFY( !is_default(2, 0.0, 1.0, rel) );
+ }
+ 
+ int main()
+ {
+   using namespace __gnu_test;
+   test_it_pair<input_container>();
+   test_it_pair<forward_container>();
+   test_it_pair<random_access_container>();
+ 
+   test_init_list();
+   test_xbound();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc	Sun May 17 22:32:16 2026
***************
*** 25,37 ****
  
  #include <random>
  #include <testsuite_hooks.h>
  
  void
! test01()
  {
!   std::vector<double> x = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
!   std::vector<double> wt = {0.5, 1.0, 2.5, 1.5, 0.5};
!   std::piecewise_constant_distribution<> u(x.begin(), x.end(), wt.begin());
    std::vector<double> interval = u.intervals();
    std::vector<double> density = u.densities();
    VERIFY( interval.size() == 6 );
--- 25,41 ----
  
  #include <random>
  #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
  
+ template<template<typename> class Range>
  void
! test_it_pair()
  {
!   double x[6] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
!   double wt[5] = {0.5, 1.0, 2.5, 1.5, 0.5};
! 
!   Range<double> r(x, x+6);
!   std::piecewise_constant_distribution<> u(r.begin(), r.end(), wt);
    std::vector<double> interval = u.intervals();
    std::vector<double> density = u.densities();
    VERIFY( interval.size() == 6 );
*************** test01()
*** 44,49 ****
  
  int main()
  {
!   test01();
    return 0;
  }
--- 48,56 ----
  
  int main()
  {
!   using namespace __gnu_test;
!   test_it_pair<input_container>();
!   test_it_pair<forward_container>();
!   test_it_pair<random_access_container>();
    return 0;
  }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/fallback.cc gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/fallback.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/fallback.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/fallback.cc	Sun May 17 22:32:16 2026
***************
*** 0 ****
--- 1,127 ----
+ // { dg-do run { target c++11 } }
+ // { dg-require-cstdint "" }
+ 
+ #include <random>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ 
+ using dist = std::piecewise_linear_distribution<>;
+ 
+ template<typename... Args>
+ bool
+ is_default(Args&&... args)
+ {
+   std::piecewise_linear_distribution<> u(std::forward<Args>(args)...);
+ 
+   std::vector<double> ints = u.intervals();
+   if (ints.size() != 2 || ints[0] != 0.0 || ints[1] != 1.0)
+     return false;
+ 
+   std::vector<double> dens = u.densities();
+   if (dens.size() != 2 || dens[0] != 1.0 || dens[1] != 1.0)
+     return false;
+ 
+   return true;
+ }
+ 
+ template<template<typename> class Range>
+ void
+ test_it_pair()
+ {
+   double wt[3];
+   double x[3];
+ 
+   Range<double> r0(x, x);
+   VERIFY( is_default(r0.begin(), r0.end(), wt) );
+ 
+   x[0] = 4.2;
+   Range<double> r1a(x, x+1);
+   VERIFY( is_default(r1a.begin(), r1a.end(), wt) );
+ 
+   x[0] = 0.0;
+   Range<double> r1b(x, x+1);
+   VERIFY( is_default(r1b.begin(), r1b.end(), wt) );
+ 
+   x[1] = 1.0;
+   wt[0] = wt[1] = 13.0;
+   Range<double> r2a(x, x+2);
+   VERIFY( is_default(r2a.begin(), r2a.end(), wt) );
+ 
+   wt[0] = wt[1] = 1.0;
+   Range<double> r2b(x, x+2);
+   VERIFY( is_default(r2b.begin(), r2b.end(), wt) );
+ 
+   wt[1] = 2.0;
+   Range<double> r2c(x, x+2);
+   VERIFY( !is_default(r2c.begin(), r2c.end(), wt) );
+ 
+   x[1] = 0.5;
+   wt[0] = wt[1] = 2.0;
+   Range<double> r2d(x, x+2);
+   VERIFY( !is_default(r2d.begin(), r2d.end(), wt) );
+ 
+   x[2] = 1.0;
+   wt[2] = wt[0];
+   Range<double> r3(x, x+3);
+   VERIFY( !is_default(r3.begin(), r3.end(), wt) );
+ }
+ 
+ void test_init_list()
+ {
+   auto c1 = [](double x) { return 1.0; };
+   VERIFY(  is_default(std::initializer_list<double>{}, c1) );
+   VERIFY(  is_default(std::initializer_list<double>{4.2}, c1) );
+   VERIFY(  is_default(std::initializer_list<double>{0.0, 1.0}, c1) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5}, c1) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5, 1.0}, c1) );
+ 
+   auto c2 = [](double x) { return 4.2; };
+   VERIFY(  is_default(std::initializer_list<double>{}, c2) );
+   VERIFY(  is_default(std::initializer_list<double>{4.2}, c2) );
+   VERIFY(  is_default(std::initializer_list<double>{0.0, 1.0}, c2) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5}, c2) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5, 1.0}, c2) );
+ 
+   auto id = [](double x) { return x; };
+   VERIFY(  is_default(std::initializer_list<double>{}, id) );
+   VERIFY(  is_default(std::initializer_list<double>{4.2}, id) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 1.0}, id) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5}, id) );
+   VERIFY( !is_default(std::initializer_list<double>{0.0, 0.5, 1.0}, id) );
+ }
+ 
+ void test_xbound()
+ {
+   auto c1 = [](double x) { return 1.0; };
+   VERIFY(  is_default(0, 0.0, 1.0, c1) );
+   VERIFY( !is_default(0, 0.0, 0.5, c1) );
+   VERIFY(  is_default(1, 0.0, 1.0, c1) );
+   VERIFY( !is_default(1, 0.0, 0.5, c1) );
+   VERIFY( !is_default(2, 0.0, 1.0, c1) );
+ 
+   auto c2 = [](double x) { return 4.2; };
+   VERIFY(  is_default(0, 0.0, 1.0, c2) );
+   VERIFY( !is_default(0, 0.0, 0.5, c2) );
+   VERIFY(  is_default(1, 0.0, 1.0, c2) );
+   VERIFY( !is_default(1, 0.0, 0.5, c2) );
+   VERIFY( !is_default(2, 0.0, 1.0, c2) );
+ 
+   auto id = [](double x) { return x; };
+   VERIFY( !is_default(0, 0.0, 1.0, id) );
+   VERIFY( !is_default(0, 0.0, 0.5, id) );
+   VERIFY( !is_default(1, 0.0, 1.0, id) );
+   VERIFY( !is_default(1, 0.0, 0.5, id) );
+   VERIFY( !is_default(2, 0.0, 1.0, id) );
+ }
+ 
+ int main()
+ {
+   using namespace __gnu_test;
+   test_it_pair<input_container>();
+   test_it_pair<forward_container>();
+   test_it_pair<random_access_container>();
+ 
+   test_init_list();
+   test_xbound();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc	Sun May 17 22:32:16 2026
***************
*** 25,37 ****
  
  #include <random>
  #include <testsuite_hooks.h>
  
  void
! test01()
  {
!   std::vector<double> x = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
!   std::vector<double> wt = {0.0, 1.0, 2.5, 1.5, 3.5, 0.0};
!   std::piecewise_linear_distribution<> u(x.begin(), x.end(), wt.begin());
    std::vector<double> interval = u.intervals();
    std::vector<double> density = u.densities();
    VERIFY( interval.size() == 6 );
--- 25,41 ----
  
  #include <random>
  #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
  
+ template<template<typename> class Range>
  void
! test_it_pair()
  {
!   double x[] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
!   double wt[] = {0.0, 1.0, 2.5, 1.5, 3.5, 0.0};
! 
!   Range<double> r(x, x+6);
!   std::piecewise_linear_distribution<> u(r.begin(), r.end(), wt);
    std::vector<double> interval = u.intervals();
    std::vector<double> density = u.densities();
    VERIFY( interval.size() == 6 );
*************** test01()
*** 44,49 ****
  
  int main()
  {
!   test01();
    return 0;
  }
--- 48,56 ----
  
  int main()
  {
!   using namespace __gnu_test;
!   test_it_pair<input_container>();
!   test_it_pair<forward_container>();
!   test_it_pair<random_access_container>();
    return 0;
  }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng_neg.cc gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng_neg.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/gencanon_eng_neg.cc	Sun May 17 22:32:16 2026
***************
*** 0 ****
--- 1,89 ----
+ // { dg-do compile { target { c++11 } } }
+ // { dg-require-effective-target __float128 }
+ // { dg-require-effective-target base_quadfloat_support }
+ // { dg-add-options __float128 }
+ 
+ #include <random>
+ #include <cstdint>
+ 
+ template<std::uint64_t Max, typename Under = std::mt19937_64>
+ struct trimmed_engine
+ {
+   using result_type = std::uint64_t;
+ 
+   static constexpr
+   result_type min()
+   { return result_type(0); }
+ 
+   static constexpr
+   result_type max()
+   { return result_type(Max); }
+ 
+   trimmed_engine() : dist(min(), max())
+   {}
+ 
+   result_type operator()()
+   { return dist(under); }
+ 
+ private:
+   Under under;
+   std::uniform_int_distribution<result_type> dist;
+ };
+ 
+ template<typename Real, size_t Bits>
+ void
+ test_non_pow2()
+ {
+   trimmed_engine<(std::uint64_t(1) << Bits) - 2> non_pow2_engine;
+   (void)std::generate_canonical<Real, -1u>(non_pow2_engine);
+ }
+ 
+ template<typename Real, size_t Bits>
+ void
+ test_pow2()
+ {
+   trimmed_engine<(std::uint64_t(1) << Bits) - 1> pow2_engine;
+   (void)std::generate_canonical<Real, -1u>(pow2_engine);
+ }
+ 
+ int main()
+ {
+   // For 128bit floating points, generator emitting a range, which size is 
+   // not power of two, but of width of B bits, such that for any N:
+   // N * B < 113 (bits in ieee128)
+   // (N+1) * B > 128
+   // are not supported, as they would require integer with more than 127 bits.
+ 
+   // N == 3: B in [43, 57)
+   test_non_pow2<__float128, 42>(); // 3 calls
+   test_non_pow2<__float128, 43>(); // { dg-error "from here" }
+   test_non_pow2<__float128, 56>(); // { dg-error "from here" }
+   test_non_pow2<__float128, 57>(); // 2 calls
+   test_pow2<__float128, 43>();
+   test_pow2<__float128, 56>();
+ 
+   // N == 4: B in [33, 38)
+   test_non_pow2<__float128, 32>(); // 4 calls
+   test_non_pow2<__float128, 33>(); // { dg-error "from here" }
+   test_non_pow2<__float128, 37>(); // { dg-error "from here" }
+   test_non_pow2<__float128, 38>(); // 3 calls
+   test_pow2<__float128, 33>();
+   test_pow2<__float128, 37>();
+ 
+   // N == 5: B in [26, 29)
+   test_non_pow2<__float128, 25>(); // 5 calls
+   test_non_pow2<__float128, 26>(); // { dg-error "from here" }
+   test_non_pow2<__float128, 28>(); // { dg-error "from here" }
+   test_non_pow2<__float128, 29>(); // 4 calls
+   test_pow2<__float128, 26>();
+   test_pow2<__float128, 28>();
+ 
+   // N == 6: B == 22
+   test_non_pow2<__float128, 21>(); // 6 calls
+   test_non_pow2<__float128, 22>(); // { dg-error "from here" }
+   test_non_pow2<__float128, 23>(); // 5 calls
+   test_pow2<__float128, 22>();
+ }
+ 
+ // { dg-prune-output "no type named 'type' in 'struct std::__detail::_Select_uint_least_t" }
+ // { dg-prune-output "static assertion failed: sorry, would be too much trouble for a slow result" }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/std/format/debug_nonunicode.cc gcc-17-20260517/libstdc++-v3/testsuite/std/format/debug_nonunicode.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/std/format/debug_nonunicode.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/testsuite/std/format/debug_nonunicode.cc	Sun May 17 22:32:16 2026
***************
*** 1,4 ****
! // { dg-options "-fexec-charset=ISO8859-1" }
  // { dg-do run { target c++23 } }
  // { dg-add-options no_pch }
  
--- 1,5 ----
! // { dg-options "-fexec-charset=ISO-8859-1" }
! // { dg-require-iconv "ISO-8859-1" }
  // { dg-do run { target c++23 } }
  // { dg-add-options no_pch }
  
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/std/format/fill_nonunicode.cc gcc-17-20260517/libstdc++-v3/testsuite/std/format/fill_nonunicode.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/std/format/fill_nonunicode.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/testsuite/std/format/fill_nonunicode.cc	Sun May 17 22:32:16 2026
***************
*** 1,4 ****
! // { dg-options "-fexec-charset=ISO8859-1" }
  // { dg-do run { target c++20 } }
  // { dg-add-options no_pch }
  
--- 1,5 ----
! // { dg-options "-fexec-charset=ISO-8859-1" }
! // { dg-require-iconv "ISO-8859-1" }
  // { dg-do run { target c++20 } }
  // { dg-add-options no_pch }
  
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/std/time/clock/local/io.cc gcc-17-20260517/libstdc++-v3/testsuite/std/time/clock/local/io.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/std/time/clock/local/io.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/testsuite/std/time/clock/local/io.cc	Sun May 17 22:32:16 2026
*************** static_assert( ! ostream_insertable<std:
*** 136,140 ****
--- 136,141 ----
  int main()
  {
    test_ostream();
+   test_format();
    test_parse();
  }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc gcc-17-20260517/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libstdc++-v3/testsuite/std/time/clock/utc/leap_second_info-2.cc	Sun May 17 22:32:16 2026
***************
*** 0 ****
--- 1,108 ----
+ // { 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 <testsuite_hooks.h>
+ 
+ using namespace std::chrono_literals;
+ 
+ static bool override_used = false;
+ 
+ namespace __gnu_cxx
+ {
+   const char* zoneinfo_dir_override() {
+     override_used = true;
+     return "./";
+   }
+ }
+ 
+ void
+ test_known_leaps()
+ {
+   // Test some values within the list of known leap seconds.
+   auto s = std::chrono::utc_seconds(-1s);
+   auto lsi = get_leap_second_info(s);
+   VERIFY( lsi.is_leap_second == false );
+   VERIFY( lsi.elapsed == 0s );
+ 
+   s = std::chrono::utc_seconds(126230402s); // 1 Jan 1974
+   lsi = get_leap_second_info(s);
+   VERIFY( lsi.is_leap_second == true );
+   VERIFY( lsi.elapsed == 3s );
+ 
+   s = std::chrono::utc_seconds(1483228826s); // 1 Jan 2017
+   lsi = get_leap_second_info(s);
+   VERIFY( lsi.is_leap_second == true );
+   VERIFY( lsi.elapsed == 27s );
+ 
+   // We should not have checked the filesystem for the times above.
+   VERIFY( ! override_used );
+ }
+ 
+ void
+ test_future_leaps()
+ {
+   // XXX adjust this if real leap seconds are added to the hardcoded lists:
+   const auto hardcoded_count = 27s;
+ 
+   // Make sure there's no old file from a previous test run.
+   std::ofstream("leapseconds") << "";
+ 
+   using std::chrono::years;
+   auto s = std::chrono::utc_seconds(1483228826s + years(100)); // 2117
+   auto lsi = get_leap_second_info(s);
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( lsi.is_leap_second == false );
+   VERIFY( lsi.elapsed == hardcoded_count );
+   lsi = get_leap_second_info(s + years(10));
+   VERIFY( lsi.is_leap_second == false );
+   VERIFY( lsi.elapsed == hardcoded_count );
+ 
+   std::ofstream("leapseconds") << R"(
+ # No need to repeat the real leap seconds here, they're hardcoded in the lib.
+ # These are fake new leap seconds for testing purposes:
+ Leap	2099	Dec	31	23:59:60	+	S
+ Leap	2120	Jun	30	23:59:59	-	S
+ Leap	2120	Dec	30	23:59:59	-	S
+ )";
+ 
+   override_used = false;
+   std::chrono::reload_tzdb();
+   VERIFY( override_used );
+ 
+   // Check the same dates again using the custom leapseconds file:
+   lsi = get_leap_second_info(s);
+   VERIFY( lsi.is_leap_second == false );
+   VERIFY( lsi.elapsed == hardcoded_count + 1s ); // One positive leap second.
+   lsi = get_leap_second_info(s + years(10));
+   VERIFY( lsi.is_leap_second == false );
+   VERIFY( lsi.elapsed == hardcoded_count - 1s ); // Two negative leap seconds.
+ 
+   // Overwrite the custom file again:
+   override_used = false;
+   std::ofstream("leapseconds") << "";
+ 
+   // This should not re-read the custom file, the head of the tzdb_list
+   // should already have been populated by calling get_leap_second_info(s):
+   auto& tzdb = std::chrono::get_tzdb();
+   // The file was not read again:
+   VERIFY( ! override_used );
+   // The list in the tzdb contains the three fake leap seconds:
+   VERIFY( tzdb.leap_seconds.size() == size_t(hardcoded_count.count() + 3) );
+   // And repeating the queries above gives the same results:
+   lsi = get_leap_second_info(s);
+   VERIFY( lsi.is_leap_second == false );
+   VERIFY( lsi.elapsed == hardcoded_count + 1s ); // One positive leap second.
+   lsi = get_leap_second_info(s + years(10));
+   VERIFY( lsi.is_leap_second == false );
+   VERIFY( lsi.elapsed == hardcoded_count - 1s ); // Two negative leap seconds.
+ }
+ 
+ int main()
+ {
+   test_known_leaps();
+   test_future_leaps();
+ }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc gcc-17-20260517/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc	Sun May 17 22:32:16 2026
***************
*** 0 ****
--- 1,58 ----
+ // { 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* } }
+ 
+ // When a Zone line specifies a numeric value as its RULES field, that
+ // value is the constant DST save value for that zone line.  Per
+ // [time.zone.info.sys] sys_info::offset is the total UTC offset
+ // (stdoff + save).
+ 
+ #include <chrono>
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ 
+ static bool override_used = false;
+ 
+ namespace __gnu_cxx
+ {
+   const char* zoneinfo_dir_override() {
+     override_used = true;
+     return "./";
+   }
+ }
+ 
+ int
+ main()
+ {
+   using namespace std::chrono;
+ 
+   std::ofstream("tzdata.zi") << R"(# version test_numeric_save
+ Z Test/Gaborone 2 -  CAT  1943 Sep 19 2
+                 2 1  CAST 1944 Mar 19 2
+                 2 -  CAT
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_numeric_save" );
+ 
+   auto* tz = locate_zone("Test/Gaborone");
+ 
+   // Sample well inside the CAST (numeric-save) zone line.
+   auto info = tz->get_info(sys_days(1943y/December/15));
+   VERIFY( info.offset == 3h );        // stdoff +2h + save +1h
+   VERIFY( info.save == 60min );
+   VERIFY( info.abbrev == "CAST" );
+ 
+   // Bordering zone lines should report the standard offset with save 0.
+   auto before = tz->get_info(sys_days(1943y/September/1));
+   VERIFY( before.offset == 2h );
+   VERIFY( before.save == 0min );
+   VERIFY( before.abbrev == "CAT" );
+ 
+   auto after = tz->get_info(sys_days(1944y/April/15));
+   VERIFY( after.offset == 2h );
+   VERIFY( after.save == 0min );
+   VERIFY( after.abbrev == "CAT" );
+ }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc gcc-17-20260517/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260517/libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc	Sun May 17 22:32:16 2026
***************
*** 0 ****
--- 1,222 ----
+ // { 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* } }
+ 
+ // The DAY portion of a Zone line's UNTIL field accepts not only a
+ // numeric day-of-month but also "lastXxx" (last weekday in the month)
+ // and "Xxx<=N" / "Xxx>=N" forms, just like the ON field of a Rule line.
+ //
+ // Real-world example: Europe/Simferopol has
+ //   3 - MSK 1997 Mar lastSu 1u
+ // which places the boundary on 1997-03-30 (the last Sunday of March).
+ 
+ #include <chrono>
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ 
+ static bool override_used = false;
+ 
+ namespace __gnu_cxx
+ {
+   const char* zoneinfo_dir_override() {
+     override_used = true;
+     return "./";
+   }
+ }
+ 
+ void
+ test_lastsu()
+ {
+   using namespace std::chrono;
+ 
+   std::ofstream("tzdata.zi") << R"(# version test_lastsu
+ Z Test/LastSu 3 - MSK 1997 Mar lastSu 1u
+               3 - X
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_lastsu" );
+ 
+   auto* tz = locate_zone("Test/LastSu");
+ 
+   // True boundary: 1997-03-30 01:00 UTC (lastSu of March 1997 is Mar 30,
+   // and the indicator is 'u' = Universal so no offset adjustment).
+   sys_seconds boundary = sys_days{1997y/March/30} + 1h;
+ 
+   // Just before: still in the MSK line.
+   auto before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "MSK" );
+   VERIFY( before.offset == 3h );
+ 
+   // At/after the boundary: in the X line.
+   auto at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "X" );
+ 
+   // Check that the lastSu day is parsed correctly, and not defaulted
+   // to the 1st: a March 15 query must still be in the MSK line.
+   auto mid_march = tz->get_info(sys_days{1997y/March/15});
+   VERIFY( mid_march.abbrev == "MSK" );
+   VERIFY( mid_march.offset == 3h );
+ }
+ 
+ void
+ test_sun_ge_n()
+ {
+   using namespace std::chrono;
+ 
+   std::ofstream("tzdata.zi") << R"(# version test_sun_ge_n
+ Z Test/SunGE 0 - A 1990 Jun Sun>=8 0u
+              0 - B
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_sun_ge_n" );
+ 
+   auto* tz = locate_zone("Test/SunGE");
+ 
+   // First Sunday >= June 8 1990 = June 10 (June 8 1990 was a Friday).
+   sys_seconds boundary = sys_days{1990y/June/10};
+ 
+   auto before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "A" );
+   auto at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "B" );
+ 
+   // Check that Sun>=8 is parsed correctly, and not defaulted to the 1st.
+   auto early = tz->get_info(sys_days{1990y/June/1});
+   VERIFY( early.abbrev == "A" );
+ }
+ 
+ void
+ test_sun_le_n()
+ {
+   using namespace std::chrono;
+ 
+   std::ofstream("tzdata.zi") << R"(# version test_sun_le_n
+ Z Test/SunLE 0 - A 1990 Jun Sun<=15 0u
+              0 - B
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_sun_le_n" );
+ 
+   auto* tz = locate_zone("Test/SunLE");
+ 
+   // Last Sunday <= June 15 1990 = June 10.
+   sys_seconds boundary = sys_days{1990y/June/10};
+ 
+   auto before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "A" );
+   auto at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "B" );
+ }
+ 
+ void
+ test_year_only()
+ {
+   using namespace std::chrono;
+ 
+   // MONTH, DAY and TIME default to January 1st 00:00 if not specified.
+   std::ofstream("tzdata.zi") << R"(# version test_year_only
+ Z Test/YearOnly 0 - A 1990
+                 0 - B
+ Z Test/YearOnlyC 4 - C 1995 # comment
+                  4 - D
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_year_only" );
+ 
+   auto* tz = locate_zone("Test/YearOnly");
+   sys_seconds boundary = sys_days{1990y/January/1};
+   auto before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "A" );
+   auto at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "B" );
+ 
+   tz = locate_zone("Test/YearOnlyC");
+   boundary = sys_days{1995y/January/1} - 4h;
+   before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "C" );
+   at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "D" );
+ }
+ 
+ void
+ test_year_month_only()
+ {
+   using namespace std::chrono;
+ 
+   // DAY and TIME default to the 1st 00:00 if not specified.
+   std::ofstream("tzdata.zi") << R"(# version test_year_month_only
+ Z Test/YearMonth 0 - A 1990 Jul
+                  0 - B
+ Z Test/YearMonthC 3 - C 1995 Apr # comment
+                   3 - D
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_year_month_only" );
+ 
+   auto* tz = locate_zone("Test/YearMonth");
+   sys_seconds boundary = sys_days{1990y/July/1};
+   auto before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "A" );
+   auto at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "B" );
+ 
+   tz = locate_zone("Test/YearMonthC");
+   boundary = sys_days{1995y/April/1} - 3h;
+   before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "C" );
+   at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "D" );
+ }
+ 
+ void
+ test_year_month_day_only()
+ {
+   using namespace std::chrono;
+ 
+   std::ofstream("tzdata.zi") << R"(# version test_day_only
+ Z Test/DayOnly 0 - A 1997 Mar 12
+                0 - B
+ Z Test/DayOnlyC 5 - C 1998 Jun 14 # comment
+                 5 - D
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_day_only" );
+ 
+   auto* tz = locate_zone("Test/DayOnly");
+   sys_seconds boundary = sys_days{1997y/March/12};
+   auto before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "A" );
+   auto at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "B" );
+ 
+   tz = locate_zone("Test/DayOnlyC");
+   boundary = sys_days{1998y/June/14} - 5h;
+   before = tz->get_info(boundary - 1s);
+   VERIFY( before.abbrev == "C" );
+   at = tz->get_info(boundary);
+   VERIFY( at.abbrev == "D" );
+ }
+ 
+ int
+ main()
+ {
+   test_lastsu();
+   test_sun_ge_n();
+   test_sun_le_n();
+   test_year_only();
+   test_year_month_only();
+   test_year_month_day_only();
+ }
diff -Nrcpad gcc-17-20260510/libstdc++-v3/testsuite/util/testsuite_abi.cc gcc-17-20260517/libstdc++-v3/testsuite/util/testsuite_abi.cc
*** gcc-17-20260510/libstdc++-v3/testsuite/util/testsuite_abi.cc	Sun May 10 22:32:17 2026
--- gcc-17-20260517/libstdc++-v3/testsuite/util/testsuite_abi.cc	Sun May 17 22:32:16 2026
*************** check_version(symbol& test, bool added)
*** 217,222 ****
--- 217,223 ----
        known_versions.push_back("GLIBCXX_3.4.33");
        known_versions.push_back("GLIBCXX_3.4.34");
        known_versions.push_back("GLIBCXX_3.4.35");
+       known_versions.push_back("GLIBCXX_3.4.36");
        known_versions.push_back("GLIBCXX_LDBL_3.4.31");
        known_versions.push_back("GLIBCXX_IEEE128_3.4.29");
        known_versions.push_back("GLIBCXX_IEEE128_3.4.30");
*************** check_version(symbol& test, bool added)
*** 260,266 ****
  	test.version_status = symbol::incompatible;
  
        // Check that added symbols are added in the latest pre-release version.
!       bool latestp = (test.version_name == "GLIBCXX_3.4.35"
  		     || test.version_name == "CXXABI_1.3.17"
  		     || test.version_name == "CXXABI_FLOAT128"
  		     || test.version_name == "CXXABI_TM_1");
--- 261,267 ----
  	test.version_status = symbol::incompatible;
  
        // Check that added symbols are added in the latest pre-release version.
!       bool latestp = (test.version_name == "GLIBCXX_3.4.36"
  		     || test.version_name == "CXXABI_1.3.17"
  		     || test.version_name == "CXXABI_FLOAT128"
  		     || test.version_name == "CXXABI_TM_1");
