diff -Nrcpad gcc-16-20250817/ChangeLog gcc-16-20250824/ChangeLog
*** gcc-16-20250817/ChangeLog	Sun Aug 17 22:32:05 2025
--- gcc-16-20250824/ChangeLog	Sun Aug 24 22:32:12 2025
***************
*** 1,3 ****
--- 1,17 ----
+ 2025-08-21  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	* MAINTAINERS: Update my email address and stand down as AArch64
+ 	maintainer.
+ 
+ 2025-08-18  Spencer Abson  <spencer.abson@student.manchester.ac.uk>
+ 
+ 	* MAINTAINERS: Update my email address.
+ 
+ 2025-08-17  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* MAINTAINERS: Switch around Andrew Pinski's entries in
+ 	Contributing under DCO.
+ 
  2025-08-16  Mikael Pettersson  <mikpelinux@gmail.com>
  
  	* MAINTAINERS: Add myself to write after approval.
diff -Nrcpad gcc-16-20250817/LAST_UPDATED gcc-16-20250824/LAST_UPDATED
*** gcc-16-20250817/LAST_UPDATED	Sun Aug 17 22:34:25 2025
--- gcc-16-20250824/LAST_UPDATED	Sun Aug 24 22:33:51 2025
***************
*** 1 ****
! Obtained from git: master revision 6f63044a7ae63a276a4f6d3108849e093c690bc6
--- 1 ----
! Obtained from git: master revision abf51b388692c4b69d48a60bc7bbd579241d0b7f
diff -Nrcpad gcc-16-20250817/MAINTAINERS gcc-16-20250824/MAINTAINERS
*** gcc-16-20250817/MAINTAINERS	Sun Aug 17 22:32:05 2025
--- gcc-16-20250824/MAINTAINERS	Sun Aug 24 22:32:12 2025
*************** Michael Meissner
*** 40,46 ****
  Jason Merrill                                   <jason@redhat.com>
  David S. Miller                                 <davem@redhat.com>
  Joseph Myers                                    <josmyers@redhat.com>
! Richard Sandiford                               <richard.sandiford@arm.com>
  Bernd Schmidt                                   <bernds_cb1@t-online.de>
  Ian Lance Taylor                                <ian@airs.com>
  Jim Wilson                                      <wilson@tuliptree.org>
--- 40,46 ----
  Jason Merrill                                   <jason@redhat.com>
  David S. Miller                                 <davem@redhat.com>
  Joseph Myers                                    <josmyers@redhat.com>
! Richard Sandiford                               <rdsandiford@googlemail.com>
  Bernd Schmidt                                   <bernds_cb1@t-online.de>
  Ian Lance Taylor                                <ian@airs.com>
  Jim Wilson                                      <wilson@tuliptree.org>
*************** docs, and the testsuite related to that.
*** 56,62 ****
  
  aarch64 ldp/stp         Alex Coplan             <alex.coplan@arm.com>
  aarch64 port            Richard Earnshaw        <richard.earnshaw@arm.com>
- aarch64 port            Richard Sandiford       <richard.sandiford@arm.com>
  aarch64 port            Tamar Christina         <tamar.christina@arm.com>
  aarch64 port            Kyrylo Tkachov          <ktkachov@nvidia.com>
  alpha port              Richard Henderson       <rth@gcc.gnu.org>
--- 56,61 ----
*************** from other maintainers or reviewers.
*** 333,339 ****
  Name                            BZ account      Email
  
  Soumya AR                       soumyaa         <soumyaa@nvidia.com>
! Spencer Abson                   sabson          <spencer.abson@arm.com>
  Mark G. Adams                   mgadams         <mark.g.adams@sympatico.ca>
  Ajit Kumar Agarwal              aagarwa         <aagarwa1@linux.ibm.com>
  Pedro Alves                     palves          <palves@redhat.com>
--- 332,338 ----
  Name                            BZ account      Email
  
  Soumya AR                       soumyaa         <soumyaa@nvidia.com>
! Spencer Abson                   sabson          <spencer.abson@student.manchester.ac.uk>
  Mark G. Adams                   mgadams         <mark.g.adams@sympatico.ca>
  Ajit Kumar Agarwal              aagarwa         <aagarwa1@linux.ibm.com>
  Pedro Alves                     palves          <palves@redhat.com>
diff -Nrcpad gcc-16-20250817/MD5SUMS gcc-16-20250824/MD5SUMS
*** gcc-16-20250817/MD5SUMS	Sun Aug 17 22:34:29 2025
--- gcc-16-20250824/MD5SUMS	Sun Aug 24 22:34:15 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20250817.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20250824.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
*************** ac5a8807f431d3dab46a7425b96379e4  .gitig
*** 21,32 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 6988289f8aa25ee42ccd876ba40c8a51  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 875fc9dbe7755d0bf54cc08d44020f8a  LAST_UPDATED
! e992c80c17d74ad84242d2a19b978620  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
  7dcc983bfbcda6838b504185562b60a3  Makefile.in
  2c81c9de7da119a00341d5e9529e629f  Makefile.tpl
--- 21,32 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 46dc6479185e265ecce9c6930026372e  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! f0a48a77e51f25cb5e54bfbc3b957451  LAST_UPDATED
! 52f6e7a5988acf33ad534d89d625014b  MAINTAINERS
  95166ed050922b15d201d1fa647b5872  Makefile.def
  7dcc983bfbcda6838b504185562b60a3  Makefile.in
  2c81c9de7da119a00341d5e9529e629f  Makefile.tpl
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 154,160 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  9d9c5508a65175be5f9e10721e55ebbc  configure
  82e46c5338f6449fa0a149b6adf12797  configure.ac
! 21751c43e795dd59f465b4bc791ca671  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
--- 154,160 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  9d9c5508a65175be5f9e10721e55ebbc  configure
  82e46c5338f6449fa0a149b6adf12797  configure.ac
! b0c848665663dec4d9a5bba5d2b9f386  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 516,522 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! f8be78150266b062d3eb94d514b2f50d  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 516,522 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! ece7461d3adb59a7314d65105a1892fb  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 553,565 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! ad26a6a1bc169f04b5c37c067c76d84e  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 7cc30ea9e3c9a382de68ec18b1137ab8  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
--- 553,565 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 4ff5081589aadd138d37c1bbcb97304f  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! b5c5f3b6b63dad26f918b19eaa26f5f9  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
*************** c60f1ef3d02e040c88d9e217de84ee81  gcc/an
*** 3161,3167 ****
  cc81acb908eb9d6b13038a95c3a10a9c  gcc/analyzer/varargs.dot
  eeb42b412edc2884a4c60d6f38f7473b  gcc/array-traits.h
  6abcb9777280c69da14835a391a5c347  gcc/asan.cc
! 3b696031376017661bf8d237ffc7c068  gcc/asan.h
  c77616ec7ed7ec81357de9544f955910  gcc/attr-fnspec.h
  3d7a71537ed817b2c8f0c30cd04c9201  gcc/attr-urls.def
  7a214714d8af2c54f02789cfcb196d6c  gcc/attribs.cc
--- 3161,3167 ----
  cc81acb908eb9d6b13038a95c3a10a9c  gcc/analyzer/varargs.dot
  eeb42b412edc2884a4c60d6f38f7473b  gcc/array-traits.h
  6abcb9777280c69da14835a391a5c347  gcc/asan.cc
! 59feef6296bb7bb650068eebec73ba21  gcc/asan.h
  c77616ec7ed7ec81357de9544f955910  gcc/attr-fnspec.h
  3d7a71537ed817b2c8f0c30cd04c9201  gcc/attr-urls.def
  7a214714d8af2c54f02789cfcb196d6c  gcc/attribs.cc
*************** fe292df4b7f3e3ef7c0b8305084b6844  gcc/bi
*** 3185,3198 ****
  9519cf786b112194737e7d0c3534a854  gcc/builtins.cc
  4928906d86168cbc863e309bdb3ec391  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! 745d6ab5c42825a9f048058604422c3f  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
! eed71c68bf4c1f29414b40d0c144e467  gcc/c-family/c-attribs.cc
  78c56cfdab4bb19086143ab771281aa3  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
! f77783cbe676d9dce4f6f2dccab141f0  gcc/c-family/c-common.h
  be2cb15cebd93d65ed4615b722375569  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  19059a85545bb95b391e68da0cbc670c  gcc/c-family/c-format.cc
--- 3185,3198 ----
  9519cf786b112194737e7d0c3534a854  gcc/builtins.cc
  4928906d86168cbc863e309bdb3ec391  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
! a94a4f0d4a489463f35e5918a1ca78a7  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  823fe168bb0f63a39de62d9f0251a1b5  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
! b0a3988bc562e15d99ab6207aee9a244  gcc/c-family/c-attribs.cc
  78c56cfdab4bb19086143ab771281aa3  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
! 5f94e80bb1dd7054acb7744c4b436011  gcc/c-family/c-common.h
  be2cb15cebd93d65ed4615b722375569  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  19059a85545bb95b391e68da0cbc670c  gcc/c-family/c-format.cc
*************** a977ddda313933a15767f0f354618de3  gcc/c-
*** 3228,3262 ****
  ac5daa4f7d7788a3f68dde7fe7a25316  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 211aaaef38b858ebe18d54f732e18026  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
  d83123fca1cdf41c40f626f1f27d5a87  gcc/c/c-decl.cc
  10e620f790089957c832097206d0d6d6  gcc/c/c-errors.cc
! d9b5dea1631cefab5fe5ca3602db30f0  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
  4be9de2ca25340adb8f350478db6a3d8  gcc/c/c-lang.h
  e0b7650de772103a6ae330552c1960bc  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! 919f3e6c6f1f6c405d9dbbc1592a6df2  gcc/c/c-parser.cc
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  ccab0ae5b18f7ad73f9768439cbc5c02  gcc/c/c-tree.h
! c9b28f974f47c162665a1418f24b1c0e  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  c169f2d94910060e76c333db12b960b9  gcc/c/gimple-parser.cc
  84e0373f5db72260d34cf125d8587f06  gcc/c/gimple-parser.h
  137bed6e3e62068dc6a3292ae42a0a4e  gcc/caller-save.cc
! 8a4b9096c422c6161e291639bcd41569  gcc/calls.cc
  5eea9a238f2c182f5964d1de966e6a34  gcc/calls.h
  c7957e627bab86a3bb7b1adfe7d144e9  gcc/ccmp.cc
  5d9ee312518a07716ecbfe4b5ec17091  gcc/ccmp.h
  a1a4638e36c119316c54b7f1562d0a16  gcc/cfg-flags.def
  c08ead9db4f4b74ebcdec4329f22b297  gcc/cfg.cc
  93b330e82630bbea0dcea5c8ab82af45  gcc/cfg.h
! dce5f9aa135bb3752695f3103daa686a  gcc/cfganal.cc
  64d68bc7e90177c08c433704f20cf2cc  gcc/cfganal.h
  37793c9f42f028363ee753479b2c9ccb  gcc/cfgbuild.cc
  0d52ee7360736bb3d0306e66c1f3a9ce  gcc/cfgbuild.h
--- 3228,3262 ----
  ac5daa4f7d7788a3f68dde7fe7a25316  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 033f45627c9f61c9007a55926dedadec  gcc/c/ChangeLog
  b1fc09d2244c8e8a72b4df9bc9af30d7  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
  d83123fca1cdf41c40f626f1f27d5a87  gcc/c/c-decl.cc
  10e620f790089957c832097206d0d6d6  gcc/c/c-errors.cc
! 837fc5f348c64d1c90a4430cc0fb3662  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
  4be9de2ca25340adb8f350478db6a3d8  gcc/c/c-lang.h
  e0b7650de772103a6ae330552c1960bc  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! b1b6bf41bce7c2525dad2e1f170e6e8f  gcc/c/c-parser.cc
  9c122bd6feb8ae4a94420c890e654801  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  ccab0ae5b18f7ad73f9768439cbc5c02  gcc/c/c-tree.h
! a8e053554bb5550a6754fb7d614a5833  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  c169f2d94910060e76c333db12b960b9  gcc/c/gimple-parser.cc
  84e0373f5db72260d34cf125d8587f06  gcc/c/gimple-parser.h
  137bed6e3e62068dc6a3292ae42a0a4e  gcc/caller-save.cc
! 2b184651895163e884d870ab2434dd33  gcc/calls.cc
  5eea9a238f2c182f5964d1de966e6a34  gcc/calls.h
  c7957e627bab86a3bb7b1adfe7d144e9  gcc/ccmp.cc
  5d9ee312518a07716ecbfe4b5ec17091  gcc/ccmp.h
  a1a4638e36c119316c54b7f1562d0a16  gcc/cfg-flags.def
  c08ead9db4f4b74ebcdec4329f22b297  gcc/cfg.cc
  93b330e82630bbea0dcea5c8ab82af45  gcc/cfg.h
! 1859267c5cebd573e140bd5314f8e210  gcc/cfganal.cc
  64d68bc7e90177c08c433704f20cf2cc  gcc/cfganal.h
  37793c9f42f028363ee753479b2c9ccb  gcc/cfgbuild.cc
  0d52ee7360736bb3d0306e66c1f3a9ce  gcc/cfgbuild.h
*************** e8aea35c3537127601ec95f65a09591c  gcc/cg
*** 3279,3285 ****
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  0f66c996f10f0bf02ea42e4e3088d9e7  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! ae5b8ac9cab2abd4b4df2f10dc233fa0  gcc/cobol/ChangeLog
  38de2f3ba3eff58bbacc8dcdbdcd5be7  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  b5d944951cc226cf4f33fdd1494aa7e7  gcc/cobol/cbldiag.h
--- 3279,3285 ----
  b87eab2b04054f0d3cd20768be99c655  gcc/cgraphclones.cc
  0f66c996f10f0bf02ea42e4e3088d9e7  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
! 67adc54335a81da60ac71b6ee4d748da  gcc/cobol/ChangeLog
  38de2f3ba3eff58bbacc8dcdbdcd5be7  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  b5d944951cc226cf4f33fdd1494aa7e7  gcc/cobol/cbldiag.h
*************** fefbd6d69c93a7c38a117cba57a9958f  gcc/co
*** 3304,3310 ****
  e9232e498b04c68faa18eb31fabd8177  gcc/cobol/gengen.h
  ec1ea7b484ef668305733fd45a27c279  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! f551f00317bf42424bfe9ac951502b91  gcc/cobol/genutil.cc
  0bf535aa2c65d8348460ace042ee6b79  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0fa33dbe050697f40b5e8df91896da9a  gcc/cobol/inspect.h
--- 3304,3310 ----
  e9232e498b04c68faa18eb31fabd8177  gcc/cobol/gengen.h
  ec1ea7b484ef668305733fd45a27c279  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! 8452a9c6043eedba1d4c82df83084951  gcc/cobol/genutil.cc
  0bf535aa2c65d8348460ace042ee6b79  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0fa33dbe050697f40b5e8df91896da9a  gcc/cobol/inspect.h
*************** f551f00317bf42424bfe9ac951502b91  gcc/co
*** 3313,3319 ****
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
  7bab28df69a22be2ad0a8d95ec263e2d  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
! 474efac0104ac60ca10e8144f1dec9f5  gcc/cobol/parse.y
  86fab272aa025f60db4c44ca52316ffe  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
  5c3ca092c39ab1b973417e3ea01ed1b6  gcc/cobol/scan.l
--- 3313,3319 ----
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
  7bab28df69a22be2ad0a8d95ec263e2d  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
! 939e7feeabb7ae8389b0d3a92313b376  gcc/cobol/parse.y
  86fab272aa025f60db4c44ca52316ffe  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
  5c3ca092c39ab1b973417e3ea01ed1b6  gcc/cobol/scan.l
*************** d5f8cc9842e0f1f1648dc07251b7e682  gcc/co
*** 3322,3328 ****
  197fd99a62b2440c1460f4ffbf664806  gcc/cobol/show_parse.h
  ed4c7dc69829cb6012eb7b91d68bacd4  gcc/cobol/structs.cc
  6a12fdf051ff87867b239b5ae272fd55  gcc/cobol/structs.h
! 6a630a891fb905f936b3b90aa9f35143  gcc/cobol/symbols.cc
  7fe837511da66531d20c3897e34bfa13  gcc/cobol/symbols.h
  de4928630bb37aa4064841c89cdf22a2  gcc/cobol/symfind.cc
  27218e3639557e7e74246aa4982f089c  gcc/cobol/token_names.h
--- 3322,3328 ----
  197fd99a62b2440c1460f4ffbf664806  gcc/cobol/show_parse.h
  ed4c7dc69829cb6012eb7b91d68bacd4  gcc/cobol/structs.cc
  6a12fdf051ff87867b239b5ae272fd55  gcc/cobol/structs.h
! 052460c869c0142c299da80a312a5001  gcc/cobol/symbols.cc
  7fe837511da66531d20c3897e34bfa13  gcc/cobol/symbols.h
  de4928630bb37aa4064841c89cdf22a2  gcc/cobol/symfind.cc
  27218e3639557e7e74246aa4982f089c  gcc/cobol/token_names.h
*************** f55010fab8b9aabea82c3ac50d031028  gcc/co
*** 3339,3346 ****
  7041e62f0f582b09331732fef4bb9545  gcc/combine-stack-adj.cc
  5d00831740184b5f4f8f133a3a1ffc16  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
! a5ae19d33b64cda675bf9d7240925904  gcc/common.opt
! 1fb7327884adfe65e2d9b1c9f2ffaa06  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
--- 3339,3346 ----
  7041e62f0f582b09331732fef4bb9545  gcc/combine-stack-adj.cc
  5d00831740184b5f4f8f133a3a1ffc16  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
! e1a6051ad30c4f6457175481260cbad8  gcc/common.opt
! d5ce096fca8f0fb1ef19b8092a2a052b  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
*************** d0ba90d7997b773bc0cf7b42ec8ca061  gcc/co
*** 3384,3390 ****
  f842f1b8595f3ac795ba92c2b07085e6  gcc/common/config/or1k/or1k-common.cc
  03a53ecd36b397fbe0846ead66505e2d  gcc/common/config/pa/pa-common.cc
  1fbcfc1a92bb13e4405bc75767cf8a36  gcc/common/config/pdp11/pdp11-common.cc
! 7ee5967300d3c96a608eea63008aa893  gcc/common/config/pru/pru-common.cc
  19fe6326e447c39f27b03c010a94dadb  gcc/common/config/riscv/riscv-common.cc
  8a5a4ee26b110f44497208d1b31e3503  gcc/common/config/riscv/riscv-ext-bitmask.def
  08537bef63b33fd56aeb2a292c9a207a  gcc/common/config/rs6000/rs6000-common.cc
--- 3384,3390 ----
  f842f1b8595f3ac795ba92c2b07085e6  gcc/common/config/or1k/or1k-common.cc
  03a53ecd36b397fbe0846ead66505e2d  gcc/common/config/pa/pa-common.cc
  1fbcfc1a92bb13e4405bc75767cf8a36  gcc/common/config/pdp11/pdp11-common.cc
! 8af6b6302dcf18a445bb944adeda6388  gcc/common/config/pru/pru-common.cc
  19fe6326e447c39f27b03c010a94dadb  gcc/common/config/riscv/riscv-common.cc
  8a5a4ee26b110f44497208d1b31e3503  gcc/common/config/riscv/riscv-ext-bitmask.def
  08537bef63b33fd56aeb2a292c9a207a  gcc/common/config/rs6000/rs6000-common.cc
*************** b5a916bb9dd788754ac9e4ad7174ee74  gcc/co
*** 3400,3406 ****
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 88853e53664885da48f08e8912a5a3eb  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  9f90e78b127d8b71b269593c1734d1ce  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
--- 3400,3406 ----
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 1b7bcd2a9a8cae974fafb8cfcbfae705  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  9f90e78b127d8b71b269593c1734d1ce  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
*************** ddbb7a934f8b8aa068e7b765c4375fbe  gcc/co
*** 3410,3416 ****
  7bfe6f577e74d04fbaece4d908e4f3ea  gcc/config/aarch64/aarch64-builtins.cc
  482530e7572b40bc2ad01bdec0c1b97e  gcc/config/aarch64/aarch64-builtins.h
  d1e3bcda28d89d23e45fed74c629752a  gcc/config/aarch64/aarch64-c.cc
- ba4e797220b33827e769b09447623896  gcc/config/aarch64/aarch64-cc-fusion.cc
  133f61af7e288fe91ca31c659939c551  gcc/config/aarch64/aarch64-coff.h
  8b59e9f9bf194c999ccfdbaf58382401  gcc/config/aarch64/aarch64-cores.def
  85b8b0267c641b7fb638fffcb3016739  gcc/config/aarch64/aarch64-cost-tables.h
--- 3410,3415 ----
*************** eb027b43f3e6788c44aa2d2b7e11943f  gcc/co
*** 3435,3442 ****
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
  601c97a8470cb68f7a1a09205fa06352  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
! b14ff14af09e35148ebaceacc90e59a7  gcc/config/aarch64/aarch64-passes.def
! ebf1d5751983352d416c77704c0aa5a4  gcc/config/aarch64/aarch64-protos.h
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
--- 3434,3441 ----
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
  601c97a8470cb68f7a1a09205fa06352  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
! a349e9ba39f96f10f6c9f5e13bb8b661  gcc/config/aarch64/aarch64-passes.def
! 370531fbf21fa3201c387501beadfc19  gcc/config/aarch64/aarch64-protos.h
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
*************** ddf6a04395c39345a0781804ad22f83f  gcc/co
*** 3464,3472 ****
  b301dc231a69a28202d2b7d79ea75f5d  gcc/config/aarch64/aarch64-tune.md
  d10a350a80f8f12ee435c64d236e2767  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! a9d03af6918360201eb374a38ee5e2ae  gcc/config/aarch64/aarch64.cc
  bbedb9dbb43d897f509e3d0c2debbfdb  gcc/config/aarch64/aarch64.h
! 0da4b49adfa7b0a20a2d99e55caa327a  gcc/config/aarch64/aarch64.md
  ae13780a8296e9c52f9e9b8cd95dc312  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
--- 3463,3471 ----
  b301dc231a69a28202d2b7d79ea75f5d  gcc/config/aarch64/aarch64-tune.md
  d10a350a80f8f12ee435c64d236e2767  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! cac665178d7ed4d25428594019b16640  gcc/config/aarch64/aarch64.cc
  bbedb9dbb43d897f509e3d0c2debbfdb  gcc/config/aarch64/aarch64.h
! f96b6183e52103560a66084fa4505d8f  gcc/config/aarch64/aarch64.md
  ae13780a8296e9c52f9e9b8cd95dc312  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  7b468a20f0362cbe02c7699720a962fa  gcc/config/aarch64/arm_acle.h
*************** bc3b4ebfac8bfd42d3e9098f33585afd  gcc/co
*** 3494,3500 ****
  b1a2c980f188cb0f7d34c945f3f30484  gcc/config/aarch64/iterators.md
  dccd7ab23543b643345fc7fb161eb98d  gcc/config/aarch64/predicates.md
  a4e902ee1494ba5eee811ea46ecdf995  gcc/config/aarch64/rtems.h
! 311b65ba9e415ee9bec122a44389ec72  gcc/config/aarch64/t-aarch64
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-freebsd
  7c93b24bd00b44291884d34b3213b75e  gcc/config/aarch64/t-aarch64-linux
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-netbsd
--- 3493,3499 ----
  b1a2c980f188cb0f7d34c945f3f30484  gcc/config/aarch64/iterators.md
  dccd7ab23543b643345fc7fb161eb98d  gcc/config/aarch64/predicates.md
  a4e902ee1494ba5eee811ea46ecdf995  gcc/config/aarch64/rtems.h
! 92e464bd2841e049cf1b85debd6a39a4  gcc/config/aarch64/t-aarch64
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-freebsd
  7c93b24bd00b44291884d34b3213b75e  gcc/config/aarch64/t-aarch64-linux
  5a6fa47ba2bb65a12cd953f8edee028d  gcc/config/aarch64/t-aarch64-netbsd
*************** c6568ca3d3967dc4577de343df313df3  gcc/co
*** 3769,3775 ****
  6d9c1db61d58bad0e31aa7b00e2e9ffb  gcc/config/avr/genmultilib.awk
  436f7e20c4996793d1ea94555c59b608  gcc/config/avr/predicates.md
  3ecab14b4beaf91d8871dc902cee93b0  gcc/config/avr/ranges.h
! 9c5ee1a10c14849bd74a27b425d60a71  gcc/config/avr/specs.h
  6e6e06457d93dd95436762e8db93c538  gcc/config/avr/stdfix.h
  c9ff75ab151759fe329687b82352f34b  gcc/config/avr/t-avr
  8936068e99e1a52f6c98d17c9b83df34  gcc/config/bfin/bfin-modes.def
--- 3768,3774 ----
  6d9c1db61d58bad0e31aa7b00e2e9ffb  gcc/config/avr/genmultilib.awk
  436f7e20c4996793d1ea94555c59b608  gcc/config/avr/predicates.md
  3ecab14b4beaf91d8871dc902cee93b0  gcc/config/avr/ranges.h
! 179675e6a0350df567e3c94048b799b5  gcc/config/avr/specs.h
  6e6e06457d93dd95436762e8db93c538  gcc/config/avr/stdfix.h
  c9ff75ab151759fe329687b82352f34b  gcc/config/avr/t-avr
  8936068e99e1a52f6c98d17c9b83df34  gcc/config/bfin/bfin-modes.def
*************** a4a1a27264871bfba9de0f4fbdb4f3ac  gcc/co
*** 4165,4171 ****
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
  79e270a5c2733b8bd3a9842ddb597340  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
! 318295fd9e9d0334e203bfc1214db935  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
  66732512f01bad0bbb26cb3c09ec773e  gcc/config/i386/i386-isa.def
  09f791543c9ad5918bde13160f0de1df  gcc/config/i386/i386-modes.def
--- 4164,4170 ----
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
  79e270a5c2733b8bd3a9842ddb597340  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
! 8edb3cb63c7326d231d620741325441f  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
  66732512f01bad0bbb26cb3c09ec773e  gcc/config/i386/i386-isa.def
  09f791543c9ad5918bde13160f0de1df  gcc/config/i386/i386-modes.def
*************** af769e63b0f01ece7eccbbdb1687868a  gcc/co
*** 4178,4184 ****
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
  8180b9aa64031ade4c434e1e538a7395  gcc/config/i386/i386.cc
! 3b5a27af165fbcbd0a140e6ec2f63242  gcc/config/i386/i386.h
  a09e6b5d7bccbe486409dda3aac21d1d  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
--- 4177,4183 ----
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
  8180b9aa64031ade4c434e1e538a7395  gcc/config/i386/i386.cc
! 0e1f20497a1a1e49fbef2b65730a8cb9  gcc/config/i386/i386.h
  a09e6b5d7bccbe486409dda3aac21d1d  gcc/config/i386/i386.md
  23985b411cb15228b631691265bfefe9  gcc/config/i386/i386.opt
  59cb9adff8fe9d24eed1cfac0c5bf62c  gcc/config/i386/i386.opt.urls
*************** c34979082425d78409c769a25389d804  gcc/co
*** 4383,4389 ****
  8b1c9c004fdbc7f460a64bda0b70f4d6  gcc/config/loongarch/generic.md
  a61fbfd9ac48f94f17ccd936a484b2c8  gcc/config/loongarch/genopts/gen-evolution.awk
  3f45bbd3523fe62285eaea00e6ca33a5  gcc/config/loongarch/genopts/genstr.sh
! 6c3cb64931933c31d4984eaf2b6f69e2  gcc/config/loongarch/genopts/isa-evolution.in
  f53279d5b7e936d4ca79a38f0268b4cd  gcc/config/loongarch/genopts/loongarch-strings
  c69ef27c10b319a5443289af516f40b8  gcc/config/loongarch/genopts/loongarch.opt.in
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
--- 4382,4388 ----
  8b1c9c004fdbc7f460a64bda0b70f4d6  gcc/config/loongarch/generic.md
  a61fbfd9ac48f94f17ccd936a484b2c8  gcc/config/loongarch/genopts/gen-evolution.awk
  3f45bbd3523fe62285eaea00e6ca33a5  gcc/config/loongarch/genopts/genstr.sh
! 4dc5332a8742afccaccecc9435f3a90a  gcc/config/loongarch/genopts/isa-evolution.in
  f53279d5b7e936d4ca79a38f0268b4cd  gcc/config/loongarch/genopts/loongarch-strings
  c69ef27c10b319a5443289af516f40b8  gcc/config/loongarch/genopts/loongarch.opt.in
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
*************** ac0512e8b259ed63d386edaa0457a5ad  gcc/co
*** 4399,4429 ****
  7c361340005dd5b26e9175a99e44f1f9  gcc/config/loongarch/loongarch-d.cc
  b9324da4da2e361b6f6b42ab32c89139  gcc/config/loongarch/loongarch-d.h
  833584d561eee00538a06353674c2923  gcc/config/loongarch/loongarch-def-array.h
! f33b12257452472d47dac65075ab5d62  gcc/config/loongarch/loongarch-def.cc
  5155922cf688d9073a6497f7def3c933  gcc/config/loongarch/loongarch-def.h
  4a2c4b8277bf78c873773752258854de  gcc/config/loongarch/loongarch-driver.cc
  9034667d3a99adb6488a0cf70a9c572c  gcc/config/loongarch/loongarch-driver.h
! 3fd647901cdc3e1d254c3b6a55a2fb7e  gcc/config/loongarch/loongarch-evolution.cc
! 50e2e743ee1a4e3501d962e45003c84a  gcc/config/loongarch/loongarch-evolution.h
  ff10ba24a7f588f5d1bfbc386be0a309  gcc/config/loongarch/loongarch-ftypes.def
  d7cf3f5e6d8c9402706533b8bbd7093d  gcc/config/loongarch/loongarch-modes.def
  d3ad067b1fa15bbce42fd3cc4499966e  gcc/config/loongarch/loongarch-opts.cc
  084ba7e2ad2ac804b5f596bca0df06b3  gcc/config/loongarch/loongarch-opts.h
  920651b1ba57b9faa704d0ac560b4ea4  gcc/config/loongarch/loongarch-protos.h
! 688cd325dbeb853413435f029e712cb2  gcc/config/loongarch/loongarch-str.h
  a8cd9a4a3d712802475e91e0ec9a3274  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! d9c104e722556fd8243a1b3a6e2aab47  gcc/config/loongarch/loongarch.cc
  d4fcc746efc8475a01557c5c09179c9a  gcc/config/loongarch/loongarch.h
  9fd9109f20f7dfce6de910d45b5dbc85  gcc/config/loongarch/loongarch.md
! bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
! 264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
  a1ceaab52de5f1950f6c6b63c5a718ea  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
  e357122938174e9f48e1036cb67c8a21  gcc/config/loongarch/predicates.md
  3b0d6d8a96b8678da4cf1e596d893d76  gcc/config/loongarch/simd.md
! 8dd632424d9d78f36a7f6de524c32142  gcc/config/loongarch/sync.md
  e2aad9f2fd1ee2a4668948f381da109c  gcc/config/loongarch/t-linux
  4143126e9ad08f12c1a4555c0f87948d  gcc/config/loongarch/t-loongarch
  b84e97ccf92009e96031fc2edb92dde5  gcc/config/loongarch/t-multilib
--- 4398,4428 ----
  7c361340005dd5b26e9175a99e44f1f9  gcc/config/loongarch/loongarch-d.cc
  b9324da4da2e361b6f6b42ab32c89139  gcc/config/loongarch/loongarch-d.h
  833584d561eee00538a06353674c2923  gcc/config/loongarch/loongarch-def-array.h
! 71edb8b08cf46204405e19941eef94ae  gcc/config/loongarch/loongarch-def.cc
  5155922cf688d9073a6497f7def3c933  gcc/config/loongarch/loongarch-def.h
  4a2c4b8277bf78c873773752258854de  gcc/config/loongarch/loongarch-driver.cc
  9034667d3a99adb6488a0cf70a9c572c  gcc/config/loongarch/loongarch-driver.h
! 4f8a9dd15d7b6450b31b1ce0b62e5438  gcc/config/loongarch/loongarch-evolution.cc
! 23b0fa524fdc462c6fc9647fa1e71394  gcc/config/loongarch/loongarch-evolution.h
  ff10ba24a7f588f5d1bfbc386be0a309  gcc/config/loongarch/loongarch-ftypes.def
  d7cf3f5e6d8c9402706533b8bbd7093d  gcc/config/loongarch/loongarch-modes.def
  d3ad067b1fa15bbce42fd3cc4499966e  gcc/config/loongarch/loongarch-opts.cc
  084ba7e2ad2ac804b5f596bca0df06b3  gcc/config/loongarch/loongarch-opts.h
  920651b1ba57b9faa704d0ac560b4ea4  gcc/config/loongarch/loongarch-protos.h
! c72c4d71f42573934ede3a3fe4e132b1  gcc/config/loongarch/loongarch-str.h
  a8cd9a4a3d712802475e91e0ec9a3274  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! eae4170428207e96ab78dabce7b0a170  gcc/config/loongarch/loongarch.cc
  d4fcc746efc8475a01557c5c09179c9a  gcc/config/loongarch/loongarch.h
  9fd9109f20f7dfce6de910d45b5dbc85  gcc/config/loongarch/loongarch.md
! 7eb1817de89953d405ead07dfb2c5316  gcc/config/loongarch/loongarch.opt
! 3e1c4af9b4ae813a611788681e7934f1  gcc/config/loongarch/loongarch.opt.urls
  a1ceaab52de5f1950f6c6b63c5a718ea  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
  e357122938174e9f48e1036cb67c8a21  gcc/config/loongarch/predicates.md
  3b0d6d8a96b8678da4cf1e596d893d76  gcc/config/loongarch/simd.md
! b7814df16af8921dc1260f5e28039fc3  gcc/config/loongarch/sync.md
  e2aad9f2fd1ee2a4668948f381da109c  gcc/config/loongarch/t-linux
  4143126e9ad08f12c1a4555c0f87948d  gcc/config/loongarch/t-loongarch
  b84e97ccf92009e96031fc2edb92dde5  gcc/config/loongarch/t-multilib
*************** a47c1d9626258e961f58aaa938dff7c0  gcc/co
*** 4867,4877 ****
  3806bf704354931780e8f243f2ac4b5b  gcc/config/pru/pru-passes.def
  d8610d2a280d5d48126151a545999a40  gcc/config/pru/pru-pragma.cc
  df8b52fbbd51989d1de781552c98b95d  gcc/config/pru/pru-protos.h
! a2ccfd7a41f7ee0ec9fff8107e3aa20f  gcc/config/pru/pru.cc
! ea166a4ea21e8f1dc577c24b5a24d65c  gcc/config/pru/pru.h
! d6a3fdc3ae6584fd2346ec32920baaa8  gcc/config/pru/pru.md
! d6da8f84e5835bd14f146fc765bcb39d  gcc/config/pru/pru.opt
! cd13b51383c99c08d86250b61fed3805  gcc/config/pru/pru.opt.urls
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a8fac3d48de6ff4ff0829ddd27890d3c  gcc/config/riscv/arch-canonicalize
  e3d41ab2a3b1cc1a50da243953eb9be7  gcc/config/riscv/autovec-opt.md
--- 4866,4877 ----
  3806bf704354931780e8f243f2ac4b5b  gcc/config/pru/pru-passes.def
  d8610d2a280d5d48126151a545999a40  gcc/config/pru/pru-pragma.cc
  df8b52fbbd51989d1de781552c98b95d  gcc/config/pru/pru-protos.h
! 26874fed3e832a5cc22d54d5018705dc  gcc/config/pru/pru.cc
! 69a8d3f1d3a56cc431a0a0283ffe8285  gcc/config/pru/pru.h
! c02c28dcba5af34ad86e26f316044b17  gcc/config/pru/pru.md
! 0763d0945dbf14ae8f27f2768c3bab97  gcc/config/pru/pru.opt
! 2c62017af35136c78e62ba082c27ada7  gcc/config/pru/pru.opt.urls
! 45c7ab42a352a571bdea3ba740be8f5d  gcc/config/pru/t-multilib
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  a8fac3d48de6ff4ff0829ddd27890d3c  gcc/config/riscv/arch-canonicalize
  e3d41ab2a3b1cc1a50da243953eb9be7  gcc/config/riscv/autovec-opt.md
*************** faca69fa18f3f779cd3ee4d6a53e6193  gcc/co
*** 4973,4979 ****
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
  fb7b7bda26caa0dfdb585dec0505356c  gcc/config/riscv/t-riscv
! 51c5ea17e60737c695a38285dfce555d  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
  8bcdf79541abe727e991e00993f379f6  gcc/config/riscv/thead-peephole.md
--- 4973,4979 ----
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
  fb7b7bda26caa0dfdb585dec0505356c  gcc/config/riscv/t-riscv
! fe202105dd9e81b9ce8fdcc11d52c294  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
  8bcdf79541abe727e991e00993f379f6  gcc/config/riscv/thead-peephole.md
*************** b9122124f44b801543f1fce424708a79  gcc/co
*** 5000,5006 ****
  7c0ba4382744bcd815998bfe5a3c115e  gcc/config/rl78/rl78.h
  53ff11e448f40417f1bcc8c6e41a8d40  gcc/config/rl78/rl78.md
  c65492c90efd2ee7148894f4913c2f9c  gcc/config/rl78/rl78.opt
! 0b873eb0e14cb2abf80aa2e90955904d  gcc/config/rl78/rl78.opt.urls
  07b8288aea62133f48fa550d868a20fa  gcc/config/rl78/t-rl78
  17d79858bb152c6b9421438bd765a1d6  gcc/config/rpath.opt
  1ba216c6712cc1a82121154d5193a339  gcc/config/rpath.opt.urls
--- 5000,5006 ----
  7c0ba4382744bcd815998bfe5a3c115e  gcc/config/rl78/rl78.h
  53ff11e448f40417f1bcc8c6e41a8d40  gcc/config/rl78/rl78.md
  c65492c90efd2ee7148894f4913c2f9c  gcc/config/rl78/rl78.opt
! 94f33f52754b0d952ade61882bb66631  gcc/config/rl78/rl78.opt.urls
  07b8288aea62133f48fa550d868a20fa  gcc/config/rl78/t-rl78
  17d79858bb152c6b9421438bd765a1d6  gcc/config/rpath.opt
  1ba216c6712cc1a82121154d5193a339  gcc/config/rpath.opt.urls
*************** dce39de8bb20b88ffeb8b2073101dcfe  gcc/co
*** 5113,5119 ****
  5621b2aa0be1c71c3955c4e3bad6cf49  gcc/config/rs6000/rs6000-string.cc
  062e9e612338d86d0d47a3e1131384fa  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! f71222cc7999071ec3b6318b76abc6f1  gcc/config/rs6000/rs6000.cc
  1d91827dae3ab7a332473805ac3cf40c  gcc/config/rs6000/rs6000.h
  4514b71437fdeefa2f229ece6a128945  gcc/config/rs6000/rs6000.md
  77c1c38e6705e421b8838bf19f938cef  gcc/config/rs6000/rs6000.opt
--- 5113,5119 ----
  5621b2aa0be1c71c3955c4e3bad6cf49  gcc/config/rs6000/rs6000-string.cc
  062e9e612338d86d0d47a3e1131384fa  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 0455cc02c22a47ca3b1dd910eefa4bd3  gcc/config/rs6000/rs6000.cc
  1d91827dae3ab7a332473805ac3cf40c  gcc/config/rs6000/rs6000.h
  4514b71437fdeefa2f229ece6a128945  gcc/config/rs6000/rs6000.md
  77c1c38e6705e421b8838bf19f938cef  gcc/config/rs6000/rs6000.opt
*************** c7be35a23fd70ac184dd9072319304c7  gcc/co
*** 5478,5484 ****
  e59f31891252abdd41eedc784b25ed6b  gcc/config/xtensa/xtensa-protos.h
  9b7477b33c77d72ea4f921d1b1ef7d8a  gcc/config/xtensa/xtensa.cc
  f378c965e5e289a389bbf48d20867d48  gcc/config/xtensa/xtensa.h
! 79ea7a5d4eebe3e5ee624db15dfe6499  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
  2c411f0a09fa3c940b54c826a0c63fef  gcc/configure
--- 5478,5484 ----
  e59f31891252abdd41eedc784b25ed6b  gcc/config/xtensa/xtensa-protos.h
  9b7477b33c77d72ea4f921d1b1ef7d8a  gcc/config/xtensa/xtensa.cc
  f378c965e5e289a389bbf48d20867d48  gcc/config/xtensa/xtensa.h
! 4b60b71e56dd2be082081b73752e9d5a  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
  2c411f0a09fa3c940b54c826a0c63fef  gcc/configure
*************** fa062fdcbed6412a676fa477d87ba334  gcc/co
*** 5492,5498 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! dc629cc5aa995656817224c03dfc11a8  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5492,5498 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! afbe36c337703e1350b4a00ceebf9206  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp
*** 5531,5539 ****
  50a02755cc22e0a29cf866544e50ef28  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! c8d9ca2edc2724faaa2f5457ab27c6f9  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
! a3d49b3d18ecf45f949a090f16a24094  gcc/cp/constexpr.cc
  7cf0106de3accd773b289c02049d31ca  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
--- 5531,5539 ----
  50a02755cc22e0a29cf866544e50ef28  gcc/cp/call.cc
  fce8de27014c109814b3f69be6a5d4f6  gcc/cp/cfns.gperf
  68fc21d4889b1c70ccf89747b98b1fb4  gcc/cp/cfns.h
! 0414c494620e2ace88b96b92413b56d0  gcc/cp/class.cc
  ee3fb2cc9b9557d3895f527353160bd4  gcc/cp/config-lang.in
! 281695b15c2d638ddf698975e1048301  gcc/cp/constexpr.cc
  7cf0106de3accd773b289c02049d31ca  gcc/cp/constraint.cc
  613233facbf4b0f1cff770ed6c49c666  gcc/cp/contracts.cc
  1f1cd3a021a2cd25741e252145ee8282  gcc/cp/contracts.h
*************** f63b47ebd40e23c329468a17809c3925  gcc/cp
*** 5571,5585 ****
  5efd09b0532a0b524e859d61c942156d  gcc/cp/mapper-client.cc
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
! c933a1a13d0a262017a4c652b9672d99  gcc/cp/method.cc
  ebeee9458a6197720ea96b508075e84e  gcc/cp/module.cc
! 1cb7dca41ea43363543612df5d984531  gcc/cp/name-lookup.cc
  5a9aeceb329cf9c3d8c374b77f39f2b4  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! c61a15bef760dedf969061c197139cda  gcc/cp/parser.cc
  db6ae85b922989f89eda229cb29e4690  gcc/cp/parser.h
! 6ce626f6107da597a718262b2b0d7230  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
--- 5571,5585 ----
  5efd09b0532a0b524e859d61c942156d  gcc/cp/mapper-client.cc
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
! 0456b59fb105d3d30371131d063a685a  gcc/cp/method.cc
  ebeee9458a6197720ea96b508075e84e  gcc/cp/module.cc
! 2f071c2f91c007a8d171d0b7eb7294f6  gcc/cp/name-lookup.cc
  5a9aeceb329cf9c3d8c374b77f39f2b4  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 354981cd1777f3de881acecf3ec01bfd  gcc/cp/parser.cc
  db6ae85b922989f89eda229cb29e4690  gcc/cp/parser.h
! 0f47097410cf79fe57a96054325ea19b  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
*************** b58bf61fbfed45af179b7104e72a9486  gcc/cp
*** 5588,5594 ****
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  067caebca8597843f76a13fd5126a2df  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! 0d1f4c9abc7ea4cb3682d067e9540fce  gcc/cp/typeck.cc
  75ee85794a3c4856e3de8a2f45bfcc6f  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
--- 5588,5594 ----
  2425db76c32085977eff047c982cebab  gcc/cp/std-name-hint.h
  067caebca8597843f76a13fd5126a2df  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
! dee4658e4127098ee71481440f92c68f  gcc/cp/typeck.cc
  75ee85794a3c4856e3de8a2f45bfcc6f  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
*************** ec1e9c9456a8530e241079823e2fc126  gcc/cr
*** 5605,5611 ****
  15aef1bfc1d9935a8df200d3827b59c6  gcc/ctfc.cc
  3df123e84e7c118eb423425f2100e3b5  gcc/ctfc.h
  aec0cd5251de880945c96eb21e97eac9  gcc/ctfout.cc
! bd5d38609f66fe4a6843c86158a0ca1d  gcc/d/ChangeLog
  94dbce564aba342900829d11192f8905  gcc/d/ChangeLog-2006
  1a0536d6571bca334bb5c00dbdf257ab  gcc/d/ChangeLog-2007
  362a026d745031260b2e4dd8eba9becc  gcc/d/ChangeLog-2008
--- 5605,5611 ----
  15aef1bfc1d9935a8df200d3827b59c6  gcc/ctfc.cc
  3df123e84e7c118eb423425f2100e3b5  gcc/ctfc.h
  aec0cd5251de880945c96eb21e97eac9  gcc/ctfout.cc
! 4cd58b042512684d230b9ebc87171263  gcc/d/ChangeLog
  94dbce564aba342900829d11192f8905  gcc/d/ChangeLog-2006
  1a0536d6571bca334bb5c00dbdf257ab  gcc/d/ChangeLog-2007
  362a026d745031260b2e4dd8eba9becc  gcc/d/ChangeLog-2008
*************** e432bfc5c605ae0b1beedf0492ad40d1  gcc/d/
*** 5628,5634 ****
  ef89998b130adfb6f71d429c96e96bed  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
  477218c51620c217d3332559ce436248  gcc/d/config-lang.in
! 09eb2aeb6f4b5107b4a75f4d41928cf1  gcc/d/d-attribs.cc
  8592d6b7573b4c1b70a9d87b70dd115a  gcc/d/d-builtins.cc
  1ee6f00fbb3f2827de9f244af843daa8  gcc/d/d-codegen.cc
  70ffb6bfceda6c8afd5611f3b4a675cd  gcc/d/d-compiler.cc
--- 5628,5634 ----
  ef89998b130adfb6f71d429c96e96bed  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
  477218c51620c217d3332559ce436248  gcc/d/config-lang.in
! 84f36e6ef4218b81e4b163f09b4e85c3  gcc/d/d-attribs.cc
  8592d6b7573b4c1b70a9d87b70dd115a  gcc/d/d-builtins.cc
  1ee6f00fbb3f2827de9f244af843daa8  gcc/d/d-codegen.cc
  70ffb6bfceda6c8afd5611f3b4a675cd  gcc/d/d-compiler.cc
*************** b9d078b88658c87d713e175705b687be  gcc/df
*** 5873,5878 ****
--- 5873,5880 ----
  243e0658083f87e4b05d8914b98053c2  gcc/df.h
  b24ae235869e8ddfde6c45d41923f7ef  gcc/dfp.cc
  3a50d04564ba93f9be134a744fdd40f1  gcc/dfp.h
+ db78b93a68a738fdb34ae6aa97fe35db  gcc/diagnostic-context-rich-location.cc
+ 6db42ec1ba85ac5c0d5ff77c52247653  gcc/diagnostic-context-rich-location.h
  93b73dbd9036edc5371e50289303ddde  gcc/diagnostic-core.h
  a94dd5f1cfd3551d976846dfd5627f4e  gcc/diagnostic-global-context.cc
  ddb5e19e6f3ff8224aedd1a60eaad23e  gcc/diagnostic-highlight-colors.h
*************** acdfc663791e4321372e79932070d05d  gcc/do
*** 5957,5963 ****
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! 82ef0e2c95dbc9394b2dced766d2c272  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
--- 5959,5965 ----
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! a5ec02e9671a9776c5102709c1068dc8  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 5979,5987 ****
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 4bde3e2fafe6a845c6f58e300a194dad  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! b80e05891fa2f7e7b1271cdcbd0522ed  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 5981,5989 ----
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 0085cbc48c4b81c4377ac47e29e12eec  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 0c4095e2968a16b175ce239076a99297  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** c2aaa943f52a93ac601eb2571747ce3f  gcc/do
*** 6051,6057 ****
  38b794a107ce439f2c11e7f896773365  gcc/dump-context.h
  894e6073e36c2a1d76b2fb23eda17413  gcc/dumpfile.cc
  8670da1568e881564969be1aa91c7260  gcc/dumpfile.h
! 4adb99499107732ee645c169e7165605  gcc/dwarf2asm.cc
  e518c37d94908385da07142b92ea8cdb  gcc/dwarf2asm.h
  7efb4f91e749cd2ecf8f4c740fdb13b0  gcc/dwarf2cfi.cc
  0a3eda9dab4d6f189c8f1075bd4b269a  gcc/dwarf2codeview.cc
--- 6053,6059 ----
  38b794a107ce439f2c11e7f896773365  gcc/dump-context.h
  894e6073e36c2a1d76b2fb23eda17413  gcc/dumpfile.cc
  8670da1568e881564969be1aa91c7260  gcc/dumpfile.h
! e481c806d0083684aec2b18cd821d0c6  gcc/dwarf2asm.cc
  e518c37d94908385da07142b92ea8cdb  gcc/dwarf2asm.h
  7efb4f91e749cd2ecf8f4c740fdb13b0  gcc/dwarf2cfi.cc
  0a3eda9dab4d6f189c8f1075bd4b269a  gcc/dwarf2codeview.cc
*************** b0756a8dbbe0b39051dfda2c5e26663f  gcc/fi
*** 6087,6100 ****
  77b50b9533828ae8b124e191cc55b74f  gcc/final.cc
  28cc3b30502fab34fffa55fd82454e16  gcc/fixed-value.cc
  7852b04b41add4ad6cc7c7c86cb82658  gcc/fixed-value.h
! 96975c8e38a86e287c8c387deeeda7f0  gcc/flag-types.h
  e8c5838138a5e07e5716964a8284e9a1  gcc/flags.h
  ada0afb884a142f8214291990679be13  gcc/fold-const-call.cc
  182559f127e8416b9e9abcffb267d5fc  gcc/fold-const-call.h
  6dd1484a5224f1070c3b6065080cb93d  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! a87dc02df4a92cad65f225b9bd866d9c  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6089,6102 ----
  77b50b9533828ae8b124e191cc55b74f  gcc/final.cc
  28cc3b30502fab34fffa55fd82454e16  gcc/fixed-value.cc
  7852b04b41add4ad6cc7c7c86cb82658  gcc/fixed-value.h
! a4b4da266f5ffee8465a80d9ffa6c460  gcc/flag-types.h
  e8c5838138a5e07e5716964a8284e9a1  gcc/flags.h
  ada0afb884a142f8214291990679be13  gcc/fold-const-call.cc
  182559f127e8416b9e9abcffb267d5fc  gcc/fold-const-call.h
  6dd1484a5224f1070c3b6065080cb93d  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 3182da685a0d25f5fed9c5ae4be8d1fe  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** af66ab40a5434219772b76ad10035e45  gcc/fo
*** 6151,6157 ****
  9253f176e44c2708e2c503251b27d6b8  gcc/fortran/interface.cc
  62f248d93819299e90d8dd83fde71647  gcc/fortran/intrinsic.cc
  47e0e62e0a6eaad27941f8e734cda2a2  gcc/fortran/intrinsic.h
! 41a7d07efc89efb77a195e7644c2ed9f  gcc/fortran/intrinsic.texi
  d9adb34dd5debb7dc5853dbd9c099b8e  gcc/fortran/invoke.texi
  f9df43a02329adef3021a27235c57aca  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
--- 6153,6159 ----
  9253f176e44c2708e2c503251b27d6b8  gcc/fortran/interface.cc
  62f248d93819299e90d8dd83fde71647  gcc/fortran/intrinsic.cc
  47e0e62e0a6eaad27941f8e734cda2a2  gcc/fortran/intrinsic.h
! 46f301a921ea10f48c66cde1ded41776  gcc/fortran/intrinsic.texi
  d9adb34dd5debb7dc5853dbd9c099b8e  gcc/fortran/invoke.texi
  f9df43a02329adef3021a27235c57aca  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
*************** fd79207ab6491c890f9be301a1b291ed  gcc/fo
*** 6167,6182 ****
  8181d5e935b96288d9a51fb8138faefb  gcc/fortran/matchexp.cc
  763c37f838e32f5ed8ad600157a0d951  gcc/fortran/mathbuiltins.def
  6e89e2e347d7f6e1576cbda0e958b5bd  gcc/fortran/misc.cc
! 3b3c13f513e2236a6456d1d3b112404c  gcc/fortran/module.cc
  055cdc9c702c67c02729328aedac6553  gcc/fortran/openmp.cc
  5b63ee69316bceb14ed8172adcfedf6b  gcc/fortran/options.cc
! 8568f4044671d0228c44aa078809579f  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
  9fbd94c4a385bc0348e4b52527c60d1a  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
! d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
  3255bc920c3609e58d8a01f6464313e8  gcc/fortran/st.cc
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
--- 6169,6184 ----
  8181d5e935b96288d9a51fb8138faefb  gcc/fortran/matchexp.cc
  763c37f838e32f5ed8ad600157a0d951  gcc/fortran/mathbuiltins.def
  6e89e2e347d7f6e1576cbda0e958b5bd  gcc/fortran/misc.cc
! df87a47795cf1aceec24416d89f4dc6e  gcc/fortran/module.cc
  055cdc9c702c67c02729328aedac6553  gcc/fortran/openmp.cc
  5b63ee69316bceb14ed8172adcfedf6b  gcc/fortran/options.cc
! 44ee980cc04645c25872621b20fc36fa  gcc/fortran/parse.cc
  c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
  8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
  9fbd94c4a385bc0348e4b52527c60d1a  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
! 71190056d6f36d3d43d4b6ed27f23032  gcc/fortran/simplify.cc
  3255bc920c3609e58d8a01f6464313e8  gcc/fortran/st.cc
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
*************** ef3436c60285865c7e4a611b65ebca7d  gcc/fo
*** 6201,6207 ****
  2ddfa7f2ac232123d67959795d85aaa6  gcc/fortran/types.def
  f574663ce227d0be2e77015c008d708b  gcc/fp-test.cc
  7d49ef8f960daad31201f864eb1933d9  gcc/function-abi.cc
! 12d3c07e3c878f7237f904820da28c93  gcc/function-abi.h
  6e9698e4411a03357b6e2b60bc91c827  gcc/function-tests.cc
  69a21b42c94c44d00d46067a5b8337da  gcc/function.cc
  da5d04420f440a4a085dc91d92c6bfbb  gcc/function.h
--- 6203,6209 ----
  2ddfa7f2ac232123d67959795d85aaa6  gcc/fortran/types.def
  f574663ce227d0be2e77015c008d708b  gcc/fp-test.cc
  7d49ef8f960daad31201f864eb1933d9  gcc/function-abi.cc
! 393a04bf94846193a761ce5a84b27b91  gcc/function-abi.h
  6e9698e4411a03357b6e2b60bc91c827  gcc/function-tests.cc
  69a21b42c94c44d00d46067a5b8337da  gcc/function.cc
  da5d04420f440a4a085dc91d92c6bfbb  gcc/function.h
*************** cac72ec7acd3c0b9265d75c09766a847  gcc/gc
*** 6218,6224 ****
  74b8852724cd126309c2e814288bcaa4  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  7e2f3c81fe7c2381b433886ab2914fa7  gcc/gcc-urlifier.h
! c7818a207477a46ba26dcc5ce756de71  gcc/gcc.cc
  265ae8f124014a92ca7dee798d9c2b46  gcc/gcc.h
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
--- 6220,6226 ----
  74b8852724cd126309c2e814288bcaa4  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  7e2f3c81fe7c2381b433886ab2914fa7  gcc/gcc-urlifier.h
! 813dc4e991c18d6b6e5cbab8dd456520  gcc/gcc.cc
  265ae8f124014a92ca7dee798d9c2b46  gcc/gcc.h
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
*************** c4e07547b91be991d1bed6c22015cec2  gcc/gc
*** 6226,6232 ****
  0ca687fdcb0e263469de6752791f3ca7  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
! 2a8393570ec2f0f06d815562e3e84f78  gcc/gcse-common.cc
  592e70d614695b5fba65cd68c9112587  gcc/gcse-common.h
  a44c1a607d9b75afc7b5bd869ae5342a  gcc/gcse.cc
  e5a3a3a1ad466d441c8c2f6c2ac6c208  gcc/gcse.h
--- 6228,6234 ----
  0ca687fdcb0e263469de6752791f3ca7  gcc/gcov-io.h
  0fef400d80ba434e449000da71f5b69f  gcc/gcov-tool.cc
  75b76f17591eaadacbf2760164205f52  gcc/gcov.cc
! d6ef278998f9a4cf5f6d12d0ec72b842  gcc/gcse-common.cc
  592e70d614695b5fba65cd68c9112587  gcc/gcse-common.h
  a44c1a607d9b75afc7b5bd869ae5342a  gcc/gcse.cc
  e5a3a3a1ad466d441c8c2f6c2ac6c208  gcc/gcse.h
*************** c0aa0732013643fc9d7c8fc68bb85d6d  gcc/gg
*** 6278,6292 ****
  ec69854c50639d623fcfeccac45d7a05  gcc/ggc-page.cc
  f6879ae08660f73788b6b784022ca89a  gcc/ggc-tests.cc
  2a2d277a27eda24ce951c4e0b47b5201  gcc/ggc.h
! fc01aba2ef6a14714b1f93c8cf4194e4  gcc/gimple-array-bounds.cc
! d6f9bd05a0669c41ec48c604502d60cf  gcc/gimple-array-bounds.h
  da09d1e31d3994eb3d6958074d7b7ce5  gcc/gimple-builder.cc
  50314e0ad6c6defd28ef9aa5216d4622  gcc/gimple-builder.h
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! 534117ffee4c0d0dc985b60d7510622c  gcc/gimple-fold.cc
! f62d9e49373597ff8aca71c2dbb00973  gcc/gimple-fold.h
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
  46c40ebab120d543476a2e46ac063bba  gcc/gimple-if-to-switch.cc
--- 6280,6294 ----
  ec69854c50639d623fcfeccac45d7a05  gcc/ggc-page.cc
  f6879ae08660f73788b6b784022ca89a  gcc/ggc-tests.cc
  2a2d277a27eda24ce951c4e0b47b5201  gcc/ggc.h
! 613b739bb48c9d6080aff958be8a5ebc  gcc/gimple-array-bounds.cc
! a7cca341b87288d0f876a47854e26a63  gcc/gimple-array-bounds.h
  da09d1e31d3994eb3d6958074d7b7ce5  gcc/gimple-builder.cc
  50314e0ad6c6defd28ef9aa5216d4622  gcc/gimple-builder.h
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! 4bb156b0c61094477f970e2d0dbf59fc  gcc/gimple-fold.cc
! 86c6a1d00a802fd45372d34d131819e5  gcc/gimple-fold.h
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
  46c40ebab120d543476a2e46ac063bba  gcc/gimple-if-to-switch.cc
*************** b551cb1f1566bf3aa2bca3816f2b1c98  gcc/gi
*** 6338,6347 ****
  c7ec9ee38b6e99c1260bd3e794ead05f  gcc/gimple-ssa-sprintf.cc
  87d47a47b50b82ce1660751e9d73d3b3  gcc/gimple-ssa-store-merging.cc
  5081e3b07e7210c50573a328ecd9e1b9  gcc/gimple-ssa-strength-reduction.cc
! 66204acf1955fed6a7d167d0683a9eb4  gcc/gimple-ssa-warn-access.cc
  3ae7b597d9d5e0c5ba61dc7ee8a7f2c2  gcc/gimple-ssa-warn-access.h
  58ebb365eca5688d01bd602f9fb054e2  gcc/gimple-ssa-warn-alloca.cc
! beb3ca2546e044813326413ad5c07630  gcc/gimple-ssa-warn-restrict.cc
  c33f19efabf2e1331a65e467f6a2e7fc  gcc/gimple-ssa-warn-restrict.h
  5ea6e6b9805f4e86b47aabe82b9d1033  gcc/gimple-ssa.h
  7f8c492dbd88d8d371f858c251bb8d5c  gcc/gimple-streamer-in.cc
--- 6340,6349 ----
  c7ec9ee38b6e99c1260bd3e794ead05f  gcc/gimple-ssa-sprintf.cc
  87d47a47b50b82ce1660751e9d73d3b3  gcc/gimple-ssa-store-merging.cc
  5081e3b07e7210c50573a328ecd9e1b9  gcc/gimple-ssa-strength-reduction.cc
! 21629afaaed834fe2ac98a4e03130ea2  gcc/gimple-ssa-warn-access.cc
  3ae7b597d9d5e0c5ba61dc7ee8a7f2c2  gcc/gimple-ssa-warn-access.h
  58ebb365eca5688d01bd602f9fb054e2  gcc/gimple-ssa-warn-alloca.cc
! 8a142c2c29a0173959321fc4963bb5a9  gcc/gimple-ssa-warn-restrict.cc
  c33f19efabf2e1331a65e467f6a2e7fc  gcc/gimple-ssa-warn-restrict.h
  5ea6e6b9805f4e86b47aabe82b9d1033  gcc/gimple-ssa.h
  7f8c492dbd88d8d371f858c251bb8d5c  gcc/gimple-streamer-in.cc
*************** bab40605909b2dfc01edcaa747fadd3e  gcc/ho
*** 6479,6485 ****
  260dd898f6b9809f71a292b793d67324  gcc/hw-doloop.h
  4769eb51982f8ccb12764424698b464f  gcc/hwint.cc
  8826410aae6a5efbb3d335e5e3dceed4  gcc/hwint.h
! 31ea39f949f703c2507dda13a2e0aad2  gcc/ifcvt.cc
  1d252ebba03aa858df6822a8b59e1d4e  gcc/ifcvt.h
  55413f67957a351f7ca1b0a8a2f69a7c  gcc/inchash.cc
  f380ce65b15eedb6d55a9848beb1ec3b  gcc/inchash.h
--- 6481,6487 ----
  260dd898f6b9809f71a292b793d67324  gcc/hw-doloop.h
  4769eb51982f8ccb12764424698b464f  gcc/hwint.cc
  8826410aae6a5efbb3d335e5e3dceed4  gcc/hwint.h
! 5dbb49fc33cd5351746515deaa6417ce  gcc/ifcvt.cc
  1d252ebba03aa858df6822a8b59e1d4e  gcc/ifcvt.h
  55413f67957a351f7ca1b0a8a2f69a7c  gcc/inchash.cc
  f380ce65b15eedb6d55a9848beb1ec3b  gcc/inchash.h
*************** d33136e7edecd120aa035f0e1ad240b0  gcc/ip
*** 6524,6530 ****
  3290558dca39b32c0ca581e6c3427551  gcc/ipa-predicate.h
  fa8b12710ac89ee0802b55aec4fe4cda  gcc/ipa-profile.cc
  be8b91a88b033749209c11844ab4ebd7  gcc/ipa-prop.cc
! 769c7da3be6c74b69be2f9572626e59f  gcc/ipa-prop.h
  33f941deca3150b6ccaa310cd69f68f2  gcc/ipa-pure-const.cc
  ce0496bede6d40e2fcfbc8277856fc23  gcc/ipa-ref.cc
  ee6c4ff9a86c5d0a68fa41c8da2b5c6f  gcc/ipa-ref.h
--- 6526,6532 ----
  3290558dca39b32c0ca581e6c3427551  gcc/ipa-predicate.h
  fa8b12710ac89ee0802b55aec4fe4cda  gcc/ipa-profile.cc
  be8b91a88b033749209c11844ab4ebd7  gcc/ipa-prop.cc
! 444b35215f1c30938a9c7b34c8f51b7e  gcc/ipa-prop.h
  33f941deca3150b6ccaa310cd69f68f2  gcc/ipa-pure-const.cc
  ce0496bede6d40e2fcfbc8277856fc23  gcc/ipa-ref.cc
  ee6c4ff9a86c5d0a68fa41c8da2b5c6f  gcc/ipa-ref.h
*************** aa4d0dc684f454901e907706abe9140d  gcc/js
*** 6645,6651 ****
  d0727ac0c6842b68e046f42e27e66165  gcc/langhooks-def.h
  4d0a0855b356aa25be607aaf932bde59  gcc/langhooks.cc
  7899320dd5da16cc68d6f63cd8d5ddf9  gcc/langhooks.h
! 75deba840ba0746416d8a7516027f7b7  gcc/late-combine.cc
  de8c4845432dd4e64d6fa53d34cb4a09  gcc/lazily-created.h
  82e3d15b2545a4e7a7397d6396eb74fe  gcc/lcm.cc
  bdf8ae675ae5000d854fe2874116b2f8  gcc/lcm.h
--- 6647,6653 ----
  d0727ac0c6842b68e046f42e27e66165  gcc/langhooks-def.h
  4d0a0855b356aa25be607aaf932bde59  gcc/langhooks.cc
  7899320dd5da16cc68d6f63cd8d5ddf9  gcc/langhooks.h
! 3cbec1a3a0fcc9b00c42744a119106ce  gcc/late-combine.cc
  de8c4845432dd4e64d6fa53d34cb4a09  gcc/lazily-created.h
  82e3d15b2545a4e7a7397d6396eb74fe  gcc/lcm.cc
  bdf8ae675ae5000d854fe2874116b2f8  gcc/lcm.h
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7675,7681 ****
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  550bdb35d0e034ca0050c574ba896d61  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 2414cd22db28feb4476269cc4d70bb8b  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
--- 7677,7683 ----
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  550bdb35d0e034ca0050c574ba896d61  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! ade42444980a103476912990f6e1f3f6  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
*************** bdacbcb932eb0c2db8707e3727f574dd  gcc/op
*** 7760,7767 ****
  6d624f6fea144bbb8e71378935b84abd  gcc/opts-diagnostic.h
  dd6379e65503d93b6eb08844e8bf2d09  gcc/opts-global.cc
  079a115ae417106f3e7f42b0272b866d  gcc/opts-jobserver.h
! 0031e50e90748fb1caabd856c36c9250  gcc/opts.cc
! e77c0b4ff21959cc040b49d1945bbc5b  gcc/opts.h
  b7a4b3edfca283f972cdeb23102a28a4  gcc/ordered-hash-map-tests.cc
  fccd951e3de91d49d3824e482c12e070  gcc/ordered-hash-map.h
  673ce61076fa80e959fe72ae50291616  gcc/output.h
--- 7762,7769 ----
  6d624f6fea144bbb8e71378935b84abd  gcc/opts-diagnostic.h
  dd6379e65503d93b6eb08844e8bf2d09  gcc/opts-global.cc
  079a115ae417106f3e7f42b0272b866d  gcc/opts-jobserver.h
! 1fb20ee37d02cbbcbb8c1c49ec07b173  gcc/opts.cc
! 7297ae8caf0c34afb0609151e7e3f987  gcc/opts.h
  b7a4b3edfca283f972cdeb23102a28a4  gcc/ordered-hash-map-tests.cc
  fccd951e3de91d49d3824e482c12e070  gcc/ordered-hash-map.h
  673ce61076fa80e959fe72ae50291616  gcc/output.h
*************** b4aff81d08de5e739231c4919da96597  gcc/po
*** 7782,7788 ****
  fcae8297fb0c1be8e1502d7ca12c249f  gcc/po/EXCLUDES
  276b0e994306e3cdb1f62b8de38fa0e9  gcc/po/be.po
  4ce8480a8ed1c6ea96dcee25f16b5030  gcc/po/da.po
! 309fd989d28472b9f339cfe9b7f1c0bd  gcc/po/de.po
  fb211887132af72dd424dd2b31d66047  gcc/po/el.po
  12364c0b168dff335c5af2f85fe8e446  gcc/po/es.po
  748a1d219b34c4206fcf3385510cec82  gcc/po/exgettext
--- 7784,7790 ----
  fcae8297fb0c1be8e1502d7ca12c249f  gcc/po/EXCLUDES
  276b0e994306e3cdb1f62b8de38fa0e9  gcc/po/be.po
  4ce8480a8ed1c6ea96dcee25f16b5030  gcc/po/da.po
! 537e98eeb67896ac57d739aeffc9d95c  gcc/po/de.po
  fb211887132af72dd424dd2b31d66047  gcc/po/el.po
  12364c0b168dff335c5af2f85fe8e446  gcc/po/es.po
  748a1d219b34c4206fcf3385510cec82  gcc/po/exgettext
*************** cc2f2f430f74c1a27d90af76f5ba9968  gcc/re
*** 7872,7893 ****
  7948f19af7c7a128dd0ae8670c3fc343  gcc/rtl-iter.h
  8c3b34bb9f512d3d639e53c5b1cbb307  gcc/rtl-ssa.h
  3e123d92454df663839c73fe7db11784  gcc/rtl-ssa/access-utils.h
! 0dc16a95db8ca98a27e3650f6c12ce23  gcc/rtl-ssa/accesses.cc
! 9393072d67f2a5d2fe674ab8fc3d13e9  gcc/rtl-ssa/accesses.h
! 66b4e87db60474417ffffe027ae7f92f  gcc/rtl-ssa/blocks.cc
  520011b5e2ce3793d91dd754d2a666ee  gcc/rtl-ssa/blocks.h
  33b2e67a8ebbdcbe29d4b567f6ce3700  gcc/rtl-ssa/change-utils.h
! e9db7390ca51863b2bc8c41e2282e35b  gcc/rtl-ssa/changes.cc
  c607a19c0aef8e5e1a34995205ca21ad  gcc/rtl-ssa/changes.h
  3247cab7031af7ec0a17f27198004fd5  gcc/rtl-ssa/functions.cc
! ad760b8947b6feeec03df375bb3d68b9  gcc/rtl-ssa/functions.h
  8fb70f73f287539e8bb51d48119217b1  gcc/rtl-ssa/insn-utils.h
  4590866ca3f3ab9179e13e7a2579c8d4  gcc/rtl-ssa/insns.cc
  2de673bc2af519223c6ee41fa85fc95e  gcc/rtl-ssa/insns.h
  648c7fc39e0055d394896988ef11d87e  gcc/rtl-ssa/internals.h
  5136fbb71d7242c2a06d636aed232a61  gcc/rtl-ssa/internals.inl
  6bb489b63ab65065cc9022a40b81603f  gcc/rtl-ssa/is-a.inl
! 932a291a584faefaf799ee16d152449c  gcc/rtl-ssa/member-fns.inl
  27587bed0648c4e001475b813ac96c46  gcc/rtl-ssa/movement.cc
  916928447525c25ab8401d122b855b0c  gcc/rtl-ssa/movement.h
  add2ef65d80adc09236eaff62179a1fe  gcc/rtl-ssa/predicates.h
--- 7874,7895 ----
  7948f19af7c7a128dd0ae8670c3fc343  gcc/rtl-iter.h
  8c3b34bb9f512d3d639e53c5b1cbb307  gcc/rtl-ssa.h
  3e123d92454df663839c73fe7db11784  gcc/rtl-ssa/access-utils.h
! 2d7ea25e47ea43ae963ec5a280cb9bc1  gcc/rtl-ssa/accesses.cc
! a90674c678ee02bf4f447c3ff6764580  gcc/rtl-ssa/accesses.h
! 3df450dbac29d0433b3fac9cc2554c96  gcc/rtl-ssa/blocks.cc
  520011b5e2ce3793d91dd754d2a666ee  gcc/rtl-ssa/blocks.h
  33b2e67a8ebbdcbe29d4b567f6ce3700  gcc/rtl-ssa/change-utils.h
! ac307afcc5d438a2a7203d893760a943  gcc/rtl-ssa/changes.cc
  c607a19c0aef8e5e1a34995205ca21ad  gcc/rtl-ssa/changes.h
  3247cab7031af7ec0a17f27198004fd5  gcc/rtl-ssa/functions.cc
! a637837e65211f67cd8c617a3b52e085  gcc/rtl-ssa/functions.h
  8fb70f73f287539e8bb51d48119217b1  gcc/rtl-ssa/insn-utils.h
  4590866ca3f3ab9179e13e7a2579c8d4  gcc/rtl-ssa/insns.cc
  2de673bc2af519223c6ee41fa85fc95e  gcc/rtl-ssa/insns.h
  648c7fc39e0055d394896988ef11d87e  gcc/rtl-ssa/internals.h
  5136fbb71d7242c2a06d636aed232a61  gcc/rtl-ssa/internals.inl
  6bb489b63ab65065cc9022a40b81603f  gcc/rtl-ssa/is-a.inl
! 30445ac0e1907de29c0a3c49b25f3981  gcc/rtl-ssa/member-fns.inl
  27587bed0648c4e001475b813ac96c46  gcc/rtl-ssa/movement.cc
  916928447525c25ab8401d122b855b0c  gcc/rtl-ssa/movement.h
  add2ef65d80adc09236eaff62179a1fe  gcc/rtl-ssa/predicates.h
*************** f39c55472711c984059aff01fd972f31  gcc/rt
*** 7895,7901 ****
  1105088521e8de72d332faeda31306c7  gcc/rtl.cc
  41ece3c6a40e9a14609645318016e228  gcc/rtl.def
  5fd830e690852b2de24fd59bf66e4ddf  gcc/rtl.h
! c537b4b5e4280ac5f131d23e5eff37ff  gcc/rtlanal.cc
  e38f02dbd2d0d8c027ccae4b785f3fb2  gcc/rtlanal.h
  f829c444b36f34672cb4a7b019c4513b  gcc/rtlhash.cc
  ce0129afbbfb3ab85e5bd8ce9672117d  gcc/rtlhash.h
--- 7897,7903 ----
  1105088521e8de72d332faeda31306c7  gcc/rtl.cc
  41ece3c6a40e9a14609645318016e228  gcc/rtl.def
  5fd830e690852b2de24fd59bf66e4ddf  gcc/rtl.h
! d97bb2b208147641dac0560ab98d0f0b  gcc/rtlanal.cc
  e38f02dbd2d0d8c027ccae4b785f3fb2  gcc/rtlanal.h
  f829c444b36f34672cb4a7b019c4513b  gcc/rtlhash.cc
  ce0129afbbfb3ab85e5bd8ce9672117d  gcc/rtlhash.h
*************** c880657161e4078ba5e385691b6c5328  gcc/ta
*** 8499,8505 ****
  143ba02938f6a6df9b9495eb6bce4be1  gcc/targhooks.cc
  7b362870a640a56a8b05ca807b02f07d  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! cc93202c8e01bec34f821007ecf98a57  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8501,8507 ----
  143ba02938f6a6df9b9495eb6bce4be1  gcc/targhooks.cc
  7b362870a640a56a8b05ca807b02f07d  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 7312557fb499050da8b5e425c57eab4c  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** eeee984fc971f0592acc52efb13ea93e  gcc/te
*** 21041,21047 ****
  91fe59f4b908b8f1ebd09487c43147d8  gcc/testsuite/g++.dg/abi/mangle80.C
  243b5d1d894302a08529e7e4300eea4b  gcc/testsuite/g++.dg/abi/mangle81.C
  4023501102c8e0f81d65b42d89188330  gcc/testsuite/g++.dg/abi/mangle82.C
! e37a49aa27a36c43c35aafaf74b4504d  gcc/testsuite/g++.dg/abi/mangle83.C
  8c95c7ea3760b8a1e7954b3da9f45a16  gcc/testsuite/g++.dg/abi/mangle9.C
  d85264fae2b4c2eb4d8629cb29c42e90  gcc/testsuite/g++.dg/abi/no-linkage-expr1.C
  0cccf158230e7bf1d438169164c8020a  gcc/testsuite/g++.dg/abi/no-weak1.C
--- 21043,21049 ----
  91fe59f4b908b8f1ebd09487c43147d8  gcc/testsuite/g++.dg/abi/mangle80.C
  243b5d1d894302a08529e7e4300eea4b  gcc/testsuite/g++.dg/abi/mangle81.C
  4023501102c8e0f81d65b42d89188330  gcc/testsuite/g++.dg/abi/mangle82.C
! 68ffac7c297dac3aa02f23faf529b56f  gcc/testsuite/g++.dg/abi/mangle83.C
  8c95c7ea3760b8a1e7954b3da9f45a16  gcc/testsuite/g++.dg/abi/mangle9.C
  d85264fae2b4c2eb4d8629cb29c42e90  gcc/testsuite/g++.dg/abi/no-linkage-expr1.C
  0cccf158230e7bf1d438169164c8020a  gcc/testsuite/g++.dg/abi/no-weak1.C
*************** dfe35dd56ee2521e84d1e303bbfae2e6  gcc/te
*** 21565,21570 ****
--- 21567,21573 ----
  f94bda44b57e3eca7abceac1801f6a89  gcc/testsuite/g++.dg/concepts/placeholder6.C
  a72ced9853beafaaa9dc607bf0968c82  gcc/testsuite/g++.dg/concepts/pr101099.C
  91bbc43bd292628bdbb650fc92890934  gcc/testsuite/g++.dg/concepts/pr105061.C
+ 1d90209b290c2d2e5faf7245f27737b0  gcc/testsuite/g++.dg/concepts/pr120618.C
  859f5f20c5d30a982ea7c13a56774203  gcc/testsuite/g++.dg/concepts/pr65634.C
  ffe909fc3ac2f31f963535467cb70716  gcc/testsuite/g++.dg/concepts/pr65636.C
  80c8a6d6dafe1ffb7e0fa3a57cf9e2fe  gcc/testsuite/g++.dg/concepts/pr65681.C
*************** e791b94844e59093ad5ec4175c3b673a  gcc/te
*** 25381,25386 ****
--- 25384,25390 ----
  86dff67be95912f694daebdd0aee911b  gcc/testsuite/g++.dg/cpp1y/auto-fn63.C
  f97d20d3d680128b6e125d1793e29b87  gcc/testsuite/g++.dg/cpp1y/auto-fn64.C
  a5fbd625e8b645b90b2755400e929e2b  gcc/testsuite/g++.dg/cpp1y/auto-fn65.C
+ 88309773bbf1feef7121ba73e86cc151  gcc/testsuite/g++.dg/cpp1y/auto-fn66.C
  03b6f2674c38c8f6ed9f7fc03583b1dc  gcc/testsuite/g++.dg/cpp1y/auto-fn7.C
  e9a317fa32e36cef4553b50965e48550  gcc/testsuite/g++.dg/cpp1y/auto-fn8.C
  d67958b896eb1dae6f8862fd59b01c62  gcc/testsuite/g++.dg/cpp1y/auto-fn9.C
*************** d2f3d1d0903cd9aafbe5cfc699f5e974  gcc/te
*** 26945,26951 ****
  1a8ea65a8bfe4f48807a4cb121d02f77  gcc/testsuite/g++.dg/cpp26/expansion-stmt13.C
  9a15f7dee81311d83ad9aea2e046e956  gcc/testsuite/g++.dg/cpp26/expansion-stmt14.C
  b8280f40d5555793eac33cba86e91724  gcc/testsuite/g++.dg/cpp26/expansion-stmt15.C
! 33a50373fd730a844aa116cd41d27076  gcc/testsuite/g++.dg/cpp26/expansion-stmt16.C
  40a9f0169438dcc0077a4b3f3a07e396  gcc/testsuite/g++.dg/cpp26/expansion-stmt17.C
  86eecfab49da65a501129dfaf2007e5c  gcc/testsuite/g++.dg/cpp26/expansion-stmt18.C
  a9c707a9b9460b695998400fa35fced5  gcc/testsuite/g++.dg/cpp26/expansion-stmt19.C
--- 26949,26955 ----
  1a8ea65a8bfe4f48807a4cb121d02f77  gcc/testsuite/g++.dg/cpp26/expansion-stmt13.C
  9a15f7dee81311d83ad9aea2e046e956  gcc/testsuite/g++.dg/cpp26/expansion-stmt14.C
  b8280f40d5555793eac33cba86e91724  gcc/testsuite/g++.dg/cpp26/expansion-stmt15.C
! 14352b0cb38dc6eeb6188f47cd518b4a  gcc/testsuite/g++.dg/cpp26/expansion-stmt16.C
  40a9f0169438dcc0077a4b3f3a07e396  gcc/testsuite/g++.dg/cpp26/expansion-stmt17.C
  86eecfab49da65a501129dfaf2007e5c  gcc/testsuite/g++.dg/cpp26/expansion-stmt18.C
  a9c707a9b9460b695998400fa35fced5  gcc/testsuite/g++.dg/cpp26/expansion-stmt19.C
*************** f22e232a82f7c1bad4e99814aa64e024  gcc/te
*** 27448,27454 ****
  d3851914c01bf78597e5cb411ed0b3d5  gcc/testsuite/g++.dg/cpp2a/concepts-requires4.C
  9ff29a02ca82332b82da206e1f44ad5c  gcc/testsuite/g++.dg/cpp2a/concepts-requires40.C
  d8fb95a7a3f620554c731a49b55c6a41  gcc/testsuite/g++.dg/cpp2a/concepts-requires41.C
! b0543fff3c3bc5fc860ec427d28d248c  gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
  8ea6ab45de0c359b113c65f1958a54a1  gcc/testsuite/g++.dg/cpp2a/concepts-requires6.C
  d9a49412355c5ed0f91582f1c88c13ff  gcc/testsuite/g++.dg/cpp2a/concepts-requires7.C
  3e6c8a3f7643afee74d038d893eb011f  gcc/testsuite/g++.dg/cpp2a/concepts-requires8.C
--- 27452,27458 ----
  d3851914c01bf78597e5cb411ed0b3d5  gcc/testsuite/g++.dg/cpp2a/concepts-requires4.C
  9ff29a02ca82332b82da206e1f44ad5c  gcc/testsuite/g++.dg/cpp2a/concepts-requires40.C
  d8fb95a7a3f620554c731a49b55c6a41  gcc/testsuite/g++.dg/cpp2a/concepts-requires41.C
! 5d6de37c2e62b40c8a5db3700bd63c60  gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
  8ea6ab45de0c359b113c65f1958a54a1  gcc/testsuite/g++.dg/cpp2a/concepts-requires6.C
  d9a49412355c5ed0f91582f1c88c13ff  gcc/testsuite/g++.dg/cpp2a/concepts-requires7.C
  3e6c8a3f7643afee74d038d893eb011f  gcc/testsuite/g++.dg/cpp2a/concepts-requires8.C
*************** a95dbf28241ffec87fb48912ed83e629  gcc/te
*** 27496,27501 ****
--- 27500,27506 ----
  10200cb73b1bb6443f53044708cc6c85  gcc/testsuite/g++.dg/cpp2a/concepts-using5.C
  d413557ac25b939174ec565ccf9ef3a8  gcc/testsuite/g++.dg/cpp2a/concepts-using5a.C
  fb1ad2ac5b658a4cc71bda178e736608  gcc/testsuite/g++.dg/cpp2a/concepts-using6.C
+ 7e0d58ca005c696397e1e709ae4d04ac  gcc/testsuite/g++.dg/cpp2a/concepts-using7.C
  eb51a2e88a343491b3a0676b4ff623cf  gcc/testsuite/g++.dg/cpp2a/concepts-var-templ1.C
  c344a88e2fb58ca9d19beb62602dabc5  gcc/testsuite/g++.dg/cpp2a/concepts-var-templ1a.C
  d29bcca633bb639bebf16b846292cebc  gcc/testsuite/g++.dg/cpp2a/concepts-var-templ1b.C
*************** cbf5d5a37bc2a85bde738f9433003a39  gcc/te
*** 27603,27608 ****
--- 27608,27614 ----
  1020d355cd830dffa45dfd17a95222fa  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor15.C
  53a8d0a6c685819970a9fa554fdf4154  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C
  619af6d01fa79804784a2c8b0c9dcbee  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor17.C
+ fbb69b1132a414de03ead400a5096fe7  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor18.C
  18ceb8d2ffe5d8e310f40839d2edf0d5  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor2.C
  35d472b389db4ae79d8a0ba112cf7266  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor3.C
  780076eefadeb33a1dce586533960b80  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor4.C
*************** c1a2a3390492a95192a3736b25423528  gcc/te
*** 32572,32577 ****
--- 32578,32586 ----
  8a574d4894596714f7d0497433a93ebe  gcc/testsuite/g++.dg/modules/imp-member-2_b.C
  7c358b73d07322ea12822262e4d376a7  gcc/testsuite/g++.dg/modules/imp-member-2_c.C
  09b2e78c7082c3c6f91d5c66b21e9f2b  gcc/testsuite/g++.dg/modules/imp-member-3.H
+ 31c69886ec946d62cf0667dbcbdc7e4f  gcc/testsuite/g++.dg/modules/imp-member-4_a.C
+ f27466c6fc70ce46e080f3b2c7fb7050  gcc/testsuite/g++.dg/modules/imp-member-4_b.C
+ a191f79da591f001f65a3282e2d9da6e  gcc/testsuite/g++.dg/modules/imp-member-4_c.C
  1f7d51f903fe6c300810c1d8d856401e  gcc/testsuite/g++.dg/modules/import-1_a.C
  cd504ebaf4fc289e921acc9934ead55f  gcc/testsuite/g++.dg/modules/import-1_b.C
  7dc13fb6d933fb23dc0f7251fa928bde  gcc/testsuite/g++.dg/modules/import-1_c.C
*************** d71ad1e42d5edd10bf65dd64c81a4107  gcc/te
*** 33171,33177 ****
  57c308104a9d589b59baa6c5289ef1ae  gcc/testsuite/g++.dg/modules/pr106761_b.C
  ce1fbbd73d685e48bf6b219484083996  gcc/testsuite/g++.dg/modules/pr106820_a.H
  d7c5aacc3100ff130d9b06f0b4d7b551  gcc/testsuite/g++.dg/modules/pr106820_b.C
! 633de5cc96e42a8f75edab46b98b2a45  gcc/testsuite/g++.dg/modules/pr108080.H
  d6c4487b2cdfe513fca59a9da2b03d10  gcc/testsuite/g++.dg/modules/pr113580_a.C
  2d13920b57e09bfba57cfacc02b5548b  gcc/testsuite/g++.dg/modules/pr113580_b.C
  b0187e4110d3e1feaedea59af55274e1  gcc/testsuite/g++.dg/modules/pr114005_a.C
--- 33180,33186 ----
  57c308104a9d589b59baa6c5289ef1ae  gcc/testsuite/g++.dg/modules/pr106761_b.C
  ce1fbbd73d685e48bf6b219484083996  gcc/testsuite/g++.dg/modules/pr106820_a.H
  d7c5aacc3100ff130d9b06f0b4d7b551  gcc/testsuite/g++.dg/modules/pr106820_b.C
! 0e300dd7ed7b402f26750dab3b720316  gcc/testsuite/g++.dg/modules/pr108080.H
  d6c4487b2cdfe513fca59a9da2b03d10  gcc/testsuite/g++.dg/modules/pr113580_a.C
  2d13920b57e09bfba57cfacc02b5548b  gcc/testsuite/g++.dg/modules/pr113580_b.C
  b0187e4110d3e1feaedea59af55274e1  gcc/testsuite/g++.dg/modules/pr114005_a.C
*************** a6538f381f12a0cd3a9e46e8089d2b15  gcc/te
*** 33671,33676 ****
--- 33680,33687 ----
  d2536d9ce980b930e5bd5e99319d1f01  gcc/testsuite/g++.dg/modules/using-30_c.C
  c42022b1e3d2c0964d349eec1c2253a7  gcc/testsuite/g++.dg/modules/using-31_a.C
  b9c78848e5510504b2065d85656d575b  gcc/testsuite/g++.dg/modules/using-31_b.C
+ bef5e193834f5468e4e4fc83a16d475d  gcc/testsuite/g++.dg/modules/using-32_a.C
+ 2dd22af7e6631945332b03fde27ff5db  gcc/testsuite/g++.dg/modules/using-32_b.C
  bcc6cc64890192d647d85da41996ed1e  gcc/testsuite/g++.dg/modules/using-4_a.C
  f7d6d7386bd922589ea2e579fdd741e5  gcc/testsuite/g++.dg/modules/using-4_b.C
  0650e45892eb431529641f277d164339  gcc/testsuite/g++.dg/modules/using-5_a.C
*************** a31feb6abdee70df8465893bfc01cc3f  gcc/te
*** 35356,35361 ****
--- 35367,35373 ----
  62935399288bb5a662f7a6214e1cbb16  gcc/testsuite/g++.dg/parse/template30.C
  7bbe9405de4476f557431f61bbc055be  gcc/testsuite/g++.dg/parse/template31.C
  ac012cc2d776e77244da576ff788c387  gcc/testsuite/g++.dg/parse/template32.C
+ 1c45950cbc06c556df49ffcd971a522c  gcc/testsuite/g++.dg/parse/template33.C
  17872444c3e507c8ec724d519d4c6457  gcc/testsuite/g++.dg/parse/template4.C
  eb5012efbf2e76d0649338687d64eab1  gcc/testsuite/g++.dg/parse/template5.C
  36ce6bc0b81d40546501089e276c612d  gcc/testsuite/g++.dg/parse/template6.C
*************** c9a313a018bffcf8c74feab4d7de24ee  gcc/te
*** 39259,39270 ****
  ffad6b5038655c4c4e389de3106c88b0  gcc/testsuite/g++.dg/warn/Wshadow-16.C
  38815e928f4e863202914977f5520b74  gcc/testsuite/g++.dg/warn/Wshadow-17.C
  e8c004a48240f458631dbb4f69010a3a  gcc/testsuite/g++.dg/warn/Wshadow-18.C
! 1727dda2a6330e9c15e4deece3f0cbaf  gcc/testsuite/g++.dg/warn/Wshadow-19.C
  6a6527871d476c4275232fa53d041994  gcc/testsuite/g++.dg/warn/Wshadow-2.C
  c6d10f027652eb4c20869c7eaeebb358  gcc/testsuite/g++.dg/warn/Wshadow-3.C
  2e33a5dd790901f2d6f4cc57f311efc6  gcc/testsuite/g++.dg/warn/Wshadow-4.C
  85648d81584ab8f2c756bca959506afc  gcc/testsuite/g++.dg/warn/Wshadow-5.C
! 7cd982ea7c4d79e6dbedb672fceb3ae4  gcc/testsuite/g++.dg/warn/Wshadow-6.C
  de70d0aa4d300c6c495ac17ceb16bb59  gcc/testsuite/g++.dg/warn/Wshadow-7.C
  0af029239ed9b13bdf9a5bf71f44573f  gcc/testsuite/g++.dg/warn/Wshadow-8.C
  69360c98179cb5a496a4ec6c59d499f7  gcc/testsuite/g++.dg/warn/Wshadow-9.C
--- 39271,39284 ----
  ffad6b5038655c4c4e389de3106c88b0  gcc/testsuite/g++.dg/warn/Wshadow-16.C
  38815e928f4e863202914977f5520b74  gcc/testsuite/g++.dg/warn/Wshadow-17.C
  e8c004a48240f458631dbb4f69010a3a  gcc/testsuite/g++.dg/warn/Wshadow-18.C
! 1a12f89f5d97086936d0db3301d450f0  gcc/testsuite/g++.dg/warn/Wshadow-19.C
  6a6527871d476c4275232fa53d041994  gcc/testsuite/g++.dg/warn/Wshadow-2.C
+ 38acd8e34d74b4a63f5d327c293f6815  gcc/testsuite/g++.dg/warn/Wshadow-20.C
+ 608c607a1bd076c052de8925ab7b63dc  gcc/testsuite/g++.dg/warn/Wshadow-21.C
  c6d10f027652eb4c20869c7eaeebb358  gcc/testsuite/g++.dg/warn/Wshadow-3.C
  2e33a5dd790901f2d6f4cc57f311efc6  gcc/testsuite/g++.dg/warn/Wshadow-4.C
  85648d81584ab8f2c756bca959506afc  gcc/testsuite/g++.dg/warn/Wshadow-5.C
! 5d6d25ec58023e36b641ebffe60b3a40  gcc/testsuite/g++.dg/warn/Wshadow-6.C
  de70d0aa4d300c6c495ac17ceb16bb59  gcc/testsuite/g++.dg/warn/Wshadow-7.C
  0af029239ed9b13bdf9a5bf71f44573f  gcc/testsuite/g++.dg/warn/Wshadow-8.C
  69360c98179cb5a496a4ec6c59d499f7  gcc/testsuite/g++.dg/warn/Wshadow-9.C
*************** ab6c5e333d0a740ae5ecff69966813a2  gcc/te
*** 43261,43266 ****
--- 43275,43281 ----
  a36c6629cdaa92f5a41aa0c862cf5a54  gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C
  48b79fc3f836bb02ceace04c37ddd7c4  gcc/testsuite/g++.target/aarch64/sve/pr119706.C
  81119ead1d39599a647b5c79f9d21a85  gcc/testsuite/g++.target/aarch64/sve/pr121449.C
+ ca5585fa39dd81b6d4b16a223b4a2624  gcc/testsuite/g++.target/aarch64/sve/pr121536.cc
  29fcc7f7695fcab2e4779698100f3053  gcc/testsuite/g++.target/aarch64/sve/pr96974.C
  6c0e94c363caf9e62df35ea98b4918ed  gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C
  e64000c150bb204c31dca884ee33dd4f  gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C
*************** f113072427101a2b7f160db112a1f54f  gcc/te
*** 43298,43304 ****
  94ea7d9cba55dd53f98f172e81e0c7ad  gcc/testsuite/g++.target/arm/pr103676.C
  d8845d0576030f586cc8563067a1c9ed  gcc/testsuite/g++.target/arm/pr107080.C
  98e5c3b96316f917c107a3470b80e1ac  gcc/testsuite/g++.target/arm/pr115485.C
! 22b022621ec4a2ba2869db06da51c88b  gcc/testsuite/g++.target/arm/pr120424.C
  86ce099311b8a462979885c1f82c41db  gcc/testsuite/g++.target/arm/pr81497.C
  c66ac2233f3efac56ec64b9294b3708d  gcc/testsuite/g++.target/arm/pr95726.C
  881bcc41183f756e0d7cbda13b2b51df  gcc/testsuite/g++.target/arm/pr99593.C
--- 43313,43319 ----
  94ea7d9cba55dd53f98f172e81e0c7ad  gcc/testsuite/g++.target/arm/pr103676.C
  d8845d0576030f586cc8563067a1c9ed  gcc/testsuite/g++.target/arm/pr107080.C
  98e5c3b96316f917c107a3470b80e1ac  gcc/testsuite/g++.target/arm/pr115485.C
! 6b40540ffb648d95c060284c9f2e9f1f  gcc/testsuite/g++.target/arm/pr120424.C
  86ce099311b8a462979885c1f82c41db  gcc/testsuite/g++.target/arm/pr81497.C
  c66ac2233f3efac56ec64b9294b3708d  gcc/testsuite/g++.target/arm/pr95726.C
  881bcc41183f756e0d7cbda13b2b51df  gcc/testsuite/g++.target/arm/pr99593.C
*************** e1e8d414ac951f379fb6ccff06784511  gcc/te
*** 55668,55673 ****
--- 55683,55701 ----
  9b50390957b3a6b9f2fe49adac18f30b  gcc/testsuite/gcc.dg/pr108947.c
  971cdaa7be51531f55247a24459108ed  gcc/testsuite/gcc.dg/pr108970.c
  b2cc9b3414f5f8e47e69d7429d38f51b  gcc/testsuite/gcc.dg/pr109008.c
+ 69170d84426c278bdb152b01175d91f1  gcc/testsuite/gcc.dg/pr109071.c
+ b354120003ebe6540cb585f00ef63b17  gcc/testsuite/gcc.dg/pr109071_1.c
+ 1bc7163662d2a18efa22907033efd05b  gcc/testsuite/gcc.dg/pr109071_10.c
+ c411003f6dea1c488f83ad17f8c4ff36  gcc/testsuite/gcc.dg/pr109071_11.c
+ c817914f87fc9cf0fea3bdeb3bc7edf5  gcc/testsuite/gcc.dg/pr109071_12.c
+ f1b5212f962a3830e802cc9367a9d14c  gcc/testsuite/gcc.dg/pr109071_2.c
+ cb2821cf0ef103fd2e6b5f1dcaef98b2  gcc/testsuite/gcc.dg/pr109071_3.c
+ 11088fc9f995b2188fe0f254f29c0a99  gcc/testsuite/gcc.dg/pr109071_4.c
+ 1f2d434691eb738e4bd9591871e25b15  gcc/testsuite/gcc.dg/pr109071_5.c
+ e0a0d97dda2dcd485960fdcceef63680  gcc/testsuite/gcc.dg/pr109071_6.c
+ 01426d15aeae1bf174adb86ba4422b89  gcc/testsuite/gcc.dg/pr109071_7.c
+ 7b5c9f3da805fa46fdbe8803e4c7d986  gcc/testsuite/gcc.dg/pr109071_8.c
+ 2627b625af00d9afd2f8f83b36098a3e  gcc/testsuite/gcc.dg/pr109071_9.c
  512c120b715e6b5d557ed0a011de510f  gcc/testsuite/gcc.dg/pr109115.c
  b108b00c49aeb9d5d164d8d72e3dcc50  gcc/testsuite/gcc.dg/pr109187.c
  c66fee8d96a854eabadb8ee243caabd6  gcc/testsuite/gcc.dg/pr109230.c
*************** af316e7c425bfdeaadea8998cbd27110  gcc/te
*** 55869,55874 ****
--- 55897,55903 ----
  809d1e4fe382fd35194849af2413cb9f  gcc/testsuite/gcc.dg/pr117239.c
  f0bfdc371f7d13f5d1419895ec6f7cf3  gcc/testsuite/gcc.dg/pr117245.c
  22c935f2bff095783388f4e05eabe99b  gcc/testsuite/gcc.dg/pr117254.c
+ 67d673064c0c7ee83efde9d89e86c5d3  gcc/testsuite/gcc.dg/pr117375.c
  2fdaaf6f7a5cac0bc0536de3a8e9cc31  gcc/testsuite/gcc.dg/pr117391.c
  508b7efd3e428ac089a9b5def12ba01c  gcc/testsuite/gcc.dg/pr117398.c
  2c69d08dac7e115034a90e432cc57ef2  gcc/testsuite/gcc.dg/pr117433.c
*************** d602fec0c129037ce49acd7cccfd6266  gcc/te
*** 55962,55967 ****
--- 55991,55997 ----
  942ef1841a793e5e296b868a6cfed912  gcc/testsuite/gcc.dg/pr121216.c
  f3420ae2cec7581a0ad483e1abb174f2  gcc/testsuite/gcc.dg/pr121217.c
  7032b52dc2dd1e6cab514293c2d0b276  gcc/testsuite/gcc.dg/pr121322.c
+ a0e82361440276cacba8161b406fa08c  gcc/testsuite/gcc.dg/pr121619.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** d8de96ae2b044149f75e65807303c0d8  gcc/te
*** 59330,59335 ****
--- 59360,59367 ----
  215abff408789603b6bcd0b72b9dbb37  gcc/testsuite/gcc.dg/torture/ipa-pta-2.c
  67e032a26a6dcb61fd477f98f6504336  gcc/testsuite/gcc.dg/torture/ipa-pta-3.c
  613d2e7400ad0760d1e2dc6e98d7a11e  gcc/testsuite/gcc.dg/torture/ldist-1.c
+ 31a2d36c8013be7fca9a3b92e9633b69  gcc/testsuite/gcc.dg/torture/malloc-1.c
+ 1899a9f33a340005fa15b98700675903  gcc/testsuite/gcc.dg/torture/malloc-2.c
  f32edc3251f74574163ecae11d39ecba  gcc/testsuite/gcc.dg/torture/matrix-1.c
  ab399e04c1e827e9481a8168c5e3a3f3  gcc/testsuite/gcc.dg/torture/matrix-2.c
  a397aa54be3f8e0f5ba40494ea6c1e4b  gcc/testsuite/gcc.dg/torture/matrix-3.c
*************** d41266e6594db1994e416e7a7353751e  gcc/te
*** 59721,59726 ****
--- 59753,59759 ----
  95b4b751532b50f7c9ba478b05d5f9a3  gcc/testsuite/gcc.dg/torture/pr121382.c
  577eaa64c9beb28198ba6b01b4065b0a  gcc/testsuite/gcc.dg/torture/pr121422-1.c
  c06f548f435382c42c50e8e66b702266  gcc/testsuite/gcc.dg/torture/pr121422-2.c
+ 0646579839fceb4f511ae3c6f4122d62  gcc/testsuite/gcc.dg/torture/pr121478-1.c
  f42b1c4e861e4207759994e34bbd715d  gcc/testsuite/gcc.dg/torture/pr121514.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
*************** d153cc65f8aad89fc3f4f976c1844c13  gcc/te
*** 85714,85723 ****
  4db83aa123fc4bac669e5678c3fd01a8  gcc/testsuite/gcc.target/i386/noplt-2.c
  d71187a904234084fc7700bf4985493b  gcc/testsuite/gcc.target/i386/noplt-3.c
  a65bbca9b86c46807492d802fca8baad  gcc/testsuite/gcc.target/i386/noplt-4.c
! 84ddf7309982a9ebeae364e8c9e0839c  gcc/testsuite/gcc.target/i386/noplt-gd-1.c
  4e963de7e8d025b829efae993924f607  gcc/testsuite/gcc.target/i386/noplt-gd-2.c
  3fd2b999734183004edb097587e0d1a7  gcc/testsuite/gcc.target/i386/noplt-gd-3.c
! aa6d9d86a4583e5cb0865bd1ea62fcf2  gcc/testsuite/gcc.target/i386/noplt-ld-1.c
  26973ef0b31c34190c8a13700443694f  gcc/testsuite/gcc.target/i386/noplt-ld-2.c
  d84c245c19907cbcb51ec1260f2f2e75  gcc/testsuite/gcc.target/i386/noplt-ld-3.c
  724ac6ecb21390d732dee529300ac27a  gcc/testsuite/gcc.target/i386/nrv1.c
--- 85747,85756 ----
  4db83aa123fc4bac669e5678c3fd01a8  gcc/testsuite/gcc.target/i386/noplt-2.c
  d71187a904234084fc7700bf4985493b  gcc/testsuite/gcc.target/i386/noplt-3.c
  a65bbca9b86c46807492d802fca8baad  gcc/testsuite/gcc.target/i386/noplt-4.c
! 6cc61518f7f5512527275d96468f64d4  gcc/testsuite/gcc.target/i386/noplt-gd-1.c
  4e963de7e8d025b829efae993924f607  gcc/testsuite/gcc.target/i386/noplt-gd-2.c
  3fd2b999734183004edb097587e0d1a7  gcc/testsuite/gcc.target/i386/noplt-gd-3.c
! 0a63a7779f11a9af767245e5cf8c1b05  gcc/testsuite/gcc.target/i386/noplt-ld-1.c
  26973ef0b31c34190c8a13700443694f  gcc/testsuite/gcc.target/i386/noplt-ld-2.c
  d84c245c19907cbcb51ec1260f2f2e75  gcc/testsuite/gcc.target/i386/noplt-ld-3.c
  724ac6ecb21390d732dee529300ac27a  gcc/testsuite/gcc.target/i386/nrv1.c
*************** e6b30d1b12ce6371b1496537f813409b  gcc/te
*** 86709,86714 ****
--- 86742,86755 ----
  2dc3b7effccafde04f6a1a6979dfda02  gcc/testsuite/gcc.target/i386/pr121541-4.c
  49453a7f94bae8710b481412068b8c3a  gcc/testsuite/gcc.target/i386/pr121541-5a.c
  49647fa6eb097d991a160b581c3ad123  gcc/testsuite/gcc.target/i386/pr121541-5b.c
+ 8655d79855cf007c763e79cc65d1112a  gcc/testsuite/gcc.target/i386/pr121572-1a.c
+ 68b576a781e6a2dc5f79397f2956beaf  gcc/testsuite/gcc.target/i386/pr121572-1b.c
+ 7fe4d8dc41303448e9d4b3659eb12e8e  gcc/testsuite/gcc.target/i386/pr121572-2a.c
+ 04e55eb00b90402ca90af7e818eb8d3c  gcc/testsuite/gcc.target/i386/pr121572-2b.c
+ ab4d263df7abea222d27ba922a50fcf9  gcc/testsuite/gcc.target/i386/pr121607-1a.c
+ 8cc594ac59b59b7e05f0e4eabade820d  gcc/testsuite/gcc.target/i386/pr121607-1b.c
+ ba2aa593bb49ad417a1529200ff3424c  gcc/testsuite/gcc.target/i386/pr121635-1a.c
+ 1e963869ee6652e4c62df7f542bcf115  gcc/testsuite/gcc.target/i386/pr121635-1b.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
*************** a21d4b9178b49fb0fb65552af24e2832  gcc/te
*** 95526,95531 ****
--- 95567,95580 ----
  372a3609365f2da8909b851ec64299ba  gcc/testsuite/gcc.target/riscv/pr120223.c
  5eae803c1b040dbbb059ce96fc1b5474  gcc/testsuite/gcc.target/riscv/pr120333.c
  4f37f1ab5c897b7d856cd69b7a0d1b97  gcc/testsuite/gcc.target/riscv/pr120368.c
+ 2c1cc888103a7f151db04550ea30ea67  gcc/testsuite/gcc.target/riscv/pr120553-1.c
+ 0ff65635e9e0b44b38fbc73432466a4d  gcc/testsuite/gcc.target/riscv/pr120553-2.c
+ 3e9602da76e5cd67c12dd17c3d623ac4  gcc/testsuite/gcc.target/riscv/pr120553-3.c
+ 913f1e0524de5446a17d2300da55b54e  gcc/testsuite/gcc.target/riscv/pr120553-4.c
+ b2e2688bf4539077ba541a5c6d72fc5d  gcc/testsuite/gcc.target/riscv/pr120553-5.c
+ 0d1f65efbcd94e91c5cfb218bf433ad0  gcc/testsuite/gcc.target/riscv/pr120553-6.c
+ ceb3a68ee73bf0860222addabfa4e62b  gcc/testsuite/gcc.target/riscv/pr120553-7.c
+ e70f44b248ae6fb211c33c6023159241  gcc/testsuite/gcc.target/riscv/pr120553-8.c
  d8e76b4cd45daa82499151eedc966298  gcc/testsuite/gcc.target/riscv/pr120659.c
  0cdcf97373ed486ded9f3c10ef04348d  gcc/testsuite/gcc.target/riscv/pr120714.c
  6437d8ec53cc1530c20baacd9ca47eba  gcc/testsuite/gcc.target/riscv/pr121113.c
*************** bd96f289e0ad30ff772dc172cc6b434f  gcc/te
*** 97871,97907 ****
  1c4119935df2b0a9b4ab87cf47a3cdd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_data.h
  2714f0d833a302283af9fa8d888862ad  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_run.h
  941e2ccb37cdbf0216c404d1a4cd6745  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h
! 197382b605bb3bd3471b11643b631898  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c
  7eb8dc7e69dd9f6638980e77cd6e6efe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f32.c
  db6c9fd046686fdd17cc7ffc5fbfe33a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f64.c
! f85add7c942dcfb2067c4a6a9c3158d2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c
  f111fb341a6ca7e95c2fa3bb7c758f27  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f32.c
  93a4d811d524303ed690e8cd8e527806  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f64.c
! 5d81f8e9a426009f137c0fb5e269453f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c
  007ec5abf9cca9e34ba75e11dd5d4f2e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f32.c
  706fdab09ac27674ccdcb6d34688ccb8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f64.c
! d406dc8f142b6fd66ab63dba615a6bc6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c
  bdefbf3eeea1f08fffd42d2bde350dea  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f32.c
  5a1f7f5afdbbfcecd97cb5d7098ff707  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f64.c
! 55ba9934457cc6b23471e8c6c9a323f6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c
  87786f9293eedd4f262ccf4e09d478f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c
  634b2fb5bed1d8ed41e55b271de9400c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c
! 4d773a548012bce61e19db8ef96eb18e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c
  9c4307fc1db29e045adc4a9f15ddca66  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f32.c
  0515f842a58d067880c5658e5addbece  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f64.c
! 46edc4ded0a9bad02b13501780c7192f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c
  585be3a51575d87dbf0cd1d5cbe0d062  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c
  127ff44000f971b8e7e5ba53d71a55fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c
! 4cfae0fd23302dd498e0dfcce7239224  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
  dfc52616a58f523908e41a5a4e0f72b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f32.c
  813960aebe71c2622a67c2b2649a8973  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f64.c
! 6cfd0942bee0993d84ce6948d7594ca6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c
  3d2a7164ecf998191c3df62b3eb98cb0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c
! 384d136ea5719c1d3742f2ae2585c371  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c
  c8ea40c4b9abb00be5f9636824cb84e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c
! 2f7904e0249cc28fe3a3c461a6f46db3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c
  12dbee70f513595c141538484edde7ca  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c
! 7652f594973d5fa2fb94986a22efaf65  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c
  99b2ebb0aea4ec8f59a77cce1a6130c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c
  9215ad18018c4426df1e517a1ea9c882  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
  69c254f90bb4aacc9a8a7a6a1e5a7b60  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
--- 97920,97956 ----
  1c4119935df2b0a9b4ab87cf47a3cdd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_data.h
  2714f0d833a302283af9fa8d888862ad  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_run.h
  941e2ccb37cdbf0216c404d1a4cd6745  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_mulop_widen_run.h
! 09d0368981957734f8c4ed4b287ce552  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c
  7eb8dc7e69dd9f6638980e77cd6e6efe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f32.c
  db6c9fd046686fdd17cc7ffc5fbfe33a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f64.c
! 70e39ec96c65eb4b15338a6f01c31f35  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c
  f111fb341a6ca7e95c2fa3bb7c758f27  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f32.c
  93a4d811d524303ed690e8cd8e527806  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f64.c
! 81c6429e35980a6f8f11053a8e4cd1db  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c
  007ec5abf9cca9e34ba75e11dd5d4f2e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f32.c
  706fdab09ac27674ccdcb6d34688ccb8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f64.c
! c1a16976849fd541d4886de3eb0b0626  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c
  bdefbf3eeea1f08fffd42d2bde350dea  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f32.c
  5a1f7f5afdbbfcecd97cb5d7098ff707  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f64.c
! 49db4d5a9f12b695bfda1ef3aa0fc334  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c
  87786f9293eedd4f262ccf4e09d478f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f32.c
  634b2fb5bed1d8ed41e55b271de9400c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f64.c
! fb70148e0cd734ac545ebc3dc0fb2d9e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c
  9c4307fc1db29e045adc4a9f15ddca66  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f32.c
  0515f842a58d067880c5658e5addbece  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f64.c
! 68f94378d47af5f42f981e3332cbe37d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c
  585be3a51575d87dbf0cd1d5cbe0d062  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f32.c
  127ff44000f971b8e7e5ba53d71a55fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f64.c
! cccfcab51157cbdfe5b3ce1e69f86f86  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
  dfc52616a58f523908e41a5a4e0f72b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f32.c
  813960aebe71c2622a67c2b2649a8973  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f64.c
! 74c500447444b56fb97c54f48f041427  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c
  3d2a7164ecf998191c3df62b3eb98cb0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f32.c
! 9503a935992e9ecaecb773b7e5f8851c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c
  c8ea40c4b9abb00be5f9636824cb84e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f32.c
! 3c1d868422caee3c370aec6df6fcd5d1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c
  12dbee70f513595c141538484edde7ca  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f32.c
! 19660cbbf3b61c67838e558f4b806c60  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c
  99b2ebb0aea4ec8f59a77cce1a6130c5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f32.c
  9215ad18018c4426df1e517a1ea9c882  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
  69c254f90bb4aacc9a8a7a6a1e5a7b60  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
*************** a8f53ad5180333afb72d569d125c3922  gcc/te
*** 99558,99564 ****
  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
! f5c633899a529d95fdd6961f7cf4d647  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
--- 99607,99613 ----
  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
! f33187a16fce936d7e2b519d5c8bfe99  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
*** 99927,99932 ****
--- 99976,99994 ----
  c00ace0b027f7e7b8f7fc73737789f57  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-3-u32.c
  2254754e9f4987daf69ae6a7d18e8ee3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-3-u64.c
  4098d9b5a2ae40f79c74ed04d860ed78  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-3-u8.c
+ 73de67c9a5eab8af47f432a5e5d1ab5a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u128.c
+ 1b6661ec72c87db1111732482fcebf34  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u32.c
+ 918b8b319026f92c12f87ccd533c9acb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.c
+ 41d6935caac803235bbcc3e1cb0429c8  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.rv32.c
+ e882dab8cdc1a014c2e02b257e6fae1a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u128.c
+ 634db61f425926d120594a83a0f7bec2  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.c
+ 530fe6a8dc2694203476c2f3b530a368  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.rv32.c
+ 5629799ae1e359873b2b948dc1db66c5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u64-from-u128.c
+ b648b4211ca93534f45f273ea6d78a35  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u128.c
+ ba33ef8f801fa9b4136623078f1e83e6  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u16.c
+ 45b781334a1d553fd23aae9af4ebb630  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u32.c
+ 2bd5aa55e46cd6c14bde0bb9f30b3e4d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.c
+ 30506ca71dfb8809f6d3f511330fd947  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.rv32.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
*** 99941,99946 ****
--- 100003,100021 ----
  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
  e0061662ada0ac0320a626578bfd01f1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u8.c
+ 94ce12328ba00a92617876d347edfcec  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u128.c
+ d0ed1ba8de32ab54bdc94322bdf1a5da  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u32.c
+ 8dc1ec869737a052d948ba1c02e8cf2f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.c
+ 2c6a28512ed290c9b2574f17b9d72fa5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.rv32.c
+ 9fda448b3fed4def315d12909601bfad  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u128.c
+ f321bc1a9459f02c0d4951e7e09988c4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.c
+ ed0957c56643f0f3bef9aca9b0ee0cab  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.rv32.c
+ 619ddfe553bc3ee09226b82531e70030  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u64-from-u128.c
+ 42c47e65fe582062bce977c849738004  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u128.c
+ 566ecc869255d6df7bff5e1bafa42099  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u16.c
+ 669bf12578f4f22bf2931da570c60419  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u32.c
+ f321bc1a9459f02c0d4951e7e09988c4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.c
+ ed0957c56643f0f3bef9aca9b0ee0cab  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.rv32.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
*************** f5ecad1df1c3f9e7d4bf8d95be2b45a5  gcc/te
*** 112595,112600 ****
--- 112670,112677 ----
  2c477caa6ab50061d5b01d9970af1903  gcc/testsuite/gfortran.dg/pdt_35.f03
  2588a29b1e8d5e652dd511316facfa46  gcc/testsuite/gfortran.dg/pdt_36.f03
  9abf2f0827863994cae83f3e9a57bbe0  gcc/testsuite/gfortran.dg/pdt_37.f03
+ bf9b6323f7816780db5e9b60fb1b8dee  gcc/testsuite/gfortran.dg/pdt_38.f03
+ 1287b32699b5bb0a9f59485bc0969042  gcc/testsuite/gfortran.dg/pdt_39.f03
  26c6f55cb76e1a76617fc3167f296a53  gcc/testsuite/gfortran.dg/pdt_4.f03
  65d2ad728417ad3174fc1ce2b51a458d  gcc/testsuite/gfortran.dg/pdt_6.f03
  d2c9dae0c6e2385c5712aba8e12a70ba  gcc/testsuite/gfortran.dg/pdt_7.f03
*************** e79a5fff5c4841ba8e2da41f54be1c1c  gcc/te
*** 112909,112914 ****
--- 112986,112992 ----
  b1cb2c9a52574c2df5df49bd13ee7e5d  gcc/testsuite/gfortran.dg/pr120196.f90
  94f286710243a0388de6f82a32d72ca5  gcc/testsuite/gfortran.dg/pr120743.f90
  9a63937be6d5e03574fd9c46968454c5  gcc/testsuite/gfortran.dg/pr121234.f90
+ 6be9000a862f8c64a384c1727d879f04  gcc/testsuite/gfortran.dg/pr121627.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 122610,122616 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! c88837cbedd64eda9bbc05d4c78d2f35  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
--- 122688,122694 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 9cfc14075a717e8ff0a0162b709685cb  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
*************** b4a6da1471f279353aaca4956c18cdea  gcc/tr
*** 125180,125186 ****
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  23590c969997d33ec2e1fa1da2a89526  gcc/tree-call-cdce.cc
! ef9d1df669ae3b5d48881b220c062a56  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  0bb909d63756c23161166845fb40462b  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
--- 125258,125264 ----
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  23590c969997d33ec2e1fa1da2a89526  gcc/tree-call-cdce.cc
! 3ad4a16598cfec5e5ddbe9bd9e97f39d  gcc/tree-cfg.cc
  591222e5199894b9b5d23b1822f7e309  gcc/tree-cfg.h
  0bb909d63756c23161166845fb40462b  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
*************** b2cc2bfd702552bff382308428fec556  gcc/tr
*** 125220,125226 ****
  2726009c7d301c88845d73276d4dc3b9  gcc/tree-object-size.h
  de65dfb7d298f3e879ec71e5e2e95913  gcc/tree-outof-ssa.cc
  b9d636bd9641f3038bbe37a70684e18e  gcc/tree-outof-ssa.h
! 9d8acbaaafb1fa52b064abcc90b3b50c  gcc/tree-parloops.cc
  beaa17685ead93eee17f6373d004c4c4  gcc/tree-parloops.h
  ebea01b285bb347999736a8da2d7eb94  gcc/tree-pass.h
  3c7e6c651df0a795a0b1b01ca9c75a4d  gcc/tree-phinodes.cc
--- 125298,125304 ----
  2726009c7d301c88845d73276d4dc3b9  gcc/tree-object-size.h
  de65dfb7d298f3e879ec71e5e2e95913  gcc/tree-outof-ssa.cc
  b9d636bd9641f3038bbe37a70684e18e  gcc/tree-outof-ssa.h
! 6a56bd09a2fc674984a48e8587c86d17  gcc/tree-parloops.cc
  beaa17685ead93eee17f6373d004c4c4  gcc/tree-parloops.h
  ebea01b285bb347999736a8da2d7eb94  gcc/tree-pass.h
  3c7e6c651df0a795a0b1b01ca9c75a4d  gcc/tree-phinodes.cc
*************** fd4dd1219acc650a4f7855faa0097964  gcc/tr
*** 125232,125238 ****
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
  c54df23d9e75fb700659dcfac6bcff97  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
! dc509816aacd28d6762f601c4d655972  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
  3e42023ef3fe5187ffffddbbb5740208  gcc/tree-ssa-address.cc
  c724c8becbea9eec0f806e3335942c32  gcc/tree-ssa-address.h
--- 125310,125316 ----
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
  c54df23d9e75fb700659dcfac6bcff97  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
! 0007bcec3b1a725fc688f0edc9a67b0b  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
  3e42023ef3fe5187ffffddbbb5740208  gcc/tree-ssa-address.cc
  c724c8becbea9eec0f806e3335942c32  gcc/tree-ssa-address.h
*************** af4c63760c432f66b1c6c8e7e7666699  gcc/tr
*** 125311,125333 ****
  cda9b6c51259b3b8087d19187bfcdae0  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  c98debbdc978c10e8934f3b4fb7e2504  gcc/tree-tailcall.cc
! 697a99f3c823bc214151954be0858a57  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  85da4c00e7d6a5189816a152d673da4f  gcc/tree-vect-loop-manip.cc
! f0d7d00aa19f5adde68c7097c94c7fa5  gcc/tree-vect-loop.cc
  ea6f2e555394e56509b4354907519988  gcc/tree-vect-patterns.cc
  f0e64752211e2caf975148f28e7b4caf  gcc/tree-vect-slp-patterns.cc
! ef7f5d767a97e795efcd0beb09519ce9  gcc/tree-vect-slp.cc
! 0f5fa83fe1ef03846e2f8b98d1780f78  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  2dff33ce3586bcf6de00f8938e321e58  gcc/tree-vectorizer.cc
! 23e04c1a85f77f3b92f3a723f91e8f74  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! a43a8504b18bc25787957a8624990218  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 7327dce30bcd28dca57d4353152de806  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
--- 125389,125411 ----
  cda9b6c51259b3b8087d19187bfcdae0  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  c98debbdc978c10e8934f3b4fb7e2504  gcc/tree-tailcall.cc
! e5124fb9978c7afb78dad6682475e87b  gcc/tree-vect-data-refs.cc
  5d8bb0df796ceea958fd65c5aedb5bce  gcc/tree-vect-generic.cc
  85da4c00e7d6a5189816a152d673da4f  gcc/tree-vect-loop-manip.cc
! bda3a0fc0c2e36c950cb15d5565b04ba  gcc/tree-vect-loop.cc
  ea6f2e555394e56509b4354907519988  gcc/tree-vect-patterns.cc
  f0e64752211e2caf975148f28e7b4caf  gcc/tree-vect-slp-patterns.cc
! 37d1c076819040f56c08915f97ac135d  gcc/tree-vect-slp.cc
! b1787155d746509227b047a9e9cbb231  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  2dff33ce3586bcf6de00f8938e321e58  gcc/tree-vectorizer.cc
! 5fd9df884cba1e0bc22229c6bcf6f826  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! 26ee76264bd088fbd5554618377c1c97  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 8928e1b061e537e34f6dccda9abc9c78  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
*************** a3eb5dee2788fe0a6c42502ba658eddd  libffi
*** 126183,126189 ****
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 42b2e877fd3200fc244432bcf5d5073c  libgcc/ChangeLog
  e63b544f83f9b69bd08ddb095b34235a  libgcc/Makefile.in
  3909078d285165298c78eb97ea152e90  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
--- 126261,126267 ----
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 7c26ecd84e6f307b9bfc2feaa92aa331  libgcc/ChangeLog
  e63b544f83f9b69bd08ddb095b34235a  libgcc/Makefile.in
  3909078d285165298c78eb97ea152e90  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
*************** be8817298cbbbcbd4904fa34274912be  libgcc
*** 127214,127228 ****
  2823929694842637e43222f21144ff17  libgcc/config/pru/lib2divHI.c
  877f653196c4e655d5d5409a19d3e935  libgcc/config/pru/lib2divQI.c
  3ef8a6680870fb85508c4cca8a68a86f  libgcc/config/pru/lib2divSI.c
! f7648ce7590bff5a01ea315c0feb35c6  libgcc/config/pru/libgcc-eabi.ver
  d9e620cbbaf5252ceab2fc8cb9cda9df  libgcc/config/pru/ltd.c
  9aa5994526dd0389b4a7b03642e006be  libgcc/config/pru/ltf.c
  238bd14b5ba69fb3925a69d3230e5a1a  libgcc/config/pru/mpyll.S
  2a0515f37e4f451771829f1391620005  libgcc/config/pru/pru-abi.h
  d65b5669ff491845b2596f7750e9f3d7  libgcc/config/pru/pru-asm.h
  5c7458c821096b65dfd33fa47fa62655  libgcc/config/pru/pru-divmod.h
  ee0da5835773b7e4fd0bba1d3d4d34b2  libgcc/config/pru/sfp-machine.h
! 6304c93e3da5ac5f496f7648dad7c6e3  libgcc/config/pru/t-pru
  3fded25288827e2bf766f60ef986888f  libgcc/config/riscv/atomic.c
  b542071feaa6f1914ec810a91b9f0e4c  libgcc/config/riscv/crti.S
  196894f3e59520659e3b0ba14bb0a903  libgcc/config/riscv/crtn.S
--- 127292,127309 ----
  2823929694842637e43222f21144ff17  libgcc/config/pru/lib2divHI.c
  877f653196c4e655d5d5409a19d3e935  libgcc/config/pru/lib2divQI.c
  3ef8a6680870fb85508c4cca8a68a86f  libgcc/config/pru/lib2divSI.c
! 4568cf57442570ceb0a14bf99acf3e03  libgcc/config/pru/libgcc-eabi.ver
  d9e620cbbaf5252ceab2fc8cb9cda9df  libgcc/config/pru/ltd.c
  9aa5994526dd0389b4a7b03642e006be  libgcc/config/pru/ltf.c
  238bd14b5ba69fb3925a69d3230e5a1a  libgcc/config/pru/mpyll.S
  2a0515f37e4f451771829f1391620005  libgcc/config/pru/pru-abi.h
  d65b5669ff491845b2596f7750e9f3d7  libgcc/config/pru/pru-asm.h
  5c7458c821096b65dfd33fa47fa62655  libgcc/config/pru/pru-divmod.h
+ 989f42b50dda6f9618979d9ea4f7a9f7  libgcc/config/pru/pru-softmpy.h
  ee0da5835773b7e4fd0bba1d3d4d34b2  libgcc/config/pru/sfp-machine.h
! 8f2a6bb3a99253fc837cb8c79b1dbac2  libgcc/config/pru/softmpyi.c
! 11cab18558265cebcf7266bd9de0afd4  libgcc/config/pru/softmpyll.c
! d905664be487c22b3a1a349882bf3c29  libgcc/config/pru/t-pru
  3fded25288827e2bf766f60ef986888f  libgcc/config/riscv/atomic.c
  b542071feaa6f1914ec810a91b9f0e4c  libgcc/config/riscv/crti.S
  196894f3e59520659e3b0ba14bb0a903  libgcc/config/riscv/crtn.S
*************** f017ba40c4699f1549cd341ad688007f  libgcc
*** 127745,127751 ****
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! e43fe11e3ee7ec6f79a26096e9182558  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  e5a4ad84e4fa547c96f01437e14de6aa  libgcobol/Makefile.am
  db13e8bd0049adad97c22f1066ab8e2c  libgcobol/Makefile.in
--- 127826,127832 ----
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! a89b5dec36d7234c51ab6b63c7c625ab  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  e5a4ad84e4fa547c96f01437e14de6aa  libgcobol/Makefile.am
  db13e8bd0049adad97c22f1066ab8e2c  libgcobol/Makefile.in
*************** ef8b11373d27f5ca4df73f09c6ccab75  libgco
*** 127771,127777 ****
  0cf9ce2863c11a8fd875185c371fe6e6  libgcobol/io.cc
  b054056cc4fe4de7a78d34e43f2f3bab  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! 3dc248a568b436ebd39531491a18f3cd  libgcobol/libgcobol.cc
  9d6654e5bf93e5b028f7a514320a7ede  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  d181dc4dc5c9d99e0a67ac8560f85d88  libgcobol/stringbin.cc
--- 127852,127858 ----
  0cf9ce2863c11a8fd875185c371fe6e6  libgcobol/io.cc
  b054056cc4fe4de7a78d34e43f2f3bab  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! c51c8c39c865d18145735f940a4870cf  libgcobol/libgcobol.cc
  9d6654e5bf93e5b028f7a514320a7ede  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  d181dc4dc5c9d99e0a67ac8560f85d88  libgcobol/stringbin.cc
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 139402,139408 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 5d4e1be513aeaf05ed78e6f1635159a1  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 139483,139489 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! d408455cc6eed434fcb394cca8c43477  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a94321c8d0dbbc71741ebf0f1cc9828c  libstd
*** 139433,139439 ****
  b569b721263ae74c6a8e285903fb9906  libstdc++-v3/Makefile.am
  5ae0a394d413d225772c3b38a114cce2  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 1b7f506a6758f8c512f1e8bf81f58fca  libstdc++-v3/acinclude.m4
  13f29ef95664bfe876c83f7743ca504d  libstdc++-v3/aclocal.m4
  42629a3961df47287a44fd149ab68b39  libstdc++-v3/config.h.in
  9e25b4e524e0d639f272a9e96bab0ce3  libstdc++-v3/config/abi/compatibility.h
--- 139514,139520 ----
  b569b721263ae74c6a8e285903fb9906  libstdc++-v3/Makefile.am
  5ae0a394d413d225772c3b38a114cce2  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! fb3c5d1f99b6d5017a5eb3ab797c6652  libstdc++-v3/acinclude.m4
  13f29ef95664bfe876c83f7743ca504d  libstdc++-v3/aclocal.m4
  42629a3961df47287a44fd149ab68b39  libstdc++-v3/config.h.in
  9e25b4e524e0d639f272a9e96bab0ce3  libstdc++-v3/config/abi/compatibility.h
*************** ed199f6700a016816d625b286bf25ead  libstd
*** 139627,139633 ****
  8913cf14e458f9cfae745a0d939c97e4  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  e29a526ec89ed09bf39b0aa4fd4c5d79  libstdc++-v3/config/os/vxworks/ctype_inline.h
  788b66dfe66c25c24ff60bf253c9c7ff  libstdc++-v3/config/os/vxworks/os_defines.h
! 4031026e2d51bd98a0a16329167bf732  libstdc++-v3/configure
  315146bda822dcbf6f5677aac62442a6  libstdc++-v3/configure.ac
  22c2981483d92dbe80dc732e50bfdbcd  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
--- 139708,139714 ----
  8913cf14e458f9cfae745a0d939c97e4  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  e29a526ec89ed09bf39b0aa4fd4c5d79  libstdc++-v3/config/os/vxworks/ctype_inline.h
  788b66dfe66c25c24ff60bf253c9c7ff  libstdc++-v3/config/os/vxworks/os_defines.h
! f95d972d270dbf735aad4a5b676787c7  libstdc++-v3/configure
  315146bda822dcbf6f5677aac62442a6  libstdc++-v3/configure.ac
  22c2981483d92dbe80dc732e50bfdbcd  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
*************** d672c7cfda151339dc8a96039a113ed4  libstd
*** 140074,140080 ****
  951f75331ad416a6b7615226e2380700  libstdc++-v3/include/backward/hashtable.h
  58ba738fed9ed2c246a3103041a0cf73  libstdc++-v3/include/backward/strstream
  5bf7a6fc5e70783cfa8d69bf57bbad03  libstdc++-v3/include/bits/algorithmfwd.h
! 7bc72c71178202a8889ee8eaf3bd46e0  libstdc++-v3/include/bits/align.h
  c2f5862787920c2fc07b4f499e362a00  libstdc++-v3/include/bits/alloc_traits.h
  752923e212a8a01f4d659889177a76eb  libstdc++-v3/include/bits/allocated_ptr.h
  d18c16b3c9c3ab2e7d487de90ec27d17  libstdc++-v3/include/bits/allocator.h
--- 140155,140161 ----
  951f75331ad416a6b7615226e2380700  libstdc++-v3/include/backward/hashtable.h
  58ba738fed9ed2c246a3103041a0cf73  libstdc++-v3/include/backward/strstream
  5bf7a6fc5e70783cfa8d69bf57bbad03  libstdc++-v3/include/bits/algorithmfwd.h
! 02c3dd40a5d44ee020dc3453ea4e87b2  libstdc++-v3/include/bits/align.h
  c2f5862787920c2fc07b4f499e362a00  libstdc++-v3/include/bits/alloc_traits.h
  752923e212a8a01f4d659889177a76eb  libstdc++-v3/include/bits/allocated_ptr.h
  d18c16b3c9c3ab2e7d487de90ec27d17  libstdc++-v3/include/bits/allocator.h
*************** a0ff2aff5e6b290f02129d8fd5066f94  libstd
*** 140154,140165 ****
  053e1de38aef43bbaf1a9a4af1e3ad2f  libstdc++-v3/include/bits/random.h
  924981b1c29c7c7b010418607af71d7b  libstdc++-v3/include/bits/random.tcc
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
! c9600d34774ec40c09ff1b2280e744e0  libstdc++-v3/include/bits/ranges_algo.h
! 2739c66cfdc38cbad18771e2317ce548  libstdc++-v3/include/bits/ranges_algobase.h
  0ebd2123d3d7429aa3e58f7aea66ef93  libstdc++-v3/include/bits/ranges_base.h
  586727039587b10b560a902b1c7008b1  libstdc++-v3/include/bits/ranges_cmp.h
  2eec8b6abbfa67c2a80da3caf7e0c2c3  libstdc++-v3/include/bits/ranges_uninitialized.h
! 13ab6526ab5b8cd5e9a7b12e6bf761f6  libstdc++-v3/include/bits/ranges_util.h
  222a1067e3c63fb19ed0996234a84884  libstdc++-v3/include/bits/refwrap.h
  5b95e35539d0071176396cd82a6072b7  libstdc++-v3/include/bits/regex.h
  b5ae25c0469c7fb23c0914fcebced654  libstdc++-v3/include/bits/regex.tcc
--- 140235,140246 ----
  053e1de38aef43bbaf1a9a4af1e3ad2f  libstdc++-v3/include/bits/random.h
  924981b1c29c7c7b010418607af71d7b  libstdc++-v3/include/bits/random.tcc
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
! f0bf67082e52af82bad37b514fecf634  libstdc++-v3/include/bits/ranges_algo.h
! 603de5fc22f9ccbe5726390148fc3a09  libstdc++-v3/include/bits/ranges_algobase.h
  0ebd2123d3d7429aa3e58f7aea66ef93  libstdc++-v3/include/bits/ranges_base.h
  586727039587b10b560a902b1c7008b1  libstdc++-v3/include/bits/ranges_cmp.h
  2eec8b6abbfa67c2a80da3caf7e0c2c3  libstdc++-v3/include/bits/ranges_uninitialized.h
! 72d086ca35b36e2f1076b431ee799f15  libstdc++-v3/include/bits/ranges_util.h
  222a1067e3c63fb19ed0996234a84884  libstdc++-v3/include/bits/refwrap.h
  5b95e35539d0071176396cd82a6072b7  libstdc++-v3/include/bits/regex.h
  b5ae25c0469c7fb23c0914fcebced654  libstdc++-v3/include/bits/regex.tcc
*************** de3723b929f14af1731389010c14893b  libstd
*** 140186,140192 ****
  c35a5da0369f3af2e9e202c9c8510914  libstdc++-v3/include/bits/std_function.h
  5b3bd66db6802c89905c016f488a41d0  libstdc++-v3/include/bits/std_mutex.h
  bb19c550085b43f6251959e05791f4c6  libstdc++-v3/include/bits/std_thread.h
! 3738277ac274ee1b48828db7014b1599  libstdc++-v3/include/bits/stl_algo.h
  1849c7c5fca6cf7f810e25ba44dbda45  libstdc++-v3/include/bits/stl_algobase.h
  50378fb402a4f63ad663a2763f5cd08a  libstdc++-v3/include/bits/stl_bvector.h
  c2ca446fe3c0e405c49faaad2b28e9aa  libstdc++-v3/include/bits/stl_construct.h
--- 140267,140273 ----
  c35a5da0369f3af2e9e202c9c8510914  libstdc++-v3/include/bits/std_function.h
  5b3bd66db6802c89905c016f488a41d0  libstdc++-v3/include/bits/std_mutex.h
  bb19c550085b43f6251959e05791f4c6  libstdc++-v3/include/bits/std_thread.h
! ba6b4286e0794c4aaff0334a22f0316c  libstdc++-v3/include/bits/stl_algo.h
  1849c7c5fca6cf7f810e25ba44dbda45  libstdc++-v3/include/bits/stl_algobase.h
  50378fb402a4f63ad663a2763f5cd08a  libstdc++-v3/include/bits/stl_bvector.h
  c2ca446fe3c0e405c49faaad2b28e9aa  libstdc++-v3/include/bits/stl_construct.h
*************** a462fb6c466b34fa25624b7fab6323e3  libstd
*** 140232,140240 ****
  a229b5c8ad2904a3b3173239225596c4  libstdc++-v3/include/bits/valarray_array.h
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
! 652419a46dc988dd67c512e4f7d5638a  libstdc++-v3/include/bits/vector.tcc
! 5dba0602e4c1e8e3bb9e2eaad3b153a9  libstdc++-v3/include/bits/version.def
! d7c118418433c5c3d034fb89c3f1ff05  libstdc++-v3/include/bits/version.h
  0db0dfc5d016435e64398e3bb70098d3  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
--- 140313,140321 ----
  a229b5c8ad2904a3b3173239225596c4  libstdc++-v3/include/bits/valarray_array.h
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
! 8ac9ff5d862e05ba3056d8440d55cf34  libstdc++-v3/include/bits/vector.tcc
! c2bc746602cb3458640cf6ee75b77bf8  libstdc++-v3/include/bits/version.def
! d062b20c15ea76785ded24b19250d913  libstdc++-v3/include/bits/version.h
  0db0dfc5d016435e64398e3bb70098d3  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
*************** f7460188b5b2ffa503809fc888af8523  libstd
*** 140814,140827 ****
  f025fc1b4184111fce84c2384de325d2  libstdc++-v3/include/std/istream
  b33cecab88c41408b5c244cc328a9cae  libstdc++-v3/include/std/iterator
  ccf8cf0658fcc1d11f161189c25b7aa7  libstdc++-v3/include/std/latch
! a98ad6deeb1a797726968f46416f6122  libstdc++-v3/include/std/limits
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! 751de039718ed5e2d38fd746ea9be94e  libstdc++-v3/include/std/mdspan
! c381426cd2710743a6530b116179d74f  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
! a7b8e00d6cf56ea696ec15140b7c1d15  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
  b944796362aa39fc1cba3747d2247464  libstdc++-v3/include/std/numeric
  5d818ee7f1f99ab14a672f8417eadf33  libstdc++-v3/include/std/optional
--- 140895,140908 ----
  f025fc1b4184111fce84c2384de325d2  libstdc++-v3/include/std/istream
  b33cecab88c41408b5c244cc328a9cae  libstdc++-v3/include/std/iterator
  ccf8cf0658fcc1d11f161189c25b7aa7  libstdc++-v3/include/std/latch
! e8ef6ca7c551cefb5d53bde7cf7c1c75  libstdc++-v3/include/std/limits
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! 2f2bbfe7f81586f19a0920833ee80ecd  libstdc++-v3/include/std/mdspan
! 0dd24dd9b5275d8876e90702c09a88e6  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
! 96d4004072aee0df9b1cac29de7649c2  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
  b944796362aa39fc1cba3747d2247464  libstdc++-v3/include/std/numeric
  5d818ee7f1f99ab14a672f8417eadf33  libstdc++-v3/include/std/optional
*************** d85f3a53465585d54b96880e79456c79  libstd
*** 141164,141170 ****
  ea41b659ccf9f3e1850802e2fddaba52  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
  c319163994652e23066095eded5869f0  libstdc++-v3/src/c++23/std-clib.cc.in
! 89a296506f97a1803ec63ee860aba9b8  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  97527213996a1ca6a0910b1ab5f6c3a3  libstdc++-v3/src/c++26/Makefile.am
  5dd6b2acd5d63f897ba1545bb9a07d25  libstdc++-v3/src/c++26/Makefile.in
--- 141245,141251 ----
  ea41b659ccf9f3e1850802e2fddaba52  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
  c319163994652e23066095eded5869f0  libstdc++-v3/src/c++23/std-clib.cc.in
! 1c74e385d6f1143be24c00827ad9d44b  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  97527213996a1ca6a0910b1ab5f6c3a3  libstdc++-v3/src/c++26/Makefile.am
  5dd6b2acd5d63f897ba1545bb9a07d25  libstdc++-v3/src/c++26/Makefile.in
*************** c928488888eda816e615011cdcb4d90d  libstd
*** 141389,141395 ****
  662dd5cb650a0a850bc5fe376b02bd76  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
  4029157ee3d03b1ba61e5d4a60e277cc  libstdc++-v3/testsuite/18_support/new_handler.cc
  6a319e680b081fce4c520de674e32ee3  libstdc++-v3/testsuite/18_support/new_nothrow.cc
! 49e7685f2fc05cdd1dd5d2a404340058  libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
  e3d51c0ec766a987bfdde32fb16c811a  libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc
  0277ffff4a7069a9ad290792be3467ca  libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
  7f16120374b01ead698f1344e1feae95  libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
--- 141470,141476 ----
  662dd5cb650a0a850bc5fe376b02bd76  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
  4029157ee3d03b1ba61e5d4a60e277cc  libstdc++-v3/testsuite/18_support/new_handler.cc
  6a319e680b081fce4c520de674e32ee3  libstdc++-v3/testsuite/18_support/new_nothrow.cc
! 457817958c82b8b3f75ec9e7b60e2627  libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
  e3d51c0ec766a987bfdde32fb16c811a  libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc
  0277ffff4a7069a9ad290792be3467ca  libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
  7f16120374b01ead698f1344e1feae95  libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
*************** a69299709ad55c8e891216919470533c  libstd
*** 141958,141964 ****
  8b53fa85edafd52c50395631802734a2  libstdc++-v3/testsuite/20_util/headers/memory/114866.cc
  55f5eda06de1ef3c6e132e04e98ea054  libstdc++-v3/testsuite/20_util/headers/memory/synopsis.cc
  272460dfbecaa542ec482d22035f4cf2  libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc
! 8492f2875030a6b25ae26cf2bfe312d2  libstdc++-v3/testsuite/20_util/headers/memory/version.cc
  daf90d8ed8797ee551ba5bc0a0aa71b0  libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
  2b5c7631c9fc571e2357b26a342c0800  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc
  2be10e3816ca330b10e8dd826eb4a3ec  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc
--- 142039,142045 ----
  8b53fa85edafd52c50395631802734a2  libstdc++-v3/testsuite/20_util/headers/memory/114866.cc
  55f5eda06de1ef3c6e132e04e98ea054  libstdc++-v3/testsuite/20_util/headers/memory/synopsis.cc
  272460dfbecaa542ec482d22035f4cf2  libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc
! 518bb04b0fe1b65e900aa188653b8180  libstdc++-v3/testsuite/20_util/headers/memory/version.cc
  daf90d8ed8797ee551ba5bc0a0aa71b0  libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
  2b5c7631c9fc571e2357b26a342c0800  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc
  2be10e3816ca330b10e8dd826eb4a3ec  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc
*************** c46c663c156f9e2ee369deb30dd80e9b  libstd
*** 142221,142226 ****
--- 142302,142308 ----
  43d02c664afa698ec643fd4ae5918274  libstdc++-v3/testsuite/20_util/is_standard_layout/requiremenents/explicit_instantiation.cc
  0240f6b763072f895cbee9b3c4c6f652  libstdc++-v3/testsuite/20_util/is_standard_layout/requiremenents/typedefs.cc
  4e267c56809ee314570c23331d58e6b1  libstdc++-v3/testsuite/20_util/is_standard_layout/value.cc
+ 88c961bf35cfbbbf3d552b98b6b29bbc  libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/1.cc
  17801fbbb2dc1e6e1721ea7f937b3228  libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc
  27ac8a07dae66e1bd8a22ca774dfd9e5  libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation_ext.cc
  2affb41599636e81a82a5ead24d37769  libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs.cc
*************** e2f2b723f45998760103330891bfb5a1  libstd
*** 142350,142356 ****
  78320cecf8405d4abd44c83a5e5301bc  libstdc++-v3/testsuite/20_util/optional/cons/noexcept.cc
  30f77fe6987594e2c80f5cbb7249f0b6  libstdc++-v3/testsuite/20_util/optional/cons/trivial.cc
  8ab908beadfea4829ea7585a16a720a6  libstdc++-v3/testsuite/20_util/optional/cons/value.cc
! e9255b792fa3b1be456ed1c98103585f  libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
  bdaab2c7a277b9ab7e3419b9414abbd3  libstdc++-v3/testsuite/20_util/optional/constexpr/assign.cc
  c90cd072fff0310ee397532e79baeb6c  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/conv.cc
  ed96754436e8b1bf4008cbee1808ccfc  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/default.cc
--- 142432,142438 ----
  78320cecf8405d4abd44c83a5e5301bc  libstdc++-v3/testsuite/20_util/optional/cons/noexcept.cc
  30f77fe6987594e2c80f5cbb7249f0b6  libstdc++-v3/testsuite/20_util/optional/cons/trivial.cc
  8ab908beadfea4829ea7585a16a720a6  libstdc++-v3/testsuite/20_util/optional/cons/value.cc
! 0b98abc8e46f62609cc438ace1d75073  libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
  bdaab2c7a277b9ab7e3419b9414abbd3  libstdc++-v3/testsuite/20_util/optional/constexpr/assign.cc
  c90cd072fff0310ee397532e79baeb6c  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/conv.cc
  ed96754436e8b1bf4008cbee1808ccfc  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/default.cc
*************** f10c53da1ad2efda8b4a17abce407af7  libstd
*** 142564,142570 ****
  8636d1547f34f8a70c856fe0ebdb2134  libstdc++-v3/testsuite/20_util/scoped_allocator/3.cc
  fb3e8e157995b543362bc1698f768ba9  libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc
  0a522fe491a1d16b1d86a1f3fd68d610  libstdc++-v3/testsuite/20_util/scoped_allocator/69114.cc
! 0feba5de8827f09208bc04f99333809c  libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc
  b1d5af0851b21ebe4c159a352b368cd5  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair.cc
  ad3573ba994090e3b5570333ef7daf91  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair_c++2a.cc
  afd2fd797282699713b39859e1195c39  libstdc++-v3/testsuite/20_util/scoped_allocator/dr2586.cc
--- 142646,142652 ----
  8636d1547f34f8a70c856fe0ebdb2134  libstdc++-v3/testsuite/20_util/scoped_allocator/3.cc
  fb3e8e157995b543362bc1698f768ba9  libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc
  0a522fe491a1d16b1d86a1f3fd68d610  libstdc++-v3/testsuite/20_util/scoped_allocator/69114.cc
! 70bbafab93f9164a453002e8bda2701c  libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc
  b1d5af0851b21ebe4c159a352b368cd5  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair.cc
  ad3573ba994090e3b5570333ef7daf91  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair_c++2a.cc
  afd2fd797282699713b39859e1195c39  libstdc++-v3/testsuite/20_util/scoped_allocator/dr2586.cc
*************** cc42abd3f12e4e2d740c196077e9dfbd  libstd
*** 144743,144759 ****
  1e719131ce8d3c52ab96fb6320a2682e  libstdc++-v3/testsuite/23_containers/map/requirements/partial_specialization/1.cc
  ef8992fce519e4aeb10d10129736a163  libstdc++-v3/testsuite/23_containers/map/requirements/typedefs.cc
  1a429dd433a9cca8518d6eeaf0db7ff4  libstdc++-v3/testsuite/23_containers/map/version.cc
  c9be65e1a0cf8e0da83e4027b6ea3e64  libstdc++-v3/testsuite/23_containers/mdspan/accessors/default_neg.cc
! 12dcdaf00cfd4ea51f8ce83caf2aca8b  libstdc++-v3/testsuite/23_containers/mdspan/accessors/generic.cc
  22e0f5f9fb4bc8a3baf9b93c86b44573  libstdc++-v3/testsuite/23_containers/mdspan/class_mandate_neg.cc
! f5bb9f936365225b61020ea9149ba6fa  libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
  58d322becec5c5e65c19f17834e2a082  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
  e9e5cce5f41b3fcb25e00e9b6edb9a83  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
  66875233ba8f0cee58dceb78c0d2268d  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
  f11430abfbf793c9117a6d498fc9e9d6  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
  56a0f5d5edaad1117cc988beafc16d5d  libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
  669e44182af41d221acecffd45681dc9  libstdc++-v3/testsuite/23_containers/mdspan/extents/extents_mismatch_neg.cc
! c1ed4da78be7e752025a693bb0564242  libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
  e941ac1789059834b40085a779a24d2e  libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
  bead52db525471c98d26137e05743c97  libstdc++-v3/testsuite/23_containers/mdspan/layout_like.h
  09f60c1da783ed561b487e9441ae6882  libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
--- 144825,144844 ----
  1e719131ce8d3c52ab96fb6320a2682e  libstdc++-v3/testsuite/23_containers/map/requirements/partial_specialization/1.cc
  ef8992fce519e4aeb10d10129736a163  libstdc++-v3/testsuite/23_containers/map/requirements/typedefs.cc
  1a429dd433a9cca8518d6eeaf0db7ff4  libstdc++-v3/testsuite/23_containers/map/version.cc
+ 68fcc48008e794e130ed491e735c2ae0  libstdc++-v3/testsuite/23_containers/mdspan/accessors/aligned_neg.cc
+ 68cdef8b512100181ef5299423f60a71  libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_access_neg.cc
+ f0cede418772577badbb376161c38ebb  libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_offset_neg.cc
  c9be65e1a0cf8e0da83e4027b6ea3e64  libstdc++-v3/testsuite/23_containers/mdspan/accessors/default_neg.cc
! 72240f7d2b9d3abcab8b06d4f0e67f65  libstdc++-v3/testsuite/23_containers/mdspan/accessors/generic.cc
  22e0f5f9fb4bc8a3baf9b93c86b44573  libstdc++-v3/testsuite/23_containers/mdspan/class_mandate_neg.cc
! bb096ee6d5a81634a48634c6dda721a9  libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
  58d322becec5c5e65c19f17834e2a082  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
  e9e5cce5f41b3fcb25e00e9b6edb9a83  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
  66875233ba8f0cee58dceb78c0d2268d  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
  f11430abfbf793c9117a6d498fc9e9d6  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
  56a0f5d5edaad1117cc988beafc16d5d  libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
  669e44182af41d221acecffd45681dc9  libstdc++-v3/testsuite/23_containers/mdspan/extents/extents_mismatch_neg.cc
! cd679b437130cf20de1aa5b8680b73dd  libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
  e941ac1789059834b40085a779a24d2e  libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
  bead52db525471c98d26137e05743c97  libstdc++-v3/testsuite/23_containers/mdspan/layout_like.h
  09f60c1da783ed561b487e9441ae6882  libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
*************** a65c4b5056c3c06dc115e0ce959f26b4  libstd
*** 144764,144770 ****
  3f96813b92ac712ab8210f7eb24e7158  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
  de0ccc5f3275031f5c8109ac93a09046  libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
  4b1a50b4d361b155b60027f1bdc566e7  libstdc++-v3/testsuite/23_containers/mdspan/out_of_bounds_neg.cc
! 0c4d322f39233942c4ee2e211a2ea456  libstdc++-v3/testsuite/23_containers/mdspan/version.cc
  351e436ffeeb8e47804c6992b75a81cb  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
  5bf01016c0929346c0086fb8a71129b5  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
  e49224c2f36823b4ec1be684dd0c8090  libstdc++-v3/testsuite/23_containers/multimap/48101-2_neg.cc
--- 144849,144855 ----
  3f96813b92ac712ab8210f7eb24e7158  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
  de0ccc5f3275031f5c8109ac93a09046  libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
  4b1a50b4d361b155b60027f1bdc566e7  libstdc++-v3/testsuite/23_containers/mdspan/out_of_bounds_neg.cc
! a1e2443fdfc824b4a97945b2d4aa84a0  libstdc++-v3/testsuite/23_containers/mdspan/version.cc
  351e436ffeeb8e47804c6992b75a81cb  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
  5bf01016c0929346c0086fb8a71129b5  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
  e49224c2f36823b4ec1be684dd0c8090  libstdc++-v3/testsuite/23_containers/multimap/48101-2_neg.cc
*************** a5f7ae14b6844d43b1081a499624f525  libstd
*** 145772,145778 ****
  7d27fdbd20b83aa5340cdab8ef4c3ce8  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/58148.cc
  28a3af6e38881699bccce32dfeee9612  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/aliasing.cc
  26744f861734b6a0aa5bad87665a2ad9  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc
! c4d8593e81e1b765107c5ae168ef4f27  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/insert_range.cc
  35e70ddc10ee243c7ae40dfd6fba7ce6  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/self_insert.cc
  8fb5c601f412e71f5977219b7d89f18d  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc
  2301f3312f26a25c0cecd650693c1ee6  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc
--- 145857,145863 ----
  7d27fdbd20b83aa5340cdab8ef4c3ce8  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/58148.cc
  28a3af6e38881699bccce32dfeee9612  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/aliasing.cc
  26744f861734b6a0aa5bad87665a2ad9  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc
! d62da1f1e000cf57a3797b218a6faf6f  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/insert_range.cc
  35e70ddc10ee243c7ae40dfd6fba7ce6  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/self_insert.cc
  8fb5c601f412e71f5977219b7d89f18d  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc
  2301f3312f26a25c0cecd650693c1ee6  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc
*************** e5f996fbd7c463c5cdce92d1cfeec2c1  libstd
*** 145932,145938 ****
  52d8e3f0c0e27fec1f58a5ba479d93f5  libstdc++-v3/testsuite/24_iterators/output/concept.cc
  682bd05ac09bdd08c584fcd1728f928c  libstdc++-v3/testsuite/24_iterators/output/tag.cc
  1e373c51fd12f6b0ddc4d653f0a8246a  libstdc++-v3/testsuite/24_iterators/random_access/concept.cc
! 54c7e60528ff78287af2e89800f59f7c  libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc
  559c614ab19722e055aaaa325a00536b  libstdc++-v3/testsuite/24_iterators/random_access/tag.cc
  0954a0794f753047e5654d11d59f7d0e  libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc
  22be42b7219401f9c6d645e2efc3d0be  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp14.cc
--- 146017,146023 ----
  52d8e3f0c0e27fec1f58a5ba479d93f5  libstdc++-v3/testsuite/24_iterators/output/concept.cc
  682bd05ac09bdd08c584fcd1728f928c  libstdc++-v3/testsuite/24_iterators/output/tag.cc
  1e373c51fd12f6b0ddc4d653f0a8246a  libstdc++-v3/testsuite/24_iterators/random_access/concept.cc
! 27f5c3038507fb2af67d3023f99d3944  libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc
  559c614ab19722e055aaaa325a00536b  libstdc++-v3/testsuite/24_iterators/random_access/tag.cc
  0954a0794f753047e5654d11d59f7d0e  libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc
  22be42b7219401f9c6d645e2efc3d0be  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp14.cc
*************** c934d375cfad0d3f3ee89515e59b0ea9  libstd
*** 146363,146369 ****
  987aee4f611fe8cc2d77024cc91cfec8  libstdc++-v3/testsuite/25_algorithms/max/37547.cc
  7a25c4e2ed32459603e6b911a4103614  libstdc++-v3/testsuite/25_algorithms/max/4.cc
  18f228a0e49db52508e2dbb811c0050d  libstdc++-v3/testsuite/25_algorithms/max/constexpr.cc
! 73b16232dfdfad0abb7ee1e1dbe72d48  libstdc++-v3/testsuite/25_algorithms/max/constrained.cc
  47a6d6b51a48508cc98461b403cbc651  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/2.cc
  7a411d58f67cb4ac8ecd92c39f8ea62c  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/3.cc
  070132dda2ef2217e02abab55388bfb1  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/pod.cc
--- 146448,146454 ----
  987aee4f611fe8cc2d77024cc91cfec8  libstdc++-v3/testsuite/25_algorithms/max/37547.cc
  7a25c4e2ed32459603e6b911a4103614  libstdc++-v3/testsuite/25_algorithms/max/4.cc
  18f228a0e49db52508e2dbb811c0050d  libstdc++-v3/testsuite/25_algorithms/max/constexpr.cc
! 0cda0ac613b2dd4d9c8d7cb93d74e04b  libstdc++-v3/testsuite/25_algorithms/max/constrained.cc
  47a6d6b51a48508cc98461b403cbc651  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/2.cc
  7a411d58f67cb4ac8ecd92c39f8ea62c  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/3.cc
  070132dda2ef2217e02abab55388bfb1  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/pod.cc
*************** f0b8bf624d2d3c64226f97aa6655fd25  libstd
*** 146387,146393 ****
  d35527c59c3878294d69067537bb749f  libstdc++-v3/testsuite/25_algorithms/min/4.cc
  c106702b1ea6ed88524cf7afb9d87d62  libstdc++-v3/testsuite/25_algorithms/min/concept_checks.cc
  cd97668ba5ed2733f59c9aab00124cc0  libstdc++-v3/testsuite/25_algorithms/min/constexpr.cc
! 46310d8d75ec87e2df69b95220467a04  libstdc++-v3/testsuite/25_algorithms/min/constrained.cc
  edeaaad9d63ce98e9b5909d4d8aefc49  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/2.cc
  049c8fa3d3ec0cfbdee1ecb3c56f7ac4  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/3.cc
  de6c7127749cb42e2753e0d72c837267  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/pod.cc
--- 146472,146478 ----
  d35527c59c3878294d69067537bb749f  libstdc++-v3/testsuite/25_algorithms/min/4.cc
  c106702b1ea6ed88524cf7afb9d87d62  libstdc++-v3/testsuite/25_algorithms/min/concept_checks.cc
  cd97668ba5ed2733f59c9aab00124cc0  libstdc++-v3/testsuite/25_algorithms/min/constexpr.cc
! 0fed7c91d1be64f65ea7a91874688e15  libstdc++-v3/testsuite/25_algorithms/min/constrained.cc
  edeaaad9d63ce98e9b5909d4d8aefc49  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/2.cc
  049c8fa3d3ec0cfbdee1ecb3c56f7ac4  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/3.cc
  de6c7127749cb42e2753e0d72c837267  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/pod.cc
*************** a1171fa6c47f7cd7e10491c30f83fa83  libstd
*** 146403,146409 ****
  ddae76c67bc42cd22a1f198c2e7591c6  libstdc++-v3/testsuite/25_algorithms/minmax/3.cc
  21ad77cdaa4acf02917f38f40822f5ce  libstdc++-v3/testsuite/25_algorithms/minmax/37547.cc
  7c63c3fa741a57d163d924c87f08c391  libstdc++-v3/testsuite/25_algorithms/minmax/constexpr.cc
! f9ea8bdd31f8f5062cfaf2cb2d16e27a  libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc
  aece909b115a810da11a54d042b67c99  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/2.cc
  5d37f289efe01a755f23c643f172c469  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/3.cc
  0de055b1fcd4da33364f786de555ed96  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/pod.cc
--- 146488,146494 ----
  ddae76c67bc42cd22a1f198c2e7591c6  libstdc++-v3/testsuite/25_algorithms/minmax/3.cc
  21ad77cdaa4acf02917f38f40822f5ce  libstdc++-v3/testsuite/25_algorithms/minmax/37547.cc
  7c63c3fa741a57d163d924c87f08c391  libstdc++-v3/testsuite/25_algorithms/minmax/constexpr.cc
! 6c1a9ea897ea83a28db30408df02385d  libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc
  aece909b115a810da11a54d042b67c99  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/2.cc
  5d37f289efe01a755f23c643f172c469  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/3.cc
  0de055b1fcd4da33364f786de555ed96  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/pod.cc
*************** aece909b115a810da11a54d042b67c99  libstd
*** 146411,146417 ****
  7b1c3f90a0a9cb9e38e6afafeddb1dbd  libstdc++-v3/testsuite/25_algorithms/minmax_element/1.cc
  451720835dbd51284ef217853fbfb17c  libstdc++-v3/testsuite/25_algorithms/minmax_element/check_type.cc
  e5a6690313b8f4041aa53d70bec1c79d  libstdc++-v3/testsuite/25_algorithms/minmax_element/constexpr.cc
! 05c45d39f6f587a59b188b4e44c69918  libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc
  9bd6e6b571e443454c8fa0cfa59fa4c4  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/2.cc
  058620f081e21307eac17d53110d8f5b  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/pod.cc
  cbf22825f8cd11d117c2fabef0725b0d  libstdc++-v3/testsuite/25_algorithms/mismatch/1.cc
--- 146496,146502 ----
  7b1c3f90a0a9cb9e38e6afafeddb1dbd  libstdc++-v3/testsuite/25_algorithms/minmax_element/1.cc
  451720835dbd51284ef217853fbfb17c  libstdc++-v3/testsuite/25_algorithms/minmax_element/check_type.cc
  e5a6690313b8f4041aa53d70bec1c79d  libstdc++-v3/testsuite/25_algorithms/minmax_element/constexpr.cc
! 3ab7cb8c7c42bc2d1ae7535519b3bfa9  libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc
  9bd6e6b571e443454c8fa0cfa59fa4c4  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/2.cc
  058620f081e21307eac17d53110d8f5b  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/pod.cc
  cbf22825f8cd11d117c2fabef0725b0d  libstdc++-v3/testsuite/25_algorithms/mismatch/1.cc
*************** d15cdcf55f49de39c4fdefc419be3fea  libstd
*** 149126,149131 ****
--- 149211,149217 ----
  96c8307cdf633de4f51db02425271ebe  libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
  8fff897afa187580148ceece57bbcb70  libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc
  679cf57e4a61942ecaa9210578320dff  libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
+ ec30d5440c1422ca4216d48631bf8250  libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc
  c5b715fd07d0ce109f0f584a1f179b22  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
  d54d8adc4826a7b1e97afcd4d9b8f264  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
  6032a54633b105ccfa64ff5ea2dd4b06  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
diff -Nrcpad gcc-16-20250817/contrib/ChangeLog gcc-16-20250824/contrib/ChangeLog
*** gcc-16-20250817/contrib/ChangeLog	Sun Aug 17 22:32:06 2025
--- gcc-16-20250824/contrib/ChangeLog	Sun Aug 24 22:32:12 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-08-17  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* check-MAINTAINERS.py: Document the way the script sorts
+ 	entries.
+ 
  2025-08-07  Tobias Burnus  <tburnus@baylibre.com>
  
  	PR other/120237
diff -Nrcpad gcc-16-20250817/gcc/ChangeLog gcc-16-20250824/gcc/ChangeLog
*** gcc-16-20250817/gcc/ChangeLog	Sun Aug 17 22:32:06 2025
--- gcc-16-20250824/gcc/ChangeLog	Sun Aug 24 22:32:12 2025
***************
*** 1,3 ****
--- 1,612 ----
+ 2025-08-23  Sam James  <sam@gentoo.org>
+ 
+ 	PR target/120933
+ 	* config.gcc (supported_defaults): Add tls for i386, x86_64.
+ 	* config/i386/i386.h (OPTION_DEFAULT_SPECS): Add tls.
+ 	* doc/install.texi: Document --with-tls= for i386, x86_64.
+ 
+ 2025-08-23  John Ericson  <git@JohnEricson.me>
+ 
+ 	* gcc.cc (for_each_path): templated, to make passing lambdas
+ 	possible/easy/safe, and to have a polymorphic return type.
+ 	(struct add_to_obstack_info): Deleted, lambda captures replace
+ 	it.
+ 	(add_to_obstack): Moved to lambda in build_search_list.
+ 	(build_search_list): Has above lambda now.
+ 	(struct file_at_path_info):  Deleted, lambda captures replace
+ 	it.
+ 	(file_at_path): Moved to lambda in find_a_file.
+ 	(find_a_file): Has above lambda now.
+ 	(struct spec_path_info): Reamed to just struct spec_path.
+ 	(struct spec_path): New name.
+ 	(spec_path): Rnamed to spec_path::operator()
+ 	(spec_path::operator()): New name
+ 	(do_spec_1): Updated for_each_path call sites.
+ 
+ 2025-08-22  Kishan Parmar  <kishan@linux.ibm.com>
+ 
+ 	PR target/118890
+ 	* config/rs6000/rs6000.cc (can_be_rotated_to_negative_lis): Add bounds
+ 	checks for shift counts to prevent undefined behavior.
+ 	(rs6000_emit_set_long_const): Likewise.
+ 
+ 2025-08-22  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/120553
+ 	* ifcvt.cc (noce_try_sign_bit_splat): New function.
+ 	(noce_process_if_block): Use it.
+ 
+ 2025-08-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.cc (vectorizable_live_operation): Pass
+ 	the representative of the PHIs node to
+ 	vect_create_epilog_for_reduction.
+ 
+ 2025-08-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.cc (vectorizable_lane_reducing): Get
+ 	reduction info properly.  Adjust checks according to
+ 	comments.
+ 	(vectorizable_reduction): Do not set STMT_VINFO_REDUC_VECTYPE_IN
+ 	on the reduc info.
+ 	(vect_transform_reduction): Query STMT_VINFO_REDUC_VECTYPE_IN
+ 	on the actual reduction stmt, not the info.
+ 
+ 2025-08-22  Pan Li  <pan2.li@intel.com>
+ 
+ 	* match.pd: Add form 3 for unsigned SAT_MUL.
+ 
+ 2025-08-22  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121635
+ 	* config/i386/i386-features.cc (ix86_emit_tls_call): Emit the
+ 	TLS call after NOTE_INSN_FUNCTION_BEG.
+ 
+ 2025-08-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.cc (get_initial_defs_for_reduction): Adjust
+ 	comment.
+ 	(vect_create_epilog_for_reduction): Get at the reduction
+ 	kind via the instance, re-use the slp_reduc flag instead
+ 	of checking REDUC_GROUP_FIRST_ELEMENT again.
+ 	Remove unreachable code.
+ 	(vectorizable_reduction): Compute a reduc_chain flag from
+ 	the SLP instance kind, avoid REDUC_GROUP_FIRST_ELEMENT
+ 	checks.
+ 	(vect_transform_cycle_phi): Likewise.
+ 	(vectorizable_live_operation): Check the SLP instance
+ 	kind instead of REDUC_GROUP_FIRST_ELEMENT.
+ 
+ 2025-08-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-parloops.cc (parloops_is_simple_reduction): Pass
+ 	in double reduction inner loop LC phis and query that.
+ 	(parloops_force_simple_reduction): Similar, but set it.
+ 	Check for valid reduction types here.
+ 	(valid_reduction_p): Remove.
+ 	(gather_scalar_reductions): Adjust, fixup double
+ 	reduction inner loop processing.
+ 
+ 2025-08-22  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/riscv/t-rtems: Add -mstrict-align multilibs for
+ 	targets without support for misaligned access in hardware.
+ 
+ 2025-08-21  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* config/pru/pru.cc (pru_init_libfuncs): Set softmpy libgcc
+ 	functions for optab multiplication entries if TARGET_OPT_MUL
+ 	option is not set.
+ 
+ 2025-08-21  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* config.gcc: Include pru/t-multilib.
+ 	* config/pru/pru.h (MULTILIB_DEFAULTS): Define.
+ 	* config/pru/t-multilib: New file.
+ 
+ 2025-08-21  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* common/config/pru/pru-common.cc (TARGET_DEFAULT_TARGET_FLAGS):
+ 	Keep multiplication, FILL and ZERO instructions enabled by
+ 	default.
+ 	* config/pru/pru.md (prumov<mode>): Gate code generation on
+ 	TARGET_OPT_FILLZERO.
+ 	(mov<mode>): Ditto.
+ 	(zero_extendqidi2): Ditto.
+ 	(zero_extendhidi2): Ditto.
+ 	(zero_extendsidi2): Ditto.
+ 	(@pru_ior_fillbytes<mode>): Ditto.
+ 	(@pru_and_zerobytes<mode>): Ditto.
+ 	(@<code>di3): Ditto.
+ 	(mulsi3): Gate code generation on TARGET_OPT_MUL.
+ 	* config/pru/pru.opt: Add mmul and mfillzero options.
+ 	* config/pru/pru.opt.urls: Regenerate.
+ 	* config/rl78/rl78.opt.urls: Regenerate.
+ 	* doc/invoke.texi: Document new options.
+ 
+ 2025-08-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/121619
+ 	* rtl-ssa/functions.h (function_info::commit_make_use_available):
+ 	Declare.
+ 	* rtl-ssa/blocks.cc (function_info::commit_make_use_available):
+ 	New function.
+ 	* rtl-ssa/changes.cc (function_info::apply_changes_to_insn): Use it.
+ 
+ 2025-08-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/111494
+ 	* gimple-fold.h (arith_code_with_undefined_signed_overflow): Declare.
+ 	* gimple-fold.cc (arith_code_with_undefined_signed_overflow): Export.
+ 	* tree-vect-stmts.cc (vectorizable_operation): Use unsigned
+ 	arithmetic for operations participating in a reduction.
+ 
+ 2025-08-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121607
+ 	* config/i386/i386-features.cc (ix86_emit_tls_call): Emit the
+ 	TLS call after NOTE_INSN_BASIC_BLOCK in a basic block with only
+ 	a label.
+ 
+ 2025-08-21  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* config/xtensa/xtensa.md (*btrue_INT_MIN):
+ 	Change the branch insn condition to test for a negative number
+ 	rather than testing for the MSB.
+ 
+ 2025-08-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vectorizable_phi): Take bb_vec_info.
+ 	(vectorizable_early_exit): Take loop_vec_info.
+ 	* tree-vect-loop.cc (vectorizable_phi): Adjust.
+ 	* tree-vect-slp.cc (vect_slp_analyze_operations): Likewise.
+ 	(vectorize_slp_instance_root_stmt): Likewise.
+ 	* tree-vect-stmts.cc (vectorizable_early_exit): Likewise.
+ 	(vect_transform_stmt): Likewise.
+ 	(vect_analyze_stmt): Merge the sequences of vectorizable_*
+ 	where common.
+ 
+ 2025-08-20  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	* common.opt.urls: Regenerate.
+ 
+ 2025-08-20  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	PR tree-optimization/109071
+ 	PR tree-optimization/85788
+ 	PR tree-optimization/88771
+ 	PR tree-optimization/106762
+ 	PR tree-optimization/108770
+ 	PR tree-optimization/115274
+ 	PR tree-optimization/117179
+ 	* Makefile.in (OBJS): Add diagnostic-context-rich-location.o.
+ 	* common.opt (fdiagnostics-show-context): New option.
+ 	(fdiagnostics-show-context=): New option.
+ 	* diagnostic-context-rich-location.cc: New file.
+ 	* diagnostic-context-rich-location.h: New file.
+ 	* doc/invoke.texi (fdiagnostics-details): Add
+ 	documentation for the new options.
+ 	* gimple-array-bounds.cc (check_out_of_bounds_and_warn): Add
+ 	one new parameter. Use rich location with details for warning_at.
+ 	(array_bounds_checker::check_array_ref): Use rich location with
+ 	ditails for warning_at.
+ 	(array_bounds_checker::check_mem_ref): Add one new parameter.
+ 	Use rich location with details for warning_at.
+ 	(array_bounds_checker::check_addr_expr): Use rich location with
+ 	move_history_diagnostic_path for warning_at.
+ 	(array_bounds_checker::check_array_bounds): Call check_mem_ref with
+ 	one more parameter.
+ 	* gimple-array-bounds.h: Update prototype for check_mem_ref.
+ 	* gimple-ssa-warn-access.cc (warn_string_no_nul): Use rich location
+ 	with details for warning_at.
+ 	(maybe_warn_nonstring_arg): Likewise.
+ 	(maybe_warn_for_bound): Likewise.
+ 	(warn_for_access): Likewise.
+ 	(check_access): Likewise.
+ 	(pass_waccess::check_strncat): Likewise.
+ 	(pass_waccess::maybe_check_access_sizes): Likewise.
+ 	* gimple-ssa-warn-restrict.cc (pass_wrestrict::execute): Calculate
+ 	dominance info for diagnostics show context.
+ 	(maybe_diag_overlap): Use rich location with details for warning_at.
+ 	(maybe_diag_access_bounds): Use rich location with details for
+ 	warning_at.
+ 
+ 2025-08-20  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/121568
+ 	* ipa-prop.h (build_ref_for_offset): Remove.
+ 	* tree-sra.cc (build_ref_for_offset): Make static.
+ 
+ 2025-08-20  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config.gcc (aarch64*-*-*): Remove aarch64-cc-fusion.o from
+ 	extra_objs.
+ 	* config/aarch64/aarch64-passes.def (pass_cc_fusion): Delete.
+ 	* config/aarch64/aarch64-protos.h (make_pass_cc_fusion): Delete.
+ 	* config/aarch64/t-aarch64 (aarch64-cc-fusion.o): Delete.
+ 	* config/aarch64/aarch64-cc-fusion.cc: Delete.
+ 	* late-combine.cc (late_combine::optimizable_set): Take a set_info *
+ 	rather than an insn_info * and move destination tests from...
+ 	(late_combine::combine_into_uses): ...here. Take a set_info * rather
+ 	an insn_info *.  Take the rtx set.
+ 	(late_combine::parallelize_insns, late_combine::combine_cc_setter)
+ 	(late_combine::combine_insn): New member functions.
+ 	(late_combine::m_parallel): New member variable.
+ 	* rtlanal.cc (pattern_cost): Handle sets of CC registers in the
+ 	same way as comparisons.
+ 
+ 2025-08-20  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* rtl-ssa/blocks.cc (function_info::create_degenerate_phi): Fix
+ 	inverted test of bitmap_set_bit.  Call add_live_out_use even
+ 	if the register was previously live-out from the predecessor block.
+ 	Instead...
+ 	(function_info::add_live_out_use): ...check here whether a live-out
+ 	use already exists.
+ 
+ 2025-08-20  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* rtl-ssa/accesses.h (use_lookup): New class.
+ 	* rtl-ssa/functions.h (function_info::find_def): Expand comment.
+ 	(function_info::find_use): Declare.
+ 	* rtl-ssa/member-fns.inl (use_lookup::prev_use, use_lookup::next_use)
+ 	(use_lookup::matching_use, use_lookup::matching_or_prev_use)
+ 	(use_lookup::matching_or_next_use): New member functions.
+ 	* rtl-ssa/accesses.cc (function_info::find_use): Likewise.
+ 
+ 2025-08-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/114480
+ 	* cfganal.cc (compute_idf): Split processing of the initial
+ 	workset from the main iteration.  Use a vector for the
+ 	workset of the main iteration.
+ 
+ 2025-08-20  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/121608
+ 	* config/avr/specs.h (LINK_RELAX_SPEC): Wrap in %{!r...}.
+ 
+ 2025-08-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_analyze_slp_reduc_chain): New,
+ 	copied from vect_analyze_slp_instance and only handle
+ 	slp_inst_kind_reduc_chain.  Inline vect_build_slp_instance.
+ 	(vect_analyze_slp_instance): Only handle slp_inst_kind_store.
+ 	Inline vect_build_slp_instance.
+ 	(vect_build_slp_instance): Remove now unused stmt_info parameter,
+ 	remove special code for store groups and reduction chains.
+ 	(vect_analyze_slp): Call vect_analyze_slp_reduc_chain
+ 	for reduction chain SLP build and adjust.
+ 
+ 2025-08-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.cc (vect_check_gather_scatter):
+ 	Remove restriction on epilogue of epilogue vectorization.
+ 
+ 2025-08-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.cc (update_epilogue_loop_vinfo): Remove
+ 	fixing up pattern stmt operands and gather/scatter DR_REFs.
+ 	(find_in_mapping): Remove.
+ 
+ 2025-08-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_load_store_data): New.
+ 	(_slp_tree::memory_access_type): Remove.
+ 	(SLP_TREE_MEMORY_ACCESS_TYPE): Turn into inline function.
+ 	* tree-vect-slp.cc (_slp_tree::_slp_tree): Do not
+ 	initialize SLP_TREE_MEMORY_ACCESS_TYPE.
+ 	* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
+ 	Remove gather_scatter_info pointer argument, instead get
+ 	info from the SLP node.
+ 	(vect_build_one_gather_load_call): Get SLP node and builtin
+ 	decl as argument and remove uses of gather_scatter_info.
+ 	(vect_build_one_scatter_store_call): Likewise.
+ 	(vect_get_gather_scatter_ops): Remove uses of gather_scatter_info.
+ 	(vect_get_strided_load_store_ops): Get SLP node and remove
+ 	uses of gather_scatter_info.
+ 	(get_load_store_type): Take pointer to vect_load_store_data
+ 	instead of individual pointers.
+ 	(vectorizable_store): Adjust.  Re-use get_load_store_type
+ 	result from analysis time.
+ 	(vectorizable_load): Likewise.
+ 
+ 2025-08-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121572
+ 	* config/i386/i386-features.cc (replace_tls_call): Add a bitmap
+ 	argument and put the updated TLS instruction in the bitmap.
+ 	(ix86_get_dominator_for_reg): New.
+ 	(ix86_check_flags_reg): Likewise.
+ 	(ix86_emit_tls_call): Likewise.
+ 	(ix86_place_single_tls_call): Add 2 bitmap arguments for updated
+ 	GNU and GNU2 TLS instructions.  Call ix86_emit_tls_call to emit
+ 	TLS instruction.  Correct debug dump for before instruction.
+ 
+ 2025-08-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/120024
+ 	* calls.cc (expand_call): Remove start_sequence/end_sequence
+ 	for ECF_MALLOC.
+ 	Check valreg before deferencing it when it comes to malloc like
+ 	functions. Use the return value of emit_move_insn instead of
+ 	calling get_last_insn.
+ 
+ 2025-08-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-parloops.cc (parloops_is_slp_reduction): Remove.
+ 	(parloops_is_simple_reduction): Do not call it.
+ 
+ 2025-08-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.cc (vectorizable_reduction): Pass the
+ 	appropriate SLP node for costing of single-def-use-cycle
+ 	operations.
+ 	(vectorizable_live_operation): Pass the SLP node to the
+ 	costing hook.
+ 	* tree-vect-stmts.cc (vectorizable_bswap): Likewise.
+ 	(vectorizable_store): Likewise.
+ 
+ 2025-08-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121592
+ 	* tree-vect-slp.cc (vect_analyze_slp): When SLP reduction chain
+ 	discovery fails, fail overall when the tail of the chain
+ 	isn't also the entry for the non-SLP reduction.
+ 
+ 2025-08-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config.gcc (riscv*-*-*): Look for python3, then fall back
+ 	to python.  Never use python2.
+ 
+ 2025-08-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121527
+ 	* tree-sra.cc (build_access_from_expr_1): Do not strip an
+ 	outer VIEW_CONVERT_EXPR as it's relevant for the size of
+ 	the access.
+ 	(get_access_for_expr): Likewise.
+ 
+ 2025-08-19  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/121536
+ 	* config/aarch64/aarch64.cc (aarch64_bool_compound_p): Use
+ 	SLP_TREE_VECTYPE instead of STMT_VINFO_VECTYPE.
+ 	(aarch64_adjust_stmt_cost, aarch64_vector_costs::count_ops): Pass SLP
+ 	node to aarch64_bool_compound_p.
+ 
+ 2025-08-19  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/121536
+ 	* tree-vect-loop.cc (vectorizable_phi, vectorizable_recurr,
+ 	vectorizable_nonlinear_induction, vectorizable_induction): Pass slp_node
+ 	instead of stmt_info to record_stmt_cost.
+ 
+ 2025-08-19  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/121536
+ 	* config/aarch64/aarch64.cc (aarch64_vector_costs::add_stmt_cost): Set
+ 	vectype from type of lhs of gimple stmt.
+ 
+ 2025-08-18  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/121581
+ 	* doc/extend.texi (__builtin_object_size): Fix example.
+ 
+ 2025-08-18  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* flag-types.h (sanitize_code_type): Define.
+ 	* asan.h (sanitize_flags_p): Use 'sanitize_code_type' instead of
+ 	'unsigned int'.
+ 	* common.opt: Likewise.
+ 	* dwarf2asm.cc (dw2_output_indirect_constant_1): Likewise.
+ 	* opts.cc (find_sanitizer_argument): Likewise.
+ 	(report_conflicting_sanitizer_options): Likewise.
+ 	(parse_sanitizer_options): Likewise.
+ 	(parse_no_sanitize_attribute): Likewise.
+ 	* opts.h (parse_sanitizer_options): Likewise.
+ 	(parse_no_sanitize_attribute): Likewise.
+ 	* tree-cfg.cc (print_no_sanitize_attr_value): Likewise.
+ 	* tree.cc (tree_fits_sanitize_code_type_p): Define.
+ 	(tree_to_sanitize_code_type): Likewise.
+ 	* tree.h (tree_fits_sanitize_code_type_p): Declare.
+ 	(tree_to_sanitize_code_type): Likewise.
+ 
+ 2025-08-18  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* config/aarch64/aarch64.md (MEMTAG_TAG_MASK): New define
+ 	constant.
+ 	(MEMTAG_ADDR_MASK): Likewise.
+ 	(irg, subp, ldg): Use new constants.
+ 
+ 2025-08-18  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/97497
+ 	* function-abi.h (predefined_function_abi::only_partial_reg_clobbers)
+ 	(function_abi::only_partial_reg_clobbers): New member functions.
+ 	* gcse-common.cc: Include regs.h and function-abi.h.
+ 	(compute_transp): Check for partially call-clobbered registers
+ 	and treat them as not being transparent in blocks with calls.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (UNSPEC_TI_FETCH_ADD): New unspec.
+ 	(UNSPEC_TI_FETCH_SUB): Likewise.
+ 	(UNSPEC_TI_FETCH_AND): Likewise.
+ 	(UNSPEC_TI_FETCH_XOR): Likewise.
+ 	(UNSPEC_TI_FETCH_OR): Likewise.
+ 	(UNSPEC_TI_FETCH_NAND_MASK_INVERTED): Likewise.
+ 	(ALL_SC): New define_mode_iterator.
+ 	(_scq): New define_mode_attr.
+ 	(atomic_fetch_nand<mode>): Accept ALL_SC instead of only GPR.
+ 	(UNSPEC_TI_FETCH_DIRECT): New define_int_iterator.
+ 	(UNSPEC_TI_FETCH): New define_int_iterator.
+ 	(amop_ti_fetch): New define_int_attr.
+ 	(size_ti_fetch): New define_int_attr.
+ 	(atomic_fetch_<amop_ti_fetch>ti_scq): New define_insn.
+ 	(atomic_fetch_<amop_ti_fetch>ti): New define_expand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_exchangeti_scq): New
+ 	define_insn.
+ 	(atomic_exchangeti): New define_expand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_compare_and_swapti_scq): New
+ 	define_insn.
+ 	(atomic_compare_and_swapti): New define_expand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_print_operand_reloc):
+ 	Accept "%t" for printing the number of the 64-bit machine
+ 	register holding the upper half of a TImode.
+ 	* config/loongarch/sync.md (atomic_storeti_scq): New
+ 	define_insn.
+ 	(atomic_storeti): expand to atomic_storeti_scq if !ISA_HAS_LSX.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/genopts/isa-evolution.in (scq): New evolution
+ 	feature.
+ 	* config/loongarch/loongarch-evolution.cc: Regenerate.
+ 	* config/loongarch/loongarch-evolution.h: Regenerate.
+ 	* config/loongarch/loongarch-str.h: Regenerate.
+ 	* config/loongarch/loongarch.opt: Regenerate.
+ 	* config/loongarch/loongarch.opt.urls: Regenerate.
+ 	* config/loongarch/loongarch-def.cc: Make -mscq the default for
+ 	-march=la664 and -march=la64v1.1.
+ 	* doc/invoke.texi (LoongArch Options): Document -m[no-]scq.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_storeti_lsx): New
+ 	define_insn.
+ 	(atomic_storeti): New define_expand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_loadti_lsx): New define_insn.
+ 	(atomic_loadti): New define_expand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md
+ 	(atomic_fetch_nand_mask_inverted<GPR:mode>): New define_insn.
+ 	(atomic_fetch_nand<GPR:mode>): New define_expand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_fetch_sub<SHORT:mode>):
+ 	Disable if ISA_HAS_LAM_BH.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (UNSPEC_COMPARE_AND_SWAP_AND):
+ 	Remove.
+ 	(UNSPEC_COMPARE_AND_SWAP_XOR): Remove.
+ 	(UNSPEC_COMPARE_AND_SWAP_OR): Remove.
+ 	(atomic_test_and_set): Rename to ...
+ 	(atomic_fetch_<any_bitwise:amop><SHORT:mode>): ... this, and
+ 	adapt the expansion to use it for any bitwise operations and any
+ 	val, instead of just ior 1.
+ 	(atomic_test_and_set): New define_expand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_test_and_set): Remove
+ 	unneeded andi instruction from the expansion.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_print_operand_reloc):
+ 	Make "%T" output a comment marker if the operand is a memory
+ 	order for which the barrier won't be generated; remove "%t".
+ 	* config/loongarch/sync.md (atomic_cas_value_strong<mode>): Add
+ 	%T before "b 3f".
+ 	(atomic_cas_value_cmp_and_7_<mode>): Likewise.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (UNSPEC_COMPARE_AND_SWAP_AMCAS): New
+ 	UNSPEC code.
+ 	(atomic_cas_value_strong<mode>): NFC, update the comment to note
+ 	we only need to consider failure memory order.
+ 	(atomic_cas_value_strong<mode>_amcas): Use
+ 	UNSPEC_COMPARE_AND_SWAP_AMCAS instead of
+ 	UNSPEC_COMPARE_AND_SWAP.
+ 	(atomic_compare_and_swap<mode:GPR>): Pass failure memorder to
+ 	gen_atomic_cas_value_strong<mode>.
+ 	(atomic_compare_and_swap<mode:SHORT>): Pass failure memorder to
+ 	gen_atomic_cas_value_cmp_and_7_si.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_test_and_set): Use bstrins
+ 	for masking the address if possible.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_load<mode>): Remove "+" for
+ 	the memory operand.
+ 	(atomic_store<mode>): Use "=" instead of "+" for the memory
+ 	operand.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md: Use <size> instead of <amo>.
+ 	(amo): Remove.
+ 
+ 2025-08-18  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/sync.md (atomic_optab): Remove.
+ 	(atomic_<atomic_optab><mode>): Change atomic_optab to amop.
+ 	(atomic_fetch_<atomic_optab><mode>): Likewise.
+ 
+ 2025-08-17  Austin Law  <austinklaw@gmail.com>
+ 
+ 	PR target/121213
+ 	* config/riscv/sync.md (amo_atomic_exchange<mode>): Allow
+ 	(const_int 0) as input operand. Do not tie input to output.
+ 	No longer earlyclobber the output.
+ 
+ 2025-08-17  Artemiy Volkov  <artemiyv@acm.org>
+ 
+ 	* regrename.cc (scan_rtx_reg): Handle fused insn pairs.
+ 
+ 2025-08-17  Jan Dubiec  <jdx@o2.pl>
+ 
+ 	PR target/109324
+ 	* config/h8300/addsub.md: Explicitly specify mode for plus operation.
+ 	* config/h8300/jumpcall.md: Explicitly specify modes for eq and
+ 	match_operand operations.
+ 	* config/h8300/testcompare.md: Explicitly specify modes for eq, ltu
+ 	and compare operations.
+ 
+ 2025-08-17  Artemiy Volkov  <artemiyv@acm.org>
+ 
+ 	* ira-conflicts.cc (add_insn_allocno_copies): Handle fused insn pairs.
+ 	* rtl.h (single_output_fused_pair_p): Declare new function.
+ 	* rtlanal.cc (single_output_fused_pair_p): Define it.
+ 
+ 2025-08-17  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	PR target/121538
+ 	* config/riscv/arch-canonicalize (parse_dep_exts):
+ 	Match condition block up to closing brace.
+ 	(test_parse_long_condition_block): New test.
+ 
+ 2025-08-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121541
+ 	* config/i386/i386-options.cc
+ 	(ix86_valid_target_attribute_inner_p): Add target("80387")
+ 	attribute.  Set the mask bit in opts_set->x_target_flags if the
+ 	mask bit in opts->x_target_flags is updated.
+ 	* doc/extend.texi: Document target("80387") function attribute.
+ 
  2025-08-17  Pan Li  <pan2.li@intel.com>
  
  	* config/riscv/autovec-opt.md: Add supported insn
diff -Nrcpad gcc-16-20250817/gcc/DATESTAMP gcc-16-20250824/gcc/DATESTAMP
*** gcc-16-20250817/gcc/DATESTAMP	Sun Aug 17 22:32:06 2025
--- gcc-16-20250824/gcc/DATESTAMP	Sun Aug 24 22:32:12 2025
***************
*** 1 ****
! 20250817
--- 1 ----
! 20250824
diff -Nrcpad gcc-16-20250817/gcc/Makefile.in gcc-16-20250824/gcc/Makefile.in
*** gcc-16-20250817/gcc/Makefile.in	Sun Aug 17 22:32:06 2025
--- gcc-16-20250824/gcc/Makefile.in	Sun Aug 24 22:32:12 2025
*************** OBJS = \
*** 1620,1625 ****
--- 1620,1626 ----
  	mcf.o \
  	mode-switching.o \
  	modulo-sched.o \
+ 	diagnostic-context-rich-location.o \
  	multiple_target.o \
  	omp-offload.o \
  	omp-expand.o \
diff -Nrcpad gcc-16-20250817/gcc/asan.h gcc-16-20250824/gcc/asan.h
*** gcc-16-20250817/gcc/asan.h	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/asan.h	Sun Aug 24 22:32:19 2025
*************** asan_protect_stack_decl (tree decl)
*** 242,250 ****
     remove all flags mentioned in "no_sanitize" of DECL_ATTRIBUTES.  */
  
  inline bool
! sanitize_flags_p (unsigned int flag, const_tree fn = current_function_decl)
  {
!   unsigned int result_flags = flag_sanitize & flag;
    if (result_flags == 0)
      return false;
  
--- 242,251 ----
     remove all flags mentioned in "no_sanitize" of DECL_ATTRIBUTES.  */
  
  inline bool
! sanitize_flags_p (sanitize_code_type flag,
! 		  const_tree fn = current_function_decl)
  {
!   sanitize_code_type result_flags = flag_sanitize & flag;
    if (result_flags == 0)
      return false;
  
diff -Nrcpad gcc-16-20250817/gcc/c/ChangeLog gcc-16-20250824/gcc/c/ChangeLog
*** gcc-16-20250817/gcc/c/ChangeLog	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/c/ChangeLog	Sun Aug 24 22:32:19 2025
***************
*** 1,3 ****
--- 1,17 ----
+ 2025-08-21  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR c/121478
+ 	* c-fold.cc (c_fully_fold_internal): Fold nullptr_t ==/!= nullptr_t.
+ 	* c-typeck.cc (convert_arguments): Handle conversion from nullptr_t
+ 	for varargs.
+ 	(convert_for_assignment): Handle conversions from nullptr_t to
+ 	pointer type specially.
+ 
+ 2025-08-18  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* c-parser.cc (c_parser_declaration_or_fndef): Use
+ 	'sanitize_code_type' instead of 'unsigned int'.
+ 
  2025-08-15  Jakub Jelinek  <jakub@redhat.com>
  
  	PR preprocessor/120778
diff -Nrcpad gcc-16-20250817/gcc/c/c-fold.cc gcc-16-20250824/gcc/c/c-fold.cc
*** gcc-16-20250817/gcc/c/c-fold.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/c/c-fold.cc	Sun Aug 24 22:32:19 2025
*************** c_fully_fold_internal (tree expr, bool i
*** 369,375 ****
  			    || TREE_CODE (op1) != INTEGER_CST))
  	goto out;
  
!       if (op0 != orig_op0 || op1 != orig_op1 || in_init)
  	ret = in_init
  	  ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
  	  : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
--- 369,393 ----
  			    || TREE_CODE (op1) != INTEGER_CST))
  	goto out;
  
!       if (TREE_CODE_CLASS (code) == tcc_comparison
! 	  && TREE_CODE (TREE_TYPE (op0)) == NULLPTR_TYPE
! 	  && TREE_CODE (TREE_TYPE (op1)) == NULLPTR_TYPE)
! 	{
! 	  switch (code)
! 	    {
! 	    case EQ_EXPR:
! 	      ret = constant_boolean_node (true, TREE_TYPE (expr));
! 	      break;
! 	    case NE_EXPR:
! 	      ret = constant_boolean_node (false, TREE_TYPE (expr));
! 	      break;
! 	    default:
! 	      gcc_unreachable ();
! 	    }
! 	  ret = omit_two_operands_loc (loc, TREE_TYPE (expr), ret,
! 				       op0, op1);
! 	}
!       else if (op0 != orig_op0 || op1 != orig_op1 || in_init)
  	ret = in_init
  	  ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
  	  : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
diff -Nrcpad gcc-16-20250817/gcc/c/c-parser.cc gcc-16-20250824/gcc/c/c-parser.cc
*** gcc-16-20250817/gcc/c/c-parser.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/c/c-parser.cc	Sun Aug 24 22:32:19 2025
*************** c_parser_declaration_or_fndef (c_parser
*** 2822,2828 ****
  			      specs->constexpr_p, &richloc);
  		  /* A parameter is initialized, which is invalid.  Don't
  		     attempt to instrument the initializer.  */
! 		  int flag_sanitize_save = flag_sanitize;
  		  if (nested && !empty_ok)
  		    flag_sanitize = 0;
  		  init = c_parser_expr_no_commas (parser, NULL);
--- 2822,2828 ----
  			      specs->constexpr_p, &richloc);
  		  /* A parameter is initialized, which is invalid.  Don't
  		     attempt to instrument the initializer.  */
! 		  sanitize_code_type flag_sanitize_save = flag_sanitize;
  		  if (nested && !empty_ok)
  		    flag_sanitize = 0;
  		  init = c_parser_expr_no_commas (parser, NULL);
*************** c_parser_declaration_or_fndef (c_parser
*** 2911,2917 ****
  			      specs->constexpr_p, &richloc);
  		  /* A parameter is initialized, which is invalid.  Don't
  		     attempt to instrument the initializer.  */
! 		  int flag_sanitize_save = flag_sanitize;
  		  if (TREE_CODE (d) == PARM_DECL)
  		    flag_sanitize = 0;
  		  init = c_parser_initializer (parser, d);
--- 2911,2917 ----
  			      specs->constexpr_p, &richloc);
  		  /* A parameter is initialized, which is invalid.  Don't
  		     attempt to instrument the initializer.  */
! 		  sanitize_code_type flag_sanitize_save = flag_sanitize;
  		  if (TREE_CODE (d) == PARM_DECL)
  		    flag_sanitize = 0;
  		  init = c_parser_initializer (parser, d);
diff -Nrcpad gcc-16-20250817/gcc/c/c-typeck.cc gcc-16-20250824/gcc/c/c-typeck.cc
*** gcc-16-20250817/gcc/c/c-typeck.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/c/c-typeck.cc	Sun Aug 24 22:32:19 2025
*************** convert_arguments (location_t loc, vec<l
*** 4679,4684 ****
--- 4679,4687 ----
  				      val, valtype, npc, rname, parmnum, argnum,
  				      excess_precision, 0);
  	}
+       /* A NULLPTR type is just a nullptr always.  */
+       else if (TREE_CODE (TREE_TYPE (val)) == NULLPTR_TYPE)
+ 	parmval = omit_one_operand_loc (ploc, TREE_TYPE (val), nullptr_node, val);
        else if (promote_float_arg)
          {
  	  if (type_generic)
*************** convert_for_assignment (location_t locat
*** 8983,8993 ****
  	  && coder == INTEGER_TYPE)
  	warning_at (location, OPT_Wzero_as_null_pointer_constant,
  		    "zero as null pointer constant");
! 
        /* An explicit constant 0 or type nullptr_t can convert to a pointer,
  	 or one that results from arithmetic, even including a cast to
  	 integer type.  */
!       if (!null_pointer_constant && coder != NULLPTR_TYPE)
  	switch (errtype)
  	  {
  	  case ic_argpass:
--- 8986,8998 ----
  	  && coder == INTEGER_TYPE)
  	warning_at (location, OPT_Wzero_as_null_pointer_constant,
  		    "zero as null pointer constant");
!       /* A NULLPTR type is just a nullptr always.  */
!       if (coder == NULLPTR_TYPE)
! 	return omit_one_operand_loc (expr_loc, type, nullptr_node, rhs);
        /* An explicit constant 0 or type nullptr_t can convert to a pointer,
  	 or one that results from arithmetic, even including a cast to
  	 integer type.  */
!       else if (!null_pointer_constant)
  	switch (errtype)
  	  {
  	  case ic_argpass:
diff -Nrcpad gcc-16-20250817/gcc/c-family/ChangeLog gcc-16-20250824/gcc/c-family/ChangeLog
*** gcc-16-20250817/gcc/c-family/ChangeLog	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/c-family/ChangeLog	Sun Aug 24 22:32:19 2025
***************
*** 1,3 ****
--- 1,13 ----
+ 2025-08-18  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* c-attribs.cc (add_no_sanitize_value): Use 'sanitize_code_type'
+ 	instead of 'unsigned int'.
+ 	(handle_no_sanitize_attribute): Likewise.
+ 	(handle_no_sanitize_address_attribute): Likewise.
+ 	(handle_no_sanitize_thread_attribute): Likewise.
+ 	(handle_no_address_safety_analysis_attribute): Likewise.
+ 	* c-common.h (add_no_sanitize_value): Likewise.
+ 
  2025-08-15  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c++/121552
diff -Nrcpad gcc-16-20250817/gcc/c-family/c-attribs.cc gcc-16-20250824/gcc/c-family/c-attribs.cc
*** gcc-16-20250817/gcc/c-family/c-attribs.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/c-family/c-attribs.cc	Sun Aug 24 22:32:19 2025
*************** handle_cold_attribute (tree *node, tree
*** 1420,1442 ****
  /* Add FLAGS for a function NODE to no_sanitize_flags in DECL_ATTRIBUTES.  */
  
  void
! add_no_sanitize_value (tree node, unsigned int flags)
  {
    tree attr = lookup_attribute ("no_sanitize", DECL_ATTRIBUTES (node));
    if (attr)
      {
!       unsigned int old_value = tree_to_uhwi (TREE_VALUE (attr));
        flags |= old_value;
  
        if (flags == old_value)
  	return;
  
!       TREE_VALUE (attr) = build_int_cst (unsigned_type_node, flags);
      }
    else
      DECL_ATTRIBUTES (node)
        = tree_cons (get_identifier ("no_sanitize"),
! 		   build_int_cst (unsigned_type_node, flags),
  		   DECL_ATTRIBUTES (node));
  }
  
--- 1420,1443 ----
  /* Add FLAGS for a function NODE to no_sanitize_flags in DECL_ATTRIBUTES.  */
  
  void
! add_no_sanitize_value (tree node, sanitize_code_type flags)
  {
    tree attr = lookup_attribute ("no_sanitize", DECL_ATTRIBUTES (node));
    if (attr)
      {
!       sanitize_code_type old_value =
! 	tree_to_sanitize_code_type (TREE_VALUE (attr));
        flags |= old_value;
  
        if (flags == old_value)
  	return;
  
!       TREE_VALUE (attr) = build_int_cst (uint64_type_node, flags);
      }
    else
      DECL_ATTRIBUTES (node)
        = tree_cons (get_identifier ("no_sanitize"),
! 		   build_int_cst (uint64_type_node, flags),
  		   DECL_ATTRIBUTES (node));
  }
  
*************** static tree
*** 1447,1453 ****
  handle_no_sanitize_attribute (tree *node, tree name, tree args, int,
  			      bool *no_add_attrs)
  {
!   unsigned int flags = 0;
    *no_add_attrs = true;
    if (TREE_CODE (*node) != FUNCTION_DECL)
      {
--- 1448,1454 ----
  handle_no_sanitize_attribute (tree *node, tree name, tree args, int,
  			      bool *no_add_attrs)
  {
!   sanitize_code_type flags = 0;
    *no_add_attrs = true;
    if (TREE_CODE (*node) != FUNCTION_DECL)
      {
*************** handle_no_sanitize_address_attribute (tr
*** 1484,1490 ****
    if (TREE_CODE (*node) != FUNCTION_DECL)
      warning (OPT_Wattributes, "%qE attribute ignored", name);
    else
!     add_no_sanitize_value (*node, SANITIZE_ADDRESS);
  
    return NULL_TREE;
  }
--- 1485,1491 ----
    if (TREE_CODE (*node) != FUNCTION_DECL)
      warning (OPT_Wattributes, "%qE attribute ignored", name);
    else
!     add_no_sanitize_value (*node, (sanitize_code_type) SANITIZE_ADDRESS);
  
    return NULL_TREE;
  }
*************** handle_no_sanitize_thread_attribute (tre
*** 1500,1506 ****
    if (TREE_CODE (*node) != FUNCTION_DECL)
      warning (OPT_Wattributes, "%qE attribute ignored", name);
    else
!     add_no_sanitize_value (*node, SANITIZE_THREAD);
  
    return NULL_TREE;
  }
--- 1501,1507 ----
    if (TREE_CODE (*node) != FUNCTION_DECL)
      warning (OPT_Wattributes, "%qE attribute ignored", name);
    else
!     add_no_sanitize_value (*node, (sanitize_code_type) SANITIZE_THREAD);
  
    return NULL_TREE;
  }
*************** handle_no_address_safety_analysis_attrib
*** 1517,1523 ****
    if (TREE_CODE (*node) != FUNCTION_DECL)
      warning (OPT_Wattributes, "%qE attribute ignored", name);
    else
!     add_no_sanitize_value (*node, SANITIZE_ADDRESS);
  
    return NULL_TREE;
  }
--- 1518,1524 ----
    if (TREE_CODE (*node) != FUNCTION_DECL)
      warning (OPT_Wattributes, "%qE attribute ignored", name);
    else
!     add_no_sanitize_value (*node, (sanitize_code_type) SANITIZE_ADDRESS);
  
    return NULL_TREE;
  }
diff -Nrcpad gcc-16-20250817/gcc/c-family/c-common.h gcc-16-20250824/gcc/c-family/c-common.h
*** gcc-16-20250817/gcc/c-family/c-common.h	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/c-family/c-common.h	Sun Aug 24 22:32:19 2025
*************** extern enum flt_eval_method
*** 1713,1719 ****
  excess_precision_mode_join (enum flt_eval_method, enum flt_eval_method);
  
  extern int c_flt_eval_method (bool ts18661_p);
! extern void add_no_sanitize_value (tree node, unsigned int flags);
  
  extern void maybe_add_include_fixit (rich_location *, const char *, bool);
  extern void maybe_suggest_missing_token_insertion (rich_location *richloc,
--- 1713,1719 ----
  excess_precision_mode_join (enum flt_eval_method, enum flt_eval_method);
  
  extern int c_flt_eval_method (bool ts18661_p);
! extern void add_no_sanitize_value (tree node, sanitize_code_type flags);
  
  extern void maybe_add_include_fixit (rich_location *, const char *, bool);
  extern void maybe_suggest_missing_token_insertion (rich_location *richloc,
diff -Nrcpad gcc-16-20250817/gcc/calls.cc gcc-16-20250824/gcc/calls.cc
*** gcc-16-20250817/gcc/calls.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/calls.cc	Sun Aug 24 22:32:19 2025
*************** expand_call (tree exp, rtx target, int i
*** 3235,3245 ****
        if (pass)
  	precompute_arguments (num_actuals, args);
  
-       /* Now we are about to start emitting insns that can be deleted
- 	 if a libcall is deleted.  */
-       if (pass && (flags & ECF_MALLOC))
- 	start_sequence ();
- 
        /* Check the canary value for sibcall or function which doesn't
  	 return and could throw.  */
        if ((pass == 0
--- 3235,3240 ----
*************** expand_call (tree exp, rtx target, int i
*** 3771,3795 ****
  	  valreg = gen_rtx_REG (TYPE_MODE (rettype), REGNO (valreg));
  	}
  
!       if (pass && (flags & ECF_MALLOC))
  	{
  	  rtx temp = gen_reg_rtx (GET_MODE (valreg));
! 	  rtx_insn *last, *insns;
  
  	  /* The return value from a malloc-like function is a pointer.  */
  	  if (TREE_CODE (rettype) == POINTER_TYPE)
  	    mark_reg_pointer (temp, MALLOC_ABI_ALIGNMENT);
  
! 	  emit_move_insn (temp, valreg);
  
  	  /* The return value from a malloc-like function cannot alias
  	     anything else.  */
- 	  last = get_last_insn ();
  	  add_reg_note (last, REG_NOALIAS, temp);
- 
- 	  /* Write out the sequence.  */
- 	  insns = end_sequence ();
- 	  emit_insn (insns);
  	  valreg = temp;
  	}
  
--- 3766,3788 ----
  	  valreg = gen_rtx_REG (TYPE_MODE (rettype), REGNO (valreg));
  	}
  
!       /* If the return register exists, for malloc like
! 	 function calls, mark the return register with the
! 	 alignment and noalias reg note.  */
!       if (pass && (flags & ECF_MALLOC) && valreg)
  	{
  	  rtx temp = gen_reg_rtx (GET_MODE (valreg));
! 	  rtx_insn *last;
  
  	  /* The return value from a malloc-like function is a pointer.  */
  	  if (TREE_CODE (rettype) == POINTER_TYPE)
  	    mark_reg_pointer (temp, MALLOC_ABI_ALIGNMENT);
  
! 	  last = emit_move_insn (temp, valreg);
  
  	  /* The return value from a malloc-like function cannot alias
  	     anything else.  */
  	  add_reg_note (last, REG_NOALIAS, temp);
  	  valreg = temp;
  	}
  
diff -Nrcpad gcc-16-20250817/gcc/cfganal.cc gcc-16-20250824/gcc/cfganal.cc
*** gcc-16-20250817/gcc/cfganal.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/cfganal.cc	Sun Aug 24 22:32:19 2025
*************** compute_dominance_frontiers (bitmap_head
*** 1679,1708 ****
  bitmap
  compute_idf (bitmap def_blocks, bitmap_head *dfs)
  {
!   bitmap_iterator bi;
    unsigned bb_index, i;
    bitmap phi_insertion_points;
  
    phi_insertion_points = BITMAP_ALLOC (NULL);
  
!   /* Seed the work set with all the blocks in DEF_BLOCKS.  */
!   auto_bitmap work_set;
!   bitmap_copy (work_set, def_blocks);
!   bitmap_tree_view (work_set);
! 
!   /* Pop a block off the workset, add every block that appears in
!      the original block's DF that we have not already processed to
!      the workset.  Iterate until the workset is empty.   Blocks
!      which are added to the workset are potential sites for
!      PHI nodes.  */
!   while (!bitmap_empty_p (work_set))
      {
-       /* The dominance frontier of a block is blocks after it so iterating
-          on earlier blocks first is better.
- 	 ???  Basic blocks are by no means guaranteed to be ordered in
- 	 optimal order for this iteration.  */
-       bb_index = bitmap_clear_first_set_bit (work_set);
- 
        /* Since the registration of NEW -> OLD name mappings is done
  	 separately from the call to update_ssa, when updating the SSA
  	 form, the basic blocks where new and/or old names are defined
--- 1679,1695 ----
  bitmap
  compute_idf (bitmap def_blocks, bitmap_head *dfs)
  {
!   bitmap_iterator bi, bi2;
    unsigned bb_index, i;
    bitmap phi_insertion_points;
  
    phi_insertion_points = BITMAP_ALLOC (NULL);
  
!   /* The initial workset is the DEF_BLOCKs, process that first,
!      seeding phi_insertion_points as the start of the worklist
!      for the iteration which then also serves as a visited set.  */
!   EXECUTE_IF_SET_IN_BITMAP (def_blocks, 0, bb_index, bi2)
      {
        /* Since the registration of NEW -> OLD name mappings is done
  	 separately from the call to update_ssa, when updating the SSA
  	 form, the basic blocks where new and/or old names are defined
*************** compute_idf (bitmap def_blocks, bitmap_h
*** 1717,1724 ****
  	 as well.  That makes iterating over the DFS bitmap preferential
  	 to whole bitmap operations involving also phi_insertion_points.  */
        EXECUTE_IF_SET_IN_BITMAP (&dfs[bb_index], 0, i, bi)
  	if (bitmap_set_bit (phi_insertion_points, i))
! 	  bitmap_set_bit (work_set, i);
      }
  
    return phi_insertion_points;
--- 1704,1730 ----
  	 as well.  That makes iterating over the DFS bitmap preferential
  	 to whole bitmap operations involving also phi_insertion_points.  */
        EXECUTE_IF_SET_IN_BITMAP (&dfs[bb_index], 0, i, bi)
+ 	bitmap_set_bit (phi_insertion_points, i);
+     }
+ 
+   /* Seed the work set with the initial phi_insertion_points.  */
+   auto_vec<int, 64> work_set (n_basic_blocks_for_fn (cfun));
+   EXECUTE_IF_SET_IN_BITMAP (phi_insertion_points, 0, i, bi)
+     work_set.quick_push (i);
+ 
+   /* Pop a block off the workset, add every block that appears in
+      the original block's DF that we have not already processed to
+      the workset.  Iterate until the workset is empty.   Blocks
+      which are added to the workset are potential sites for
+      PHI nodes.  */
+   while (!work_set.is_empty ())
+     {
+       bb_index = work_set.pop ();
+       gcc_checking_assert (bb_index
+ 			   < (unsigned) last_basic_block_for_fn (cfun));
+       EXECUTE_IF_SET_IN_BITMAP (&dfs[bb_index], 0, i, bi)
  	if (bitmap_set_bit (phi_insertion_points, i))
! 	  work_set.quick_push (i);
      }
  
    return phi_insertion_points;
diff -Nrcpad gcc-16-20250817/gcc/cobol/ChangeLog gcc-16-20250824/gcc/cobol/ChangeLog
*** gcc-16-20250817/gcc/cobol/ChangeLog	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/cobol/ChangeLog	Sun Aug 24 22:32:19 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-08-20  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* genutil.cc (get_binary_value): Fix a comment.
+ 	* parse.y: udf_args_valid(): Fix loc calculation.
+ 	* symbols.cc (assert): extend_66_capacity(): Avoid assert(e < e2) in
+ 	-O0 build until symbol_table expansion is fixed.
+ 
  2025-08-15  Robert Dubner  <rdubner@symas.com>
  
  	* genapi.h (parser_call_exception_end): Remove obsolete comment.
diff -Nrcpad gcc-16-20250817/gcc/cobol/genutil.cc gcc-16-20250824/gcc/cobol/genutil.cc
*** gcc-16-20250817/gcc/cobol/genutil.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/cobol/genutil.cc	Sun Aug 24 22:32:19 2025
*************** get_binary_value( tree value,
*** 819,825 ****
            }
          ELSE
            {
!           // We are dealing with an ordinary NumericEdited value
            gg_assign(pointer, source_address);
  
            if( rdigits )
--- 819,825 ----
            }
          ELSE
            {
!           // We are dealing with an ordinary NumericDisplay value
            gg_assign(pointer, source_address);
  
            if( rdigits )
diff -Nrcpad gcc-16-20250817/gcc/cobol/parse.y gcc-16-20250824/gcc/cobol/parse.y
*** gcc-16-20250817/gcc/cobol/parse.y	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/cobol/parse.y	Sun Aug 24 22:32:19 2025
*************** current_t::udf_args_valid( const cbl_lab
*** 11959,11965 ****
      if( arg.field ) { // else omitted
        auto tgt = cbl_field_of(symbol_at(udf.linkage_fields.at(i).isym));
        if( ! valid_move(tgt, arg.field) ) {
! 	auto loc = symbol_field_location(field_index(arg.field));
  	error_msg(loc, "FUNCTION %s argument %zu, '%s' cannot be passed to %s, type %s",
  		  L->name, i, arg.field->pretty_name(),
  		  tgt->pretty_name(), 3 + cbl_field_type_str(tgt->type) );
--- 11959,11968 ----
      if( arg.field ) { // else omitted
        auto tgt = cbl_field_of(symbol_at(udf.linkage_fields.at(i).isym));
        if( ! valid_move(tgt, arg.field) ) {
! 	auto loc = current_location;
!         if( ! is_temporary(arg.field) ) {
!           loc = symbol_field_location(field_index(arg.field));
!         }
  	error_msg(loc, "FUNCTION %s argument %zu, '%s' cannot be passed to %s, type %s",
  		  L->name, i, arg.field->pretty_name(),
  		  tgt->pretty_name(), 3 + cbl_field_type_str(tgt->type) );
diff -Nrcpad gcc-16-20250817/gcc/cobol/symbols.cc gcc-16-20250824/gcc/cobol/symbols.cc
*** gcc-16-20250817/gcc/cobol/symbols.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/cobol/symbols.cc	Sun Aug 24 22:32:19 2025
*************** extend_66_capacity( cbl_field_t *alias )
*** 1598,1604 ****
--- 1598,1614 ----
    symbol_elem_t *e = symbol_at(alias->parent);
    symbol_elem_t *e2 =
      reinterpret_cast<symbol_elem_t*>(const_cast<char*>(alias->data.picture));
+ #ifndef __OPTIMIZE__
+ #pragma message "The assert(e < e2) needs fixing"
+   // The following assert fails when valgrind is involved.  This is the known
+   // problem of expecting mmap() to put new memory maps after older memory
+   // maps; that assumption fails when valgrind is involved.
+ 
+   // For now I am defeating the assert when using -O0 so that I can run the
+   // NIST "make valgrind" tests.  But this should be fixed so that the
+   // symbol table index is used, not the entry locations.
    assert(e < e2);
+ #endif
    alias->data.picture = NULL;
  
    capacity_of cap;
diff -Nrcpad gcc-16-20250817/gcc/common/config/pru/pru-common.cc gcc-16-20250824/gcc/common/config/pru/pru-common.cc
*** gcc-16-20250817/gcc/common/config/pru/pru-common.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/common/config/pru/pru-common.cc	Sun Aug 24 22:32:19 2025
*************** along with GCC; see the file COPYING3.
*** 28,34 ****
  #include "flags.h"
  
  #undef TARGET_DEFAULT_TARGET_FLAGS
! #define TARGET_DEFAULT_TARGET_FLAGS		(MASK_OPT_LOOP)
  
  #undef TARGET_EXCEPT_UNWIND_INFO
  #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
--- 28,35 ----
  #include "flags.h"
  
  #undef TARGET_DEFAULT_TARGET_FLAGS
! #define TARGET_DEFAULT_TARGET_FLAGS \
!   (MASK_OPT_LOOP | MASK_OPT_MUL | MASK_OPT_FILLZERO)
  
  #undef TARGET_EXCEPT_UNWIND_INFO
  #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
diff -Nrcpad gcc-16-20250817/gcc/common.opt gcc-16-20250824/gcc/common.opt
*** gcc-16-20250817/gcc/common.opt	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/common.opt	Sun Aug 24 22:32:19 2025
*************** bool flag_opts_finished
*** 205,219 ****
  
  ; What the sanitizer should instrument
  Variable
! unsigned int flag_sanitize
  
  ; What sanitizers should recover from errors
  Variable
! unsigned int flag_sanitize_recover = (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT | SANITIZE_KERNEL_ADDRESS | SANITIZE_KERNEL_HWADDRESS) & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN)
  
  ; What sanitizers should use __builtin_trap () instead of runtime diagnostics
  Variable
! unsigned int flag_sanitize_trap
  
  ; Flag whether a prefix has been added to dump_base_name
  Variable
--- 205,219 ----
  
  ; What the sanitizer should instrument
  Variable
! sanitize_code_type flag_sanitize
  
  ; What sanitizers should recover from errors
  Variable
! sanitize_code_type flag_sanitize_recover = (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT | SANITIZE_KERNEL_ADDRESS | SANITIZE_KERNEL_HWADDRESS) & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN)
  
  ; What sanitizers should use __builtin_trap () instead of runtime diagnostics
  Variable
! sanitize_code_type flag_sanitize_trap
  
  ; Flag whether a prefix has been added to dump_base_name
  Variable
*************** fdiagnostics-show-nesting-levels
*** 1632,1637 ****
--- 1632,1644 ----
  Common Var(flag_diagnostics_show_nesting_levels) Init(0)
  Show nesting levels as numbers when showing nested diagnostics.
  
+ fdiagnostics-show-context
+ Common Alias(fdiagnostics-show-context=,1,0)
+ 
+ fdiagnostics-show-context=
+ Common Joined RejectNegative UInteger Var(flag_diagnostics_show_context) Init(0)
+ Collect and print more context information for diagnostics.
+ 
  fdisable-
  Common Joined RejectNegative Var(common_deferred_options) Defer
  -fdisable-[tree|rtl|ipa]-<pass>=range1+range2	Disable an optimization pass.
diff -Nrcpad gcc-16-20250817/gcc/common.opt.urls gcc-16-20250824/gcc/common.opt.urls
*** gcc-16-20250817/gcc/common.opt.urls	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/common.opt.urls	Sun Aug 24 22:32:19 2025
*************** UrlSuffix(gcc/Diagnostic-Message-Formatt
*** 649,654 ****
--- 649,660 ----
  fdiagnostics-show-nesting-levels
  UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-nesting-levels)
  
+ fdiagnostics-show-context
+ UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-context)
+ 
+ fdiagnostics-show-context=
+ UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-context)
+ 
  fdisable-
  UrlSuffix(gcc/Developer-Options.html#index-fdisable-)
  
diff -Nrcpad gcc-16-20250817/gcc/config/aarch64/aarch64-cc-fusion.cc gcc-16-20250824/gcc/config/aarch64/aarch64-cc-fusion.cc
*** gcc-16-20250817/gcc/config/aarch64/aarch64-cc-fusion.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/aarch64/aarch64-cc-fusion.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,297 ****
- // Pass to fuse CC operations with other instructions.
- // Copyright (C) 2021-2025 Free Software Foundation, Inc.
- //
- // This file is part of GCC.
- //
- // GCC is free software; you can redistribute it and/or modify it under
- // the terms of the GNU General Public License as published by the Free
- // Software Foundation; either version 3, or (at your option) any later
- // version.
- //
- // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- // WARRANTY; without even the implied warranty of MERCHANTABILITY or
- // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- // for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with GCC; see the file COPYING3.  If not see
- // <http://www.gnu.org/licenses/>.
- 
- // This pass looks for sequences of the form:
- //
- //    A: (set (reg R1) X1)
- //    B: ...instructions that might change the value of X1...
- //    C: (set (reg CC) X2) // X2 uses R1
- //
- // and tries to change them to:
- //
- //    C': [(set (reg CC) X2')
- //         (set (reg R1) X1)]
- //    B: ...instructions that might change the value of X1...
- //
- // where X2' is the result of replacing R1 with X1 in X2.
- //
- // This sequence occurs in SVE code in two important cases:
- //
- // (a) Sometimes, to deal correctly with overflow, we need to increment
- //     an IV after a WHILELO rather than before it.  In this case:
- //     - A is a WHILELO,
- //     - B includes an IV increment and
- //     - C is a separate PTEST.
- //
- // (b) ACLE code of the form:
- //
- //       svbool_t ok = svrdffr ();
- //       if (svptest_last (pg, ok))
- //         ...
- //
- //     must, for performance reasons, be code-generated as:
- //
- //       RDFFRS Pok.B, Pg/Z
- //       ...branch on flags result...
- //
- //     without a separate PTEST of Pok.  In this case:
- //     - A is an aarch64_rdffr
- //     - B includes an aarch64_update_ffrt
- //     - C is a separate PTEST
- //
- // Combine can handle this optimization if B doesn't exist and if A and
- // C are in the same BB.  This pass instead handles cases where B does
- // exist and cases where A and C are in different BBs of the same EBB.
- 
- #define IN_TARGET_CODE 1
- 
- #define INCLUDE_ALGORITHM
- #define INCLUDE_FUNCTIONAL
- #define INCLUDE_ARRAY
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "rtl.h"
- #include "df.h"
- #include "rtl-ssa.h"
- #include "tree-pass.h"
- 
- using namespace rtl_ssa;
- 
- namespace {
- const pass_data pass_data_cc_fusion =
- {
-   RTL_PASS, // type
-   "cc_fusion", // name
-   OPTGROUP_NONE, // optinfo_flags
-   TV_NONE, // tv_id
-   0, // properties_required
-   0, // properties_provided
-   0, // properties_destroyed
-   0, // todo_flags_start
-   TODO_df_finish, // todo_flags_finish
- };
- 
- // Class that represents one run of the pass.
- class cc_fusion
- {
- public:
-   cc_fusion ()  : m_parallel () {}
-   void execute ();
- 
- private:
-   rtx optimizable_set (const insn_info *);
-   bool parallelize_insns (def_info *, rtx, def_info *, rtx);
-   void optimize_cc_setter (def_info *, rtx);
- 
-   // A spare PARALLEL rtx, or null if none.
-   rtx m_parallel;
- };
- 
- // See whether INSN is a single_set that we can optimize.  Return the
- // set if so, otherwise return null.
- rtx
- cc_fusion::optimizable_set (const insn_info *insn)
- {
-   if (!insn->can_be_optimized ()
-       || insn->is_asm ()
-       || insn->has_volatile_refs ()
-       || insn->has_pre_post_modify ())
-     return NULL_RTX;
- 
-   return single_set (insn->rtl ());
- }
- 
- // CC_SET is a single_set that sets (only) CC_DEF; OTHER_SET is likewise
- // a single_set that sets (only) OTHER_DEF.  CC_SET is known to set the
- // CC register and the instruction that contains CC_SET is known to use
- // OTHER_DEF.  Try to do CC_SET and OTHER_SET in parallel.
- bool
- cc_fusion::parallelize_insns (def_info *cc_def, rtx cc_set,
- 			      def_info *other_def, rtx other_set)
- {
-   auto attempt = crtl->ssa->new_change_attempt ();
- 
-   insn_info *cc_insn = cc_def->insn ();
-   insn_info *other_insn = other_def->insn ();
-   if (dump_file && (dump_flags & TDF_DETAILS))
-     fprintf (dump_file, "trying to parallelize insn %d and insn %d\n",
- 	     other_insn->uid (), cc_insn->uid ());
- 
-   // Try to substitute OTHER_SET into CC_INSN.
-   insn_change_watermark rtl_watermark;
-   rtx_insn *cc_rtl = cc_insn->rtl ();
-   insn_propagation prop (cc_rtl, SET_DEST (other_set),
- 			 SET_SRC (other_set));
-   if (!prop.apply_to_pattern (&PATTERN (cc_rtl))
-       || prop.num_replacements == 0)
-     {
-       if (dump_file && (dump_flags & TDF_DETAILS))
- 	fprintf (dump_file, "-- failed to substitute all uses of r%d\n",
- 		 other_def->regno ());
-       return false;
-     }
- 
-   // Restrict the uses to those outside notes.
-   use_array cc_uses = remove_note_accesses (attempt, cc_insn->uses ());
-   use_array other_set_uses = remove_note_accesses (attempt,
- 						   other_insn->uses ());
- 
-   // Remove the use of the substituted value.
-   access_array_builder uses_builder (attempt);
-   uses_builder.reserve (cc_uses.size ());
-   for (use_info *use : cc_uses)
-     if (use->def () != other_def)
-       uses_builder.quick_push (use);
-   cc_uses = use_array (uses_builder.finish ());
- 
-   // Get the list of uses for the new instruction.
-   insn_change cc_change (cc_insn);
-   cc_change.new_uses = merge_access_arrays (attempt, other_set_uses, cc_uses);
-   if (!cc_change.new_uses.is_valid ())
-     {
-       if (dump_file && (dump_flags & TDF_DETAILS))
- 	fprintf (dump_file, "-- cannot merge uses\n");
-       return false;
-     }
- 
-   // The instruction initially defines just two registers.  recog can add
-   // extra clobbers if necessary.
-   auto_vec<access_info *, 2> new_defs;
-   new_defs.quick_push (cc_def);
-   new_defs.quick_push (other_def);
-   sort_accesses (new_defs);
-   cc_change.new_defs = def_array (access_array (new_defs));
- 
-   // Make sure there is somewhere that the new instruction could live.
-   auto other_change = insn_change::delete_insn (other_insn);
-   insn_change *changes[] = { &other_change, &cc_change };
-   cc_change.move_range = cc_insn->ebb ()->insn_range ();
-   if (!restrict_movement (cc_change, ignore_changing_insns (changes)))
-     {
-       if (dump_file && (dump_flags & TDF_DETAILS))
- 	fprintf (dump_file, "-- cannot satisfy all definitions and uses\n");
-       return false;
-     }
- 
-   // Tentatively install the new pattern.  By convention, the CC set
-   // must be first.
-   if (m_parallel)
-     {
-       XVECEXP (m_parallel, 0, 0) = cc_set;
-       XVECEXP (m_parallel, 0, 1) = other_set;
-     }
-   else
-     {
-       rtvec vec = gen_rtvec (2, cc_set, other_set);
-       m_parallel = gen_rtx_PARALLEL (VOIDmode, vec);
-     }
-   validate_change (cc_rtl, &PATTERN (cc_rtl), m_parallel, 1);
- 
-   // These routines report failures themselves.
-   if (!recog (attempt, cc_change, ignore_changing_insns (changes))
-       || !changes_are_worthwhile (changes)
-       || !crtl->ssa->verify_insn_changes (changes))
-     return false;
- 
-   remove_reg_equal_equiv_notes (cc_rtl);
-   confirm_change_group ();
-   crtl->ssa->change_insns (changes);
-   m_parallel = NULL_RTX;
-   return true;
- }
- 
- // Try to optimize the instruction that contains CC_DEF, where CC_DEF describes
- // a definition of the CC register by CC_SET.
- void
- cc_fusion::optimize_cc_setter (def_info *cc_def, rtx cc_set)
- {
-   // Search the registers used by the CC setter for an easily-substitutable
-   // def-use chain.
-   for (use_info *other_use : cc_def->insn ()->uses ())
-     if (def_info *other_def = other_use->def ())
-       if (other_use->regno () != CC_REGNUM
- 	  && other_def->ebb () == cc_def->ebb ())
- 	if (rtx other_set = optimizable_set (other_def->insn ()))
- 	  {
- 	    rtx dest = SET_DEST (other_set);
- 	    if (REG_P (dest)
- 		&& REGNO (dest) == other_def->regno ()
- 		&& REG_NREGS (dest) == 1
- 		&& parallelize_insns (cc_def, cc_set, other_def, other_set))
- 	      return;
- 	  }
- }
- 
- // Run the pass on the current function.
- void
- cc_fusion::execute ()
- {
-   // Initialization.
-   calculate_dominance_info (CDI_DOMINATORS);
-   df_analyze ();
-   crtl->ssa = new rtl_ssa::function_info (cfun);
- 
-   // Walk through all instructions that set CC.  Look for a PTEST instruction
-   // that we can optimize.
-   //
-   // ??? The PTEST test isn't needed for correctness, but it ensures that the
-   // pass no effect on non-SVE code.
-   for (def_info *def : crtl->ssa->reg_defs (CC_REGNUM))
-     if (rtx cc_set = optimizable_set (def->insn ()))
-       if (REG_P (SET_DEST (cc_set))
- 	  && REGNO (SET_DEST (cc_set)) == CC_REGNUM
- 	  && GET_CODE (SET_SRC (cc_set)) == UNSPEC
- 	  && XINT (SET_SRC (cc_set), 1) == UNSPEC_PTEST)
- 	optimize_cc_setter (def, cc_set);
- 
-   // Finalization.
-   crtl->ssa->perform_pending_updates ();
-   free_dominance_info (CDI_DOMINATORS);
- }
- 
- class pass_cc_fusion : public rtl_opt_pass
- {
- public:
-   pass_cc_fusion (gcc::context *ctxt)
-     : rtl_opt_pass (pass_data_cc_fusion, ctxt)
-   {}
- 
-   // opt_pass methods:
-   virtual bool gate (function *) { return TARGET_SVE && optimize >= 2; }
-   virtual unsigned int execute (function *);
- };
- 
- unsigned int
- pass_cc_fusion::execute (function *)
- {
-   cc_fusion ().execute ();
-   return 0;
- }
- 
- } // end namespace
- 
- // Create a new CC fusion pass instance.
- 
- rtl_opt_pass *
- make_pass_cc_fusion (gcc::context *ctxt)
- {
-   return new pass_cc_fusion (ctxt);
- }
--- 0 ----
diff -Nrcpad gcc-16-20250817/gcc/config/aarch64/aarch64-passes.def gcc-16-20250824/gcc/config/aarch64/aarch64-passes.def
*** gcc-16-20250817/gcc/config/aarch64/aarch64-passes.def	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/aarch64/aarch64-passes.def	Sun Aug 24 22:32:19 2025
*************** INSERT_PASS_BEFORE (pass_reorder_blocks,
*** 24,29 ****
  INSERT_PASS_BEFORE (pass_late_thread_prologue_and_epilogue, 1, pass_switch_pstate_sm);
  INSERT_PASS_BEFORE (pass_late_thread_prologue_and_epilogue, 1, pass_late_track_speculation);
  INSERT_PASS_BEFORE (pass_shorten_branches, 1, pass_insert_bti);
- INSERT_PASS_AFTER (pass_if_after_combine, 1, pass_cc_fusion);
  INSERT_PASS_BEFORE (pass_early_remat, 1, pass_ldp_fusion);
  INSERT_PASS_BEFORE (pass_peephole2, 1, pass_ldp_fusion);
--- 24,28 ----
diff -Nrcpad gcc-16-20250817/gcc/config/aarch64/aarch64-protos.h gcc-16-20250824/gcc/config/aarch64/aarch64-protos.h
*** gcc-16-20250817/gcc/config/aarch64/aarch64-protos.h	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/aarch64/aarch64-protos.h	Sun Aug 24 22:32:19 2025
*************** rtl_opt_pass *make_pass_fma_steering (gc
*** 1237,1243 ****
  rtl_opt_pass *make_pass_track_speculation (gcc::context *);
  rtl_opt_pass *make_pass_late_track_speculation (gcc::context *);
  rtl_opt_pass *make_pass_insert_bti (gcc::context *ctxt);
- rtl_opt_pass *make_pass_cc_fusion (gcc::context *ctxt);
  rtl_opt_pass *make_pass_switch_pstate_sm (gcc::context *ctxt);
  rtl_opt_pass *make_pass_ldp_fusion (gcc::context *);
  
--- 1237,1242 ----
diff -Nrcpad gcc-16-20250817/gcc/config/aarch64/aarch64.cc gcc-16-20250824/gcc/config/aarch64/aarch64.cc
*** gcc-16-20250817/gcc/config/aarch64/aarch64.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/aarch64/aarch64.cc	Sun Aug 24 22:32:19 2025
*************** aarch64_multiply_add_p (vec_info *vinfo,
*** 17378,17390 ****
  
  static bool
  aarch64_bool_compound_p (vec_info *vinfo, stmt_vec_info stmt_info,
! 			 unsigned int vec_flags)
  {
    gassign *assign = dyn_cast<gassign *> (stmt_info->stmt);
    if (!assign
        || gimple_assign_rhs_code (assign) != BIT_AND_EXPR
!       || !STMT_VINFO_VECTYPE (stmt_info)
!       || !VECTOR_BOOLEAN_TYPE_P (STMT_VINFO_VECTYPE (stmt_info)))
      return false;
  
    for (int i = 1; i < 3; ++i)
--- 17378,17391 ----
  
  static bool
  aarch64_bool_compound_p (vec_info *vinfo, stmt_vec_info stmt_info,
! 			 slp_tree node, unsigned int vec_flags)
  {
    gassign *assign = dyn_cast<gassign *> (stmt_info->stmt);
    if (!assign
+       || !node
        || gimple_assign_rhs_code (assign) != BIT_AND_EXPR
!       || !SLP_TREE_VECTYPE (node)
!       || !VECTOR_BOOLEAN_TYPE_P (SLP_TREE_VECTYPE (node)))
      return false;
  
    for (int i = 1; i < 3; ++i)
*************** aarch64_adjust_stmt_cost (vec_info *vinf
*** 17723,17729 ****
  
  	  /* For vector boolean ANDs with a compare operand we just need
  	     one insn.  */
! 	  if (aarch64_bool_compound_p (vinfo, stmt_info, vec_flags))
  	    return 0;
  	}
  
--- 17724,17730 ----
  
  	  /* For vector boolean ANDs with a compare operand we just need
  	     one insn.  */
! 	  if (aarch64_bool_compound_p (vinfo, stmt_info, node, vec_flags))
  	    return 0;
  	}
  
*************** aarch64_vector_costs::count_ops (unsigne
*** 17804,17810 ****
  
        /* Assume that bool AND with compare operands will become a single
  	 operation.  */
!       if (aarch64_bool_compound_p (m_vinfo, stmt_info, m_vec_flags))
  	return;
      }
  
--- 17805,17811 ----
  
        /* Assume that bool AND with compare operands will become a single
  	 operation.  */
!       if (aarch64_bool_compound_p (m_vinfo, stmt_info, node, m_vec_flags))
  	return;
      }
  
*************** aarch64_vector_costs::add_stmt_cost (int
*** 18045,18050 ****
--- 18046,18062 ----
  				     tree vectype, int misalign,
  				     vect_cost_model_location where)
  {
+   /* When costing for scalars, vectype will be NULL; so look up the type via
+      stmt_info's statement.  */
+   if (m_costing_for_scalar && stmt_info)
+     {
+       gcc_assert (!vectype);
+       /* This won't work for e.g. gconds or other statements without a lhs,
+ 	 but those only work on GPR anyway and this is the best we can do.  */
+       if (tree lhs = gimple_get_lhs (STMT_VINFO_STMT (stmt_info)))
+ 	vectype = TREE_TYPE (lhs);
+     }
+ 
    fractional_cost stmt_cost
      = aarch64_builtin_vectorization_cost (kind, vectype, misalign);
  
diff -Nrcpad gcc-16-20250817/gcc/config/aarch64/aarch64.md gcc-16-20250824/gcc/config/aarch64/aarch64.md
*** gcc-16-20250817/gcc/config/aarch64/aarch64.md	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/aarch64/aarch64.md	Sun Aug 24 22:32:19 2025
***************
*** 441,446 ****
--- 441,456 ----
     ; must not operate on inactive inputs if doing so could induce a fault.
     (SVE_STRICT_GP 1)])
  
+ ;; These constants are used as a const_int in MTE instructions
+ (define_constants
+   [; 0xf0ff...
+    ; Tag mask for the 4-bit tag stored in the top 8 bits of a pointer.
+    (MEMTAG_TAG_MASK -1080863910568919041)
+ 
+    ;  0x00ff...
+    ; Tag mask 56-bit address used by subp instruction.
+    (MEMTAG_ADDR_MASK 72057594037927935)])
+ 
  (include "constraints.md")
  (include "predicates.md")
  (include "iterators.md")
***************
*** 8530,8536 ****
    [(set (match_operand:DI 0 "register_operand" "=rk")
  	(ior:DI
  	 (and:DI (match_operand:DI 1 "register_operand" "rk")
! 		 (const_int -1080863910568919041)) ;; 0xf0ff...
  	 (ashift:DI (unspec:QI [(match_operand:DI 2 "register_operand" "r")]
  		     UNSPEC_GEN_TAG_RND)
  		    (const_int 56))))]
--- 8540,8546 ----
    [(set (match_operand:DI 0 "register_operand" "=rk")
  	(ior:DI
  	 (and:DI (match_operand:DI 1 "register_operand" "rk")
! 		 (const_int MEMTAG_TAG_MASK))
  	 (ashift:DI (unspec:QI [(match_operand:DI 2 "register_operand" "r")]
  		     UNSPEC_GEN_TAG_RND)
  		    (const_int 56))))]
***************
*** 8573,8581 ****
    [(set (match_operand:DI 0 "register_operand" "=r")
  	(minus:DI
  	  (and:DI (match_operand:DI 1 "register_operand" "rk")
! 		  (const_int 72057594037927935)) ;; 0x00ff...
  	  (and:DI (match_operand:DI 2 "register_operand" "rk")
! 		  (const_int 72057594037927935))))] ;; 0x00ff...
    "TARGET_MEMTAG"
    "subp\\t%0, %1, %2"
    [(set_attr "type" "memtag")]
--- 8583,8591 ----
    [(set (match_operand:DI 0 "register_operand" "=r")
  	(minus:DI
  	  (and:DI (match_operand:DI 1 "register_operand" "rk")
! 		  (const_int MEMTAG_ADDR_MASK))
  	  (and:DI (match_operand:DI 2 "register_operand" "rk")
! 		  (const_int MEMTAG_ADDR_MASK))))]
    "TARGET_MEMTAG"
    "subp\\t%0, %1, %2"
    [(set_attr "type" "memtag")]
***************
*** 8585,8591 ****
  (define_insn "ldg"
    [(set (match_operand:DI 0 "register_operand" "+r")
  	(ior:DI
! 	 (and:DI (match_dup 0) (const_int -1080863910568919041)) ;; 0xf0ff...
  	 (ashift:DI
  	  (mem:QI (unspec:DI
  	   [(and:DI (plus:DI (match_operand:DI 1 "register_operand" "rk")
--- 8595,8601 ----
  (define_insn "ldg"
    [(set (match_operand:DI 0 "register_operand" "+r")
  	(ior:DI
! 	 (and:DI (match_dup 0) (const_int MEMTAG_TAG_MASK))
  	 (ashift:DI
  	  (mem:QI (unspec:DI
  	   [(and:DI (plus:DI (match_operand:DI 1 "register_operand" "rk")
diff -Nrcpad gcc-16-20250817/gcc/config/aarch64/t-aarch64 gcc-16-20250824/gcc/config/aarch64/t-aarch64
*** gcc-16-20250817/gcc/config/aarch64/t-aarch64	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/aarch64/t-aarch64	Sun Aug 24 22:32:19 2025
*************** aarch-bti-insert.o: $(srcdir)/config/arm
*** 190,201 ****
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(srcdir)/config/arm/aarch-bti-insert.cc
  
- aarch64-cc-fusion.o: $(srcdir)/config/aarch64/aarch64-cc-fusion.cc \
-     $(CONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(BACKEND_H) $(RTL_H) $(DF_H) \
-     $(RTL_SSA_H) tree-pass.h
- 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
- 		$(srcdir)/config/aarch64/aarch64-cc-fusion.cc
- 
  aarch64-early-ra.o: $(srcdir)/config/aarch64/aarch64-early-ra.cc \
      $(CONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(BACKEND_H) $(RTL_H) $(DF_H) \
      $(RTL_SSA_H) tree-pass.h
--- 190,195 ----
diff -Nrcpad gcc-16-20250817/gcc/config/avr/specs.h gcc-16-20250824/gcc/config/avr/specs.h
*** gcc-16-20250817/gcc/config/avr/specs.h	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/avr/specs.h	Sun Aug 24 22:32:19 2025
*************** along with GCC; see the file COPYING3.
*** 57,63 ****
    "%(asm_errata_skip) "
  
  #define LINK_RELAX_SPEC                         \
!   "%{mrelax:--relax} "
  
  #undef  LINK_SPEC
  #define LINK_SPEC                               \
--- 57,63 ----
    "%(asm_errata_skip) "
  
  #define LINK_RELAX_SPEC                         \
!   "%{!r:%{mrelax:--relax}} "
  
  #undef  LINK_SPEC
  #define LINK_SPEC                               \
diff -Nrcpad gcc-16-20250817/gcc/config/i386/i386-features.cc gcc-16-20250824/gcc/config/i386/i386-features.cc
*** gcc-16-20250817/gcc/config/i386/i386-features.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/i386/i386-features.cc	Sun Aug 24 22:32:20 2025
*************** ix86_broadcast_inner (rtx op, machine_mo
*** 3684,3693 ****
    return op;
  }
  
! /* Replace CALL instruction in TLS_CALL_INSNS with SET from SRC.  */
  
  static void
! replace_tls_call (rtx src, auto_bitmap &tls_call_insns)
  {
    bitmap_iterator bi;
    unsigned int id;
--- 3684,3695 ----
    return op;
  }
  
! /* Replace CALL instruction in TLS_CALL_INSNS with SET from SRC and
!    put the updated instruction in UPDATED_TLS_INSNS.  */
  
  static void
! replace_tls_call (rtx src, auto_bitmap &tls_call_insns,
! 		  auto_bitmap &updated_tls_insns)
  {
    bitmap_iterator bi;
    unsigned int id;
*************** replace_tls_call (rtx src, auto_bitmap &
*** 3716,3721 ****
--- 3718,3726 ----
        if (recog_memoized (set_insn) < 0)
  	gcc_unreachable ();
  
+       /* Put SET_INSN in UPDATED_TLS_INSNS.  */
+       bitmap_set_bit (updated_tls_insns, INSN_UID (set_insn));
+ 
        if (dump_file)
  	{
  	  fprintf (dump_file, "\nReplace:\n\n");
*************** replace_tls_call (rtx src, auto_bitmap &
*** 3732,3746 ****
      }
  }
  
  /* Generate a TLS call of KIND with VAL and copy the call result to DEST,
     at entry of the nearest dominator for basic block map BBS, which is in
     the fake loop that contains the whole function, so that there is only
!    a single TLS CALL of KIND with VAL in the whole function.  If
!    TLSDESC_SET isn't nullptr, insert it before the TLS call.  */
  
  static void
  ix86_place_single_tls_call (rtx dest, rtx val, x86_cse_kind kind,
! 			    bitmap bbs, rtx tlsdesc_set = nullptr)
  {
    basic_block bb = nearest_common_dominator_for_set (CDI_DOMINATORS, bbs);
    while (bb->loop_father->latch
--- 3737,3982 ----
      }
  }
  
+ /* Return the basic block which dominates all basic blocks which set
+    hard register REGNO used in basic block BB.  */
+ 
+ static basic_block
+ ix86_get_dominator_for_reg (unsigned int regno, basic_block bb)
+ {
+   basic_block set_bb;
+   auto_bitmap set_bbs;
+ 
+   /* Get all BBs which set REGNO and dominate the current BB from all
+      DEFs of REGNO.  */
+   for (df_ref def = DF_REG_DEF_CHAIN (regno);
+        def;
+        def = DF_REF_NEXT_REG (def))
+     if (!DF_REF_IS_ARTIFICIAL (def)
+ 	&& !DF_REF_FLAGS_IS_SET (def, DF_REF_MAY_CLOBBER)
+ 	&& !DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER))
+       {
+ 	set_bb = DF_REF_BB (def);
+ 	if (dominated_by_p (CDI_DOMINATORS, bb, set_bb))
+ 	  bitmap_set_bit (set_bbs, set_bb->index);
+       }
+ 
+   bb = nearest_common_dominator_for_set (CDI_DOMINATORS, set_bbs);
+   return bb;
+ }
+ 
+ /* Mark FLAGS register as live in DATA, a bitmap of live caller-saved
+    registers, if DEST is FLAGS register.  */
+ 
+ static void
+ ix86_check_flags_reg (rtx dest, const_rtx, void *data)
+ {
+   auto_bitmap *live_caller_saved_regs = (auto_bitmap *) data;
+   if (REG_P (dest) && REGNO (dest) == FLAGS_REG)
+     bitmap_set_bit (*live_caller_saved_regs, FLAGS_REG);
+ }
+ 
+ /* Emit a TLS_SET instruction of KIND in basic block BB.   Store the
+    insertion point in *BEFORE_P for emit_insn_before or in *AFTER_P
+    for emit_insn_after.  UPDATED_GNU_TLS_INSNS contains instructions
+    which replace the GNU TLS instructions.  UPDATED_GNU2_TLS_INSNS
+    contains instructions which replace the GNU2 TLS instructions.  */
+ 
+ static rtx_insn *
+ ix86_emit_tls_call (rtx tls_set, x86_cse_kind kind, basic_block bb,
+ 		    rtx_insn **before_p, rtx_insn **after_p,
+ 		    auto_bitmap &updated_gnu_tls_insns,
+ 		    auto_bitmap &updated_gnu2_tls_insns)
+ {
+   rtx_insn *tls_insn;
+ 
+   do
+     {
+       rtx_insn *insn = BB_HEAD (bb);
+       while (insn && !NONDEBUG_INSN_P (insn))
+ 	{
+ 	  if (insn == BB_END (bb))
+ 	    {
+ 	      /* This must be the beginning basic block:
+ 
+ 		 (note 4 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ 		 (note 2 4 26 2 NOTE_INSN_FUNCTION_BEG)
+ 
+ 		 or a basic block with only a label:
+ 
+ 		 (code_label 78 11 77 3 14 (nil) [1 uses])
+ 		 (note 77 78 54 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
+ 
+ 	       */
+ 	      gcc_assert (NOTE_P (insn)
+ 			  && (NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG
+ 			      || NOTE_KIND (insn) == NOTE_INSN_BASIC_BLOCK));
+ 	      insn = NULL;
+ 	      break;
+ 	    }
+ 	  insn = NEXT_INSN (insn);
+ 	}
+ 
+       /* TLS_GD and TLS_LD_BASE instructions are normal functions which
+ 	 clobber caller-saved registers.  TLSDESC instructions only
+ 	 clobber FLAGS.  If any registers clobbered by TLS instructions
+ 	 are live in this basic block, we must insert TLS instructions
+ 	 after all live registers clobbered are dead.  */
+ 
+       auto_bitmap live_caller_saved_regs;
+       bitmap in = df_live ? DF_LIVE_IN (bb) : DF_LR_IN (bb);
+ 
+       if (bitmap_bit_p (in, FLAGS_REG))
+ 	bitmap_set_bit (live_caller_saved_regs, FLAGS_REG);
+ 
+       unsigned int i;
+ 
+       /* Get all live caller-saved registers for TLS_GD and TLS_LD_BASE
+ 	 instructions.  */
+       if (kind != X86_CSE_TLSDESC)
+ 	for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ 	  if (call_used_regs[i]
+ 	      && !fixed_regs[i]
+ 	      && bitmap_bit_p (in, i))
+ 	    bitmap_set_bit (live_caller_saved_regs, i);
+ 
+       if (bitmap_empty_p (live_caller_saved_regs))
+ 	{
+ 	  if (insn == BB_HEAD (bb))
+ 	    {
+ 	      *before_p = insn;
+ 	      tls_insn = emit_insn_before (tls_set, insn);
+ 	    }
+ 	  else
+ 	    {
+ 	      /* Emit the TLS call after NOTE_INSN_FUNCTION_BEG in the
+ 		 beginning basic block:
+ 
+ 		 (note 4 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ 		 (note 2 4 26 2 NOTE_INSN_FUNCTION_BEG)
+ 
+ 		 or after NOTE_INSN_BASIC_BLOCK a basic block with only
+ 		 a label:
+ 
+ 		 (code_label 78 11 77 3 14 (nil) [1 uses])
+ 		 (note 77 78 54 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
+ 
+ 	       */
+ 	      insn = insn ? PREV_INSN (insn) : BB_END (bb);
+ 	      *after_p = insn;
+ 	      tls_insn = emit_insn_after (tls_set, insn);
+ 	    }
+ 	  return tls_insn;
+ 	}
+ 
+       bool repeat = false;
+ 
+       /* Search for REG_DEAD notes in this basic block.  */
+       FOR_BB_INSNS (bb, insn)
+ 	{
+ 	  if (!NONDEBUG_INSN_P (insn))
+ 	    continue;
+ 
+ 	  /* NB: Conditional jump is the only instruction which reads
+ 	     flags register and changes control flow.  We can never
+ 	     place the TLS call after unconditional jump.  */
+ 	  if (JUMP_P (insn))
+ 	    {
+ 	      /* This must be a conditional jump.  */
+ 	      rtx label = JUMP_LABEL (insn);
+ 	      if (label == nullptr
+ 		  || ANY_RETURN_P (label)
+ 		  || !(LABEL_P (label) || SYMBOL_REF_P (label)))
+ 		gcc_unreachable ();
+ 
+ 	      /* Place the call before all FLAGS_REG setting BBs since
+ 		 we can't place a call before nor after a conditional
+ 		 jump.  */
+ 	      bb = ix86_get_dominator_for_reg (FLAGS_REG, bb);
+ 
+ 	      /* Start over again.  */
+ 	      repeat = true;
+ 	      break;
+ 	    }
+ 
+ 	  if (bitmap_bit_p (updated_gnu_tls_insns, INSN_UID (insn)))
+ 	    {
+ 	      /* Insert the __tls_get_addr call before INSN which
+ 		 replaces a __tls_get_addr call.  */
+ 	      *before_p = insn;
+ 	      tls_insn = emit_insn_before (tls_set, insn);
+ 	      return tls_insn;
+ 	    }
+ 
+ 	  if (bitmap_bit_p (updated_gnu2_tls_insns, INSN_UID (insn)))
+ 	    {
+ 	      /* Mark FLAGS register as dead since FLAGS register
+ 		 would be clobbered by the GNU2 TLS instruction.  */
+ 	      bitmap_clear_bit (live_caller_saved_regs, FLAGS_REG);
+ 	      continue;
+ 	    }
+ 
+ 	  /* Check if FLAGS register is live.  */
+ 	  note_stores (insn, ix86_check_flags_reg,
+ 		       &live_caller_saved_regs);
+ 
+ 	  rtx link;
+ 	  for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
+ 	    if (REG_NOTE_KIND (link) == REG_DEAD
+ 		&& REG_P (XEXP (link, 0)))
+ 	      {
+ 		/* Mark the live caller-saved register as dead.  */
+ 		for (i = REGNO (XEXP (link, 0));
+ 		     i < END_REGNO (XEXP (link, 0));
+ 		     i++)
+ 		  if (i < FIRST_PSEUDO_REGISTER)
+ 		    bitmap_clear_bit (live_caller_saved_regs, i);
+ 
+ 		if (bitmap_empty_p (live_caller_saved_regs))
+ 		  {
+ 		    *after_p = insn;
+ 		    tls_insn = emit_insn_after (tls_set, insn);
+ 		    return tls_insn;
+ 		  }
+ 	      }
+ 	}
+ 
+       /* NB: Start over again for conditional jump.  */
+       if (repeat)
+ 	continue;
+ 
+       gcc_assert (!bitmap_empty_p (live_caller_saved_regs));
+ 
+       /* If any live caller-saved registers aren't dead at the end of
+ 	 this basic block, get the basic block which dominates all
+ 	 basic blocks which set the remaining live registers.  */
+       auto_bitmap set_bbs;
+       bitmap_iterator bi;
+       unsigned int id;
+       EXECUTE_IF_SET_IN_BITMAP (live_caller_saved_regs, 0, id, bi)
+ 	{
+ 	  basic_block set_bb = ix86_get_dominator_for_reg (id, bb);
+ 	  bitmap_set_bit (set_bbs, set_bb->index);
+ 	}
+       bb = nearest_common_dominator_for_set (CDI_DOMINATORS, set_bbs);
+     }
+   while (true);
+ }
+ 
  /* Generate a TLS call of KIND with VAL and copy the call result to DEST,
     at entry of the nearest dominator for basic block map BBS, which is in
     the fake loop that contains the whole function, so that there is only
!    a single TLS CALL of KIND with VAL in the whole function.
!    UPDATED_GNU_TLS_INSNS contains instructions which replace the GNU TLS
!    instructions.  UPDATED_GNU2_TLS_INSNS contains instructions which
!    replace the GNU2 TLS instructions.  If TLSDESC_SET isn't nullptr,
!    insert it before the TLS call.  */
  
  static void
  ix86_place_single_tls_call (rtx dest, rtx val, x86_cse_kind kind,
! 			    auto_bitmap &bbs,
! 			    auto_bitmap &updated_gnu_tls_insns,
! 			    auto_bitmap &updated_gnu2_tls_insns,
! 			    rtx tlsdesc_set = nullptr)
  {
    basic_block bb = nearest_common_dominator_for_set (CDI_DOMINATORS, bbs);
    while (bb->loop_father->latch
*************** ix86_place_single_tls_call (rtx dest, rt
*** 3748,3764 ****
      bb = get_immediate_dominator (CDI_DOMINATORS,
  				  bb->loop_father->header);
  
-   rtx_insn *insn = BB_HEAD (bb);
-   while (insn && !NONDEBUG_INSN_P (insn))
-     {
-       if (insn == BB_END (bb))
- 	{
- 	  insn = NULL;
- 	  break;
- 	}
-       insn = NEXT_INSN (insn);
-     }
- 
    rtx rax = nullptr, rdi;
    rtx eqv = nullptr;
    rtx caddr;
--- 3984,3989 ----
*************** ix86_place_single_tls_call (rtx dest, rt
*** 3766,3772 ****
    rtx clob;
    rtx symbol;
    rtx tls;
-   rtx_insn *tls_insn;
  
    switch (kind)
      {
--- 3991,3996 ----
*************** ix86_place_single_tls_call (rtx dest, rt
*** 3808,3901 ****
        gcc_unreachable ();
      }
  
    rtx_insn *before = nullptr;
    rtx_insn *after = nullptr;
!   if (insn == BB_HEAD (bb))
!     before = insn;
!   else
!     after = insn ? PREV_INSN (insn) : BB_END (bb);
! 
!   /* TLS_GD and TLS_LD_BASE instructions are normal functions which
!      clobber caller-saved registers.  TLSDESC instructions only clobber
!      FLAGS.  If any registers clobbered by TLS instructions are live
!      in this basic block, we must insert TLS instructions after all live
!      registers clobbered are dead.  */
! 
!   auto_bitmap live_caller_saved_regs;
!   bitmap in = df_live ? DF_LIVE_IN (bb) : DF_LR_IN (bb);
! 
!   bool flags_live_p = bitmap_bit_p (in, FLAGS_REG);
! 
!   unsigned int i;
! 
!   /* Get all live caller-saved registers for TLS_GD and TLS_LD_BASE
!      instructions.  */
!   if (kind != X86_CSE_TLSDESC)
!     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
!       if (call_used_regs[i]
! 	  && !fixed_regs[i]
! 	  && bitmap_bit_p (in, i))
! 	bitmap_set_bit (live_caller_saved_regs, i);
! 
!   if (!bitmap_empty_p (live_caller_saved_regs))
!     {
!       /* Search for REG_DEAD notes in this basic block.  */
!       FOR_BB_INSNS (bb, insn)
! 	{
! 	  if (!NONDEBUG_INSN_P (insn))
! 	    continue;
! 
! 	  /* Check if FLAGS register is live.  */
! 	  set = single_set (insn);
! 	  if (set)
! 	    {
! 	      rtx dest = SET_DEST (set);
! 	      if (REG_P (dest) && REGNO (dest) == FLAGS_REG)
! 		flags_live_p = true;
! 	    }
! 
! 	  rtx link;
! 	  for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
! 	    if (REG_NOTE_KIND (link) == REG_DEAD
! 		&& REG_P (XEXP (link, 0)))
! 	      {
! 		/* Mark the live caller-saved register as dead.  */
! 		for (i = REGNO (XEXP (link, 0));
! 		     i < END_REGNO (XEXP (link, 0));
! 		     i++)
! 		  bitmap_clear_bit (live_caller_saved_regs, i);
! 
! 		/* Check if FLAGS register is dead.  */
! 		if (REGNO (XEXP (link, 0)) == FLAGS_REG)
! 		  flags_live_p = false;
! 
! 		if (bitmap_empty_p (live_caller_saved_regs))
! 		  {
! 		    /* All live caller-saved registers are dead after
! 		       this instruction.  Since TLS instructions
! 		       clobber FLAGS register, it must be dead where
! 		       the TLS will be inserted after.  */
! 		    if (flags_live_p)
! 		      gcc_unreachable ();
! 		    after = insn;
! 		    goto insert_after;
! 		  }
! 	      }
! 	}
! 
!       /* All live caller-saved registers should be dead at the end
! 	 of this basic block.  */
!       gcc_unreachable ();
!     }
! 
!   /* Emit the TLS CALL insn.  */
!   if (after)
!     {
! insert_after:
!       tls_insn = emit_insn_after (tls, after);
!     }
!   else
!     tls_insn = emit_insn_before (tls, before);
  
    rtx_insn *tlsdesc_insn = nullptr;
    if (tlsdesc_set)
--- 4032,4044 ----
        gcc_unreachable ();
      }
  
+   /* Emit the TLS CALL insn.  */
    rtx_insn *before = nullptr;
    rtx_insn *after = nullptr;
!   rtx_insn *tls_insn = ix86_emit_tls_call (tls, kind, bb, &before,
! 					   &after,
! 					   updated_gnu_tls_insns,
! 					   updated_gnu2_tls_insns);
  
    rtx_insn *tlsdesc_insn = nullptr;
    if (tlsdesc_set)
*************** insert_after:
*** 3936,3942 ****
  	    print_rtl_single (dump_file, tlsdesc_insn);
  	  print_rtl_single (dump_file, tls_insn);
  	  fprintf (dump_file, "\nbefore:\n\n");
! 	  print_rtl_single (dump_file, insn);
  	  fprintf (dump_file, "\n");
  	}
      }
--- 4079,4085 ----
  	    print_rtl_single (dump_file, tlsdesc_insn);
  	  print_rtl_single (dump_file, tls_insn);
  	  fprintf (dump_file, "\nbefore:\n\n");
! 	  print_rtl_single (dump_file, before);
  	  fprintf (dump_file, "\n");
  	}
      }
*************** pass_x86_cse::x86_cse (void)
*** 4213,4218 ****
--- 4356,4363 ----
    basic_block bb;
    rtx_insn *insn;
    unsigned int i;
+   auto_bitmap updated_gnu_tls_insns;
+   auto_bitmap updated_gnu2_tls_insns;
  
    df_set_flags (DF_DEFER_INSN_RESCAN);
  
*************** pass_x86_cse::x86_cse (void)
*** 4333,4339 ****
  	  case X86_CSE_TLS_LD_BASE:
  	  case X86_CSE_TLSDESC:
  	    broadcast_reg = gen_reg_rtx (load->mode);
! 	    replace_tls_call (broadcast_reg, load->insns);
  	    load->broadcast_reg = broadcast_reg;
  	    break;
  
--- 4478,4487 ----
  	  case X86_CSE_TLS_LD_BASE:
  	  case X86_CSE_TLSDESC:
  	    broadcast_reg = gen_reg_rtx (load->mode);
! 	    replace_tls_call (broadcast_reg, load->insns,
! 			      (load->kind == X86_CSE_TLSDESC
! 			       ? updated_gnu2_tls_insns
! 			       : updated_gnu_tls_insns));
  	    load->broadcast_reg = broadcast_reg;
  	    break;
  
*************** pass_x86_cse::x86_cse (void)
*** 4399,4404 ****
--- 4547,4554 ----
  					      load->val,
  					      load->kind,
  					      load->bbs,
+ 					      updated_gnu_tls_insns,
+ 					      updated_gnu2_tls_insns,
  					      PATTERN (load->def_insn));
  		  break;
  		case X86_CSE_VEC_DUP:
*************** pass_x86_cse::x86_cse (void)
*** 4442,4448 ****
  		  ix86_place_single_tls_call (load->broadcast_reg,
  					      load->val,
  					      load->kind,
! 					      load->bbs);
  		  break;
  		case X86_CSE_CONST0_VECTOR:
  		case X86_CSE_CONSTM1_VECTOR:
--- 4592,4600 ----
  		  ix86_place_single_tls_call (load->broadcast_reg,
  					      load->val,
  					      load->kind,
! 					      load->bbs,
! 					      updated_gnu_tls_insns,
! 					      updated_gnu2_tls_insns);
  		  break;
  		case X86_CSE_CONST0_VECTOR:
  		case X86_CSE_CONSTM1_VECTOR:
diff -Nrcpad gcc-16-20250817/gcc/config/i386/i386.h gcc-16-20250824/gcc/config/i386/i386.h
*** gcc-16-20250817/gcc/config/i386/i386.h	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/i386/i386.h	Sun Aug 24 22:32:20 2025
*************** extern const char *host_detect_local_cpu
*** 644,650 ****
    {"cpu_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \
    {"arch", "%{!march=*:-march=%(VALUE)}"},			   \
    {"arch_32", "%{" OPT_ARCH32 ":%{!march=*:-march=%(VALUE)}}"},	   \
!   {"arch_64", "%{" OPT_ARCH64 ":%{!march=*:-march=%(VALUE)}}"},
  
  /* Specs for the compiler proper */
  
--- 644,651 ----
    {"cpu_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \
    {"arch", "%{!march=*:-march=%(VALUE)}"},			   \
    {"arch_32", "%{" OPT_ARCH32 ":%{!march=*:-march=%(VALUE)}}"},	   \
!   {"arch_64", "%{" OPT_ARCH64 ":%{!march=*:-march=%(VALUE)}}"},    \
!   {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"},
  
  /* Specs for the compiler proper */
  
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/genopts/isa-evolution.in gcc-16-20250824/gcc/config/loongarch/genopts/isa-evolution.in
*** gcc-16-20250817/gcc/config/loongarch/genopts/isa-evolution.in	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/genopts/isa-evolution.in	Sun Aug 24 22:32:20 2025
***************
*** 2,5 ****
--- 2,6 ----
  2	26	div32		1.1		Support div.w[u] and mod.w[u] instructions with inputs not sign-extended.
  2	27	lam-bh		1.1		Support am{swap/add}[_db].{b/h} instructions.
  2	28	lamcas		1.1		Support amcas[_db].{b/h/w/d} instructions.
+ 2	30	scq		1.1		Support sc.q instruction.
  3	23	ld-seq-sa	1.1		Do not need load-load barriers (dbar 0x700).
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/loongarch-def.cc gcc-16-20250824/gcc/config/loongarch/loongarch-def.cc
*** gcc-16-20250817/gcc/config/loongarch/loongarch-def.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/loongarch-def.cc	Sun Aug 24 22:32:20 2025
*************** array_arch<loongarch_isa> loongarch_cpu_
*** 72,78 ****
  	    .simd_ (ISA_EXT_SIMD_LASX)
  	    .evolution_ (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA
  			 | OPTION_MASK_ISA_LAM_BH | OPTION_MASK_ISA_LAMCAS
! 			 | OPTION_MASK_ISA_FRECIPE))
      .set (ARCH_LA64V1_0,
  	  loongarch_isa ()
  	    .base_ (ISA_BASE_LA64)
--- 72,78 ----
  	    .simd_ (ISA_EXT_SIMD_LASX)
  	    .evolution_ (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA
  			 | OPTION_MASK_ISA_LAM_BH | OPTION_MASK_ISA_LAMCAS
! 			 | OPTION_MASK_ISA_FRECIPE | OPTION_MASK_ISA_SCQ))
      .set (ARCH_LA64V1_0,
  	  loongarch_isa ()
  	    .base_ (ISA_BASE_LA64)
*************** array_arch<loongarch_isa> loongarch_cpu_
*** 86,92 ****
  	    .simd_ (ISA_EXT_SIMD_LSX)
  	    .evolution_ (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA
  			 | OPTION_MASK_ISA_LAM_BH | OPTION_MASK_ISA_LAMCAS
! 			 | OPTION_MASK_ISA_FRECIPE));
  
  
  static inline loongarch_cache la464_cache ()
--- 86,92 ----
  	    .simd_ (ISA_EXT_SIMD_LSX)
  	    .evolution_ (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA
  			 | OPTION_MASK_ISA_LAM_BH | OPTION_MASK_ISA_LAMCAS
! 			 | OPTION_MASK_ISA_FRECIPE | OPTION_MASK_ISA_SCQ));
  
  
  static inline loongarch_cache la464_cache ()
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/loongarch-evolution.cc gcc-16-20250824/gcc/config/loongarch/loongarch-evolution.cc
*** gcc-16-20250817/gcc/config/loongarch/loongarch-evolution.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/loongarch-evolution.cc	Sun Aug 24 22:32:20 2025
*************** int la_evo_feature_masks[] = {
*** 32,37 ****
--- 32,38 ----
    OPTION_MASK_ISA_DIV32,
    OPTION_MASK_ISA_LAM_BH,
    OPTION_MASK_ISA_LAMCAS,
+   OPTION_MASK_ISA_SCQ,
    OPTION_MASK_ISA_LD_SEQ_SA,
  };
  
*************** const char* la_evo_macro_name[] = {
*** 40,45 ****
--- 41,47 ----
    "__loongarch_div32",
    "__loongarch_lam_bh",
    "__loongarch_lamcas",
+   "__loongarch_scq",
    "__loongarch_ld_seq_sa",
  };
  
*************** int la_evo_version_major[] = {
*** 48,53 ****
--- 50,56 ----
    1,    /* DIV32 */
    1,    /* LAM_BH */
    1,    /* LAMCAS */
+   1,    /* SCQ */
    1,    /* LD_SEQ_SA */
  };
  
*************** int la_evo_version_minor[] = {
*** 56,60 ****
--- 59,64 ----
    1,    /* DIV32 */
    1,    /* LAM_BH */
    1,    /* LAMCAS */
+   1,    /* SCQ */
    1,    /* LD_SEQ_SA */
  };
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/loongarch-evolution.h gcc-16-20250824/gcc/config/loongarch/loongarch-evolution.h
*** gcc-16-20250817/gcc/config/loongarch/loongarch-evolution.h	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/loongarch-evolution.h	Sun Aug 24 22:32:20 2025
*************** static constexpr struct {
*** 36,41 ****
--- 36,42 ----
    { 2, 1u << 26, OPTION_MASK_ISA_DIV32 },
    { 2, 1u << 27, OPTION_MASK_ISA_LAM_BH },
    { 2, 1u << 28, OPTION_MASK_ISA_LAMCAS },
+   { 2, 1u << 30, OPTION_MASK_ISA_SCQ },
    { 3, 1u << 23, OPTION_MASK_ISA_LD_SEQ_SA },
  };
  
*************** enum {
*** 58,65 ****
    EVO_DIV32 = 1,
    EVO_LAM_BH = 2,
    EVO_LAMCAS = 3,
!   EVO_LD_SEQ_SA = 4,
!   N_EVO_FEATURES = 5
  };
  
  /* Condition macros */
--- 59,67 ----
    EVO_DIV32 = 1,
    EVO_LAM_BH = 2,
    EVO_LAMCAS = 3,
!   EVO_SCQ = 4,
!   EVO_LD_SEQ_SA = 5,
!   N_EVO_FEATURES = 6
  };
  
  /* Condition macros */
*************** enum {
*** 71,76 ****
--- 73,80 ----
    (la_target.isa.evolution & OPTION_MASK_ISA_LAM_BH)
  #define ISA_HAS_LAMCAS \
    (la_target.isa.evolution & OPTION_MASK_ISA_LAMCAS)
+ #define ISA_HAS_SCQ \
+   (la_target.isa.evolution & OPTION_MASK_ISA_SCQ)
  #define ISA_HAS_LD_SEQ_SA \
    (la_target.isa.evolution & OPTION_MASK_ISA_LD_SEQ_SA)
  
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/loongarch-str.h gcc-16-20250824/gcc/config/loongarch/loongarch-str.h
*** gcc-16-20250817/gcc/config/loongarch/loongarch-str.h	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/loongarch-str.h	Sun Aug 24 22:32:20 2025
*************** along with GCC; see the file COPYING3.
*** 70,75 ****
--- 70,76 ----
  #define OPTSTR_DIV32	"div32"
  #define OPTSTR_LAM_BH	"lam-bh"
  #define OPTSTR_LAMCAS	"lamcas"
+ #define OPTSTR_SCQ	"scq"
  #define OPTSTR_LD_SEQ_SA	"ld-seq-sa"
  
  #endif /* LOONGARCH_STR_H */
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/loongarch.cc gcc-16-20250824/gcc/config/loongarch/loongarch.cc
*** gcc-16-20250817/gcc/config/loongarch/loongarch.cc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/loongarch.cc	Sun Aug 24 22:32:20 2025
*************** loongarch_print_operand_reloc (FILE *fil
*** 6222,6230 ****
     'Q'  Print R_LARCH_RELAX for TLS IE.
     'r'  Print address 12-31bit relocation associated with OP.
     'R'  Print address 32-51bit relocation associated with OP.
!    'T'	Print 'f' for (eq:CC ...), 't' for (ne:CC ...),
! 	      'z' for (eq:?I ...), 'n' for (ne:?I ...).
!    't'	Like 'T', but with the EQ/NE cases reversed
     'u'	Print a LASX register.
     'v'	Print the insn size suffix b, h, w or d for vector modes V16QI, V8HI,
  	  V4SI, V2SI, and w, d for vector modes V4SF, V2DF respectively.
--- 6222,6229 ----
     'Q'  Print R_LARCH_RELAX for TLS IE.
     'r'  Print address 12-31bit relocation associated with OP.
     'R'  Print address 32-51bit relocation associated with OP.
!    'T'	Print a comment marker if %G outputs nothing.
!    't'	Print the register containing the higher 64 bits of a TImode.
     'u'	Print a LASX register.
     'v'	Print the insn size suffix b, h, w or d for vector modes V16QI, V8HI,
  	  V4SI, V2SI, and w, d for vector modes V4SF, V2DF respectively.
*************** loongarch_print_operand (FILE *file, rtx
*** 6307,6312 ****
--- 6306,6318 ----
  	fputs ("dbar\t0x700", file);
        break;
  
+     case 'T':
+       if (!loongarch_cas_failure_memorder_needs_acquire (
+ 	    memmodel_from_int (INTVAL (op)))
+ 	  && ISA_HAS_LD_SEQ_SA)
+ 	fprintf (file, "%s", ASM_COMMENT_START);
+       break;
+ 
      case 'h':
        if (code == HIGH)
  	op = XEXP (op, 0);
*************** loongarch_print_operand (FILE *file, rtx
*** 6385,6398 ****
  				     false /* lo_reloc */);
        break;
  
-     case 't':
-     case 'T':
-       {
- 	int truth = (code == NE) == (letter == 'T');
- 	fputc ("zfnt"[truth * 2 + FCC_REG_P (REGNO (XEXP (op, 0)))], file);
-       }
-       break;
- 
      case 'V':
        if (CONST_VECTOR_P (op))
  	{
--- 6391,6396 ----
*************** loongarch_print_operand (FILE *file, rtx
*** 6496,6501 ****
--- 6494,6509 ----
  	}
        break;
  
+     case 't':
+       if (GET_MODE (op) != TImode
+ 	  || (op != CONST0_RTX (TImode) && code != REG))
+ 	{
+ 	  output_operand_lossage ("invalid use of '%%%c'", letter);
+ 	  break;
+ 	}
+       op = loongarch_subword (op, 1);
+       letter = 'z';
+       /* fall through */
      default:
        switch (code)
  	{
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/loongarch.opt gcc-16-20250824/gcc/config/loongarch/loongarch.opt
*** gcc-16-20250817/gcc/config/loongarch/loongarch.opt	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/loongarch.opt	Sun Aug 24 22:32:20 2025
*************** mlamcas
*** 334,339 ****
--- 334,343 ----
  Target Mask(ISA_LAMCAS) Var(la_isa_evolution)
  Support amcas[_db].{b/h/w/d} instructions.
  
+ mscq
+ Target Mask(ISA_SCQ) Var(la_isa_evolution)
+ Support sc.q instruction.
+ 
  mld-seq-sa
  Target Mask(ISA_LD_SEQ_SA) Var(la_isa_evolution)
  Do not need load-load barriers (dbar 0x700).
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/loongarch.opt.urls gcc-16-20250824/gcc/config/loongarch/loongarch.opt.urls
*** gcc-16-20250817/gcc/config/loongarch/loongarch.opt.urls	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/loongarch.opt.urls	Sun Aug 24 22:32:20 2025
*************** UrlSuffix(gcc/LoongArch-Options.html#ind
*** 90,95 ****
--- 90,98 ----
  mlamcas
  UrlSuffix(gcc/LoongArch-Options.html#index-mlamcas)
  
+ mscq
+ UrlSuffix(gcc/LoongArch-Options.html#index-mscq)
+ 
  mld-seq-sa
  UrlSuffix(gcc/LoongArch-Options.html#index-mld-seq-sa)
  
diff -Nrcpad gcc-16-20250817/gcc/config/loongarch/sync.md gcc-16-20250824/gcc/config/loongarch/sync.md
*** gcc-16-20250817/gcc/config/loongarch/sync.md	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config/loongarch/sync.md	Sun Aug 24 22:32:20 2025
***************
*** 21,45 ****
  
  (define_c_enum "unspec" [
    UNSPEC_COMPARE_AND_SWAP
    UNSPEC_COMPARE_AND_SWAP_ADD
    UNSPEC_COMPARE_AND_SWAP_SUB
-   UNSPEC_COMPARE_AND_SWAP_AND
-   UNSPEC_COMPARE_AND_SWAP_XOR
-   UNSPEC_COMPARE_AND_SWAP_OR
    UNSPEC_COMPARE_AND_SWAP_NAND
    UNSPEC_SYNC_OLD_OP
    UNSPEC_SYNC_EXCHANGE
    UNSPEC_ATOMIC_STORE
    UNSPEC_ATOMIC_LOAD
    UNSPEC_MEMORY_BARRIER
  ])
  
  (define_code_iterator any_atomic [plus ior xor and])
- (define_code_attr atomic_optab
-   [(plus "add") (ior "or") (xor "xor") (and "and")])
- 
- ;; This attribute gives the format suffix for atomic memory operations.
- (define_mode_attr amo [(QI "b") (HI "h") (SI "w") (DI "d")])
  
  ;; <amop> expands to the name of the atomic operand that implements a
  ;; particular code.
--- 21,45 ----
  
  (define_c_enum "unspec" [
    UNSPEC_COMPARE_AND_SWAP
+   UNSPEC_COMPARE_AND_SWAP_AMCAS
    UNSPEC_COMPARE_AND_SWAP_ADD
    UNSPEC_COMPARE_AND_SWAP_SUB
    UNSPEC_COMPARE_AND_SWAP_NAND
    UNSPEC_SYNC_OLD_OP
    UNSPEC_SYNC_EXCHANGE
    UNSPEC_ATOMIC_STORE
    UNSPEC_ATOMIC_LOAD
    UNSPEC_MEMORY_BARRIER
+ 
+   UNSPEC_TI_FETCH_ADD
+   UNSPEC_TI_FETCH_SUB
+   UNSPEC_TI_FETCH_AND
+   UNSPEC_TI_FETCH_XOR
+   UNSPEC_TI_FETCH_OR
+   UNSPEC_TI_FETCH_NAND_MASK_INVERTED
  ])
  
  (define_code_iterator any_atomic [plus ior xor and])
  
  ;; <amop> expands to the name of the atomic operand that implements a
  ;; particular code.
***************
*** 107,113 ****
  (define_insn "atomic_load<mode>"
    [(set (match_operand:QHWD 0 "register_operand" "=r")
      (unspec_volatile:QHWD
!       [(match_operand:QHWD 1 "memory_operand" "+m")
         (match_operand:SI 2 "const_int_operand")]                        ;; model
        UNSPEC_ATOMIC_LOAD))]
    ""
--- 107,113 ----
  (define_insn "atomic_load<mode>"
    [(set (match_operand:QHWD 0 "register_operand" "=r")
      (unspec_volatile:QHWD
!       [(match_operand:QHWD 1 "memory_operand" "m")
         (match_operand:SI 2 "const_int_operand")]                        ;; model
        UNSPEC_ATOMIC_LOAD))]
    ""
***************
*** 142,150 ****
  }
    [(set (attr "length") (const_int 12))])
  
  ;; Implement atomic stores with amoswap.  Fall back to fences for atomic loads.
  (define_insn "atomic_store<mode>"
!   [(set (match_operand:QHWD 0 "memory_operand" "+m")
      (unspec_volatile:QHWD
        [(match_operand:QHWD 1 "reg_or_0_operand" "rJ")
         (match_operand:SI 2 "const_int_operand")]      ;; model
--- 142,191 ----
  }
    [(set (attr "length") (const_int 12))])
  
+ (define_insn "atomic_loadti_lsx"
+   [(set (match_operand:V2DI 0 "register_operand" "=f")
+ 	(unspec_volatile:V2DI
+           [(match_operand:TI 1 "memory_operand" "m")
+ 	   (match_operand:SI 2 "const_int_operand")] ;; model
+ 	  UNSPEC_ATOMIC_LOAD))]
+   "ISA_HAS_LSX && TARGET_64BIT"
+ {
+   enum memmodel model = memmodel_base (INTVAL (operands[2]));
+ 
+   switch (model)
+     {
+     case MEMMODEL_SEQ_CST:
+       output_asm_insn ("dbar\t0x11", operands);
+       /* fall through */
+     case MEMMODEL_ACQUIRE:
+     case MEMMODEL_RELAXED:
+       return "vld\t%w0,%1\\n\\t%G2";
+ 
+     default:
+       gcc_unreachable ();
+     }
+ }
+   [(set (attr "length") (const_int 12))])
+ 
+ (define_expand "atomic_loadti"
+   [(match_operand:TI 0 "register_operand" "=r")
+    (match_operand:TI 1 "memory_operand"   "m")
+    (match_operand:SI 2 "const_int_operand")]
+   "ISA_HAS_LSX && TARGET_64BIT"
+ {
+   rtx vr = gen_reg_rtx (V2DImode);
+ 
+   emit_insn (gen_atomic_loadti_lsx (vr, operands[1], operands[2]));
+   for (int i = 0; i < 2; i++)
+     emit_insn (
+       gen_lsx_vpickve2gr_d (loongarch_subword (operands[0], i), vr,
+ 			    GEN_INT (i)));
+   DONE;
+ })
+ 
  ;; Implement atomic stores with amoswap.  Fall back to fences for atomic loads.
  (define_insn "atomic_store<mode>"
!   [(set (match_operand:QHWD 0 "memory_operand" "=m")
      (unspec_volatile:QHWD
        [(match_operand:QHWD 1 "reg_or_0_operand" "rJ")
         (match_operand:SI 2 "const_int_operand")]      ;; model
***************
*** 175,181 ****
  }
    [(set (attr "length") (const_int 12))])
  
! (define_insn "atomic_<atomic_optab><mode>"
    [(set (match_operand:GPR 0 "memory_operand" "+ZB")
  	(unspec_volatile:GPR
  	  [(any_atomic:GPR (match_dup 0)
--- 216,282 ----
  }
    [(set (attr "length") (const_int 12))])
  
! (define_insn "atomic_storeti_lsx"
!   [(set (match_operand:TI 0 "memory_operand" "=m")
! 	(unspec_volatile:TI
! 	  [(match_operand:V2DI 1 "register_operand" "f")
! 	   (match_operand:SI   2 "const_int_operand")] ;; model
! 	UNSPEC_ATOMIC_STORE))]
!   "ISA_HAS_LSX && TARGET_64BIT"
! {
!   enum memmodel model = memmodel_base (INTVAL (operands[2]));
! 
!   switch (model)
!     {
!     case MEMMODEL_SEQ_CST:
!       return "dbar\t0x12\\n\\t"
! 	     "vst\t%w1,%0\\n\\t"
! 	     "dbar\t0x18";
!     case MEMMODEL_RELEASE:
!       return "dbar\t0x12\\n\\t"
! 	     "vst\t%w1,%0";
!     case MEMMODEL_RELAXED:
!       return "vst\t%w1,%0";
!     default:
!       gcc_unreachable ();
!     }
! }
!   [(set (attr "length") (const_int 12))])
! 
! (define_insn "atomic_storeti_scq"
!   [(set (match_operand:TI 0 "memory_operand" "=m")
! 	(unspec_volatile:TI
! 	  [(match_operand:TI 1 "register_operand" "r")]
! 	  UNSPEC_ATOMIC_STORE))
!    (clobber (match_scratch:DI 2 "=&r"))]
!   "TARGET_64BIT && ISA_HAS_SCQ"
!   "1:\\n\\tll.d\t$r0,%0\n\tmove\t%2,%1\n\tsc.q\t%2,%t1,%0\n\tbeqz\t%2,1b"
!   [(set (attr "length") (const_int 16))])
! 
! (define_expand "atomic_storeti"
!   [(match_operand:TI 0 "memory_operand"   "=m")
!    (match_operand:TI 1 "reg_or_0_operand" "rJ")
!    (match_operand:SI 2 "const_int_operand")]
!   "TARGET_64BIT && (ISA_HAS_LSX || ISA_HAS_SCQ)"
! {
!   if (!ISA_HAS_LSX)
!     {
!       emit_insn (gen_atomic_storeti_scq (operands[0], operands[1]));
!       DONE;
!     }
! 
!   rtx vr = gen_reg_rtx (V2DImode), op1 = operands[1];
!   rtvec v = rtvec_alloc (2);
! 
!   for (int i = 0; i < 2; i++)
!     RTVEC_ELT (v, i) = loongarch_subword (op1, i);
! 
!   emit_insn (gen_vec_initv2didi (vr, gen_rtx_PARALLEL (V2DImode, v)));
!   emit_insn (gen_atomic_storeti_lsx (operands[0], vr, operands[2]));
!   DONE;
! })
! 
! (define_insn "atomic_<amop><mode>"
    [(set (match_operand:GPR 0 "memory_operand" "+ZB")
  	(unspec_volatile:GPR
  	  [(any_atomic:GPR (match_dup 0)
***************
*** 183,189 ****
  	   (match_operand:SI 2 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    ""
!   "am<amop>%A2.<amo>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_add<mode>"
--- 284,290 ----
  	   (match_operand:SI 2 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    ""
!   "am<amop>%A2.<size>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_add<mode>"
***************
*** 194,203 ****
  	   (match_operand:SI 2 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    "ISA_HAS_LAM_BH"
!   "amadd%A2.<amo>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
! (define_insn "atomic_fetch_<atomic_optab><mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZB"))
     (set (match_dup 1)
--- 295,304 ----
  	   (match_operand:SI 2 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    "ISA_HAS_LAM_BH"
!   "amadd%A2.<size>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
! (define_insn "atomic_fetch_<amop><mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZB"))
     (set (match_dup 1)
***************
*** 207,215 ****
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    ""
!   "am<amop>%A3.<amo>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_exchange<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(unspec_volatile:GPR
--- 308,359 ----
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    ""
!   "am<amop>%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
+ (define_insn "atomic_fetch_nand_mask_inverted<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&r")
+ 	(match_operand:GPR 1 "memory_operand" "+ZC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR
+ 	  [(ior:GPR (not (match_dup 1))
+ 		    (match_operand:GPR 2 "register_operand" "r"))]
+ 	  UNSPEC_SYNC_OLD_OP))
+    (clobber (match_scratch:GPR 3 "=&r"))]
+   ""
+   {
+     return "1:\\n\\t"
+ 	   "ll.<d>\\t%0,%1\\n\\t"
+ 	   "orn\\t%3,%2,%0\\n\\t"
+ 	   "sc.<d>\\t%3,%1\\n\\t"
+ 	   "beqz\\t%3,1b";
+   }
+   [(set (attr "length") (const_int 16))])
+ 
+ (define_mode_iterator ALL_SC [GPR (TI "TARGET_64BIT && ISA_HAS_SCQ")])
+ (define_mode_attr _scq [(SI "") (DI "") (TI "_scq")])
+ (define_expand "atomic_fetch_nand<mode>"
+   [(match_operand:ALL_SC 0 "register_operand")
+    (match_operand:ALL_SC 1 "memory_operand")
+    (match_operand:ALL_SC 2 "reg_or_0_operand")
+    (match_operand:SI     3 "const_int_operand")]
+   ""
+   {
+     /* ~(atom & mask) = (~mask) | (~atom), so we can hoist
+        (~mask) out of the ll/sc loop and use the orn instruction in the
+        ll/sc loop.  */
+     rtx inverted_mask = gen_reg_rtx (<MODE>mode);
+     emit_move_insn (inverted_mask,
+ 		    expand_simple_unop (<MODE>mode, NOT, operands[2],
+ 					NULL_RTX, false));
+ 
+     emit_insn (
+       gen_atomic_fetch_nand_mask_inverted<mode><_scq> (operands[0],
+ 						       operands[1],
+ 						       inverted_mask));
+     DONE;
+   })
+ 
  (define_insn "atomic_exchange<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(unspec_volatile:GPR
***************
*** 219,227 ****
     (set (match_dup 1)
  	(match_operand:GPR 2 "register_operand" "r"))]
    ""
!   "amswap%A3.<amo>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_exchange<mode>_short"
    [(set (match_operand:SHORT 0 "register_operand" "=&r")
  	(unspec_volatile:SHORT
--- 363,406 ----
     (set (match_dup 1)
  	(match_operand:GPR 2 "register_operand" "r"))]
    ""
!   "amswap%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
+ (define_insn "atomic_exchangeti_scq"
+   [(set (match_operand:TI 0 "register_operand" "=&r")
+ 	(unspec_volatile:TI
+ 	  [(match_operand:TI 1 "memory_operand" "+ZB")]
+ 	  UNSPEC_SYNC_EXCHANGE))
+    (set (match_dup 1)
+ 	(match_operand:TI 2 "register_operand" "rJ"))
+    (clobber (match_scratch:DI 3 "=&r"))]
+   "TARGET_64BIT && ISA_HAS_SCQ"
+ {
+   output_asm_insn ("1:", operands);
+   output_asm_insn ("ll.d\t%0,%1", operands);
+   if (!ISA_HAS_LD_SEQ_SA)
+     output_asm_insn ("dbar\t0x700", operands);
+   output_asm_insn ("ld.d\t%t0,%b1,8", operands);
+   output_asm_insn ("move\t%3,%z2", operands);
+   output_asm_insn ("sc.q\t%3,%t2,%1", operands);
+   output_asm_insn ("beqz\t%3,1b", operands);
+ 
+   return "";
+ }
+   [(set (attr "length") (const_int 24))])
+ 
+ (define_expand "atomic_exchangeti"
+   [(match_operand:TI 0 "register_operand" "=&r")
+    (match_operand:TI 1 "memory_operand"   "+ZB")
+    (match_operand:TI 2 "register_operand" "rJ")
+    (match_operand:SI 3 "const_int_operand")] ;; model
+   "TARGET_64BIT && ISA_HAS_SCQ"
+ {
+   emit_insn (gen_atomic_exchangeti_scq (operands[0], operands[1],
+ 					operands[2]));
+   DONE;
+ })
+ 
  (define_insn "atomic_exchange<mode>_short"
    [(set (match_operand:SHORT 0 "register_operand" "=&r")
  	(unspec_volatile:SHORT
***************
*** 231,237 ****
     (set (match_dup 1)
  	(match_operand:SHORT 2 "register_operand" "r"))]
    "ISA_HAS_LAM_BH"
!   "amswap%A3.<amo>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_cas_value_strong<mode>"
--- 410,416 ----
     (set (match_dup 1)
  	(match_operand:SHORT 2 "register_operand" "r"))]
    "ISA_HAS_LAM_BH"
!   "amswap%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_cas_value_strong<mode>"
***************
*** 240,252 ****
     (set (match_dup 1)
  	(unspec_volatile:GPR [(match_operand:GPR 2 "reg_or_0_operand" "rJ")
  			      (match_operand:GPR 3 "reg_or_0_operand" "rJ")
! 			      (match_operand:SI 4 "const_int_operand")]  ;; mod_s
  	 UNSPEC_COMPARE_AND_SWAP))
     (clobber (match_scratch:GPR 5 "=&r"))]
    ""
  {
    output_asm_insn ("1:", operands);
!   output_asm_insn ("ll.<amo>\t%0,%1", operands);
  
    /* Like the test case atomic-cas-int.C, in loongarch64, O1 and higher, the
       return value of the val_without_const_folding will not be truncated and
--- 419,431 ----
     (set (match_dup 1)
  	(unspec_volatile:GPR [(match_operand:GPR 2 "reg_or_0_operand" "rJ")
  			      (match_operand:GPR 3 "reg_or_0_operand" "rJ")
! 			      (match_operand:SI 4 "const_int_operand")]  ;; mod_f
  	 UNSPEC_COMPARE_AND_SWAP))
     (clobber (match_scratch:GPR 5 "=&r"))]
    ""
  {
    output_asm_insn ("1:", operands);
!   output_asm_insn ("ll.<size>\t%0,%1", operands);
  
    /* Like the test case atomic-cas-int.C, in loongarch64, O1 and higher, the
       return value of the val_without_const_folding will not be truncated and
***************
*** 266,274 ****
      output_asm_insn ("bne\t%0,%z2,2f", operands);
  
    output_asm_insn ("or%i3\t%5,$zero,%3", operands);
!   output_asm_insn ("sc.<amo>\t%5,%1", operands);
    output_asm_insn ("beqz\t%5,1b", operands);
!   output_asm_insn ("b\t3f", operands);
    output_asm_insn ("2:", operands);
    output_asm_insn ("%G4", operands);
    output_asm_insn ("3:", operands);
--- 445,453 ----
      output_asm_insn ("bne\t%0,%z2,2f", operands);
  
    output_asm_insn ("or%i3\t%5,$zero,%3", operands);
!   output_asm_insn ("sc.<size>\t%5,%1", operands);
    output_asm_insn ("beqz\t%5,1b", operands);
!   output_asm_insn ("%T4b\t3f", operands);
    output_asm_insn ("2:", operands);
    output_asm_insn ("%G4", operands);
    output_asm_insn ("3:", operands);
***************
*** 288,297 ****
     (set (match_dup 1)
  	(unspec_volatile:QHWD [(match_operand:QHWD 2 "reg_or_0_operand" "rJ")
  			       (match_operand:QHWD 3 "reg_or_0_operand" "rJ")
! 			       (match_operand:SI 4 "const_int_operand")]  ;; mod_s
! 	 UNSPEC_COMPARE_AND_SWAP))]
    "ISA_HAS_LAMCAS"
!   "ori\t%0,%z2,0\n\tamcas%A4.<amo>\t%0,%z3,%1"
    [(set (attr "length") (const_int 8))])
  
  (define_expand "atomic_compare_and_swap<mode>"
--- 467,476 ----
     (set (match_dup 1)
  	(unspec_volatile:QHWD [(match_operand:QHWD 2 "reg_or_0_operand" "rJ")
  			       (match_operand:QHWD 3 "reg_or_0_operand" "rJ")
! 			       (match_operand:SI 4 "const_int_operand")]  ;; mod
! 	 UNSPEC_COMPARE_AND_SWAP_AMCAS))]
    "ISA_HAS_LAMCAS"
!   "ori\t%0,%z2,0\n\tamcas%A4.<size>\t%0,%z3,%1"
    [(set (attr "length") (const_int 8))])
  
  (define_expand "atomic_compare_and_swap<mode>"
***************
*** 318,333 ****
        && is_mm_release (memmodel_base (INTVAL (mod_s))))
      mod_s = GEN_INT (MEMMODEL_ACQ_REL);
  
-   operands[6] = mod_s;
- 
    if (ISA_HAS_LAMCAS)
      emit_insn (gen_atomic_cas_value_strong<mode>_amcas (operands[1], operands[2],
  							 operands[3], operands[4],
! 							 operands[6]));
    else
      emit_insn (gen_atomic_cas_value_strong<mode> (operands[1], operands[2],
  						  operands[3], operands[4],
! 						  operands[6]));
  
    rtx compare = operands[1];
    if (operands[3] != const0_rtx)
--- 497,510 ----
        && is_mm_release (memmodel_base (INTVAL (mod_s))))
      mod_s = GEN_INT (MEMMODEL_ACQ_REL);
  
    if (ISA_HAS_LAMCAS)
      emit_insn (gen_atomic_cas_value_strong<mode>_amcas (operands[1], operands[2],
  							 operands[3], operands[4],
! 							 mod_s));
    else
      emit_insn (gen_atomic_cas_value_strong<mode> (operands[1], operands[2],
  						  operands[3], operands[4],
! 						  mod_f));
  
    rtx compare = operands[1];
    if (operands[3] != const0_rtx)
***************
*** 349,397 ****
    DONE;
  })
  
! (define_expand "atomic_test_and_set"
!   [(match_operand:QI 0 "register_operand" "")     ;; bool output
!    (match_operand:QI 1 "memory_operand" "+ZB")    ;; memory
!    (match_operand:SI 2 "const_int_operand" "")]   ;; model
    ""
  {
!   /* We have no QImode atomics, so use the address LSBs to form a mask,
!      then use an aligned SImode atomic.  */
    rtx result = operands[0];
    rtx mem = operands[1];
!   rtx model = operands[2];
    rtx addr = force_reg (Pmode, XEXP (mem, 0));
!   rtx tmp_reg = gen_reg_rtx (Pmode);
!   rtx zero_reg = gen_rtx_REG (Pmode, 0);
! 
    rtx aligned_addr = gen_reg_rtx (Pmode);
!   emit_move_insn (tmp_reg, gen_rtx_PLUS (Pmode, zero_reg, GEN_INT (-4)));
!   emit_move_insn (aligned_addr, gen_rtx_AND (Pmode, addr, tmp_reg));
  
    rtx aligned_mem = change_address (mem, SImode, aligned_addr);
    set_mem_alias_set (aligned_mem, 0);
  
-   rtx offset = gen_reg_rtx (SImode);
-   emit_move_insn (offset, gen_rtx_AND (SImode, gen_lowpart (SImode, addr),
- 				       GEN_INT (3)));
- 
    rtx tmp = gen_reg_rtx (SImode);
!   emit_move_insn (tmp, GEN_INT (1));
  
    rtx shmt = gen_reg_rtx (SImode);
!   emit_move_insn (shmt, gen_rtx_ASHIFT (SImode, offset, GEN_INT (3)));
  
    rtx word = gen_reg_rtx (SImode);
    emit_move_insn (word, gen_rtx_ASHIFT (SImode, tmp, shmt));
  
    tmp = gen_reg_rtx (SImode);
!   emit_insn (gen_atomic_fetch_orsi (tmp, aligned_mem, word, model));
  
    emit_move_insn (gen_lowpart (SImode, result),
  		  gen_rtx_LSHIFTRT (SImode, tmp, shmt));
    DONE;
  })
  
  (define_insn "atomic_cas_value_cmp_and_7_<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
--- 526,599 ----
    DONE;
  })
  
! (define_expand "atomic_fetch_<amop><mode>"
!   [(match_operand:SHORT 0 "register_operand" "")		 ;; output
!    (any_bitwise (match_operand:SHORT 1 "memory_operand"   "+ZB") ;; memory
! 		(match_operand:SHORT 2 "reg_or_0_operand" "rJ")) ;; val
!    (match_operand:SI 3 "const_int_operand" "")]			 ;; model
    ""
  {
!   /* We have no QI/HImode bitwise atomics, so use the address LSBs to form
!      a mask, then use an aligned SImode atomic.  */
    rtx result = operands[0];
    rtx mem = operands[1];
!   rtx model = operands[3];
    rtx addr = force_reg (Pmode, XEXP (mem, 0));
!   rtx mask = gen_int_mode (-4, Pmode);
    rtx aligned_addr = gen_reg_rtx (Pmode);
! 
!   if (!and_operand (mask, Pmode))
!     mask = force_reg (Pmode, mask);
! 
!   emit_move_insn (aligned_addr, gen_rtx_AND (Pmode, addr, mask));
  
    rtx aligned_mem = change_address (mem, SImode, aligned_addr);
    set_mem_alias_set (aligned_mem, 0);
  
    rtx tmp = gen_reg_rtx (SImode);
!   emit_move_insn (tmp, simplify_gen_unary (ZERO_EXTEND, SImode,
! 					   operands[2], <MODE>mode));
  
+   /* Note that we have defined SHIFT_COUNT_TRUNCATED to 1, so we don't need
+      to mask addr with 0b11 here.  */
    rtx shmt = gen_reg_rtx (SImode);
!   emit_move_insn (shmt, gen_rtx_ASHIFT (SImode, gen_lowpart (SImode, addr),
! 					GEN_INT (3)));
  
    rtx word = gen_reg_rtx (SImode);
    emit_move_insn (word, gen_rtx_ASHIFT (SImode, tmp, shmt));
  
+   if (<is_and>)
+     {
+       /* word = word | ~(mode_mask << shmt) */
+       rtx tmp = force_reg (SImode,
+ 			   gen_int_mode (GET_MODE_MASK (<MODE>mode),
+ 					 SImode));
+       emit_move_insn (tmp, gen_rtx_ASHIFT (SImode, tmp, shmt));
+       emit_move_insn (word, gen_rtx_IOR (SImode, gen_rtx_NOT (SImode, tmp),
+ 					 word));
+     }
+ 
    tmp = gen_reg_rtx (SImode);
!   emit_insn (gen_atomic_fetch_<amop>si (tmp, aligned_mem, word, model));
  
    emit_move_insn (gen_lowpart (SImode, result),
  		  gen_rtx_LSHIFTRT (SImode, tmp, shmt));
    DONE;
  })
  
+ (define_expand "atomic_test_and_set"
+   [(match_operand:QI 0 "register_operand" "")     ;; bool output
+    (match_operand:QI 1 "memory_operand" "+ZB")    ;; memory
+    (match_operand:SI 2 "const_int_operand" "")]   ;; model
+   ""
+ {
+   rtx one = force_reg (QImode, gen_int_mode (1, QImode));
+   emit_insn (gen_atomic_fetch_orqi (operands[0], operands[1], one,
+ 				    operands[2]));
+   DONE;
+ })
+ 
  (define_insn "atomic_cas_value_cmp_and_7_<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
***************
*** 400,419 ****
  			      (match_operand:GPR 3 "reg_or_0_operand" "rJ")
  			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")
  			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")
! 			      (match_operand:SI 6 "const_int_operand")] ;; model
  	 UNSPEC_COMPARE_AND_SWAP))
     (clobber (match_scratch:GPR 7 "=&r"))]
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%2\\n\\t"
  	 "bne\\t%7,%z4,2f\\n\\t"
  	 "and\\t%7,%0,%z3\\n\\t"
  	 "or%i5\\t%7,%7,%5\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b\\n\\t"
! 	 "b\\t3f\\n\\t"
  	 "2:\\n\\t"
  	 "%G6\\n\\t"
  	 "3:\\n\\t";
--- 602,621 ----
  			      (match_operand:GPR 3 "reg_or_0_operand" "rJ")
  			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")
  			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")
! 			      (match_operand:SI 6 "const_int_operand")] ;; mod_f
  	 UNSPEC_COMPARE_AND_SWAP))
     (clobber (match_scratch:GPR 7 "=&r"))]
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<size>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%2\\n\\t"
  	 "bne\\t%7,%z4,2f\\n\\t"
  	 "and\\t%7,%0,%z3\\n\\t"
  	 "or%i5\\t%7,%7,%5\\n\\t"
! 	 "sc.<size>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b\\n\\t"
! 	 "%T6b\\t3f\\n\\t"
  	 "2:\\n\\t"
  	 "%G6\\n\\t"
  	 "3:\\n\\t";
***************
*** 444,461 ****
        && is_mm_release (memmodel_base (INTVAL (mod_s))))
      mod_s = GEN_INT (MEMMODEL_ACQ_REL);
  
-   operands[6] = mod_s;
- 
    if (ISA_HAS_LAMCAS)
      emit_insn (gen_atomic_cas_value_strong<mode>_amcas (operands[1], operands[2],
  						       operands[3], operands[4],
! 						       operands[6]));
    else
      {
        union loongarch_gen_fn_ptrs generator;
        generator.fn_7 = gen_atomic_cas_value_cmp_and_7_si;
        loongarch_expand_atomic_qihi (generator, operands[1], operands[2],
! 				    operands[3], operands[4], operands[6]);
      }
  
        rtx compare = operands[1];
--- 646,661 ----
        && is_mm_release (memmodel_base (INTVAL (mod_s))))
      mod_s = GEN_INT (MEMMODEL_ACQ_REL);
  
    if (ISA_HAS_LAMCAS)
      emit_insn (gen_atomic_cas_value_strong<mode>_amcas (operands[1], operands[2],
  						       operands[3], operands[4],
! 						       mod_s));
    else
      {
        union loongarch_gen_fn_ptrs generator;
        generator.fn_7 = gen_atomic_cas_value_cmp_and_7_si;
        loongarch_expand_atomic_qihi (generator, operands[1], operands[2],
! 				    operands[3], operands[4], mod_f);
      }
  
        rtx compare = operands[1];
***************
*** 481,563 ****
    DONE;
  })
  
! (define_insn "atomic_cas_value_add_7_<mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=&r")				;; res
! 	(match_operand:GPR 1 "memory_operand" "+ZC"))
     (set (match_dup 1)
! 	(unspec_volatile:GPR [(match_operand:GPR 2 "reg_or_0_operand" "rJ")	;; mask
! 			      (match_operand:GPR 3 "reg_or_0_operand" "rJ")	;; inverted_mask
! 			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")	;; old val
! 			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")	;; new val
! 			      (match_operand:SI 6 "const_int_operand")]		;; model
! 	 UNSPEC_COMPARE_AND_SWAP_ADD))
!    (clobber (match_scratch:GPR 7 "=&r"))
!    (clobber (match_scratch:GPR 8 "=&r"))]
!   ""
  {
!   return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
! 	 "and\\t%7,%0,%3\\n\\t"
! 	 "add.w\\t%8,%0,%z5\\n\\t"
! 	 "and\\t%8,%8,%z2\\n\\t"
! 	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
! 	 "beq\\t$zero,%7,1b";
! }
  
!   [(set (attr "length") (const_int 28))])
  
! (define_insn "atomic_cas_value_sub_7_<mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=&r")				;; res
! 	(match_operand:GPR 1 "memory_operand" "+ZC"))
!    (set (match_dup 1)
! 	(unspec_volatile:GPR [(match_operand:GPR 2 "reg_or_0_operand" "rJ")	;; mask
! 			      (match_operand:GPR 3 "reg_or_0_operand" "rJ")	;; inverted_mask
! 			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")	;; old val
! 			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")	;; new val
! 			      (match_operand:SI 6 "const_int_operand")]		;; model
! 	 UNSPEC_COMPARE_AND_SWAP_SUB))
!    (clobber (match_scratch:GPR 7 "=&r"))
!    (clobber (match_scratch:GPR 8 "=&r"))]
!   ""
! {
!   return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
! 	 "and\\t%7,%0,%3\\n\\t"
! 	 "sub.w\\t%8,%0,%z5\\n\\t"
! 	 "and\\t%8,%8,%z2\\n\\t"
! 	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
! 	 "beq\\t$zero,%7,1b";
  }
!   [(set (attr "length") (const_int 28))])
  
! (define_insn "atomic_cas_value_and_7_<mode>"
!   [(set (match_operand:GPR 0 "register_operand" "=&r")				;; res
! 	(match_operand:GPR 1 "memory_operand" "+ZC"))
!    (set (match_dup 1)
! 	(unspec_volatile:GPR [(match_operand:GPR 2 "reg_or_0_operand" "rJ")	;; mask
! 			      (match_operand:GPR 3 "reg_or_0_operand" "rJ")	;; inverted_mask
! 			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")	;; old val
! 			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")	;; new val
! 			      (match_operand:SI 6 "const_int_operand")]		;; model
! 	 UNSPEC_COMPARE_AND_SWAP_AND))
!    (clobber (match_scratch:GPR 7 "=&r"))
!    (clobber (match_scratch:GPR 8 "=&r"))]
!   ""
  {
!   return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
! 	 "and\\t%7,%0,%3\\n\\t"
! 	 "and\\t%8,%0,%z5\\n\\t"
! 	 "and\\t%8,%8,%z2\\n\\t"
! 	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
! 	 "beq\\t$zero,%7,1b";
! }
!   [(set (attr "length") (const_int 28))])
  
! (define_insn "atomic_cas_value_xor_7_<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")				;; res
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
     (set (match_dup 1)
--- 681,776 ----
    DONE;
  })
  
! (define_insn "atomic_compare_and_swapti_scq"
!   [(set (match_operand:TI 0 "register_operand" "=&r")
! 	(match_operand:TI 1 "memory_operand"   "+ZB"))
     (set (match_dup 1)
! 	(unspec_volatile:TI [(match_operand:TI 2 "reg_or_0_operand" "rJ")
! 			     (match_operand:TI 3 "reg_or_0_operand" "rJ")
! 			     (match_operand:SI 4 "const_int_operand")]  ;; mod_f
! 	 UNSPEC_COMPARE_AND_SWAP))
!    (clobber (match_scratch:DI 5 "=&r"))]
!   "TARGET_64BIT && ISA_HAS_SCQ"
  {
!   output_asm_insn ("1:", operands);
!   output_asm_insn ("ll.d\t%0,%1", operands);
  
!   /* Compare the low word */
!   output_asm_insn ("bne\t%0,%z2,2f", operands);
  
!   /* Don't reorder the load of high word before ll.d.  As the TImode
!      must be aligned in the memory, the high and low words must be in
!      the same cacheline, thus dbar 0x700 is enough.  */
!   if (!ISA_HAS_LD_SEQ_SA)
!     output_asm_insn ("dbar\t0x700", operands);
! 
!   /* Now load the high word.  As the high and low words are in the same
!      cacheline, in case another core has clobbered the high word before the
!      sc.q instruction is executed, the LL bit for the low word will be
!      cleared.  Thus a normal load is sufficient.  */
!   output_asm_insn ("ld.d\t%t0,%b1,8", operands);
! 
!   /* Compare the high word.  */
!   output_asm_insn ("bne\t%t0,%t2,2f", operands);
! 
!   /* Copy the low word of the new value as it'll be clobbered by sc.q.  */
!   output_asm_insn ("move\t%5,%z3", operands);
! 
!   /* Store both words if LL bit is still set.  */
!   output_asm_insn ("sc.q\t%5,%t3,%1", operands);
! 
!   /* Check if sc.q has done the store.  */
!   output_asm_insn ("beqz\t%5,1b", operands);
! 
!   /* Jump over the mod_f barrier if sc.q has succeeded.  */
!   output_asm_insn ("%T4b\t3f", operands);
! 
!   /* The barrier for mod_f.  */
!   output_asm_insn ("2:", operands);
!   output_asm_insn ("%G4", operands);
! 
!   output_asm_insn ("3:", operands);
!   return "";
  }
!   [(set_attr "length" "40")])
  
! (define_expand "atomic_compare_and_swapti"
!   [(match_operand:SI 0 "register_operand" "")   ;; bool output
!    (match_operand:TI 1 "register_operand" "")  ;; val output
!    (match_operand:TI 2 "memory_operand" "")    ;; memory
!    (match_operand:TI 3 "reg_or_0_operand" "")  ;; expected value
!    (match_operand:TI 4 "reg_or_0_operand" "")  ;; desired value
!    (match_operand:SI 5 "const_int_operand" "")  ;; is_weak
!    (match_operand:SI 6 "const_int_operand" "")  ;; mod_s
!    (match_operand:SI 7 "const_int_operand" "")] ;; mod_f
!   "TARGET_64BIT && ISA_HAS_SCQ"
  {
!   emit_insn (gen_atomic_compare_and_swapti_scq (operands[1], operands[2],
! 						operands[3], operands[4],
! 						operands[7]));
  
!   rtx t[2];
! 
!   for (int i = 0; i < 2; i++)
!     {
!       rtx compare = loongarch_subword (operands[1], i);
!       rtx expect = loongarch_subword (operands[3], i);
! 
!       t[i] = gen_reg_rtx (DImode);
! 
!       if (expect != const0_rtx)
! 	emit_insn (gen_xordi3 (t[i], compare, expect));
!       else
! 	emit_move_insn (t[i], compare);
!     }
! 
!   emit_insn (gen_iordi3 (t[0], t[0], t[1]));
!   emit_insn (gen_rtx_SET (operands[0],
! 			  gen_rtx_EQ (SImode, t[0], const0_rtx)));
!   DONE;
! })
! 
! (define_insn "atomic_cas_value_add_7_<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")				;; res
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
     (set (match_dup 1)
***************
*** 566,589 ****
  			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")	;; old val
  			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")	;; new val
  			      (match_operand:SI 6 "const_int_operand")]		;; model
! 	 UNSPEC_COMPARE_AND_SWAP_XOR))
     (clobber (match_scratch:GPR 7 "=&r"))
     (clobber (match_scratch:GPR 8 "=&r"))]
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%3\\n\\t"
! 	 "xor\\t%8,%0,%z5\\n\\t"
  	 "and\\t%8,%8,%z2\\n\\t"
  	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b";
  }
  
    [(set (attr "length") (const_int 28))])
  
! (define_insn "atomic_cas_value_or_7_<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")				;; res
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
     (set (match_dup 1)
--- 779,802 ----
  			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")	;; old val
  			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")	;; new val
  			      (match_operand:SI 6 "const_int_operand")]		;; model
! 	 UNSPEC_COMPARE_AND_SWAP_ADD))
     (clobber (match_scratch:GPR 7 "=&r"))
     (clobber (match_scratch:GPR 8 "=&r"))]
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<size>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%3\\n\\t"
! 	 "add.w\\t%8,%0,%z5\\n\\t"
  	 "and\\t%8,%8,%z2\\n\\t"
  	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<size>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b";
  }
  
    [(set (attr "length") (const_int 28))])
  
! (define_insn "atomic_cas_value_sub_7_<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")				;; res
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
     (set (match_dup 1)
***************
*** 592,612 ****
  			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")	;; old val
  			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")	;; new val
  			      (match_operand:SI 6 "const_int_operand")]		;; model
! 	 UNSPEC_COMPARE_AND_SWAP_OR))
     (clobber (match_scratch:GPR 7 "=&r"))
     (clobber (match_scratch:GPR 8 "=&r"))]
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%3\\n\\t"
! 	 "or\\t%8,%0,%z5\\n\\t"
  	 "and\\t%8,%8,%z2\\n\\t"
  	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b";
  }
- 
    [(set (attr "length") (const_int 28))])
  
  (define_insn "atomic_cas_value_nand_7_<mode>"
--- 805,824 ----
  			      (match_operand:GPR 4 "reg_or_0_operand"  "rJ")	;; old val
  			      (match_operand:GPR 5 "reg_or_0_operand"  "rJ")	;; new val
  			      (match_operand:SI 6 "const_int_operand")]		;; model
! 	 UNSPEC_COMPARE_AND_SWAP_SUB))
     (clobber (match_scratch:GPR 7 "=&r"))
     (clobber (match_scratch:GPR 8 "=&r"))]
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<size>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%3\\n\\t"
! 	 "sub.w\\t%8,%0,%z5\\n\\t"
  	 "and\\t%8,%8,%z2\\n\\t"
  	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<size>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b";
  }
    [(set (attr "length") (const_int 28))])
  
  (define_insn "atomic_cas_value_nand_7_<mode>"
***************
*** 624,635 ****
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%3\\n\\t"
  	 "and\\t%8,%0,%z5\\n\\t"
  	 "xor\\t%8,%8,%z2\\n\\t"
  	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b";
  }
    [(set (attr "length") (const_int 28))])
--- 836,847 ----
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<size>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%3\\n\\t"
  	 "and\\t%8,%0,%z5\\n\\t"
  	 "xor\\t%8,%8,%z2\\n\\t"
  	 "or%i8\\t%7,%7,%8\\n\\t"
! 	 "sc.<size>\\t%7,%1\\n\\t"
  	 "beq\\t$zero,%7,1b";
  }
    [(set (attr "length") (const_int 28))])
***************
*** 648,657 ****
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<amo>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%z3\\n\\t"
  	 "or%i5\\t%7,%7,%5\\n\\t"
! 	 "sc.<amo>\\t%7,%1\\n\\t"
  	 "beqz\\t%7,1b\\n\\t";
  }
    [(set (attr "length") (const_int 20))])
--- 860,869 ----
    ""
  {
    return "1:\\n\\t"
! 	 "ll.<size>\\t%0,%1\\n\\t"
  	 "and\\t%7,%0,%z3\\n\\t"
  	 "or%i5\\t%7,%7,%5\\n\\t"
! 	 "sc.<size>\\t%7,%1\\n\\t"
  	 "beqz\\t%7,1b\\n\\t";
  }
    [(set (attr "length") (const_int 20))])
***************
*** 678,683 ****
--- 890,990 ----
    DONE;
  })
  
+ (define_int_iterator UNSPEC_TI_FETCH_DIRECT
+   [UNSPEC_TI_FETCH_ADD
+    UNSPEC_TI_FETCH_SUB
+    UNSPEC_TI_FETCH_AND
+    UNSPEC_TI_FETCH_XOR
+    UNSPEC_TI_FETCH_OR])
+ (define_int_iterator UNSPEC_TI_FETCH
+   [UNSPEC_TI_FETCH_DIRECT UNSPEC_TI_FETCH_NAND_MASK_INVERTED])
+ (define_int_attr amop_ti_fetch
+   [(UNSPEC_TI_FETCH_ADD "add")
+    (UNSPEC_TI_FETCH_SUB "sub")
+    (UNSPEC_TI_FETCH_AND "and")
+    (UNSPEC_TI_FETCH_XOR "xor")
+    (UNSPEC_TI_FETCH_OR "or")
+    (UNSPEC_TI_FETCH_NAND_MASK_INVERTED "nand_mask_inverted")])
+ (define_int_attr size_ti_fetch
+   [(UNSPEC_TI_FETCH_ADD "36")
+    (UNSPEC_TI_FETCH_SUB "36")
+    (UNSPEC_TI_FETCH_AND "28")
+    (UNSPEC_TI_FETCH_XOR "28")
+    (UNSPEC_TI_FETCH_OR "28")
+    (UNSPEC_TI_FETCH_NAND_MASK_INVERTED "28")])
+ 
+ (define_insn "atomic_fetch_<amop_ti_fetch>ti_scq"
+   [(set (match_operand:TI 0 "register_operand" "=&r")
+         (match_operand:TI 1 "memory_operand" "+ZB"))
+    (set (match_dup 1)
+ 	(unspec_volatile:TI
+ 	  [(match_dup 0)
+ 	   (match_operand:TI 2 "reg_or_0_operand" "rJ")]
+ 	  UNSPEC_TI_FETCH))
+    (clobber (match_scratch:DI 3 "=&r"))
+    (clobber (match_scratch:DI 4 "=&r"))]
+   "TARGET_64BIT && ISA_HAS_SCQ"
+ {
+   output_asm_insn ("1:", operands);
+   output_asm_insn ("ll.d\t%0,%1", operands);
+   if (!ISA_HAS_LD_SEQ_SA)
+     output_asm_insn ("dbar\t0x700", operands);
+   output_asm_insn ("ld.d\t%t0,%b1,8", operands);
+ 
+   switch (<UNSPEC_TI_FETCH>)
+     {
+     case UNSPEC_TI_FETCH_AND:
+     case UNSPEC_TI_FETCH_OR:
+     case UNSPEC_TI_FETCH_XOR:
+       output_asm_insn ("<amop_ti_fetch>\t%3,%0,%z2", operands);
+       output_asm_insn ("<amop_ti_fetch>\t%4,%t0,%t2", operands);
+       break;
+     case UNSPEC_TI_FETCH_NAND_MASK_INVERTED:
+       output_asm_insn ("orn\t%3,%z2,%0", operands);
+       output_asm_insn ("orn\t%4,%t2,%t0", operands);
+       break;
+     case UNSPEC_TI_FETCH_ADD:
+     case UNSPEC_TI_FETCH_SUB:
+       output_asm_insn ("<amop_ti_fetch>.d\t%3,%0,%z2", operands);
+ 
+       /* Generate carry bit.  */
+       output_asm_insn (
+ 	<UNSPEC_TI_FETCH> == UNSPEC_TI_FETCH_ADD ? "sltu\t%4,%3,%0"
+ 						 : "sltu\t%4,%0,%3",
+ 	operands);
+ 
+       output_asm_insn ("<amop_ti_fetch>.d\t%4,%t0,%4", operands);
+       output_asm_insn ("<amop_ti_fetch>.d\t%4,%4,%t2", operands);
+       break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   output_asm_insn ("sc.q\t%3,%4,%1", operands);
+   output_asm_insn ("beqz\t%3,1b", operands);
+ 
+   return "";
+ }
+   [(set_attr "length" "<size_ti_fetch>")])
+ 
+ (define_expand "atomic_fetch_<amop_ti_fetch>ti"
+   [(set (match_operand:TI 0 "register_operand" "=&r")
+         (match_operand:TI 1 "memory_operand" "+ZB"))
+    (set (match_dup 1)
+ 	(unspec_volatile:TI
+ 	  [(match_dup 0)
+ 	   (match_operand:TI 2 "reg_or_0_operand" "rJ")]
+ 	  UNSPEC_TI_FETCH_DIRECT))
+    (match_operand:SI    3 "const_int_operand")] ;; model
+   "TARGET_64BIT && ISA_HAS_SCQ"
+ {
+   /* Model is ignored as sc.q implies a full barrier.  */
+   emit_insn (gen_atomic_fetch_<amop_ti_fetch>ti_scq (operands[0],
+ 						     operands[1],
+ 						     operands[2]));
+   DONE;
+ })
+ 
  (define_insn "atomic_fetch_add<mode>_short"
    [(set (match_operand:SHORT 0 "register_operand" "=&r")
  	(match_operand:SHORT 1 "memory_operand" "+ZB"))
***************
*** 688,694 ****
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    "ISA_HAS_LAM_BH"
!   "amadd%A3.<amo>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_expand "atomic_fetch_add<mode>"
--- 995,1001 ----
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
    "ISA_HAS_LAM_BH"
!   "amadd%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_expand "atomic_fetch_add<mode>"
***************
*** 724,790 ****
  			(match_operand:SHORT 2 "reg_or_0_operand" "rJ"))
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
!   ""
  {
    union loongarch_gen_fn_ptrs generator;
    generator.fn_7 = gen_atomic_cas_value_sub_7_si;
    loongarch_expand_atomic_qihi (generator, operands[0], operands[1],
  				operands[1], operands[2], operands[3]);
    DONE;
- })
- 
- (define_expand "atomic_fetch_and<mode>"
-   [(set (match_operand:SHORT 0 "register_operand" "=&r")
- 	(match_operand:SHORT 1 "memory_operand" "+ZB"))
-    (set (match_dup 1)
- 	(unspec_volatile:SHORT
- 	  [(and:SHORT (match_dup 1)
- 		      (match_operand:SHORT 2 "reg_or_0_operand" "rJ"))
- 	   (match_operand:SI 3 "const_int_operand")] ;; model
- 	 UNSPEC_SYNC_OLD_OP))]
-   ""
- {
-   union loongarch_gen_fn_ptrs generator;
-   generator.fn_7 = gen_atomic_cas_value_and_7_si;
-   loongarch_expand_atomic_qihi (generator, operands[0], operands[1],
- 				operands[1], operands[2], operands[3]);
-   DONE;
- })
- 
- (define_expand "atomic_fetch_xor<mode>"
-   [(set (match_operand:SHORT 0 "register_operand" "=&r")
- 	(match_operand:SHORT 1 "memory_operand" "+ZB"))
-    (set (match_dup 1)
- 	(unspec_volatile:SHORT
- 	  [(xor:SHORT (match_dup 1)
- 		      (match_operand:SHORT 2 "reg_or_0_operand" "rJ"))
- 	   (match_operand:SI 3 "const_int_operand")] ;; model
- 	 UNSPEC_SYNC_OLD_OP))]
-   ""
- {
-   union loongarch_gen_fn_ptrs generator;
-   generator.fn_7 = gen_atomic_cas_value_xor_7_si;
-   loongarch_expand_atomic_qihi (generator, operands[0], operands[1],
- 				operands[1], operands[2], operands[3]);
-   DONE;
- })
- 
- (define_expand "atomic_fetch_or<mode>"
-   [(set (match_operand:SHORT 0 "register_operand" "=&r")
- 	(match_operand:SHORT 1 "memory_operand" "+ZB"))
-    (set (match_dup 1)
- 	(unspec_volatile:SHORT
- 	  [(ior:SHORT (match_dup 1)
- 		      (match_operand:SHORT 2 "reg_or_0_operand" "rJ"))
- 	   (match_operand:SI 3 "const_int_operand")] ;; model
- 	 UNSPEC_SYNC_OLD_OP))]
-   ""
- {
-   union loongarch_gen_fn_ptrs generator;
-   generator.fn_7 = gen_atomic_cas_value_or_7_si;
-   loongarch_expand_atomic_qihi (generator, operands[0], operands[1],
- 				operands[1], operands[2], operands[3]);
-   DONE;
  })
  
  (define_expand "atomic_fetch_nand<mode>"
--- 1031,1043 ----
  			(match_operand:SHORT 2 "reg_or_0_operand" "rJ"))
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
!   "!ISA_HAS_LAM_BH"
  {
    union loongarch_gen_fn_ptrs generator;
    generator.fn_7 = gen_atomic_cas_value_sub_7_si;
    loongarch_expand_atomic_qihi (generator, operands[0], operands[1],
  				operands[1], operands[2], operands[3]);
    DONE;
  })
  
  (define_expand "atomic_fetch_nand<mode>"
diff -Nrcpad gcc-16-20250817/gcc/config/pru/pru.cc gcc-16-20250824/gcc/config/pru/pru.cc
*** gcc-16-20250817/gcc/config/pru/pru.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/pru/pru.cc	Sun Aug 24 22:32:20 2025
*************** pru_init_libfuncs (void)
*** 941,950 ****
  
    /* Long long.  */
    set_optab_libfunc (ashr_optab, DImode, "__pruabi_asrll");
-   set_optab_libfunc (smul_optab, DImode, "__pruabi_mpyll");
    set_optab_libfunc (ashl_optab, DImode, "__pruabi_lslll");
    set_optab_libfunc (lshr_optab, DImode, "__pruabi_lsrll");
  
    set_optab_libfunc (sdiv_optab, SImode, "__pruabi_divi");
    set_optab_libfunc (udiv_optab, SImode, "__pruabi_divu");
    set_optab_libfunc (smod_optab, SImode, "__pruabi_remi");
--- 941,959 ----
  
    /* Long long.  */
    set_optab_libfunc (ashr_optab, DImode, "__pruabi_asrll");
    set_optab_libfunc (ashl_optab, DImode, "__pruabi_lslll");
    set_optab_libfunc (lshr_optab, DImode, "__pruabi_lsrll");
  
+   if (TARGET_OPT_MUL)
+     {
+       set_optab_libfunc (smul_optab, DImode, "__pruabi_mpyll");
+     }
+   else
+     {
+       set_optab_libfunc (smul_optab, DImode, "__pruabi_softmpyll");
+       set_optab_libfunc (smul_optab, SImode, "__pruabi_softmpyi");
+     }
+ 
    set_optab_libfunc (sdiv_optab, SImode, "__pruabi_divi");
    set_optab_libfunc (udiv_optab, SImode, "__pruabi_divu");
    set_optab_libfunc (smod_optab, SImode, "__pruabi_remi");
diff -Nrcpad gcc-16-20250817/gcc/config/pru/pru.h gcc-16-20250824/gcc/config/pru/pru.h
*** gcc-16-20250817/gcc/config/pru/pru.h	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/pru/pru.h	Sun Aug 24 22:32:20 2025
***************
*** 65,70 ****
--- 65,73 ----
  #undef  ENDFILE_SPEC
  #define ENDFILE_SPEC "%{!mabi=ti:-lgloss} "
  
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS { "mloop", "mmul", "mfillzero" }
+ 
  /* TI ABI mandates that ELF symbols do not start with any prefix.  */
  #undef USER_LABEL_PREFIX
  #define USER_LABEL_PREFIX ""
diff -Nrcpad gcc-16-20250817/gcc/config/pru/pru.md gcc-16-20250824/gcc/config/pru/pru.md
*** gcc-16-20250817/gcc/config/pru/pru.md	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/pru/pru.md	Sun Aug 24 22:32:20 2025
***************
*** 215,221 ****
      mov\\t%0, %1
      ldi\\t%0, %%pmem(%1)
      ldi\\t%0, %1
!     fill\\t%0, 4
      ldi32\\t%0, %1"
    [(set_attr "type" "st,ld,alu,alu,alu,alu,alu")
     (set_attr "length" "4,4,4,4,4,4,8")])
--- 215,221 ----
      mov\\t%0, %1
      ldi\\t%0, %%pmem(%1)
      ldi\\t%0, %1
!     * return TARGET_OPT_FILLZERO ? \"fill\\t%0, 4\" : \"ldi32\\t%0, 0xffffffff\";
      ldi32\\t%0, %1"
    [(set_attr "type" "st,ld,alu,alu,alu,alu,alu")
     (set_attr "length" "4,4,4,4,4,4,8")])
***************
*** 259,267 ****
      case 1:
        return "lb%B1o\\t%b0, %1, %S1";
      case 2:
!       return "zero\\t%F0, 8";
      case 3:
!       return "fill\\t%F0, 8";
      case 4:
        /* careful with overlapping source and destination regs.  */
        gcc_assert (GP_REG_P (REGNO (operands[0])));
--- 259,269 ----
      case 1:
        return "lb%B1o\\t%b0, %1, %S1";
      case 2:
!       return TARGET_OPT_FILLZERO ? "zero\\t%F0, 8"
! 				 : "ldi\\t%F0, 0\;ldi\\t%N0, 0";
      case 3:
!       return TARGET_OPT_FILLZERO ? "fill\\t%F0, 8"
! 				 : "ldi32\\t%F0, 0xffffffff\;mov\\t%N0, %F0";
      case 4:
        /* careful with overlapping source and destination regs.  */
        gcc_assert (GP_REG_P (REGNO (operands[0])));
***************
*** 502,508 ****
  (define_insn "zero_extendqidi2"
    [(set (match_operand:DI 0 "register_operand" "=r,r")
  	(zero_extend:DI (match_operand:QI 1 "register_operand" "0,r")))]
!   ""
    "@
      zero\\t%F0.b1, 7
      mov\\t%F0.b0, %1\;zero\\t%F0.b1, 7"
--- 504,510 ----
  (define_insn "zero_extendqidi2"
    [(set (match_operand:DI 0 "register_operand" "=r,r")
  	(zero_extend:DI (match_operand:QI 1 "register_operand" "0,r")))]
!   "TARGET_OPT_FILLZERO"
    "@
      zero\\t%F0.b1, 7
      mov\\t%F0.b0, %1\;zero\\t%F0.b1, 7"
***************
*** 512,518 ****
  (define_insn "zero_extendhidi2"
    [(set (match_operand:DI 0 "register_operand" "=r,r")
  	(zero_extend:DI (match_operand:HI 1 "register_operand" "0,r")))]
!   ""
    "@
      zero\\t%F0.b2, 6
      mov\\t%F0.w0, %1\;zero\\t%F0.b2, 6"
--- 514,520 ----
  (define_insn "zero_extendhidi2"
    [(set (match_operand:DI 0 "register_operand" "=r,r")
  	(zero_extend:DI (match_operand:HI 1 "register_operand" "0,r")))]
!   "TARGET_OPT_FILLZERO"
    "@
      zero\\t%F0.b2, 6
      mov\\t%F0.w0, %1\;zero\\t%F0.b2, 6"
***************
*** 522,528 ****
  (define_insn "zero_extendsidi2"
    [(set (match_operand:DI 0 "register_operand" "=r,r")
  	(zero_extend:DI (match_operand:SI 1 "register_operand" "0,r")))]
!   ""
    "@
      zero\\t%N0, 4
      mov\\t%F0, %1\;zero\\t%N0, 4"
--- 524,530 ----
  (define_insn "zero_extendsidi2"
    [(set (match_operand:DI 0 "register_operand" "=r,r")
  	(zero_extend:DI (match_operand:SI 1 "register_operand" "0,r")))]
!   "TARGET_OPT_FILLZERO"
    "@
      zero\\t%N0, 4
      mov\\t%F0, %1\;zero\\t%N0, 4"
***************
*** 535,541 ****
  (define_expand "extend<EQS0:mode><EQDHIDI:mode>2"
    [(set (match_operand:EQDHIDI 0 "register_operand" "=r")
  	(sign_extend:EQDHIDI (match_operand:EQS0 1 "register_operand" "r")))]
!   ""
  {
    rtx_code_label *skip_hiset_label;
  
--- 537,543 ----
  (define_expand "extend<EQS0:mode><EQDHIDI:mode>2"
    [(set (match_operand:EQDHIDI 0 "register_operand" "=r")
  	(sign_extend:EQDHIDI (match_operand:EQS0 1 "register_operand" "r")))]
!   "TARGET_OPT_FILLZERO"
  {
    rtx_code_label *skip_hiset_label;
  
***************
*** 744,750 ****
  	(ior:HIDI
  	   (match_operand:HIDI 1 "register_operand" "0")
  	   (match_operand:HIDI 2 "const_fillbytes_operand" "Uf")))]
!   ""
  {
    static char line[64];
    pru_byterange r;
--- 746,752 ----
  	(ior:HIDI
  	   (match_operand:HIDI 1 "register_operand" "0")
  	   (match_operand:HIDI 2 "const_fillbytes_operand" "Uf")))]
!   "TARGET_OPT_FILLZERO"
  {
    static char line[64];
    pru_byterange r;
***************
*** 767,773 ****
  	(and:HIDI
  	   (match_operand:HIDI 1 "register_operand" "0")
  	   (match_operand:HIDI 2 "const_zerobytes_operand" "Uz")))]
!   ""
  {
    static char line[64];
    pru_byterange r;
--- 769,775 ----
  	(and:HIDI
  	   (match_operand:HIDI 1 "register_operand" "0")
  	   (match_operand:HIDI 2 "const_zerobytes_operand" "Uz")))]
!   "TARGET_OPT_FILLZERO"
  {
    static char line[64];
    pru_byterange r;
***************
*** 1114,1120 ****
    /* Try with the more efficient zero/fill patterns first.  */
    if (<LOGICAL_BITOP:CODE> == IOR
        && CONST_INT_P (operands[2])
!       && const_fillbytes_operand (operands[2], DImode))
      {
        rtx insn = maybe_gen_pru_ior_fillbytes (DImode,
  					      operands[0],
--- 1116,1123 ----
    /* Try with the more efficient zero/fill patterns first.  */
    if (<LOGICAL_BITOP:CODE> == IOR
        && CONST_INT_P (operands[2])
!       && const_fillbytes_operand (operands[2], DImode)
!       && TARGET_OPT_FILLZERO)
      {
        rtx insn = maybe_gen_pru_ior_fillbytes (DImode,
  					      operands[0],
***************
*** 1130,1136 ****
      }
    if (<LOGICAL_BITOP:CODE> == AND
        && CONST_INT_P (operands[2])
!       && const_zerobytes_operand (operands[2], DImode))
      {
        rtx insn = maybe_gen_pru_and_zerobytes (DImode,
  					      operands[0],
--- 1133,1140 ----
      }
    if (<LOGICAL_BITOP:CODE> == AND
        && CONST_INT_P (operands[2])
!       && const_zerobytes_operand (operands[2], DImode)
!       && TARGET_OPT_FILLZERO)
      {
        rtx insn = maybe_gen_pru_and_zerobytes (DImode,
  					      operands[0],
***************
*** 1212,1218 ****
    [(set (match_operand:SI 0 "pru_muldst_operand"	   "=Rmd0")
  	(mult:SI (match_operand:SI 1 "pru_mulsrc0_operand" "%Rms0")
  		 (match_operand:SI 2 "pru_mulsrc1_operand" "Rms1")))]
!   ""
    "nop\;xin\\t0, %0, 4"
    [(set_attr "type" "alu")
     (set_attr "length" "8")])
--- 1216,1222 ----
    [(set (match_operand:SI 0 "pru_muldst_operand"	   "=Rmd0")
  	(mult:SI (match_operand:SI 1 "pru_mulsrc0_operand" "%Rms0")
  		 (match_operand:SI 2 "pru_mulsrc1_operand" "Rms1")))]
!   "TARGET_OPT_MUL"
    "nop\;xin\\t0, %0, 4"
    [(set_attr "type" "alu")
     (set_attr "length" "8")])
diff -Nrcpad gcc-16-20250817/gcc/config/pru/pru.opt gcc-16-20250824/gcc/config/pru/pru.opt
*** gcc-16-20250817/gcc/config/pru/pru.opt	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/pru/pru.opt	Sun Aug 24 22:32:20 2025
*************** mloop
*** 39,44 ****
--- 39,52 ----
  Target Mask(OPT_LOOP)
  Allow (or do not allow) gcc to use the LOOP instruction.
  
+ mmul
+ Target Mask(OPT_MUL)
+ Allow (or do not allow) gcc to use the PRU multiplier unit.
+ 
+ mfillzero
+ Target Mask(OPT_FILLZERO)
+ Allow (or do not allow) gcc to use the FILL and ZERO instructions.
+ 
  mabi=
  Target RejectNegative Joined Enum(pru_abi_t) Var(pru_current_abi) Init(PRU_ABI_GNU) Save
  Select target ABI variant.
diff -Nrcpad gcc-16-20250817/gcc/config/pru/pru.opt.urls gcc-16-20250824/gcc/config/pru/pru.opt.urls
*** gcc-16-20250817/gcc/config/pru/pru.opt.urls	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/pru/pru.opt.urls	Sun Aug 24 22:32:20 2025
*************** UrlSuffix(gcc/PRU-Options.html#index-mno
*** 12,17 ****
--- 12,23 ----
  mloop
  UrlSuffix(gcc/PRU-Options.html#index-mloop)
  
+ mmul
+ UrlSuffix(gcc/PRU-Options.html#index-mmul)
+ 
+ mfillzero
+ UrlSuffix(gcc/PRU-Options.html#index-mfillzero)
+ 
  mabi=
  UrlSuffix(gcc/PRU-Options.html#index-mabi-4)
  
diff -Nrcpad gcc-16-20250817/gcc/config/pru/t-multilib gcc-16-20250824/gcc/config/pru/t-multilib
*** gcc-16-20250817/gcc/config/pru/t-multilib	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/config/pru/t-multilib	Sun Aug 24 22:32:20 2025
***************
*** 0 ****
--- 1,29 ----
+ # Copyright (C) 2025 Free Software Foundation, Inc.
+ #
+ # This file is part of GCC.
+ #
+ # GCC is free software; you can redistribute it and/or modify it under
+ # the terms of the GNU General Public License as published by the Free
+ # Software Foundation; either version 3, or (at your option) any later
+ # version.
+ #
+ # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ # for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+ MULTILIB_OPTIONS   =
+ MULTILIB_OPTIONS  += mloop/mno-loop
+ MULTILIB_OPTIONS  += mmul/mno-mul
+ MULTILIB_OPTIONS  += mfillzero/mno-fillzero
+ 
+ # Build two variants:
+ #   - Newer PRU core versions, present in AM335x and later.
+ #   - Older PRU core versions, present in AM18xx.
+ MULTILIB_REQUIRED  =
+ MULTILIB_REQUIRED += mloop/mmul/mfillzero
+ MULTILIB_REQUIRED += mno-loop/mno-mul/mno-fillzero
diff -Nrcpad gcc-16-20250817/gcc/config/riscv/t-rtems gcc-16-20250824/gcc/config/riscv/t-rtems
*** gcc-16-20250817/gcc/config/riscv/t-rtems	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/riscv/t-rtems	Sun Aug 24 22:32:20 2025
***************
*** 1,8 ****
  MULTILIB_OPTIONS	=
  MULTILIB_DIRNAMES	=
  
! MULTILIB_OPTIONS	+= march=rv32i/march=rv32iac/march=rv32im/march=rv32imf/march=rv32ima/march=rv32imac/march=rv32imaf/march=rv32imafc/march=rv32imafd/march=rv32imafdc/march=rv64ima/march=rv64imac/march=rv64imafd/march=rv64imafdc
! MULTILIB_DIRNAMES	+= rv32i       rv32iac       rv32im       rv32imf      rv32ima       rv32imac       rv32imaf       rv32imafc       rv32imafd       rv32imafdc       rv64ima       rv64imac       rv64imafd       rv64imafdc
  
  MULTILIB_OPTIONS	+= mabi=ilp32/mabi=ilp32f/mabi=ilp32d/mabi=lp64/mabi=lp64d
  MULTILIB_DIRNAMES	+= ilp32      ilp32f      ilp32d      lp64      lp64d
--- 1,8 ----
  MULTILIB_OPTIONS	=
  MULTILIB_DIRNAMES	=
  
! MULTILIB_OPTIONS	+= march=rv32i/march=rv32iac/march=rv32im/march=rv32imf/march=rv32ima/march=rv32imac/march=rv32imaf/march=rv32imafc/march=rv32imafd/march=rv32imafdc/march=rv64ima/march=rv64imac/march=rv64imafd/march=rv64imafdc/march=rv64imc
! MULTILIB_DIRNAMES	+= rv32i       rv32iac       rv32im       rv32imf       rv32ima       rv32imac       rv32imaf       rv32imafc       rv32imafd       rv32imafdc       rv64ima       rv64imac       rv64imafd       rv64imafdc       rv64imc
  
  MULTILIB_OPTIONS	+= mabi=ilp32/mabi=ilp32f/mabi=ilp32d/mabi=lp64/mabi=lp64d
  MULTILIB_DIRNAMES	+= ilp32      ilp32f      ilp32d      lp64      lp64d
*************** MULTILIB_DIRNAMES	+= ilp32      ilp32f
*** 10,15 ****
--- 10,18 ----
  MULTILIB_OPTIONS	+= mcmodel=medany
  MULTILIB_DIRNAMES	+= medany
  
+ MULTILIB_OPTIONS	+= mstrict-align
+ MULTILIB_DIRNAMES	+= strict-align
+ 
  MULTILIB_REQUIRED	=
  MULTILIB_REQUIRED	+= march=rv32i/mabi=ilp32
  MULTILIB_REQUIRED	+= march=rv32iac/mabi=ilp32
*************** MULTILIB_REQUIRED	+= march=rv64ima/mabi=
*** 25,27 ****
--- 28,32 ----
  MULTILIB_REQUIRED	+= march=rv64imac/mabi=lp64/mcmodel=medany
  MULTILIB_REQUIRED	+= march=rv64imafd/mabi=lp64d/mcmodel=medany
  MULTILIB_REQUIRED	+= march=rv64imafdc/mabi=lp64d/mcmodel=medany
+ MULTILIB_REQUIRED	+= march=rv64imafdc/mabi=lp64d/mcmodel=medany/mstrict-align
+ MULTILIB_REQUIRED	+= march=rv64imc/mabi=lp64/mcmodel=medany/mstrict-align
diff -Nrcpad gcc-16-20250817/gcc/config/rl78/rl78.opt.urls gcc-16-20250824/gcc/config/rl78/rl78.opt.urls
*** gcc-16-20250817/gcc/config/rl78/rl78.opt.urls	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/rl78/rl78.opt.urls	Sun Aug 24 22:32:20 2025
*************** msim
*** 4,10 ****
  UrlSuffix(gcc/RL78-Options.html#index-msim-6)
  
  mmul=
! UrlSuffix(gcc/RL78-Options.html#index-mmul)
  
  mallregs
  UrlSuffix(gcc/RL78-Options.html#index-mallregs)
--- 4,10 ----
  UrlSuffix(gcc/RL78-Options.html#index-msim-6)
  
  mmul=
! UrlSuffix(gcc/RL78-Options.html#index-mmul-1)
  
  mallregs
  UrlSuffix(gcc/RL78-Options.html#index-mallregs)
diff -Nrcpad gcc-16-20250817/gcc/config/rs6000/rs6000.cc gcc-16-20250824/gcc/config/rs6000/rs6000.cc
*** gcc-16-20250817/gcc/config/rs6000/rs6000.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/rs6000/rs6000.cc	Sun Aug 24 22:32:20 2025
*************** can_be_rotated_to_negative_lis (HOST_WID
*** 10322,10328 ****
       rotated over the highest bit.  */
    unsigned HOST_WIDE_INT uc = c;
    int pos_one = clz_hwi ((HOST_WIDE_INT) (uc << 16) >> 16);
!   if (pos_one != 0)
      {
        middle_zeros = ctz_hwi (c >> (HOST_BITS_PER_WIDE_INT - pos_one));
        int middle_ones = clz_hwi (~(uc << pos_one));
--- 10322,10328 ----
       rotated over the highest bit.  */
    unsigned HOST_WIDE_INT uc = c;
    int pos_one = clz_hwi ((HOST_WIDE_INT) (uc << 16) >> 16);
!   if (pos_one > 0 && pos_one < HOST_BITS_PER_WIDE_INT)
      {
        middle_zeros = ctz_hwi (c >> (HOST_BITS_PER_WIDE_INT - pos_one));
        int middle_ones = clz_hwi (~(uc << pos_one));
*************** rs6000_emit_set_long_const (rtx dest, HO
*** 10585,10591 ****
      {
        /* li/lis; rldicX */
        unsigned HOST_WIDE_INT imm = (c | ~mask);
!       if (shift != 0)
  	imm = (imm >> shift) | (imm << (HOST_BITS_PER_WIDE_INT - shift));
  
        count_or_emit_insn (temp, GEN_INT (imm));
--- 10585,10591 ----
      {
        /* li/lis; rldicX */
        unsigned HOST_WIDE_INT imm = (c | ~mask);
!       if (shift > 0 && shift < HOST_BITS_PER_WIDE_INT)
  	imm = (imm >> shift) | (imm << (HOST_BITS_PER_WIDE_INT - shift));
  
        count_or_emit_insn (temp, GEN_INT (imm));
diff -Nrcpad gcc-16-20250817/gcc/config/xtensa/xtensa.md gcc-16-20250824/gcc/config/xtensa/xtensa.md
*** gcc-16-20250817/gcc/config/xtensa/xtensa.md	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/config/xtensa/xtensa.md	Sun Aug 24 22:32:20 2025
***************
*** 2024,2049 ****
  			[(match_operand:SI 0 "register_operand" "r")
  			 (const_int -2147483648)])
  		      (label_ref (match_operand 1 ""))
! 		      (pc)))]
    "TARGET_ABS"
    "#"
!   "&& can_create_pseudo_p ()"
    [(set (match_dup 3)
  	(abs:SI (match_dup 0)))
     (set (pc)
  	(if_then_else (match_op_dup 2
! 			[(zero_extract:SI (match_dup 3)
! 					  (const_int 1)
! 					  (match_dup 4))
  			 (const_int 0)])
  		      (label_ref (match_dup 1))
  		      (pc)))]
  {
!   operands[3] = gen_reg_rtx (SImode);
!   operands[4] = GEN_INT (BITS_BIG_ENDIAN ? 0 : 31);
!   operands[2] = gen_rtx_fmt_ee (reverse_condition (GET_CODE (operands[2])),
! 				VOIDmode, XEXP (operands[2], 0),
! 				const0_rtx);
  }
    [(set_attr "type"	"jump")
     (set_attr "mode"	"none")
--- 2024,2046 ----
  			[(match_operand:SI 0 "register_operand" "r")
  			 (const_int -2147483648)])
  		      (label_ref (match_operand 1 ""))
! 		      (pc)))
!    (clobber (match_scratch:SI 3 "=a"))]
    "TARGET_ABS"
    "#"
!   "&& 1"
    [(set (match_dup 3)
  	(abs:SI (match_dup 0)))
     (set (pc)
  	(if_then_else (match_op_dup 2
! 			[(match_dup 3)
  			 (const_int 0)])
  		      (label_ref (match_dup 1))
  		      (pc)))]
  {
!   if (GET_CODE (operands[3]) == SCRATCH)
!     operands[3] = gen_reg_rtx (SImode);
!   PUT_CODE (operands[2], GET_CODE (operands[2]) == EQ ? LT : GE);
  }
    [(set_attr "type"	"jump")
     (set_attr "mode"	"none")
diff -Nrcpad gcc-16-20250817/gcc/config.gcc gcc-16-20250824/gcc/config.gcc
*** gcc-16-20250817/gcc/config.gcc	Sun Aug 17 22:32:07 2025
--- gcc-16-20250824/gcc/config.gcc	Sun Aug 24 22:32:19 2025
*************** aarch64*-*-*)
*** 351,357 ****
  	c_target_objs="aarch64-c.o"
  	cxx_target_objs="aarch64-c.o"
  	d_target_objs="aarch64-d.o"
! 	extra_objs="aarch64-builtins.o aarch-common.o aarch64-elf-metadata.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o aarch64-sve-builtins-sme.o cortex-a57-fma-steering.o aarch64-speculation.o aarch-bti-insert.o aarch64-cc-fusion.o aarch64-early-ra.o aarch64-ldp-fusion.o"
  	target_gtfiles="\$(srcdir)/config/aarch64/aarch64-protos.h \$(srcdir)/config/aarch64/aarch64-builtins.h \$(srcdir)/config/aarch64/aarch64-builtins.cc \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc"
  	target_has_targetm_common=yes
  	;;
--- 351,357 ----
  	c_target_objs="aarch64-c.o"
  	cxx_target_objs="aarch64-c.o"
  	d_target_objs="aarch64-d.o"
! 	extra_objs="aarch64-builtins.o aarch-common.o aarch64-elf-metadata.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o aarch64-sve-builtins-sme.o cortex-a57-fma-steering.o aarch64-speculation.o aarch-bti-insert.o aarch64-early-ra.o aarch64-ldp-fusion.o"
  	target_gtfiles="\$(srcdir)/config/aarch64/aarch64-protos.h \$(srcdir)/config/aarch64/aarch64-builtins.h \$(srcdir)/config/aarch64/aarch64-builtins.cc \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc"
  	target_has_targetm_common=yes
  	;;
*************** powerpcle-*-eabi*)
*** 3207,3213 ****
  	;;
  pru*-*-*)
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
! 	tmake_file="${tmake_file} pru/t-pru"
  	extra_objs="pru-pragma.o pru-passes.o"
  	use_gcc_stdint=wrap
  	;;
--- 3207,3213 ----
  	;;
  pru*-*-*)
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
! 	tmake_file="${tmake_file} pru/t-multilib pru/t-pru"
  	extra_objs="pru-pragma.o pru-passes.o"
  	use_gcc_stdint=wrap
  	;;
*************** case "${target}" in
*** 4658,4664 ****
  		;;
  
  	i[34567]86-*-* | x86_64-*-*)
! 		supported_defaults="abi arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64"
  		for which in arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64; do
  			eval "val=\$with_$which"
  			case " $x86_archs " in
--- 4658,4664 ----
  		;;
  
  	i[34567]86-*-* | x86_64-*-*)
! 		supported_defaults="abi arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64 tls"
  		for which in arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64; do
  			eval "val=\$with_$which"
  			case " $x86_archs " in
*************** case "${target}" in
*** 4717,4722 ****
--- 4717,4733 ----
  				;;
  			esac
  		done
+ 
+ 		# Handle --with-tls.
+ 		case "$with_tls" in
+ 		""|gnu|gnu2)
+ 			# OK
+ 			;;
+ 		*)
+ 			echo "Unknown TLS method used in --with-tls=$with_tls" 1>&2
+ 			exit 1
+ 			;;
+ 		esac
  		;;
  
  	riscv*-*-*)
*************** case "${target}" in
*** 4782,4788 ****
  			exit 1
  			;;
  		esac
! 		PYTHON=`which python || which python3 || which python2`
  		if test "x${PYTHON}" != x; then
  			with_arch=`${PYTHON} ${srcdir}/config/riscv/arch-canonicalize -misa-spec=${with_isa_spec} ${with_arch}`
  		fi
--- 4793,4799 ----
  			exit 1
  			;;
  		esac
! 		PYTHON=`which python3 || which python`
  		if test "x${PYTHON}" != x; then
  			with_arch=`${PYTHON} ${srcdir}/config/riscv/arch-canonicalize -misa-spec=${with_isa_spec} ${with_arch}`
  		fi
diff -Nrcpad gcc-16-20250817/gcc/cp/ChangeLog gcc-16-20250824/gcc/cp/ChangeLog
*** gcc-16-20250817/gcc/cp/ChangeLog	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/ChangeLog	Sun Aug 24 22:32:20 2025
***************
*** 1,3 ****
--- 1,52 ----
+ 2025-08-23  Eczbek  <eczbek.void@gmail.com>
+ 
+ 	PR c++/116928
+ 	* parser.cc (cp_parser_braced_list): Set greater_than_is_operator_p.
+ 
+ 2025-08-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120499
+ 	* method.cc (synthesize_method): Set the instantiating module.
+ 
+ 2025-08-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/121068
+ 	* constexpr.cc (cxx_eval_store_expression): Allow clobber of a const
+ 	object.
+ 
+ 2025-08-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120757
+ 	* pt.cc (tsubst_expr) [OFFSET_REF]: Don't tsubst the type.
+ 
+ 2025-08-20  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/121553
+ 	* name-lookup.cc (check_local_shadow): Check !is_normal_capture_proxy.
+ 
+ 2025-08-19  Ben Wu  <soggysocks206@gmail.com>
+ 
+ 	PR c++/120618
+ 	* parser.cc (cp_parser_compound_requirement): Set type to
+ 	NULL_TREE for invalid type-constraint.
+ 
+ 2025-08-19  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/121351
+ 	* class.cc (add_method): Use outer_template_args when
+ 	substituting outer template arguments into constraints.
+ 
+ 2025-08-19  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120195
+ 	* name-lookup.cc (do_nonmember_using_decl): Also handle change
+ 	in exportedness of a function.
+ 
+ 2025-08-18  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* typeck.cc (get_member_function_from_ptrfunc): Use
+ 	'sanitize_code_type' instead of 'unsigned int'.
+ 
  2025-08-17  Nathaniel Shead  <nathanieloshead@gmail.com>
  
  	PR c++/120503
diff -Nrcpad gcc-16-20250817/gcc/cp/class.cc gcc-16-20250824/gcc/cp/class.cc
*** gcc-16-20250817/gcc/cp/class.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/class.cc	Sun Aug 24 22:32:20 2025
*************** add_method (tree type, tree method, bool
*** 1365,1378 ****
  	{
  	  if (TREE_CODE (fn) == TEMPLATE_DECL)
  	    ++processing_template_decl;
! 	  if (tree ti = CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (fn)))
  	    fn_constraints = tsubst_constraint_info (fn_constraints,
! 						     TI_ARGS (ti),
  						     tf_warning_or_error,
  						     fn);
! 	  if (tree ti = CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (method)))
  	    method_constraints = tsubst_constraint_info (method_constraints,
! 							 TI_ARGS (ti),
  							 tf_warning_or_error,
  							 method);
  	  if (TREE_CODE (fn) == TEMPLATE_DECL)
--- 1365,1378 ----
  	{
  	  if (TREE_CODE (fn) == TEMPLATE_DECL)
  	    ++processing_template_decl;
! 	  if (tree outer_args = outer_template_args (fn))
  	    fn_constraints = tsubst_constraint_info (fn_constraints,
! 						     outer_args,
  						     tf_warning_or_error,
  						     fn);
! 	  if (tree outer_args = outer_template_args (method))
  	    method_constraints = tsubst_constraint_info (method_constraints,
! 							 outer_args,
  							 tf_warning_or_error,
  							 method);
  	  if (TREE_CODE (fn) == TEMPLATE_DECL)
diff -Nrcpad gcc-16-20250817/gcc/cp/constexpr.cc gcc-16-20250824/gcc/cp/constexpr.cc
*** gcc-16-20250817/gcc/cp/constexpr.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/constexpr.cc	Sun Aug 24 22:32:20 2025
*************** cxx_eval_store_expression (const constex
*** 7659,7664 ****
--- 7659,7667 ----
  	  ctx->global->destroy_value (object);
  	  return void_node;
  	}
+ 
+       /* Ending the lifetime of a const object is OK.  */
+       const_object_being_modified = NULL_TREE;
      }
  
    type = TREE_TYPE (object);
diff -Nrcpad gcc-16-20250817/gcc/cp/method.cc gcc-16-20250824/gcc/cp/method.cc
*** gcc-16-20250817/gcc/cp/method.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/method.cc	Sun Aug 24 22:32:20 2025
*************** synthesize_method (tree fndecl)
*** 1851,1856 ****
--- 1851,1859 ----
    finish_function_body (stmt);
    finish_function (/*inline_p=*/false);
  
+   /* Remember that we were defined in this module.  */
+   set_instantiating_module (fndecl);
+ 
    if (!DECL_DELETED_FN (fndecl))
      expand_or_defer_fn (fndecl);
  
diff -Nrcpad gcc-16-20250817/gcc/cp/name-lookup.cc gcc-16-20250824/gcc/cp/name-lookup.cc
*** gcc-16-20250817/gcc/cp/name-lookup.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/name-lookup.cc	Sun Aug 24 22:32:20 2025
*************** check_local_shadow (tree decl)
*** 3355,3361 ****
  		    && TREE_CODE (old) == PARM_DECL)
  		   /* We should also give an error for
  		       [x=1]{ int x; }  */
! 		   || is_capture_proxy (old)))
  	{
  	  /* Go to where the parms should be and see if we find
  	     them there.  */
--- 3355,3362 ----
  		    && TREE_CODE (old) == PARM_DECL)
  		   /* We should also give an error for
  		       [x=1]{ int x; }  */
! 		   || (is_capture_proxy (old)
! 		       && !is_normal_capture_proxy (old))))
  	{
  	  /* Go to where the parms should be and see if we find
  	     them there.  */
*************** do_nonmember_using_decl (name_lookup &lo
*** 5356,5362 ****
  			OVL_EXPORT_P (old.get_using ()) = true;
  		    }
  		  else if (!DECL_LANG_SPECIFIC (inner)
! 			   || !DECL_MODULE_PURVIEW_P (inner))
  		    /* We need to re-insert this function as a revealed
  		       (possibly exported) declaration.  We can't remove
  		       the existing decl because that will change any
--- 5357,5364 ----
  			OVL_EXPORT_P (old.get_using ()) = true;
  		    }
  		  else if (!DECL_LANG_SPECIFIC (inner)
! 			   || !DECL_MODULE_PURVIEW_P (inner)
! 			   || (exporting_p && !DECL_MODULE_EXPORT_P (inner)))
  		    /* We need to re-insert this function as a revealed
  		       (possibly exported) declaration.  We can't remove
  		       the existing decl because that will change any
*************** do_nonmember_using_decl (name_lookup &lo
*** 5378,5384 ****
  		  found = true;
  		  if (revealing_p
  		      && (!DECL_LANG_SPECIFIC (inner)
! 			  || !DECL_MODULE_PURVIEW_P (inner)))
  		    found = false;
  		  break;
  		}
--- 5380,5387 ----
  		  found = true;
  		  if (revealing_p
  		      && (!DECL_LANG_SPECIFIC (inner)
! 			  || !DECL_MODULE_PURVIEW_P (inner)
! 			  || (exporting_p && !DECL_MODULE_EXPORT_P (inner))))
  		    found = false;
  		  break;
  		}
diff -Nrcpad gcc-16-20250817/gcc/cp/parser.cc gcc-16-20250824/gcc/cp/parser.cc
*** gcc-16-20250817/gcc/cp/parser.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/parser.cc	Sun Aug 24 22:32:20 2025
*************** cp_parser_braced_list (cp_parser *parser
*** 27514,27519 ****
--- 27514,27523 ----
    location_t start_loc = cp_lexer_peek_token (parser->lexer)->location;
    auto oas = make_temp_override (parser->omp_array_section_p, false);
  
+   /* Within a brace-enclosed initializer list, a `>' token is always the
+      greater-than operator.  */
+   auto gto = make_temp_override (parser->greater_than_is_operator_p, true);
+ 
    /* Consume the `{' token.  */
    matching_braces braces;
    bool found_opening_brace = braces.require_open (parser);
*************** cp_parser_compound_requirement (cp_parse
*** 33403,33411 ****
  	    }
  	}
        else
! 	/* P1452R2 removed the trailing-return-type option.  */
! 	error_at (type_loc,
! 		  "return-type-requirement is not a type-constraint");
      }
  
    location_t loc = make_location (expr_token->location,
--- 33407,33418 ----
  	    }
  	}
        else
! 	{
! 	  /* P1452R2 removed the trailing-return-type option.  */
! 	  error_at (type_loc,
! 		    "return-type-requirement is not a type-constraint");
! 	  type = NULL_TREE;
! 	}
      }
  
    location_t loc = make_location (expr_token->location,
diff -Nrcpad gcc-16-20250817/gcc/cp/pt.cc gcc-16-20250824/gcc/cp/pt.cc
*** gcc-16-20250817/gcc/cp/pt.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/pt.cc	Sun Aug 24 22:32:20 2025
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 22537,22548 ****
  
      case OFFSET_REF:
        {
! 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
  	tree op0 = RECUR (TREE_OPERAND (t, 0));
  	tree op1 = RECUR (TREE_OPERAND (t, 1));
  	r = build2 (OFFSET_REF, type, op0, op1);
  	PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
! 	if (!mark_used (TREE_OPERAND (r, 1), complain)
  	    && !(complain & tf_error))
  	  RETURN (error_mark_node);
  	RETURN (r);
--- 22537,22552 ----
  
      case OFFSET_REF:
        {
! 	/* We should only get here for an OFFSET_REF like A::m; a .* in a
! 	   template is represented as a DOTSTAR_EXPR.  */
! 	gcc_checking_assert
! 	  (same_type_p (TREE_TYPE (t), TREE_TYPE (TREE_OPERAND (t, 1))));
  	tree op0 = RECUR (TREE_OPERAND (t, 0));
  	tree op1 = RECUR (TREE_OPERAND (t, 1));
+ 	tree type = TREE_TYPE (op1);
  	r = build2 (OFFSET_REF, type, op0, op1);
  	PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
! 	if (!mark_used (op1, complain)
  	    && !(complain & tf_error))
  	  RETURN (error_mark_node);
  	RETURN (r);
diff -Nrcpad gcc-16-20250817/gcc/cp/typeck.cc gcc-16-20250824/gcc/cp/typeck.cc
*** gcc-16-20250817/gcc/cp/typeck.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/cp/typeck.cc	Sun Aug 24 22:32:20 2025
*************** get_member_function_from_ptrfunc (tree *
*** 4287,4293 ****
        idx = build1 (NOP_EXPR, vtable_index_type, e3);
        switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
  	{
! 	  int flag_sanitize_save;
  	case ptrmemfunc_vbit_in_pfn:
  	  e1 = cp_build_binary_op (input_location,
  				   BIT_AND_EXPR, idx, integer_one_node,
--- 4287,4293 ----
        idx = build1 (NOP_EXPR, vtable_index_type, e3);
        switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
  	{
! 	  sanitize_code_type flag_sanitize_save;
  	case ptrmemfunc_vbit_in_pfn:
  	  e1 = cp_build_binary_op (input_location,
  				   BIT_AND_EXPR, idx, integer_one_node,
diff -Nrcpad gcc-16-20250817/gcc/d/ChangeLog gcc-16-20250824/gcc/d/ChangeLog
*** gcc-16-20250817/gcc/d/ChangeLog	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/d/ChangeLog	Sun Aug 24 22:32:20 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-08-18  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* d-attribs.cc (d_handle_no_sanitize_attribute): Use
+ 	'sanitize_code_type' instead of 'unsigned int'.
+ 
  2025-08-11  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* d-codegen.cc (build_filename_from_loc): Use
diff -Nrcpad gcc-16-20250817/gcc/d/d-attribs.cc gcc-16-20250824/gcc/d/d-attribs.cc
*** gcc-16-20250817/gcc/d/d-attribs.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/d/d-attribs.cc	Sun Aug 24 22:32:20 2025
*************** d_handle_no_sanitize_attribute (tree *no
*** 1406,1412 ****
        return NULL_TREE;
      }
  
!   unsigned int flags = 0;
    for (; args; args = TREE_CHAIN (args))
      {
        tree id = TREE_VALUE (args);
--- 1406,1412 ----
        return NULL_TREE;
      }
  
!   sanitize_code_type flags = 0;
    for (; args; args = TREE_CHAIN (args))
      {
        tree id = TREE_VALUE (args);
*************** d_handle_no_sanitize_attribute (tree *no
*** 1424,1439 ****
       merge existing flags if no_sanitize was previously handled.  */
    if (tree attr = lookup_attribute ("no_sanitize", DECL_ATTRIBUTES (*node)))
      {
!       unsigned int old_value = tree_to_uhwi (TREE_VALUE (attr));
        flags |= old_value;
  
        if (flags != old_value)
! 	TREE_VALUE (attr) = build_int_cst (d_uint_type, flags);
      }
    else
      {
        DECL_ATTRIBUTES (*node) = tree_cons (get_identifier ("no_sanitize"),
! 					   build_int_cst (d_uint_type, flags),
  					   DECL_ATTRIBUTES (*node));
      }
  
--- 1424,1440 ----
       merge existing flags if no_sanitize was previously handled.  */
    if (tree attr = lookup_attribute ("no_sanitize", DECL_ATTRIBUTES (*node)))
      {
!       sanitize_code_type old_value =
! 	tree_to_sanitize_code_type (TREE_VALUE (attr));
        flags |= old_value;
  
        if (flags != old_value)
! 	TREE_VALUE (attr) = build_int_cst (d_ulong_type, flags);
      }
    else
      {
        DECL_ATTRIBUTES (*node) = tree_cons (get_identifier ("no_sanitize"),
! 					   build_int_cst (d_ulong_type, flags),
  					   DECL_ATTRIBUTES (*node));
      }
  
diff -Nrcpad gcc-16-20250817/gcc/diagnostic-context-rich-location.cc gcc-16-20250824/gcc/diagnostic-context-rich-location.cc
*** gcc-16-20250817/gcc/diagnostic-context-rich-location.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/diagnostic-context-rich-location.cc	Sun Aug 24 22:32:20 2025
***************
*** 0 ****
--- 1,176 ----
+ /* A rich_location subclass that lazily populates a diagnostic_path
+    with diagnostic context events, but only if the path is actually to be
+    used.
+ 
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Contributed by Qing Zhao<qing.zhao@oracle.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/>.  */
+ 
+ #define INCLUDE_MEMORY
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "tree.h"
+ #include "gimple.h"
+ #include "gimple-iterator.h"
+ #include "cfganal.h"
+ #include "tree-cfg.h"
+ #include "simple-diagnostic-path.h"
+ #include "diagnostic-context-rich-location.h"
+ 
+ /* Implemenation of the method make_inner_path of the class
+    lazy_diagnostic_context_path.  */
+ 
+ std::unique_ptr<diagnostics::paths::path>
+ lazy_diagnostic_context_path::make_inner_path () const
+ {
+   auto path = std::make_unique<simple_diagnostic_path>
+ 		(m_logical_loc_mgr,
+ 		 global_dc->get_reference_printer ());
+   if (!flag_diagnostics_show_context)
+     return path;
+   if (!m_stmt)
+     return path;
+ 
+   /* For the following more complicated code:
+   if (i < 10)				// B2
+     {
+       if (is_day)			// B3
+ 	__builtin_printf ("day");	// B4
+       else
+ 	__builtin_printf ("night");	// B5
+ 
+       if (i == -1)			// B6
+ 	{
+ 	  if (is_dollar)		// B7
+ 	    __builtin_printf ("dollar");// B8
+ 	  else
+ 	    __builtin_printf ("euro");	// B9
+ 	  a[i] = -1;    		// B10 (warning here)
+ 	}
+       else
+ 	a[i] = i;			// B11
+     }
+   else
+     a[i] = i + 1;			// B12
+ 
+   it has the following CFG:
+ 
+ 	    B2
+ 	   / \
+ 	  V   \
+ 	 B3    \
+ 	/ \     \
+        V   V     \
+       B4  B5      V
+ 	\ /      B12
+ 	 V
+ 	 B6
+ 	/ \
+        V   V
+       B7  B11
+      / \
+     V   V
+    B8   B9
+      \ /
+       V
+      B10 (warning here)
+ 
+   If the STMT that has warning is in B10, the interesting conditions for
+   the diagnostic are:
+   depth=1: the condition stmt at B6, the edge from B6->B7;
+   depth=2: the condition stmt at B2, the edge from B2->B3;
+ 
+   In order to get the interesting conditions, the key to the heuristic
+   is to backtrace the immediate dominator block chain of the current
+   block B10, such as, B7, then B6, B3, B2.
+ 
+   In this basic block dominator chain, identify the single predecessor
+   edges, such as B6->B7, and B2->B3.
+ 
+   For each of the single predecessor edge, the interesting condition is
+   embedded in the single predecessor block, and the TRUE/FALSE of this
+   condition is embedded in the edge.
+ 
+   FIXME: We currently only handle GIMPLE_COND, might extend to GIMPLE_SWITCH
+   later.  */
+ 
+   basic_block cur_bb = gimple_bb (m_stmt);
+   if (!cur_bb)
+     return path;
+   basic_block cond_bb = NULL;
+   int depth = 0;
+   do
+     {
+       /* Step 1. locate the immediate dominator of cur_bb.  */
+       if (dom_info_available_p (cfun, CDI_DOMINATORS))
+ 	cond_bb = get_immediate_dominator (CDI_DOMINATORS, cur_bb);
+ 
+       if (!cond_bb)
+ 	return path;
+ 
+       /* Step 2. identify the single predecessor edge to locate the
+ 	 conditional statement.  */
+       if (single_pred_p (cur_bb))
+ 	{
+ 	  gcc_assert (cond_bb == single_pred (cur_bb));
+ 	  gimple *cond_stmt = NULL;
+ 	  gimple_stmt_iterator gsi = gsi_last_bb (cond_bb);
+ 
+ 	  /* Currently, we only hanlde GIMPLE_COND.
+ 	     FIXME, will handle GIMPLE_SWITCH and other ctrl stmt later.  */
+ 	  if (gsi_stmt (gsi) && stmt_ends_bb_p (gsi_stmt (gsi)))
+ 	    if (gimple_code (gsi_stmt (gsi)) == GIMPLE_COND)
+ 	      cond_stmt = gsi_stmt (gsi);
+ 
+ 	  /* If there is no conditional statement in the cond_bb, continue.  */
+ 	  if (!cond_stmt)
+ 	    {
+ 	      cur_bb = cond_bb;
+ 	      continue;
+ 	    }
+ 
+ 	  depth++;
+ 
+ 	  /* if there is no location information for the cond_stmt, we should
+ 	     not add this event to confuse end user.  */
+ 	  if (cond_stmt
+ 	      && LOCATION_LOCUS (gimple_location (cond_stmt))
+ 		 != UNKNOWN_LOCATION)
+ 	    {
+ 	      /* Get the edge from the cond_bb to cur_bb, to determine whether
+ 		 the stmt is on the taken path of the conditional statement.  */
+ 	      edge e = find_edge (cond_bb, cur_bb);
+ 	      bool is_branch_taken = e->flags & EDGE_TRUE_VALUE;
+ 	      path->add_event (gimple_location (cond_stmt), cfun->decl, 1,
+ 			       "when the condition is evaluated to %s",
+ 			       is_branch_taken ? "true" : "false");
+ 	    }
+ 	}
+ 	cur_bb = cond_bb;
+     }
+   while (cond_bb != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+ 	 && depth < flag_diagnostics_show_context);
+ 
+   /* Add an end of path warning event in the end of the path.  */
+   if (path->num_events () > 0)
+     path->add_event (m_location, cfun->decl, 1,
+ 		     "warning happens here");
+   return path;
+ }
diff -Nrcpad gcc-16-20250817/gcc/diagnostic-context-rich-location.h gcc-16-20250824/gcc/diagnostic-context-rich-location.h
*** gcc-16-20250817/gcc/diagnostic-context-rich-location.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/diagnostic-context-rich-location.h	Sun Aug 24 22:32:20 2025
***************
*** 0 ****
--- 1,73 ----
+ /* A rich_location subclass that lazily populates a diagnostic_path
+    with diagnostic context events, but only if the path is actually to be
+    used.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Contributed by Qing Zhao<qing.zhao@oracle.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_DIAGNOSTIC_CONTEXT_RICH_LOCATION_H
+ #define GCC_DIAGNOSTIC_CONTEXT_RICH_LOCATION_H
+ 
+ #include "gcc-rich-location.h"
+ #include "diagnostics/lazy-paths.h"
+ #include "tree-logical-location.h"
+ 
+ class lazy_diagnostic_context_path : public diagnostics::paths::lazy_path
+ {
+ public:
+   lazy_diagnostic_context_path (const tree_logical_location_manager
+ 				&logical_loc_mgr,
+ 				location_t location, gimple *stmt)
+   : diagnostics::paths::lazy_path (logical_loc_mgr),
+     m_logical_loc_mgr (logical_loc_mgr),
+     m_location (location), m_stmt (stmt)
+   {
+   }
+ 
+   std::unique_ptr<diagnostics::paths::path>
+   make_inner_path () const final override;
+   /* This method will be called on demand if a diagnostic is actually
+      emitted for this rich_location.  */
+ 
+   const tree_logical_location_manager &m_logical_loc_mgr;
+   location_t m_location;
+   gimple *m_stmt;
+ };
+ 
+ class rich_location_with_details : public gcc_rich_location
+ {
+ public:
+   rich_location_with_details (location_t location, gimple *stmt)
+   : gcc_rich_location (location),
+     m_lazy_diagnostic_context_path (m_logical_loc_mgr, location, stmt)
+   {
+     set_path (&m_lazy_diagnostic_context_path);
+   }
+ 
+   rich_location_with_details (location_t location, tree exp ATTRIBUTE_UNUSED)
+   : gcc_rich_location (location),
+     m_lazy_diagnostic_context_path (m_logical_loc_mgr, location, nullptr)
+   {
+   }
+ 
+ private:
+   const tree_logical_location_manager m_logical_loc_mgr;
+   lazy_diagnostic_context_path m_lazy_diagnostic_context_path;
+ };
+ 
+ #endif // GCC_DIAGNOSTIC_CONTEXT_RICH_LOCATION_H
diff -Nrcpad gcc-16-20250817/gcc/doc/extend.texi gcc-16-20250824/gcc/doc/extend.texi
*** gcc-16-20250817/gcc/doc/extend.texi	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/doc/extend.texi	Sun Aug 24 22:32:20 2025
*************** is computed.
*** 17252,17258 ****
  
  @smallexample
  struct V @{ char buf1[10]; int b; char buf2[10]; @} var;
! char *p = &var.buf1[1], *q = &var.b;
  
  /* Here the object p points to is var.  */
  assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
--- 17252,17259 ----
  
  @smallexample
  struct V @{ char buf1[10]; int b; char buf2[10]; @} var;
! char *p = &var.buf1[1];
! int *q = &var.b;
  
  /* Here the object p points to is var.  */
  assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
diff -Nrcpad gcc-16-20250817/gcc/doc/install.texi gcc-16-20250824/gcc/doc/install.texi
*** gcc-16-20250817/gcc/doc/install.texi	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/doc/install.texi	Sun Aug 24 22:32:20 2025
*************** descriptor-based dialect.
*** 1254,1259 ****
--- 1254,1262 ----
  For RISC-V targets, possible values for @var{dialect} are @code{trad} or
  @code{desc}, which select between the traditional GNU dialect and the GNU TLS
  descriptor-based dialect.
+ For i386, x86-64 targets, possible values for @var{dialect} are @code{gnu} or
+ @code{gnu2}, which select between the original GNU dialect and the GNU TLS
+ descriptor-based dialect.
  
  @item --enable-multiarch
  Specify whether to enable or disable multiarch support.  The default is
diff -Nrcpad gcc-16-20250817/gcc/doc/invoke.texi gcc-16-20250824/gcc/doc/invoke.texi
*** gcc-16-20250817/gcc/doc/invoke.texi	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/doc/invoke.texi	Sun Aug 24 22:32:20 2025
*************** Objective-C and Objective-C++ Dialects}.
*** 334,340 ****
  -fdiagnostics-column-unit=@r{[}display@r{|}byte@r{]}
  -fdiagnostics-column-origin=@var{origin}
  -fdiagnostics-escape-format=@r{[}unicode@r{|}bytes@r{]}
! -fdiagnostics-text-art-charset=@r{[}none@r{|}ascii@r{|}unicode@r{|}emoji@r{]}}
  
  @item Warning Options
  @xref{Warning Options,,Options to Request or Suppress Warnings}.
--- 334,341 ----
  -fdiagnostics-column-unit=@r{[}display@r{|}byte@r{]}
  -fdiagnostics-column-origin=@var{origin}
  -fdiagnostics-escape-format=@r{[}unicode@r{|}bytes@r{]}
! -fdiagnostics-text-art-charset=@r{[}none@r{|}ascii@r{|}unicode@r{|}emoji@r{]}
! -fdiagnostics-show-context@r{[}=@var{depth}@r{]}}
  
  @item Warning Options
  @xref{Warning Options,,Options to Request or Suppress Warnings}.
*************** Objective-C and Objective-C++ Dialects}.
*** 1102,1108 ****
  -mcmodel=@var{code-model} -mrelax -mpass-mrelax-to-as
  -mrecip  -mrecip=@var{opt} -mfrecipe -mno-frecipe -mdiv32 -mno-div32
  -mlam-bh -mno-lam-bh -mlamcas -mno-lamcas -mld-seq-sa -mno-ld-seq-sa
! -mtls-dialect=@var{opt} -mannotate-tablejump -mno-annotate-tablejump}
  
  @emph{M32C Options} (@ref{M32C Options})
  @gccoptlist{-mcpu=@var{cpu}  -msim  -memregs=@var{number}}
--- 1103,1110 ----
  -mcmodel=@var{code-model} -mrelax -mpass-mrelax-to-as
  -mrecip  -mrecip=@var{opt} -mfrecipe -mno-frecipe -mdiv32 -mno-div32
  -mlam-bh -mno-lam-bh -mlamcas -mno-lamcas -mld-seq-sa -mno-ld-seq-sa
! -mscq -mno-scq -mtls-dialect=@var{opt}
! -mannotate-tablejump -mno-annotate-tablejump}
  
  @emph{M32C Options} (@ref{M32C Options})
  @gccoptlist{-mcpu=@var{cpu}  -msim  -memregs=@var{number}}
*************** See RS/6000 and PowerPC Options.
*** 1263,1269 ****
  
  @emph{PRU Options} (@ref{PRU Options})
  @gccoptlist{-mmcu=@var{mcu}  -minrt  -mno-relax  -mloop
! -mabi=@var{variant}}
  
  @emph{RISC-V Options} (@ref{RISC-V Options})
  @gccoptlist{-mbranch-cost=@var{N-instruction}
--- 1265,1271 ----
  
  @emph{PRU Options} (@ref{PRU Options})
  @gccoptlist{-mmcu=@var{mcu}  -minrt  -mno-relax  -mloop
! -mmul -mfillzero -mabi=@var{variant}}
  
  @emph{RISC-V Options} (@ref{RISC-V Options})
  @gccoptlist{-mbranch-cost=@var{N-instruction}
*************** left margin.
*** 5792,5797 ****
--- 5794,5815 ----
  This option controls the minimum width of the left margin printed by
  @option{-fdiagnostics-show-line-numbers}.  It defaults to 6.
  
+ @opindex fdiagnostics-show-context
+ @item -fdiagnostics-show-context[=@var{depth}]
+ @itemx -fno-diagnostics-show-context
+ With this option, the compiler might print the interesting control flow
+ chain that guards the basic block of the statement which has the warning.
+ @var{depth} is the maximum depth of the control flow chain.
+ Currently, The list of the impacted warning options includes:
+ @option{-Warray-bounds}, @option{-Wstringop-overflow},
+ @option{-Wstringop-overread}, @option{-Wstringop-truncation}.
+ and @option{-Wrestrict}.
+ More warning options might be added to this list in future releases.
+ The forms @option{-fdiagnostics-show-context} and
+ @option{-fno-diagnostics-show-context} are aliases for
+ @option{-fdiagnostics-show-context=1} and
+ @option{-fdiagnostics-show-context=0}, respectively.
+ 
  @opindex fdiagnostics-parseable-fixits
  @item -fdiagnostics-parseable-fixits
  Emit fix-it hints in a machine-parseable format, suitable for consumption
*************** Whether a same-address load-load barrier
*** 28573,28578 ****
--- 28591,28604 ----
  build with @option{-march=la664}, it is enabled by default.  The default is
  @option{-mno-ld-seq-sa}, the load-load barrier is needed.
  
+ @opindex mscq
+ @opindex mno-scq
+ @item -mscq
+ @item -mno-scq
+ Use (do not use) the 16-byte conditional store instruction @code{sc.q}.
+ The default is @option{-mscq} if the machine type specified with
+ @option{-march=} supports this instruction, @option{-mno-scq} otherwise.
+ 
  @opindex mtls-dialect
  @item -mtls-dialect=@var{opt}
  This option controls which tls dialect may be used for general dynamic and
*************** instead of the @option{--relax} option.
*** 31296,31301 ****
--- 31322,31335 ----
  @item -mloop
  Allow (or do not allow) GCC to use the LOOP instruction.
  
+ @opindex mmul
+ @item -mmul
+ Allow (or do not allow) GCC to use the PRU multiplier unit.
+ 
+ @opindex mfillzero
+ @item -mfillzero
+ Allow (or do not allow) GCC to use the FILL and ZERO instructions.
+ 
  @opindex mabi
  @item -mabi=@var{variant}
  Specify the ABI variant to output code for.  @option{-mabi=ti} selects the
diff -Nrcpad gcc-16-20250817/gcc/dwarf2asm.cc gcc-16-20250824/gcc/dwarf2asm.cc
*** gcc-16-20250817/gcc/dwarf2asm.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/dwarf2asm.cc	Sun Aug 24 22:32:20 2025
*************** dw2_output_indirect_constant_1 (const ch
*** 1041,1047 ****
    sym_ref = gen_rtx_SYMBOL_REF (Pmode, sym);
    /* Disable ASan for decl because redzones cause ABI breakage between GCC and
       libstdc++ for `.LDFCM*' variables.  See PR 78651 for details.  */
!   unsigned int save_flag_sanitize = flag_sanitize;
    flag_sanitize &= ~(SANITIZE_ADDRESS | SANITIZE_USER_ADDRESS
  		     | SANITIZE_KERNEL_ADDRESS);
    /* And also temporarily disable -fsection-anchors.  These indirect constants
--- 1041,1047 ----
    sym_ref = gen_rtx_SYMBOL_REF (Pmode, sym);
    /* Disable ASan for decl because redzones cause ABI breakage between GCC and
       libstdc++ for `.LDFCM*' variables.  See PR 78651 for details.  */
!   sanitize_code_type save_flag_sanitize = flag_sanitize;
    flag_sanitize &= ~(SANITIZE_ADDRESS | SANITIZE_USER_ADDRESS
  		     | SANITIZE_KERNEL_ADDRESS);
    /* And also temporarily disable -fsection-anchors.  These indirect constants
diff -Nrcpad gcc-16-20250817/gcc/flag-types.h gcc-16-20250824/gcc/flag-types.h
*** gcc-16-20250817/gcc/flag-types.h	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/flag-types.h	Sun Aug 24 22:32:20 2025
*************** enum sanitize_code {
*** 350,355 ****
--- 350,358 ----
  				  | SANITIZE_BOUNDS_STRICT
  };
  
+ /* Sanitizer flag type.  */
+ typedef uint64_t sanitize_code_type;
+ 
  /* Different settings for zeroing subset of registers.  */
  namespace zero_regs_flags {
    const unsigned int UNSET = 0;
diff -Nrcpad gcc-16-20250817/gcc/fortran/ChangeLog gcc-16-20250824/gcc/fortran/ChangeLog
*** gcc-16-20250817/gcc/fortran/ChangeLog	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/fortran/ChangeLog	Sun Aug 24 22:32:21 2025
***************
*** 1,3 ****
--- 1,26 ----
+ 2025-08-21  Steven G. Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/121627
+ 	* module.cc (create_int_parameter_array):  Avoid NULL
+ 	pointer dereference and enhance error message.
+ 
+ 2025-08-21  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84122
+ 	PR fortran/85942
+ 	* parse.cc (parse_derived): PDT type parameters are not allowed
+ 	an explicit access specification and must appear before a
+ 	PRIVATE statement. If a PRIVATE statement is seen, mark all the
+ 	other components as PRIVATE.
+ 	* simplify.cc (get_kind): Convert a PDT KIND component into a
+ 	specification expression using the default initializer.
+ 
+ 2025-08-20  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	* intrinsic.texi: Correct the example given for FRACTION.
+ 	Move the TEAM_NUMBER section to after the TANPI to align
+ 	with the order gven in the index.
+ 
  2025-08-16  H.J. Lu  <hjl.tools@gmail.com>
  
  	PR fortran/107421
diff -Nrcpad gcc-16-20250817/gcc/fortran/intrinsic.texi gcc-16-20250824/gcc/fortran/intrinsic.texi
*** gcc-16-20250817/gcc/fortran/intrinsic.texi	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/fortran/intrinsic.texi	Sun Aug 24 22:32:21 2025
*************** GNU extension
*** 6814,6820 ****
  @end table
  
  
- 
  @node FRACTION
  @section @code{FRACTION} --- Fractional part of the model representation
  @fnindex FRACTION
--- 6814,6819 ----
*************** Elemental function
*** 6840,6853 ****
  @item @emph{Return value}:
  The return value is of the same type and kind as the argument.
  The fractional part of the model representation of @code{X} is returned;
! it is @code{X * RADIX(X)**(-EXPONENT(X))}.
  
  @item @emph{Example}:
  @smallexample
  program test_fraction
    real :: x
    x = 178.1387e-4
!   print *, fraction(x), x * radix(x)**(-exponent(x))
  end program test_fraction
  @end smallexample
  
--- 6839,6853 ----
  @item @emph{Return value}:
  The return value is of the same type and kind as the argument.
  The fractional part of the model representation of @code{X} is returned;
! it is @code{X * REAL(RADIX(X))**(-EXPONENT(X))}.
  
  @item @emph{Example}:
  @smallexample
  program test_fraction
+   implicit none
    real :: x
    x = 178.1387e-4
!   print *, fraction(x), x * real(radix(x))**(-exponent(x))
  end program test_fraction
  @end smallexample
  
*************** Fortran 77 and later, for a complex argu
*** 14943,14996 ****
  
  
  
- @node TEAM_NUMBER
- @section @code{TEAM_NUMBER} --- Retrieve team id of given team
- @fnindex TEAM_NUMBER
- @cindex coarray, @code{TEAM_NUMBER}
- @cindex teams, index of given team
- 
- @table @asis
- @item @emph{Synopsis}:
- @item @code{RESULT = TEAM_NUMBER([TEAM])}
- 
- @item @emph{Description}:
- Returns the team id for the given @var{TEAM} as assigned by @code{FORM TEAM}.
- If @var{TEAM} is absent, returns the team number of the current team.
- 
- @item @emph{Class}:
- Transformational function
- 
- @item @emph{Arguments}:
- @multitable @columnfractions .15 .70
- @item @var{TEAM} @tab (optional, intent(in)) The handle of the team for which
- the number, aka id, is desired.
- @end multitable
- 
- @item @emph{Return value}:
- Default integer.  The id as given in a call @code{FORM TEAM}. Applying
- @code{TEAM_NUMBER} to the initial team will result in @code{-1} to be returned.
- Returns the id of the current team, if @var{TEAM} is null.
- 
- @item @emph{Example}:
- @smallexample
- use, intrinsic :: iso_fortran_env
- type(team_type) :: t
- 
- print *, team_number() ! -1
- form team (99, t)
- print *, team_number(t) ! 99
- @end smallexample
- 
- @item @emph{Standard}:
- Fortran 2018 and later.
- 
- @item @emph{See also}:
- @ref{GET_TEAM}, @*
- @ref{TEAM_NUMBER}
- @end table
- 
- 
- 
  @node TANPI
  @section @code{TANPI} --- Circular tangent function
  @fnindex TANPI
--- 14943,14948 ----
*************** end program test_tanpi
*** 15039,15044 ****
--- 14991,15044 ----
  @end table
  
  
+ 
+ @node TEAM_NUMBER
+ @section @code{TEAM_NUMBER} --- Retrieve team id of given team
+ @fnindex TEAM_NUMBER
+ @cindex coarray, @code{TEAM_NUMBER}
+ @cindex teams, index of given team
+ 
+ @table @asis
+ @item @emph{Synopsis}:
+ @item @code{RESULT = TEAM_NUMBER([TEAM])}
+ 
+ @item @emph{Description}:
+ Returns the team id for the given @var{TEAM} as assigned by @code{FORM TEAM}.
+ If @var{TEAM} is absent, returns the team number of the current team.
+ 
+ @item @emph{Class}:
+ Transformational function
+ 
+ @item @emph{Arguments}:
+ @multitable @columnfractions .15 .70
+ @item @var{TEAM} @tab (optional, intent(in)) The handle of the team for which
+ the number, aka id, is desired.
+ @end multitable
+ 
+ @item @emph{Return value}:
+ Default integer.  The id as given in a call @code{FORM TEAM}. Applying
+ @code{TEAM_NUMBER} to the initial team will result in @code{-1} to be returned.
+ Returns the id of the current team, if @var{TEAM} is null.
+ 
+ @item @emph{Example}:
+ @smallexample
+ use, intrinsic :: iso_fortran_env
+ type(team_type) :: t
+ 
+ print *, team_number() ! -1
+ form team (99, t)
+ print *, team_number(t) ! 99
+ @end smallexample
+ 
+ @item @emph{Standard}:
+ Fortran 2018 and later.
+ 
+ @item @emph{See also}:
+ @ref{GET_TEAM}, @*
+ @ref{TEAM_NUMBER}
+ @end table
+ 
+ 
  
  @node THIS_IMAGE
  @section @code{THIS_IMAGE} --- Function that returns the cosubscript index of this image
diff -Nrcpad gcc-16-20250817/gcc/fortran/module.cc gcc-16-20250824/gcc/fortran/module.cc
*** gcc-16-20250817/gcc/fortran/module.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/fortran/module.cc	Sun Aug 24 22:32:21 2025
*************** create_int_parameter_array (const char *
*** 7277,7286 ****
    tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
    if (tmp_symtree != NULL)
      {
!       if (strcmp (modname, tmp_symtree->n.sym->module) == 0)
  	return;
        else
! 	gfc_error ("Symbol %qs already declared", name);
      }
  
    gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree, false);
--- 7277,7289 ----
    tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
    if (tmp_symtree != NULL)
      {
!       if (tmp_symtree->n.sym->module &&
! 	  strcmp (modname, tmp_symtree->n.sym->module) == 0)
  	return;
        else
! 	gfc_error ("Symbol %qs already declared at %L conflicts with "
! 		   "symbol in %qs at %C", name,
! 		   &tmp_symtree->n.sym->declared_at, modname);
      }
  
    gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree, false);
diff -Nrcpad gcc-16-20250817/gcc/fortran/parse.cc gcc-16-20250824/gcc/fortran/parse.cc
*** gcc-16-20250817/gcc/fortran/parse.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/fortran/parse.cc	Sun Aug 24 22:32:21 2025
*************** parse_derived (void)
*** 3938,3943 ****
--- 3938,3944 ----
    gfc_state_data s;
    gfc_symbol *sym;
    gfc_component *c, *lock_comp = NULL, *event_comp = NULL;
+   bool pdt_parameters;
  
    accept_statement (ST_DERIVED_DECL);
    push_state (&s, COMP_DERIVED, gfc_new_block);
*************** parse_derived (void)
*** 3946,3954 ****
--- 3947,3957 ----
    seen_private = 0;
    seen_sequence = 0;
    seen_component = 0;
+   pdt_parameters = false;
  
    compiling_type = 1;
  
+ 
    while (compiling_type)
      {
        st = next_statement ();
*************** parse_derived (void)
*** 3961,3966 ****
--- 3964,3994 ----
  	case ST_PROCEDURE:
  	  accept_statement (st);
  	  seen_component = 1;
+ 	  /* Type parameters must not have an explicit access specification
+ 	     and must be placed before a PRIVATE statement. If a PRIVATE
+ 	     statement is encountered after type parameters, mark the remaining
+ 	     components as PRIVATE. */
+ 	  for (c = gfc_current_block ()->components; c; c = c->next)
+ 	    if (!c->next && (c->attr.pdt_kind || c->attr.pdt_len))
+ 	      {
+ 		pdt_parameters = true;
+ 		if (c->attr.access != ACCESS_UNKNOWN)
+ 		  {
+ 		    gfc_error ("Access specification of a type parameter at "
+ 			       "%C is not allowed");
+ 		    c->attr.access = ACCESS_PUBLIC;
+ 		    break;
+ 		  }
+ 		if (seen_private)
+ 		  {
+ 		    gfc_error ("The type parameter at %C must come before a "
+ 			       "PRIVATE statement");
+ 		    break;
+ 		  }
+ 	      }
+ 	    else if (pdt_parameters && seen_private
+ 		     && !(c->attr.pdt_kind || c->attr.pdt_len))
+ 	      c->attr.access = ACCESS_PRIVATE;
  	  break;
  
  	case ST_FINAL:
*************** endType:
*** 3986,3992 ****
  	      break;
  	    }
  
! 	  if (seen_component)
  	    {
  	      gfc_error ("PRIVATE statement at %C must precede "
  			 "structure components");
--- 4014,4020 ----
  	      break;
  	    }
  
! 	  if (seen_component && !pdt_parameters)
  	    {
  	      gfc_error ("PRIVATE statement at %C must precede "
  			 "structure components");
*************** endType:
*** 3996,4002 ****
  	  if (seen_private)
  	    gfc_error ("Duplicate PRIVATE statement at %C");
  
! 	  s.sym->component_access = ACCESS_PRIVATE;
  
  	  accept_statement (ST_PRIVATE);
  	  seen_private = 1;
--- 4024,4033 ----
  	  if (seen_private)
  	    gfc_error ("Duplicate PRIVATE statement at %C");
  
! 	  if (pdt_parameters)
! 	    s.sym->component_access = ACCESS_PUBLIC;
! 	  else
! 	    s.sym->component_access = ACCESS_PRIVATE;
  
  	  accept_statement (ST_PRIVATE);
  	  seen_private = 1;
diff -Nrcpad gcc-16-20250817/gcc/fortran/simplify.cc gcc-16-20250824/gcc/fortran/simplify.cc
*** gcc-16-20250817/gcc/fortran/simplify.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/fortran/simplify.cc	Sun Aug 24 22:32:21 2025
*************** static int
*** 120,129 ****
--- 120,145 ----
  get_kind (bt type, gfc_expr *k, const char *name, int default_kind)
  {
    int kind;
+   gfc_expr *tmp;
  
    if (k == NULL)
      return default_kind;
  
+   if (k->expr_type == EXPR_VARIABLE
+       && k->symtree->n.sym->ts.type == BT_DERIVED
+       && k->symtree->n.sym->ts.u.derived->attr.pdt_type)
+     {
+       gfc_ref *ref;
+       for (ref = k->ref; ref; ref = ref->next)
+ 	if (!ref->next && ref->type == REF_COMPONENT
+ 	    && ref->u.c.component->attr.pdt_kind
+ 	    && ref->u.c.component->initializer)
+ 	  {
+ 	    tmp = gfc_copy_expr (ref->u.c.component->initializer);
+ 	    gfc_replace_expr (k, tmp);
+ 	  }
+     }
+ 
    if (k->expr_type != EXPR_CONSTANT)
      {
        gfc_error ("KIND parameter of %s at %L must be an initialization "
diff -Nrcpad gcc-16-20250817/gcc/function-abi.h gcc-16-20250824/gcc/function-abi.h
*** gcc-16-20250817/gcc/function-abi.h	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/function-abi.h	Sun Aug 24 22:32:21 2025
*************** public:
*** 99,104 ****
--- 99,137 ----
      return m_full_and_partial_reg_clobbers;
    }
  
+   /* Return the set of registers that a function call is allowed to alter
+      partially but not fully; i.e. those in full_and_partial_reg_clobbers ()
+      but not in full_reg_clobbers ().
+ 
+      If a register X is in this set and if we don't know which parts of
+      X are live (typically because we don't bother to track X's mode),
+      then the conservative assumptions are:
+ 
+      - to ignore the call when computing reaching definitions
+      - to treat X as clobbered when computing availability
+ 
+      For example, if we have:
+ 
+        A: X := Y
+        B: call that partially clobbers X
+        C: ... := ... X ...
+ 
+      and don't track the mode of X when computing reaching definitions,
+      then the conservative assumption is that A's definition survives
+      until C.  But if we have:
+ 
+        A: X := Y
+        B: call that partially clobbers X
+        C: ... := ... Y ...
+ 
+      and don't track the mode of X when computing availability, then the
+      conservative assumption is that Y is not available in X at C.  */
+   HARD_REG_SET
+   only_partial_reg_clobbers () const
+   {
+     return full_and_partial_reg_clobbers () & ~full_reg_clobbers ();
+   }
+ 
    /* Return the set of registers that cannot be used to hold a value of
       mode MODE across a function call.  That is:
  
*************** public:
*** 166,171 ****
--- 199,210 ----
    }
  
    HARD_REG_SET
+   only_partial_reg_clobbers () const
+   {
+     return m_mask & m_base_abi->only_partial_reg_clobbers ();
+   }
+ 
+   HARD_REG_SET
    mode_clobbers (machine_mode mode) const
    {
      return m_mask & m_base_abi->mode_clobbers (mode);
diff -Nrcpad gcc-16-20250817/gcc/gcc.cc gcc-16-20250824/gcc/gcc.cc
*** gcc-16-20250817/gcc/gcc.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/gcc.cc	Sun Aug 24 22:32:21 2025
*************** clear_failure_queue (void)
*** 2774,2785 ****
  
     Returns the value returned by CALLBACK.  */
  
! static void *
  for_each_path (const struct path_prefix *paths,
  	       bool do_multi,
  	       size_t extra_space,
! 	       void *(*callback) (char *, void *),
! 	       void *callback_info)
  {
    struct prefix_list *pl;
    const char *multi_dir = NULL;
--- 2774,2785 ----
  
     Returns the value returned by CALLBACK.  */
  
! template<typename fun>
! auto *
  for_each_path (const struct path_prefix *paths,
  	       bool do_multi,
  	       size_t extra_space,
! 	       fun && callback)
  {
    struct prefix_list *pl;
    const char *multi_dir = NULL;
*************** for_each_path (const struct path_prefix
*** 2788,2794 ****
    const char *multi_suffix;
    const char *just_multi_suffix;
    char *path = NULL;
!   void *ret = NULL;
    bool skip_multi_dir = false;
    bool skip_multi_os_dir = false;
  
--- 2788,2794 ----
    const char *multi_suffix;
    const char *just_multi_suffix;
    char *path = NULL;
!   decltype (callback (nullptr)) ret;
    bool skip_multi_dir = false;
    bool skip_multi_os_dir = false;
  
*************** for_each_path (const struct path_prefix
*** 2839,2845 ****
  	  if (!skip_multi_dir)
  	    {
  	      memcpy (path + len, multi_suffix, suffix_len + 1);
! 	      ret = callback (path, callback_info);
  	      if (ret)
  		break;
  	    }
--- 2839,2845 ----
  	  if (!skip_multi_dir)
  	    {
  	      memcpy (path + len, multi_suffix, suffix_len + 1);
! 	      ret = callback (path);
  	      if (ret)
  		break;
  	    }
*************** for_each_path (const struct path_prefix
*** 2850,2856 ****
  	      && pl->require_machine_suffix == 2)
  	    {
  	      memcpy (path + len, just_multi_suffix, just_suffix_len + 1);
! 	      ret = callback (path, callback_info);
  	      if (ret)
  		break;
  	    }
--- 2850,2856 ----
  	      && pl->require_machine_suffix == 2)
  	    {
  	      memcpy (path + len, just_multi_suffix, just_suffix_len + 1);
! 	      ret = callback (path);
  	      if (ret)
  		break;
  	    }
*************** for_each_path (const struct path_prefix
*** 2860,2866 ****
  	      && !pl->require_machine_suffix && multiarch_dir)
  	    {
  	      memcpy (path + len, multiarch_suffix, multiarch_len + 1);
! 	      ret = callback (path, callback_info);
  	      if (ret)
  		break;
  	    }
--- 2860,2866 ----
  	      && !pl->require_machine_suffix && multiarch_dir)
  	    {
  	      memcpy (path + len, multiarch_suffix, multiarch_len + 1);
! 	      ret = callback (path);
  	      if (ret)
  		break;
  	    }
*************** for_each_path (const struct path_prefix
*** 2888,2894 ****
  	      else
  		path[len] = '\0';
  
! 	      ret = callback (path, callback_info);
  	      if (ret)
  		break;
  	    }
--- 2888,2894 ----
  	      else
  		path[len] = '\0';
  
! 	      ret = callback (path);
  	      if (ret)
  		break;
  	    }
*************** for_each_path (const struct path_prefix
*** 2934,2964 ****
    return ret;
  }
  
- /* Callback for build_search_list.  Adds path to obstack being built.  */
- 
- struct add_to_obstack_info {
-   struct obstack *ob;
-   bool check_dir;
-   bool first_time;
- };
- 
- static void *
- add_to_obstack (char *path, void *data)
- {
-   struct add_to_obstack_info *info = (struct add_to_obstack_info *) data;
- 
-   if (info->check_dir && !is_directory (path))
-     return NULL;
- 
-   if (!info->first_time)
-     obstack_1grow (info->ob, PATH_SEPARATOR);
- 
-   obstack_grow (info->ob, path, strlen (path));
- 
-   info->first_time = false;
-   return NULL;
- }
- 
  /* Add or change the value of an environment variable, outputting the
     change to standard error if in verbose mode.  */
  static void
--- 2934,2939 ----
*************** static char *
*** 2979,2994 ****
  build_search_list (const struct path_prefix *paths, const char *prefix,
  		   bool check_dir, bool do_multi)
  {
!   struct add_to_obstack_info info;
! 
!   info.ob = &collect_obstack;
!   info.check_dir = check_dir;
!   info.first_time = true;
  
    obstack_grow (&collect_obstack, prefix, strlen (prefix));
    obstack_1grow (&collect_obstack, '=');
  
!   for_each_path (paths, do_multi, 0, add_to_obstack, &info);
  
    obstack_1grow (&collect_obstack, '\0');
    return XOBFINISH (&collect_obstack, char *);
--- 2954,2979 ----
  build_search_list (const struct path_prefix *paths, const char *prefix,
  		   bool check_dir, bool do_multi)
  {
!   struct obstack *const ob = &collect_obstack;
!   bool first_time = true;
  
    obstack_grow (&collect_obstack, prefix, strlen (prefix));
    obstack_1grow (&collect_obstack, '=');
  
!   /* Callback adds path to obstack being built.  */
!   for_each_path (paths, do_multi, 0, [&](char *path) -> void*
!     {
!       if (check_dir && !is_directory (path))
! 	return NULL;
! 
!       if (!first_time)
! 	obstack_1grow (ob, PATH_SEPARATOR);
! 
!       obstack_grow (ob, path, strlen (path));
! 
!       first_time = false;
!       return NULL;
!     });
  
    obstack_1grow (&collect_obstack, '\0');
    return XOBFINISH (&collect_obstack, char *);
*************** access_check (const char *name, int mode
*** 3022,3063 ****
    return access (name, mode);
  }
  
- /* Callback for find_a_file.  Appends the file name to the directory
-    path.  If the resulting file exists in the right mode, return the
-    full pathname to the file.  */
- 
- struct file_at_path_info {
-   const char *name;
-   const char *suffix;
-   int name_len;
-   int suffix_len;
-   int mode;
- };
- 
- static void *
- file_at_path (char *path, void *data)
- {
-   struct file_at_path_info *info = (struct file_at_path_info *) data;
-   size_t len = strlen (path);
- 
-   memcpy (path + len, info->name, info->name_len);
-   len += info->name_len;
- 
-   /* Some systems have a suffix for executable files.
-      So try appending that first.  */
-   if (info->suffix_len)
-     {
-       memcpy (path + len, info->suffix, info->suffix_len + 1);
-       if (access_check (path, info->mode) == 0)
- 	return path;
-     }
- 
-   path[len] = '\0';
-   if (access_check (path, info->mode) == 0)
-     return path;
- 
-   return NULL;
- }
  
  /* Search for NAME using the prefix list PREFIXES.  MODE is passed to
     access to check permissions.  If DO_MULTI is true, search multilib
--- 3007,3012 ----
*************** static char *
*** 3068,3075 ****
  find_a_file (const struct path_prefix *pprefix, const char *name, int mode,
  	     bool do_multi)
  {
-   struct file_at_path_info info;
- 
    /* Find the filename in question (special case for absolute paths).  */
  
    if (IS_ABSOLUTE_PATH (name))
--- 3017,3022 ----
*************** find_a_file (const struct path_prefix *p
*** 3080,3094 ****
        return NULL;
      }
  
!   info.name = name;
!   info.suffix = (mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "";
!   info.name_len = strlen (info.name);
!   info.suffix_len = strlen (info.suffix);
!   info.mode = mode;
  
!   return (char*) for_each_path (pprefix, do_multi,
! 				info.name_len + info.suffix_len,
! 				file_at_path, &info);
  }
  
  /* Specialization of find_a_file for programs that also takes into account
--- 3027,3064 ----
        return NULL;
      }
  
!   const char *suffix = (mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "";
!   const int name_len = strlen (name);
!   const int suffix_len = strlen (suffix);
  
! 
!   /* Callback appends the file name to the directory path.  If the
!      resulting file exists in the right mode, return the full pathname
!      to the file.  */
!   return for_each_path (pprefix, do_multi,
! 			name_len + suffix_len,
! 			[=](char *path) -> char*
!     {
!       size_t len = strlen (path);
! 
!       memcpy (path + len, name, name_len);
!       len += name_len;
! 
!       /* Some systems have a suffix for executable files.
! 	 So try appending that first.  */
!       if (suffix_len)
! 	{
! 	  memcpy (path + len, suffix, suffix_len + 1);
! 	  if (access_check (path, mode) == 0)
! 	    return path;
! 	}
! 
!       path[len] = '\0';
!       if (access_check (path, mode) == 0)
! 	return path;
! 
!       return NULL;
!     });
  }
  
  /* Specialization of find_a_file for programs that also takes into account
*************** do_self_spec (const char *spec)
*** 6008,6032 ****
  
  /* Callback for processing %D and %I specs.  */
  
! struct spec_path_info {
    const char *option;
    const char *append;
    size_t append_len;
    bool omit_relative;
    bool separate_options;
    bool realpaths;
  };
  
! static void *
! spec_path (char *path, void *data)
  {
-   struct spec_path_info *info = (struct spec_path_info *) data;
    size_t len = 0;
    char save = 0;
  
    /* The path must exist; we want to resolve it to the realpath so that this
       can be embedded as a runpath.  */
!   if (info->realpaths)
       path = lrealpath (path);
  
    /* However, if we failed to resolve it - perhaps because there was a bogus
--- 5978,6003 ----
  
  /* Callback for processing %D and %I specs.  */
  
! struct spec_path {
    const char *option;
    const char *append;
    size_t append_len;
    bool omit_relative;
    bool separate_options;
    bool realpaths;
+ 
+   void *operator() (char *path);
  };
  
! void *
! spec_path::operator() (char *path)
  {
    size_t len = 0;
    char save = 0;
  
    /* The path must exist; we want to resolve it to the realpath so that this
       can be embedded as a runpath.  */
!   if (realpaths)
       path = lrealpath (path);
  
    /* However, if we failed to resolve it - perhaps because there was a bogus
*************** spec_path (char *path, void *data)
*** 6034,6056 ****
    if (!path)
      return NULL;
  
!   if (info->omit_relative && !IS_ABSOLUTE_PATH (path))
      return NULL;
  
!   if (info->append_len != 0)
      {
        len = strlen (path);
!       memcpy (path + len, info->append, info->append_len + 1);
      }
  
    if (!is_directory (path))
      return NULL;
  
!   do_spec_1 (info->option, 1, NULL);
!   if (info->separate_options)
      do_spec_1 (" ", 0, NULL);
  
!   if (info->append_len == 0)
      {
        len = strlen (path);
        save = path[len - 1];
--- 6005,6027 ----
    if (!path)
      return NULL;
  
!   if (omit_relative && !IS_ABSOLUTE_PATH (path))
      return NULL;
  
!   if (append_len != 0)
      {
        len = strlen (path);
!       memcpy (path + len, append, append_len + 1);
      }
  
    if (!is_directory (path))
      return NULL;
  
!   do_spec_1 (option, 1, NULL);
!   if (separate_options)
      do_spec_1 (" ", 0, NULL);
  
!   if (append_len == 0)
      {
        len = strlen (path);
        save = path[len - 1];
*************** spec_path (char *path, void *data)
*** 6062,6068 ****
    do_spec_1 (" ", 0, NULL);
  
    /* Must not damage the original path.  */
!   if (info->append_len == 0)
      path[len - 1] = save;
  
    return NULL;
--- 6033,6039 ----
    do_spec_1 (" ", 0, NULL);
  
    /* Must not damage the original path.  */
!   if (append_len == 0)
      path[len - 1] = save;
  
    return NULL;
*************** do_spec_1 (const char *spec, int inswitc
*** 6250,6256 ****
  	     that we search for startfiles.  */
  	  case 'D':
  	    {
! 	      struct spec_path_info info;
  
  	      info.option = "-L";
  	      info.append_len = 0;
--- 6221,6227 ----
  	     that we search for startfiles.  */
  	  case 'D':
  	    {
! 	      struct spec_path info;
  
  	      info.option = "-L";
  	      info.append_len = 0;
*************** do_spec_1 (const char *spec, int inswitc
*** 6267,6279 ****
  	      info.separate_options = false;
  	      info.realpaths = false;
  
! 	      for_each_path (&startfile_prefixes, true, 0, spec_path, &info);
  	    }
  	    break;
  
  	  case 'P':
  	    {
! 	      struct spec_path_info info;
  
  	      info.option = RUNPATH_OPTION;
  	      info.append_len = 0;
--- 6238,6250 ----
  	      info.separate_options = false;
  	      info.realpaths = false;
  
! 	      for_each_path (&startfile_prefixes, true, 0, info);
  	    }
  	    break;
  
  	  case 'P':
  	    {
! 	      struct spec_path info;
  
  	      info.option = RUNPATH_OPTION;
  	      info.append_len = 0;
*************** do_spec_1 (const char *spec, int inswitc
*** 6282,6288 ****
  	      /* We want to embed the actual paths that have the libraries.  */
  	      info.realpaths = true;
  
! 	      for_each_path (&startfile_prefixes, true, 0, spec_path, &info);
  	    }
  	    break;
  
--- 6253,6259 ----
  	      /* We want to embed the actual paths that have the libraries.  */
  	      info.realpaths = true;
  
! 	      for_each_path (&startfile_prefixes, true, 0, info);
  	    }
  	    break;
  
*************** do_spec_1 (const char *spec, int inswitc
*** 6561,6567 ****
  
  	  case 'I':
  	    {
! 	      struct spec_path_info info;
  
  	      if (multilib_dir)
  		{
--- 6532,6538 ----
  
  	  case 'I':
  	    {
! 	      struct spec_path info;
  
  	      if (multilib_dir)
  		{
*************** do_spec_1 (const char *spec, int inswitc
*** 6609,6616 ****
  	      info.separate_options = true;
  	      info.realpaths = false;
  
! 	      for_each_path (&include_prefixes, false, info.append_len,
! 			     spec_path, &info);
  
  	      info.append = "include-fixed";
  	      if (*sysroot_hdrs_suffix_spec)
--- 6580,6586 ----
  	      info.separate_options = true;
  	      info.realpaths = false;
  
! 	      for_each_path (&include_prefixes, false, info.append_len, info);
  
  	      info.append = "include-fixed";
  	      if (*sysroot_hdrs_suffix_spec)
*************** do_spec_1 (const char *spec, int inswitc
*** 6623,6636 ****
  		  info.append = concat (info.append, dir_separator_str,
  					multiarch_dir, NULL);
  		  info.append_len = strlen (info.append);
! 		  for_each_path (&include_prefixes, false, info.append_len,
! 				 spec_path, &info);
  
  		  info.append = "include-fixed";
  		}
  	      info.append_len = strlen (info.append);
! 	      for_each_path (&include_prefixes, false, info.append_len,
! 			     spec_path, &info);
  	    }
  	    break;
  
--- 6593,6605 ----
  		  info.append = concat (info.append, dir_separator_str,
  					multiarch_dir, NULL);
  		  info.append_len = strlen (info.append);
! 		  for_each_path (&include_prefixes, false,
! 				 info.append_len, info);
  
  		  info.append = "include-fixed";
  		}
  	      info.append_len = strlen (info.append);
! 	      for_each_path (&include_prefixes, false, info.append_len, info);
  	    }
  	    break;
  
diff -Nrcpad gcc-16-20250817/gcc/gcse-common.cc gcc-16-20250824/gcc/gcse-common.cc
*** gcc-16-20250817/gcc/gcse-common.cc	Sun Aug 17 22:32:08 2025
--- gcc-16-20250824/gcc/gcse-common.cc	Sun Aug 24 22:32:21 2025
***************
*** 27,33 ****
  #include "rtl.h"
  #include "df.h"
  #include "gcse-common.h"
! 
  
  /* Record all of the canonicalized MEMs of record_last_mem_set_info's insn.
     Note we store a pair of elements in the list, so they have to be
--- 27,34 ----
  #include "rtl.h"
  #include "df.h"
  #include "gcse-common.h"
! #include "regs.h"
! #include "function-abi.h"
  
  /* Record all of the canonicalized MEMs of record_last_mem_set_info's insn.
     Note we store a pair of elements in the list, so they have to be
*************** compute_transp (const_rtx x, int indx, s
*** 129,141 ****
    switch (code)
      {
      case REG:
! 	{
! 	  df_ref def;
! 	  for (def = DF_REG_DEF_CHAIN (REGNO (x));
! 	       def;
! 	       def = DF_REF_NEXT_REG (def))
! 	    bitmap_clear_bit (bmap[DF_REF_BB (def)->index], indx);
! 	}
  
        return;
  
--- 130,165 ----
    switch (code)
      {
      case REG:
!       {
! 	df_ref def;
! 	for (def = DF_REG_DEF_CHAIN (REGNO (x));
! 	     def;
! 	     def = DF_REF_NEXT_REG (def))
! 	  bitmap_clear_bit (bmap[DF_REF_BB (def)->index], indx);
! 
! 	/* Check for hard registers that are partially clobbered (but not
! 	   fully clobbered) by calls.  Such partial clobbers do not have
! 	   an associated definition or use in the DF representation,
! 	   but they do prevent the register from being transparent.
! 
! 	   ??? The check here is fairly crude.  We could instead maintain
! 	   separate blocks_with_calls bitmaps for each ABI.  */
! 	if (HARD_REGISTER_P (x))
! 	  for (unsigned int i = 0; i < NUM_ABI_IDS; ++i)
! 	    {
! 	      const predefined_function_abi &abi = function_abis[i];
! 	      if (abi.initialized_p ()
! 		  && overlaps_hard_reg_set_p (abi.only_partial_reg_clobbers (),
! 					      GET_MODE (x), REGNO (x)))
! 		{
! 		  bitmap_iterator bi;
! 		  unsigned bb_index;
! 		  EXECUTE_IF_SET_IN_BITMAP (blocks_with_calls, 0, bb_index, bi)
! 		    bitmap_clear_bit (bmap[bb_index], indx);
! 		  break;
! 		}
! 	    }
!       }
  
        return;
  
diff -Nrcpad gcc-16-20250817/gcc/gimple-array-bounds.cc gcc-16-20250824/gcc/gimple-array-bounds.cc
*** gcc-16-20250817/gcc/gimple-array-bounds.cc	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/gimple-array-bounds.cc	Sun Aug 24 22:32:21 2025
*************** along with GCC; see the file COPYING3.
*** 31,36 ****
--- 31,37 ----
  #include "tree-dfa.h"
  #include "fold-const.h"
  #include "diagnostic-core.h"
+ #include "diagnostic-context-rich-location.h"
  #include "intl.h"
  #include "tree-vrp.h"
  #include "alloc-pool.h"
*************** get_up_bounds_for_array_ref (tree ref, t
*** 262,267 ****
--- 263,269 ----
  
  static bool
  check_out_of_bounds_and_warn (location_t location, tree ref,
+ 			      gimple *stmt,
  			      tree low_sub_org, tree low_sub, tree up_sub,
  			      tree up_bound, tree up_bound_p1,
  			      const irange *vr,
*************** check_out_of_bounds_and_warn (location_t
*** 275,286 ****
    bool warned = false;
    *out_of_bound = false;
  
    /* Empty array.  */
    if (up_bound && tree_int_cst_equal (low_bound, up_bound_p1))
      {
        *out_of_bound = true;
        if (for_array_bound)
! 	warned = warning_at (location, OPT_Warray_bounds_,
  			     "array subscript %E is outside array"
  			     " bounds of %qT", low_sub_org, artype);
      }
--- 277,289 ----
    bool warned = false;
    *out_of_bound = false;
  
+   rich_location_with_details richloc (location, stmt);
    /* Empty array.  */
    if (up_bound && tree_int_cst_equal (low_bound, up_bound_p1))
      {
        *out_of_bound = true;
        if (for_array_bound)
! 	warned = warning_at (&richloc, OPT_Warray_bounds_,
  			     "array subscript %E is outside array"
  			     " bounds of %qT", low_sub_org, artype);
      }
*************** check_out_of_bounds_and_warn (location_t
*** 299,305 ****
  	{
  	  *out_of_bound = true;
  	  if (for_array_bound)
! 	    warned = warning_at (location, OPT_Warray_bounds_,
  				 "array subscript [%E, %E] is outside "
  				 "array bounds of %qT",
  				 low_sub, up_sub, artype);
--- 302,308 ----
  	{
  	  *out_of_bound = true;
  	  if (for_array_bound)
! 	    warned = warning_at (&richloc, OPT_Warray_bounds_,
  				 "array subscript [%E, %E] is outside "
  				 "array bounds of %qT",
  				 low_sub, up_sub, artype);
*************** check_out_of_bounds_and_warn (location_t
*** 313,319 ****
      {
        *out_of_bound = true;
        if (for_array_bound)
! 	warned = warning_at (location, OPT_Warray_bounds_,
  			     "array subscript %E is above array bounds of %qT",
  			     up_sub, artype);
      }
--- 316,322 ----
      {
        *out_of_bound = true;
        if (for_array_bound)
! 	warned = warning_at (&richloc, OPT_Warray_bounds_,
  			     "array subscript %E is above array bounds of %qT",
  			     up_sub, artype);
      }
*************** check_out_of_bounds_and_warn (location_t
*** 322,328 ****
      {
        *out_of_bound = true;
        if (for_array_bound)
! 	warned = warning_at (location, OPT_Warray_bounds_,
  			     "array subscript %E is below array bounds of %qT",
  			     low_sub, artype);
      }
--- 325,331 ----
      {
        *out_of_bound = true;
        if (for_array_bound)
! 	warned = warning_at (&richloc, OPT_Warray_bounds_,
  			     "array subscript %E is below array bounds of %qT",
  			     low_sub, artype);
      }
*************** array_bounds_checker::check_array_ref (l
*** 388,402 ****
  	}
      }
  
!   warned = check_out_of_bounds_and_warn (location, ref,
  					 low_sub_org, low_sub, up_sub,
  					 up_bound, up_bound_p1, &vr,
  					 ignore_off_by_one, warn_array_bounds,
  					 &out_of_bound);
  
  
    if (!warned && sam == special_array_member::int_0)
!     warned = warning_at (location, OPT_Wzero_length_bounds,
  			 (TREE_CODE (low_sub) == INTEGER_CST
  			  ? G_("array subscript %E is outside the bounds "
  			       "of an interior zero-length array %qT")
--- 391,406 ----
  	}
      }
  
!   warned = check_out_of_bounds_and_warn (location, ref, stmt,
  					 low_sub_org, low_sub, up_sub,
  					 up_bound, up_bound_p1, &vr,
  					 ignore_off_by_one, warn_array_bounds,
  					 &out_of_bound);
  
+   rich_location_with_details richloc (location, stmt);
  
    if (!warned && sam == special_array_member::int_0)
!     warned = warning_at (&richloc, OPT_Wzero_length_bounds,
  			 (TREE_CODE (low_sub) == INTEGER_CST
  			  ? G_("array subscript %E is outside the bounds "
  			       "of an interior zero-length array %qT")
*************** array_bounds_checker::check_array_ref (l
*** 420,426 ****
        && DECL_NOT_FLEXARRAY (afield_decl))
      {
        bool warned1
! 	= warning_at (location, OPT_Wstrict_flex_arrays,
  		      "trailing array %qT should not be used as "
  		      "a flexible array member",
  		      artype);
--- 424,430 ----
        && DECL_NOT_FLEXARRAY (afield_decl))
      {
        bool warned1
! 	= warning_at (&richloc, OPT_Wstrict_flex_arrays,
  		      "trailing array %qT should not be used as "
  		      "a flexible array member",
  		      artype);
*************** array_bounds_checker::check_array_ref (l
*** 478,483 ****
--- 482,488 ----
  
  bool
  array_bounds_checker::check_mem_ref (location_t location, tree ref,
+ 				     gimple *stmt,
  				     bool ignore_off_by_one)
  {
    if (warning_suppressed_p (ref, OPT_Warray_bounds_))
*************** array_bounds_checker::check_mem_ref (loc
*** 576,591 ****
  	}
      }
  
    bool warned = false;
    if (lboob)
      {
        if (offrange[0] == offrange[1])
! 	warned = warning_at (location, OPT_Warray_bounds_,
  			     "array subscript %wi is outside array bounds "
  			     "of %qT",
  			     offrange[0].to_shwi (), reftype);
        else
! 	warned = warning_at (location, OPT_Warray_bounds_,
  			     "array subscript [%wi, %wi] is outside "
  			     "array bounds of %qT",
  			     offrange[0].to_shwi (),
--- 581,597 ----
  	}
      }
  
+   rich_location_with_details richloc (location, stmt);
    bool warned = false;
    if (lboob)
      {
        if (offrange[0] == offrange[1])
! 	warned = warning_at (&richloc, OPT_Warray_bounds_,
  			     "array subscript %wi is outside array bounds "
  			     "of %qT",
  			     offrange[0].to_shwi (), reftype);
        else
! 	warned = warning_at (&richloc, OPT_Warray_bounds_,
  			     "array subscript [%wi, %wi] is outside "
  			     "array bounds of %qT",
  			     offrange[0].to_shwi (),
*************** array_bounds_checker::check_mem_ref (loc
*** 599,606 ****
  	   it were an untyped array of bytes.  */
  	backtype = build_array_type_nelts (unsigned_char_type_node,
  					   aref.sizrng[1].to_uhwi ());
! 
!       warned = warning_at (location, OPT_Warray_bounds_,
  			   "array subscript %<%T[%wi]%> is partly "
  			   "outside array bounds of %qT",
  			   axstype, offrange[0].to_shwi (), backtype);
--- 605,611 ----
  	   it were an untyped array of bytes.  */
  	backtype = build_array_type_nelts (unsigned_char_type_node,
  					   aref.sizrng[1].to_uhwi ());
!       warned = warning_at (&richloc, OPT_Warray_bounds_,
  			   "array subscript %<%T[%wi]%> is partly "
  			   "outside array bounds of %qT",
  			   axstype, offrange[0].to_shwi (), backtype);
*************** array_bounds_checker::check_mem_ref (loc
*** 623,629 ****
      {
        HOST_WIDE_INT tmpidx = (aref.offmax[i] / eltsize).to_shwi ();
  
!       if (warning_at (location, OPT_Warray_bounds_,
  		      "intermediate array offset %wi is outside array bounds "
  		      "of %qT", tmpidx, reftype))
  	{
--- 628,634 ----
      {
        HOST_WIDE_INT tmpidx = (aref.offmax[i] / eltsize).to_shwi ();
  
!       if (warning_at (&richloc, OPT_Warray_bounds_,
  		      "intermediate array offset %wi is outside array bounds "
  		      "of %qT", tmpidx, reftype))
  	{
*************** array_bounds_checker::check_addr_expr (l
*** 656,662 ****
  	  ignore_off_by_one = false;
  	}
        else if (TREE_CODE (t) == MEM_REF)
! 	warned = check_mem_ref (location, t, ignore_off_by_one);
  
        if (warned)
  	suppress_warning (t, OPT_Warray_bounds_);
--- 661,667 ----
  	  ignore_off_by_one = false;
  	}
        else if (TREE_CODE (t) == MEM_REF)
! 	warned = check_mem_ref (location, t, stmt, ignore_off_by_one);
  
        if (warned)
  	suppress_warning (t, OPT_Warray_bounds_);
*************** array_bounds_checker::check_addr_expr (l
*** 692,697 ****
--- 697,703 ----
    if (!mem_ref_offset (t).is_constant (&idx))
      return;
  
+   rich_location_with_details richloc (location, stmt);
    bool warned = false;
    idx = wi::sdiv_trunc (idx, wi::to_offset (el_sz));
    if (idx < 0)
*************** array_bounds_checker::check_addr_expr (l
*** 702,708 ****
  	  dump_generic_expr (MSG_NOTE, TDF_SLIM, t);
  	  fprintf (dump_file, "\n");
  	}
!       warned = warning_at (location, OPT_Warray_bounds_,
  			   "array subscript %wi is below "
  			   "array bounds of %qT",
  			   idx.to_shwi (), TREE_TYPE (tem));
--- 708,714 ----
  	  dump_generic_expr (MSG_NOTE, TDF_SLIM, t);
  	  fprintf (dump_file, "\n");
  	}
!       warned = warning_at (&richloc, OPT_Warray_bounds_,
  			   "array subscript %wi is below "
  			   "array bounds of %qT",
  			   idx.to_shwi (), TREE_TYPE (tem));
*************** array_bounds_checker::check_addr_expr (l
*** 716,722 ****
  	  dump_generic_expr (MSG_NOTE, TDF_SLIM, t);
  	  fprintf (dump_file, "\n");
  	}
!       warned = warning_at (location, OPT_Warray_bounds_,
  			   "array subscript %wu is above "
  			   "array bounds of %qT",
  			   idx.to_uhwi (), TREE_TYPE (tem));
--- 722,728 ----
  	  dump_generic_expr (MSG_NOTE, TDF_SLIM, t);
  	  fprintf (dump_file, "\n");
  	}
!       warned = warning_at (&richloc, OPT_Warray_bounds_,
  			   "array subscript %wu is above "
  			   "array bounds of %qT",
  			   idx.to_uhwi (), TREE_TYPE (tem));
*************** array_bounds_checker::check_array_bounds
*** 811,817 ****
      warned = checker->check_array_ref (location, t, wi->stmt,
  				       false/*ignore_off_by_one*/);
    else if (TREE_CODE (t) == MEM_REF)
!     warned = checker->check_mem_ref (location, t,
  				     false /*ignore_off_by_one*/);
    else if (TREE_CODE (t) == ADDR_EXPR)
      {
--- 817,823 ----
      warned = checker->check_array_ref (location, t, wi->stmt,
  				       false/*ignore_off_by_one*/);
    else if (TREE_CODE (t) == MEM_REF)
!     warned = checker->check_mem_ref (location, t, wi->stmt,
  				     false /*ignore_off_by_one*/);
    else if (TREE_CODE (t) == ADDR_EXPR)
      {
diff -Nrcpad gcc-16-20250817/gcc/gimple-array-bounds.h gcc-16-20250824/gcc/gimple-array-bounds.h
*** gcc-16-20250817/gcc/gimple-array-bounds.h	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/gimple-array-bounds.h	Sun Aug 24 22:32:21 2025
*************** public:
*** 33,39 ****
  private:
    static tree check_array_bounds (tree *tp, int *walk_subtree, void *data);
    bool check_array_ref (location_t, tree, gimple *, bool ignore_off_by_one);
!   bool check_mem_ref (location_t, tree, bool ignore_off_by_one);
    void check_addr_expr (location_t, tree, gimple *);
    void get_value_range (irange &r, const_tree op, gimple *);
  
--- 33,39 ----
  private:
    static tree check_array_bounds (tree *tp, int *walk_subtree, void *data);
    bool check_array_ref (location_t, tree, gimple *, bool ignore_off_by_one);
!   bool check_mem_ref (location_t, tree, gimple *, bool ignore_off_by_one);
    void check_addr_expr (location_t, tree, gimple *);
    void get_value_range (irange &r, const_tree op, gimple *);
  
diff -Nrcpad gcc-16-20250817/gcc/gimple-fold.cc gcc-16-20250824/gcc/gimple-fold.cc
*** gcc-16-20250817/gcc/gimple-fold.cc	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/gimple-fold.cc	Sun Aug 24 22:32:21 2025
*************** gimple_fold_indirect_ref (tree t)
*** 10484,10490 ****
     integer types involves undefined behavior on overflow and the
     operation can be expressed with unsigned arithmetic.  */
  
! static bool
  arith_code_with_undefined_signed_overflow (tree_code code)
  {
    switch (code)
--- 10484,10490 ----
     integer types involves undefined behavior on overflow and the
     operation can be expressed with unsigned arithmetic.  */
  
! bool
  arith_code_with_undefined_signed_overflow (tree_code code)
  {
    switch (code)
diff -Nrcpad gcc-16-20250817/gcc/gimple-fold.h gcc-16-20250824/gcc/gimple-fold.h
*** gcc-16-20250817/gcc/gimple-fold.h	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/gimple-fold.h	Sun Aug 24 22:32:21 2025
*************** extern tree gimple_get_virt_method_for_v
*** 58,63 ****
--- 58,64 ----
  extern tree gimple_fold_indirect_ref (tree);
  extern bool gimple_fold_builtin_sprintf (gimple_stmt_iterator *);
  extern bool gimple_fold_builtin_snprintf (gimple_stmt_iterator *);
+ extern bool arith_code_with_undefined_signed_overflow (tree_code);
  extern bool gimple_needing_rewrite_undefined (gimple *);
  extern void rewrite_to_defined_unconditional (gimple_stmt_iterator *);
  extern gimple_seq rewrite_to_defined_unconditional (gimple *);
diff -Nrcpad gcc-16-20250817/gcc/gimple-ssa-warn-access.cc gcc-16-20250824/gcc/gimple-ssa-warn-access.cc
*** gcc-16-20250817/gcc/gimple-ssa-warn-access.cc	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/gimple-ssa-warn-access.cc	Sun Aug 24 22:32:21 2025
***************
*** 57,62 ****
--- 57,63 ----
  #include "pointer-query.h"
  #include "pretty-print-markup.h"
  #include "gcc-urlifier.h"
+ #include "diagnostic-context-rich-location.h"
  
  /* Return true if tree node X has an associated location.  */
  
*************** warn_string_no_nul (location_t loc, Gimp
*** 169,185 ****
    if (expr)
      {
        tree func = get_callee_fndecl (expr);
        if (bndrng)
  	{
  	  if (wi::ltu_p (maxsiz, bndrng[0]))
! 	    warned = warning_at (loc, opt,
  				 "%qD specified bound %s exceeds "
  				 "maximum object size %E",
  				 func, bndstr, maxobjsize);
  	  else
  	    {
  	      bool maybe = wi::to_wide (size) == bndrng[0];
! 	      warned = warning_at (loc, opt,
  				   exact
  				   ? G_("%qD specified bound %s exceeds "
  					"the size %E of unterminated array")
--- 170,188 ----
    if (expr)
      {
        tree func = get_callee_fndecl (expr);
+       rich_location_with_details richloc (loc, expr);
+ 
        if (bndrng)
  	{
  	  if (wi::ltu_p (maxsiz, bndrng[0]))
! 	    warned = warning_at (&richloc, opt,
  				 "%qD specified bound %s exceeds "
  				 "maximum object size %E",
  				 func, bndstr, maxobjsize);
  	  else
  	    {
  	      bool maybe = wi::to_wide (size) == bndrng[0];
! 	      warned = warning_at (&richloc, opt,
  				   exact
  				   ? G_("%qD specified bound %s exceeds "
  					"the size %E of unterminated array")
*************** warn_string_no_nul (location_t loc, Gimp
*** 194,200 ****
  	    }
  	}
        else
! 	warned = warning_at (loc, opt,
  			     "%qD argument missing terminating nul",
  			     func);
      }
--- 197,203 ----
  	    }
  	}
        else
! 	warned = warning_at (&richloc, opt,
  			     "%qD argument missing terminating nul",
  			     func);
      }
*************** maybe_warn_nonstring_arg (tree fndecl, G
*** 486,499 ****
        tree maxobjsize = max_object_size ();
        if (tree_int_cst_lt (maxobjsize, bndrng[0]))
  	{
  	  bool warned = false;
  	  if (tree_int_cst_equal (bndrng[0], bndrng[1]))
! 	    warned = warning_at (loc, OPT_Wstringop_overread,
  				 "%qD specified bound %E "
  				 "exceeds maximum object size %E",
  				 fndecl, bndrng[0], maxobjsize);
  	  else
! 	    warned = warning_at (loc, OPT_Wstringop_overread,
  				 "%qD specified bound [%E, %E] "
  				 "exceeds maximum object size %E",
  				 fndecl, bndrng[0], bndrng[1],
--- 489,504 ----
        tree maxobjsize = max_object_size ();
        if (tree_int_cst_lt (maxobjsize, bndrng[0]))
  	{
+ 	  rich_location_with_details richloc (loc, exp);
+ 
  	  bool warned = false;
  	  if (tree_int_cst_equal (bndrng[0], bndrng[1]))
! 	    warned = warning_at (&richloc, OPT_Wstringop_overread,
  				 "%qD specified bound %E "
  				 "exceeds maximum object size %E",
  				 fndecl, bndrng[0], maxobjsize);
  	  else
! 	    warned = warning_at (&richloc, OPT_Wstringop_overread,
  				 "%qD specified bound [%E, %E] "
  				 "exceeds maximum object size %E",
  				 fndecl, bndrng[0], bndrng[1],
*************** maybe_warn_nonstring_arg (tree fndecl, G
*** 645,664 ****
        auto_diagnostic_group d;
        if (wi::ltu_p (asize, wibnd))
  	{
  	  if (bndrng[0] == bndrng[1])
! 	    warned = warning_at (loc, OPT_Wstringop_overread,
  				 "%qD argument %i declared attribute "
  				 "%<nonstring%> is smaller than the specified "
  				 "bound %wu",
  				 fndecl, argno + 1, wibnd.to_uhwi ());
  	  else if (wi::ltu_p (asize, wi::to_offset (bndrng[0])))
! 	    warned = warning_at (loc, OPT_Wstringop_overread,
  				 "%qD argument %i declared attribute "
  				 "%<nonstring%> is smaller than "
  				 "the specified bound [%E, %E]",
  				 fndecl, argno + 1, bndrng[0], bndrng[1]);
  	  else
! 	    warned = warning_at (loc, OPT_Wstringop_overread,
  				 "%qD argument %i declared attribute "
  				 "%<nonstring%> may be smaller than "
  				 "the specified bound [%E, %E]",
--- 650,670 ----
        auto_diagnostic_group d;
        if (wi::ltu_p (asize, wibnd))
  	{
+ 	  rich_location_with_details richloc (loc, exp);
  	  if (bndrng[0] == bndrng[1])
! 	    warned = warning_at (&richloc, OPT_Wstringop_overread,
  				 "%qD argument %i declared attribute "
  				 "%<nonstring%> is smaller than the specified "
  				 "bound %wu",
  				 fndecl, argno + 1, wibnd.to_uhwi ());
  	  else if (wi::ltu_p (asize, wi::to_offset (bndrng[0])))
! 	    warned = warning_at (&richloc, OPT_Wstringop_overread,
  				 "%qD argument %i declared attribute "
  				 "%<nonstring%> is smaller than "
  				 "the specified bound [%E, %E]",
  				 fndecl, argno + 1, bndrng[0], bndrng[1]);
  	  else
! 	    warned = warning_at (&richloc, OPT_Wstringop_overread,
  				 "%qD argument %i declared attribute "
  				 "%<nonstring%> may be smaller than "
  				 "the specified bound [%E, %E]",
*************** maybe_warn_for_bound (opt_code opt, loca
*** 730,745 ****
        auto_diagnostic_group d;
        if (tree_int_cst_lt (maxobjsize, bndrng[0]))
  	{
  	  if (bndrng[0] == bndrng[1])
  	    warned = (func
! 		      ? warning_at (loc, opt,
  				    (maybe
  				     ? G_("%qD specified bound %E may "
  					  "exceed maximum object size %E")
  				     : G_("%qD specified bound %E "
  					  "exceeds maximum object size %E")),
  				    func, bndrng[0], maxobjsize)
! 		      : warning_at (loc, opt,
  				    (maybe
  				     ? G_("specified bound %E may "
  					  "exceed maximum object size %E")
--- 736,752 ----
        auto_diagnostic_group d;
        if (tree_int_cst_lt (maxobjsize, bndrng[0]))
  	{
+ 	  rich_location_with_details richloc (loc, exp);
  	  if (bndrng[0] == bndrng[1])
  	    warned = (func
! 		      ? warning_at (&richloc, opt,
  				    (maybe
  				     ? G_("%qD specified bound %E may "
  					  "exceed maximum object size %E")
  				     : G_("%qD specified bound %E "
  					  "exceeds maximum object size %E")),
  				    func, bndrng[0], maxobjsize)
! 		      : warning_at (&richloc, opt,
  				    (maybe
  				     ? G_("specified bound %E may "
  					  "exceed maximum object size %E")
*************** maybe_warn_for_bound (opt_code opt, loca
*** 748,754 ****
  				    bndrng[0], maxobjsize));
  	  else
  	    warned = (func
! 		      ? warning_at (loc, opt,
  				    (maybe
  				     ? G_("%qD specified bound [%E, %E] may "
  					  "exceed maximum object size %E")
--- 755,761 ----
  				    bndrng[0], maxobjsize));
  	  else
  	    warned = (func
! 		      ? warning_at (&richloc, opt,
  				    (maybe
  				     ? G_("%qD specified bound [%E, %E] may "
  					  "exceed maximum object size %E")
*************** maybe_warn_for_bound (opt_code opt, loca
*** 756,762 ****
  					  "exceeds maximum object size %E")),
  				    func,
  				    bndrng[0], bndrng[1], maxobjsize)
! 		      : warning_at (loc, opt,
  				    (maybe
  				     ? G_("specified bound [%E, %E] may "
  					  "exceed maximum object size %E")
--- 763,769 ----
  					  "exceeds maximum object size %E")),
  				    func,
  				    bndrng[0], bndrng[1], maxobjsize)
! 		      : warning_at (&richloc, opt,
  				    (maybe
  				     ? G_("specified bound [%E, %E] may "
  					  "exceed maximum object size %E")
*************** maybe_warn_for_bound (opt_code opt, loca
*** 767,803 ****
        else if (!size || tree_int_cst_le (bndrng[0], size))
  	return false;
        else if (tree_int_cst_equal (bndrng[0], bndrng[1]))
! 	warned = (func
! 		  ? warning_at (loc, opt,
  				(maybe
  				 ? G_("%qD specified bound %E may exceed "
  				      "source size %E")
  				 : G_("%qD specified bound %E exceeds "
  				      "source size %E")),
  				func, bndrng[0], size)
! 		  : warning_at (loc, opt,
  				(maybe
  				 ? G_("specified bound %E may exceed "
  				      "source size %E")
  				 : G_("specified bound %E exceeds "
  				      "source size %E")),
  				bndrng[0], size));
        else
! 	warned = (func
! 		  ? warning_at (loc, opt,
  				(maybe
  				 ? G_("%qD specified bound [%E, %E] may "
  				      "exceed source size %E")
  				 : G_("%qD specified bound [%E, %E] exceeds "
  				      "source size %E")),
  				func, bndrng[0], bndrng[1], size)
! 		  : warning_at (loc, opt,
  				(maybe
  				 ? G_("specified bound [%E, %E] may exceed "
  				      "source size %E")
  				 : G_("specified bound [%E, %E] exceeds "
  				      "source size %E")),
  				bndrng[0], bndrng[1], size));
        if (warned)
  	{
  	  if (pad && pad->src.ref
--- 774,816 ----
        else if (!size || tree_int_cst_le (bndrng[0], size))
  	return false;
        else if (tree_int_cst_equal (bndrng[0], bndrng[1]))
! 	{
! 	  rich_location_with_details richloc (loc, exp);
! 	  warned = (func
! 		  ? warning_at (&richloc, opt,
  				(maybe
  				 ? G_("%qD specified bound %E may exceed "
  				      "source size %E")
  				 : G_("%qD specified bound %E exceeds "
  				      "source size %E")),
  				func, bndrng[0], size)
! 		  : warning_at (&richloc, opt,
  				(maybe
  				 ? G_("specified bound %E may exceed "
  				      "source size %E")
  				 : G_("specified bound %E exceeds "
  				      "source size %E")),
  				bndrng[0], size));
+ 	}
        else
! 	{
! 	  rich_location_with_details richloc (loc, exp);
! 	  warned = (func
! 		  ? warning_at (&richloc, opt,
  				(maybe
  				 ? G_("%qD specified bound [%E, %E] may "
  				      "exceed source size %E")
  				 : G_("%qD specified bound [%E, %E] exceeds "
  				      "source size %E")),
  				func, bndrng[0], bndrng[1], size)
! 		  : warning_at (&richloc, opt,
  				(maybe
  				 ? G_("specified bound [%E, %E] may exceed "
  				      "source size %E")
  				 : G_("specified bound [%E, %E] exceeds "
  				      "source size %E")),
  				bndrng[0], bndrng[1], size));
+ 	}
        if (warned)
  	{
  	  if (pad && pad->src.ref
*************** maybe_warn_for_bound (opt_code opt, loca
*** 811,816 ****
--- 824,830 ----
      }
  
    bool maybe = pad && pad->dst.phi ();
+   rich_location_with_details richloc (loc, exp);
    if (maybe)
      {
        /* Issue a "maybe" warning only if the PHI refers to objects
*************** maybe_warn_for_bound (opt_code opt, loca
*** 824,837 ****
      {
        if (bndrng[0] == bndrng[1])
  	warned = (func
! 		  ? warning_at (loc, opt,
  				(maybe
  				 ? G_("%qD specified size %E may "
  				      "exceed maximum object size %E")
  				 : G_("%qD specified size %E "
  				      "exceeds maximum object size %E")),
  				func, bndrng[0], maxobjsize)
! 		  : warning_at (loc, opt,
  				(maybe
  				 ? G_("specified size %E may exceed "
  				      "maximum object size %E")
--- 838,851 ----
      {
        if (bndrng[0] == bndrng[1])
  	warned = (func
! 		  ? warning_at (&richloc, opt,
  				(maybe
  				 ? G_("%qD specified size %E may "
  				      "exceed maximum object size %E")
  				 : G_("%qD specified size %E "
  				      "exceeds maximum object size %E")),
  				func, bndrng[0], maxobjsize)
! 		  : warning_at (&richloc, opt,
  				(maybe
  				 ? G_("specified size %E may exceed "
  				      "maximum object size %E")
*************** maybe_warn_for_bound (opt_code opt, loca
*** 840,853 ****
  				bndrng[0], maxobjsize));
        else
  	warned = (func
! 		  ? warning_at (loc, opt,
  				(maybe
  				 ? G_("%qD specified size between %E and %E "
  				      "may exceed maximum object size %E")
  				 : G_("%qD specified size between %E and %E "
  				      "exceeds maximum object size %E")),
  				func, bndrng[0], bndrng[1], maxobjsize)
! 		  : warning_at (loc, opt,
  				(maybe
  				 ? G_("specified size between %E and %E "
  				      "may exceed maximum object size %E")
--- 854,867 ----
  				bndrng[0], maxobjsize));
        else
  	warned = (func
! 		  ? warning_at (&richloc, opt,
  				(maybe
  				 ? G_("%qD specified size between %E and %E "
  				      "may exceed maximum object size %E")
  				 : G_("%qD specified size between %E and %E "
  				      "exceeds maximum object size %E")),
  				func, bndrng[0], bndrng[1], maxobjsize)
! 		  : warning_at (&richloc, opt,
  				(maybe
  				 ? G_("specified size between %E and %E "
  				      "may exceed maximum object size %E")
*************** maybe_warn_for_bound (opt_code opt, loca
*** 859,872 ****
      return false;
    else if (tree_int_cst_equal (bndrng[0], bndrng[1]))
      warned = (func
! 	      ? warning_at (loc, opt,
  			    (maybe
  			     ? G_("%qD specified bound %E may exceed "
  				  "destination size %E")
  			     : G_("%qD specified bound %E exceeds "
  				  "destination size %E")),
  			    func, bndrng[0], size)
! 	      : warning_at (loc, opt,
  			    (maybe
  			     ? G_("specified bound %E may exceed "
  				  "destination size %E")
--- 873,886 ----
      return false;
    else if (tree_int_cst_equal (bndrng[0], bndrng[1]))
      warned = (func
! 	      ? warning_at (&richloc, opt,
  			    (maybe
  			     ? G_("%qD specified bound %E may exceed "
  				  "destination size %E")
  			     : G_("%qD specified bound %E exceeds "
  				  "destination size %E")),
  			    func, bndrng[0], size)
! 	      : warning_at (&richloc, opt,
  			    (maybe
  			     ? G_("specified bound %E may exceed "
  				  "destination size %E")
*************** maybe_warn_for_bound (opt_code opt, loca
*** 875,888 ****
  			    bndrng[0], size));
    else
      warned = (func
! 	      ? warning_at (loc, opt,
  			    (maybe
  			     ? G_("%qD specified bound [%E, %E] may exceed "
  				  "destination size %E")
  			     : G_("%qD specified bound [%E, %E] exceeds "
  				  "destination size %E")),
  			    func, bndrng[0], bndrng[1], size)
! 	      : warning_at (loc, opt,
  			    (maybe
  			     ? G_("specified bound [%E, %E] exceeds "
  				  "destination size %E")
--- 889,902 ----
  			    bndrng[0], size));
    else
      warned = (func
! 	      ? warning_at (&richloc, opt,
  			    (maybe
  			     ? G_("%qD specified bound [%E, %E] may exceed "
  				  "destination size %E")
  			     : G_("%qD specified bound [%E, %E] exceeds "
  				  "destination size %E")),
  			    func, bndrng[0], bndrng[1], size)
! 	      : warning_at (&richloc, opt,
  			    (maybe
  			     ? G_("specified bound [%E, %E] exceeds "
  				  "destination size %E")
*************** warn_for_access (location_t loc, tree fu
*** 933,943 ****
  {
    bool warned = false;
  
    if (write && read)
      {
        if (tree_int_cst_equal (range[0], range[1]))
  	warned = (func
! 		  ? warning_n (loc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("%qD may access %E byte in a region "
  				     "of size %E")
--- 947,959 ----
  {
    bool warned = false;
  
+   rich_location_with_details richloc (loc, exp);
+ 
    if (write && read)
      {
        if (tree_int_cst_equal (range[0], range[1]))
  	warned = (func
! 		  ? warning_n (&richloc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("%qD may access %E byte in a region "
  				     "of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 949,955 ****
  				 : G_ ("%qD accessing %E bytes in a region "
  				       "of size %E")),
  			       func, range[0], size)
! 		  : warning_n (loc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("may access %E byte in a region "
  				     "of size %E")
--- 965,971 ----
  				 : G_ ("%qD accessing %E bytes in a region "
  				       "of size %E")),
  			       func, range[0], size)
! 		  : warning_n (&richloc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("may access %E byte in a region "
  				     "of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 965,978 ****
  	{
  	  /* Avoid printing the upper bound if it's invalid.  */
  	  warned = (func
! 		    ? warning_at (loc, opt,
  				  (maybe
  				   ? G_("%qD may access %E or more bytes "
  					"in a region of size %E")
  				   : G_("%qD accessing %E or more bytes "
  					"in a region of size %E")),
  				  func, range[0], size)
! 		    : warning_at (loc, opt,
  				  (maybe
  				   ? G_("may access %E or more bytes "
  					"in a region of size %E")
--- 981,994 ----
  	{
  	  /* Avoid printing the upper bound if it's invalid.  */
  	  warned = (func
! 		    ? warning_at (&richloc, opt,
  				  (maybe
  				   ? G_("%qD may access %E or more bytes "
  					"in a region of size %E")
  				   : G_("%qD accessing %E or more bytes "
  					"in a region of size %E")),
  				  func, range[0], size)
! 		    : warning_at (&richloc, opt,
  				  (maybe
  				   ? G_("may access %E or more bytes "
  					"in a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 982,995 ****
  	}
        else
  	warned = (func
! 		  ? warning_at (loc, opt,
  				(maybe
  				 ? G_("%qD may access between %E and %E "
  				      "bytes in a region of size %E")
  				 : G_("%qD accessing between %E and %E "
  				      "bytes in a region of size %E")),
  				func, range[0], range[1], size)
! 		  : warning_at (loc, opt,
  				(maybe
  				 ? G_("may access between %E and %E bytes "
  				      "in a region of size %E")
--- 998,1011 ----
  	}
        else
  	warned = (func
! 		  ? warning_at (&richloc, opt,
  				(maybe
  				 ? G_("%qD may access between %E and %E "
  				      "bytes in a region of size %E")
  				 : G_("%qD accessing between %E and %E "
  				      "bytes in a region of size %E")),
  				func, range[0], range[1], size)
! 		  : warning_at (&richloc, opt,
  				(maybe
  				 ? G_("may access between %E and %E bytes "
  				      "in a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1003,1009 ****
      {
        if (tree_int_cst_equal (range[0], range[1]))
  	warned = (func
! 		  ? warning_n (loc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("%qD may write %E byte into a region "
  				     "of size %E")
--- 1019,1025 ----
      {
        if (tree_int_cst_equal (range[0], range[1]))
  	warned = (func
! 		  ? warning_n (&richloc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("%qD may write %E byte into a region "
  				     "of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1015,1021 ****
  				: G_("%qD writing %E bytes into a region "
  				     "of size %E overflows the destination")),
  			       func, range[0], size)
! 		  : warning_n (loc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("may write %E byte into a region "
  				     "of size %E")
--- 1031,1037 ----
  				: G_("%qD writing %E bytes into a region "
  				     "of size %E overflows the destination")),
  			       func, range[0], size)
! 		  : warning_n (&richloc, opt, tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("may write %E byte into a region "
  				     "of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1031,1037 ****
  	{
  	  /* Avoid printing the upper bound if it's invalid.  */
  	  warned = (func
! 		    ? warning_at (loc, opt,
  				  (maybe
  				   ? G_("%qD may write %E or more bytes "
  					"into a region of size %E")
--- 1047,1053 ----
  	{
  	  /* Avoid printing the upper bound if it's invalid.  */
  	  warned = (func
! 		    ? warning_at (&richloc, opt,
  				  (maybe
  				   ? G_("%qD may write %E or more bytes "
  					"into a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1039,1045 ****
  					"into a region of size %E overflows "
  					"the destination")),
  				  func, range[0], size)
! 		    : warning_at (loc, opt,
  				  (maybe
  				   ? G_("may write %E or more bytes into "
  					"a region of size %E")
--- 1055,1061 ----
  					"into a region of size %E overflows "
  					"the destination")),
  				  func, range[0], size)
! 		    : warning_at (&richloc, opt,
  				  (maybe
  				   ? G_("may write %E or more bytes into "
  					"a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1050,1056 ****
  	}
        else
  	warned = (func
! 		  ? warning_at (loc, opt,
  				(maybe
  				 ? G_("%qD may write between %E and %E bytes "
  				      "into a region of size %E")
--- 1066,1072 ----
  	}
        else
  	warned = (func
! 		  ? warning_at (&richloc, opt,
  				(maybe
  				 ? G_("%qD may write between %E and %E bytes "
  				      "into a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1058,1064 ****
  				      "into a region of size %E overflows "
  				      "the destination")),
  				func, range[0], range[1], size)
! 		  : warning_at (loc, opt,
  				(maybe
  				 ? G_("may write between %E and %E bytes "
  				      "into a region of size %E")
--- 1074,1080 ----
  				      "into a region of size %E overflows "
  				      "the destination")),
  				func, range[0], range[1], size)
! 		  : warning_at (&richloc, opt,
  				(maybe
  				 ? G_("may write between %E and %E bytes "
  				      "into a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1073,1079 ****
      {
        if (tree_int_cst_equal (range[0], range[1]))
  	warned = (func
! 		  ? warning_n (loc, OPT_Wstringop_overread,
  			       tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("%qD may read %E byte from a region "
--- 1089,1095 ----
      {
        if (tree_int_cst_equal (range[0], range[1]))
  	warned = (func
! 		  ? warning_n (&richloc, OPT_Wstringop_overread,
  			       tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("%qD may read %E byte from a region "
*************** warn_for_access (location_t loc, tree fu
*** 1086,1092 ****
  				: G_("%qD reading %E bytes from a region "
  				     "of size %E")),
  			       func, range[0], size)
! 		  : warning_n (loc, OPT_Wstringop_overread,
  			       tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("may read %E byte from a region "
--- 1102,1108 ----
  				: G_("%qD reading %E bytes from a region "
  				     "of size %E")),
  			       func, range[0], size)
! 		  : warning_n (&richloc, OPT_Wstringop_overread,
  			       tree_to_uhwi (range[0]),
  			       (maybe
  				? G_("may read %E byte from a region "
*************** warn_for_access (location_t loc, tree fu
*** 1103,1116 ****
  	{
  	  /* Avoid printing the upper bound if it's invalid.  */
  	  warned = (func
! 		    ? warning_at (loc, OPT_Wstringop_overread,
  				  (maybe
  				   ? G_("%qD may read %E or more bytes "
  					"from a region of size %E")
  				   : G_("%qD reading %E or more bytes "
  					"from a region of size %E")),
  				  func, range[0], size)
! 		    : warning_at (loc, OPT_Wstringop_overread,
  				  (maybe
  				   ? G_("may read %E or more bytes "
  					"from a region of size %E")
--- 1119,1132 ----
  	{
  	  /* Avoid printing the upper bound if it's invalid.  */
  	  warned = (func
! 		    ? warning_at (&richloc, OPT_Wstringop_overread,
  				  (maybe
  				   ? G_("%qD may read %E or more bytes "
  					"from a region of size %E")
  				   : G_("%qD reading %E or more bytes "
  					"from a region of size %E")),
  				  func, range[0], size)
! 		    : warning_at (&richloc, OPT_Wstringop_overread,
  				  (maybe
  				   ? G_("may read %E or more bytes "
  					"from a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1120,1133 ****
  	}
        else
  	warned = (func
! 		  ? warning_at (loc, OPT_Wstringop_overread,
  				(maybe
  				 ? G_("%qD may read between %E and %E bytes "
  				      "from a region of size %E")
  				 : G_("%qD reading between %E and %E bytes "
  				      "from a region of size %E")),
  				func, range[0], range[1], size)
! 		  : warning_at (loc, opt,
  				(maybe
  				 ? G_("may read between %E and %E bytes "
  				      "from a region of size %E")
--- 1136,1149 ----
  	}
        else
  	warned = (func
! 		  ? warning_at (&richloc, OPT_Wstringop_overread,
  				(maybe
  				 ? G_("%qD may read between %E and %E bytes "
  				      "from a region of size %E")
  				 : G_("%qD reading between %E and %E bytes "
  				      "from a region of size %E")),
  				func, range[0], range[1], size)
! 		  : warning_at (&richloc, opt,
  				(maybe
  				 ? G_("may read between %E and %E bytes "
  				      "from a region of size %E")
*************** warn_for_access (location_t loc, tree fu
*** 1144,1155 ****
    if (tree_int_cst_equal (range[0], range[1])
        || tree_int_cst_sign_bit (range[1]))
      warned = (func
! 	      ? warning_n (loc, OPT_Wstringop_overread,
  			   tree_to_uhwi (range[0]),
  			   "%qD expecting %E byte in a region of size %E",
  			   "%qD expecting %E bytes in a region of size %E",
  			   func, range[0], size)
! 	      : warning_n (loc, OPT_Wstringop_overread,
  			   tree_to_uhwi (range[0]),
  			   "expecting %E byte in a region of size %E",
  			   "expecting %E bytes in a region of size %E",
--- 1160,1171 ----
    if (tree_int_cst_equal (range[0], range[1])
        || tree_int_cst_sign_bit (range[1]))
      warned = (func
! 	      ? warning_n (&richloc, OPT_Wstringop_overread,
  			   tree_to_uhwi (range[0]),
  			   "%qD expecting %E byte in a region of size %E",
  			   "%qD expecting %E bytes in a region of size %E",
  			   func, range[0], size)
! 	      : warning_n (&richloc, OPT_Wstringop_overread,
  			   tree_to_uhwi (range[0]),
  			   "expecting %E byte in a region of size %E",
  			   "expecting %E bytes in a region of size %E",
*************** warn_for_access (location_t loc, tree fu
*** 1158,1179 ****
      {
        /* Avoid printing the upper bound if it's invalid.  */
        warned = (func
! 		? warning_at (loc, OPT_Wstringop_overread,
  			      "%qD expecting %E or more bytes in a region "
  			      "of size %E",
  			      func, range[0], size)
! 		: warning_at (loc, OPT_Wstringop_overread,
  			      "expecting %E or more bytes in a region "
  			      "of size %E",
  			      range[0], size));
      }
    else
      warned = (func
! 	      ? warning_at (loc, OPT_Wstringop_overread,
  			    "%qD expecting between %E and %E bytes in "
  			    "a region of size %E",
  			    func, range[0], range[1], size)
! 	      : warning_at (loc, OPT_Wstringop_overread,
  			    "expecting between %E and %E bytes in "
  			    "a region of size %E",
  			    range[0], range[1], size));
--- 1174,1195 ----
      {
        /* Avoid printing the upper bound if it's invalid.  */
        warned = (func
! 		? warning_at (&richloc, OPT_Wstringop_overread,
  			      "%qD expecting %E or more bytes in a region "
  			      "of size %E",
  			      func, range[0], size)
! 		: warning_at (&richloc, OPT_Wstringop_overread,
  			      "expecting %E or more bytes in a region "
  			      "of size %E",
  			      range[0], size));
      }
    else
      warned = (func
! 	      ? warning_at (&richloc, OPT_Wstringop_overread,
  			    "%qD expecting between %E and %E bytes in "
  			    "a region of size %E",
  			    func, range[0], range[1], size)
! 	      : warning_at (&richloc, OPT_Wstringop_overread,
  			    "expecting between %E and %E bytes in "
  			    "a region of size %E",
  			    range[0], range[1], size));
*************** check_access (GimpleOrTree exp, tree dst
*** 1404,1409 ****
--- 1420,1427 ----
  
  	  auto_diagnostic_group d;
  	  location_t loc = get_location (exp);
+ 	  rich_location_with_details richloc (loc, exp);
+ 
  	  bool warned = false;
  	  if (dstwrite == slen && at_least_one)
  	    {
*************** check_access (GimpleOrTree exp, tree dst
*** 1411,1422 ****
  		 and a source of unknown length.  The call will write
  		 at least one byte past the end of the destination.  */
  	      warned = (func
! 			? warning_at (loc, opt,
  				      "%qD writing %E or more bytes into "
  				      "a region of size %E overflows "
  				      "the destination",
  				      func, range[0], dstsize)
! 			: warning_at (loc, opt,
  				      "writing %E or more bytes into "
  				      "a region of size %E overflows "
  				      "the destination",
--- 1429,1440 ----
  		 and a source of unknown length.  The call will write
  		 at least one byte past the end of the destination.  */
  	      warned = (func
! 			? warning_at (&richloc, opt,
  				      "%qD writing %E or more bytes into "
  				      "a region of size %E overflows "
  				      "the destination",
  				      func, range[0], dstsize)
! 			: warning_at (&richloc, opt,
  				      "writing %E or more bytes into "
  				      "a region of size %E overflows "
  				      "the destination",
*************** pass_waccess::check_strncat (gcall *stmt
*** 2583,2589 ****
        && tree_int_cst_equal (destsize, maxread))
      {
        location_t loc = get_location (stmt);
!       warning_at (loc, OPT_Wstringop_overflow_,
  		  "%qD specified bound %E equals destination size",
  		  get_callee_fndecl (stmt), maxread);
  
--- 2601,2609 ----
        && tree_int_cst_equal (destsize, maxread))
      {
        location_t loc = get_location (stmt);
!       rich_location_with_details richloc (loc, stmt);
! 
!       warning_at (&richloc, OPT_Wstringop_overflow_,
  		  "%qD specified bound %E equals destination size",
  		  get_callee_fndecl (stmt), maxread);
  
*************** pass_waccess::maybe_check_access_sizes (
*** 3464,3476 ****
  	  && tree_int_cst_sgn (sizrng[0]) < 0
  	  && tree_int_cst_sgn (sizrng[1]) < 0)
  	{
  	  /* Warn about negative sizes.  */
  	  if (access.second.internal_p)
  	    {
  	      const std::string argtypestr
  		= access.second.array_as_string (ptrtype);
  
! 	      if (warning_at (loc, OPT_Wstringop_overflow_,
  			      "bound argument %i value %s is "
  			      "negative for a variable length array "
  			      "argument %i of type %s",
--- 3484,3497 ----
  	  && tree_int_cst_sgn (sizrng[0]) < 0
  	  && tree_int_cst_sgn (sizrng[1]) < 0)
  	{
+ 	  rich_location_with_details richloc (loc, stmt);
  	  /* Warn about negative sizes.  */
  	  if (access.second.internal_p)
  	    {
  	      const std::string argtypestr
  		= access.second.array_as_string (ptrtype);
  
! 	      if (warning_at (&richloc, OPT_Wstringop_overflow_,
  			      "bound argument %i value %s is "
  			      "negative for a variable length array "
  			      "argument %i of type %s",
*************** pass_waccess::maybe_check_access_sizes (
*** 3478,3484 ****
  			      ptridx + 1, argtypestr.c_str ()))
  		arg_warned = OPT_Wstringop_overflow_;
  	    }
! 	  else if (warning_at (loc, OPT_Wstringop_overflow_,
  			       "argument %i value %s is negative",
  			       sizidx + 1, sizstr))
  	    arg_warned = OPT_Wstringop_overflow_;
--- 3499,3505 ----
  			      ptridx + 1, argtypestr.c_str ()))
  		arg_warned = OPT_Wstringop_overflow_;
  	    }
! 	  else if (warning_at (&richloc, OPT_Wstringop_overflow_,
  			       "argument %i value %s is negative",
  			       sizidx + 1, sizstr))
  	    arg_warned = OPT_Wstringop_overflow_;
diff -Nrcpad gcc-16-20250817/gcc/gimple-ssa-warn-restrict.cc gcc-16-20250824/gcc/gimple-ssa-warn-restrict.cc
*** gcc-16-20250817/gcc/gimple-ssa-warn-restrict.cc	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/gimple-ssa-warn-restrict.cc	Sun Aug 24 22:32:21 2025
***************
*** 40,45 ****
--- 40,46 ----
  #include "tree-object-size.h"
  #include "calls.h"
  #include "cfgloop.h"
+ #include "diagnostic-context-rich-location.h"
  #include "intl.h"
  #include "gimple-range.h"
  
*************** pass_wrestrict::execute (function *fun)
*** 106,116 ****
--- 107,129 ----
  {
    /* Create a new ranger instance and associate it with FUN.  */
    m_ptr_qry.rvals = enable_ranger (fun);
+   bool new_dominance_for_diagnostics = false;
+ 
+   if (flag_diagnostics_show_context
+       && !dom_info_available_p (fun, CDI_DOMINATORS))
+     {
+       calculate_dominance_info (CDI_DOMINATORS);
+       new_dominance_for_diagnostics = true;
+     }
  
    basic_block bb;
    FOR_EACH_BB_FN (bb, fun)
      check_block (bb);
  
+   if (new_dominance_for_diagnostics
+       && dom_info_available_p (fun, CDI_DOMINATORS))
+     free_dominance_info (fun, CDI_DOMINATORS);
+ 
    m_ptr_qry.flush_cache ();
  
    /* Release the ranger instance and replace it with a global ranger.
*************** maybe_diag_overlap (location_t loc, gimp
*** 1447,1452 ****
--- 1460,1467 ----
  
    tree func = gimple_call_fndecl (call);
  
+   rich_location_with_details richloc (loc, call);
+ 
    /* To avoid a combinatorial explosion of diagnostics format the offsets
       or their ranges as strings and use them in the warning calls below.  */
    char offstr[3][64];
*************** maybe_diag_overlap (location_t loc, gimp
*** 1492,1498 ****
        if (sizrange[0] == sizrange[1])
  	{
  	  if (ovlsiz[0] == ovlsiz[1])
! 	    warning_at (loc, OPT_Wrestrict,
  			sizrange[0] == 1
  			? (ovlsiz[0] == 1
  			   ? G_("%qD accessing %wu byte at offsets %s "
--- 1507,1513 ----
        if (sizrange[0] == sizrange[1])
  	{
  	  if (ovlsiz[0] == ovlsiz[1])
! 	    warning_at (&richloc, OPT_Wrestrict,
  			sizrange[0] == 1
  			? (ovlsiz[0] == 1
  			   ? G_("%qD accessing %wu byte at offsets %s "
*************** maybe_diag_overlap (location_t loc, gimp
*** 1509,1515 ****
  			func, sizrange[0],
  			offstr[0], offstr[1], ovlsiz[0], offstr[2]);
  	  else if (ovlsiz[1] >= 0 && ovlsiz[1] < maxobjsize.to_shwi ())
! 	    warning_n (loc, OPT_Wrestrict, sizrange[0],
  		       "%qD accessing %wu byte at offsets %s "
  		       "and %s overlaps between %wu and %wu bytes "
  		       "at offset %s",
--- 1524,1530 ----
  			func, sizrange[0],
  			offstr[0], offstr[1], ovlsiz[0], offstr[2]);
  	  else if (ovlsiz[1] >= 0 && ovlsiz[1] < maxobjsize.to_shwi ())
! 	    warning_n (&richloc, OPT_Wrestrict, sizrange[0],
  		       "%qD accessing %wu byte at offsets %s "
  		       "and %s overlaps between %wu and %wu bytes "
  		       "at offset %s",
*************** maybe_diag_overlap (location_t loc, gimp
*** 1519,1525 ****
  		       func, sizrange[0], offstr[0], offstr[1],
  		       ovlsiz[0], ovlsiz[1], offstr[2]);
  	  else
! 	    warning_n (loc, OPT_Wrestrict, sizrange[0],
  		       "%qD accessing %wu byte at offsets %s and "
  		       "%s overlaps %wu or more bytes at offset %s",
  		       "%qD accessing %wu bytes at offsets %s and "
--- 1534,1540 ----
  		       func, sizrange[0], offstr[0], offstr[1],
  		       ovlsiz[0], ovlsiz[1], offstr[2]);
  	  else
! 	    warning_n (&richloc, OPT_Wrestrict, sizrange[0],
  		       "%qD accessing %wu byte at offsets %s and "
  		       "%s overlaps %wu or more bytes at offset %s",
  		       "%qD accessing %wu bytes at offsets %s and "
*************** maybe_diag_overlap (location_t loc, gimp
*** 1532,1538 ****
        if (sizrange[1] >= 0 && sizrange[1] < maxobjsize.to_shwi ())
  	{
  	  if (ovlsiz[0] == ovlsiz[1])
! 	    warning_n (loc, OPT_Wrestrict, ovlsiz[0],
  		       "%qD accessing between %wu and %wu bytes "
  		       "at offsets %s and %s overlaps %wu byte at "
  		       "offset %s",
--- 1547,1553 ----
        if (sizrange[1] >= 0 && sizrange[1] < maxobjsize.to_shwi ())
  	{
  	  if (ovlsiz[0] == ovlsiz[1])
! 	    warning_n (&richloc, OPT_Wrestrict, ovlsiz[0],
  		       "%qD accessing between %wu and %wu bytes "
  		       "at offsets %s and %s overlaps %wu byte at "
  		       "offset %s",
*************** maybe_diag_overlap (location_t loc, gimp
*** 1542,1548 ****
  		       func, sizrange[0], sizrange[1],
  		       offstr[0], offstr[1], ovlsiz[0], offstr[2]);
  	  else if (ovlsiz[1] >= 0 && ovlsiz[1] < maxobjsize.to_shwi ())
! 	    warning_at (loc, OPT_Wrestrict,
  			"%qD accessing between %wu and %wu bytes at "
  			"offsets %s and %s overlaps between %wu and %wu "
  			"bytes at offset %s",
--- 1557,1563 ----
  		       func, sizrange[0], sizrange[1],
  		       offstr[0], offstr[1], ovlsiz[0], offstr[2]);
  	  else if (ovlsiz[1] >= 0 && ovlsiz[1] < maxobjsize.to_shwi ())
! 	    warning_at (&richloc, OPT_Wrestrict,
  			"%qD accessing between %wu and %wu bytes at "
  			"offsets %s and %s overlaps between %wu and %wu "
  			"bytes at offset %s",
*************** maybe_diag_overlap (location_t loc, gimp
*** 1550,1556 ****
  			offstr[0], offstr[1], ovlsiz[0], ovlsiz[1],
  			offstr[2]);
  	  else
! 	    warning_at (loc, OPT_Wrestrict,
  			"%qD accessing between %wu and %wu bytes at "
  			"offsets %s and %s overlaps %wu or more bytes "
  			"at offset %s",
--- 1565,1571 ----
  			offstr[0], offstr[1], ovlsiz[0], ovlsiz[1],
  			offstr[2]);
  	  else
! 	    warning_at (&richloc, OPT_Wrestrict,
  			"%qD accessing between %wu and %wu bytes at "
  			"offsets %s and %s overlaps %wu or more bytes "
  			"at offset %s",
*************** maybe_diag_overlap (location_t loc, gimp
*** 1563,1569 ****
  	ovlsiz[1] = maxobjsize.to_shwi ();
  
        if (ovlsiz[0] == ovlsiz[1])
! 	warning_n (loc, OPT_Wrestrict, ovlsiz[0],
  		   "%qD accessing %wu or more bytes at offsets "
  		   "%s and %s overlaps %wu byte at offset %s",
  		   "%qD accessing %wu or more bytes at offsets "
--- 1578,1584 ----
  	ovlsiz[1] = maxobjsize.to_shwi ();
  
        if (ovlsiz[0] == ovlsiz[1])
! 	warning_n (&richloc, OPT_Wrestrict, ovlsiz[0],
  		   "%qD accessing %wu or more bytes at offsets "
  		   "%s and %s overlaps %wu byte at offset %s",
  		   "%qD accessing %wu or more bytes at offsets "
*************** maybe_diag_overlap (location_t loc, gimp
*** 1571,1584 ****
  		   func, sizrange[0], offstr[0], offstr[1],
  		   ovlsiz[0], offstr[2]);
        else if (ovlsiz[1] >= 0 && ovlsiz[1] < maxobjsize.to_shwi ())
! 	warning_at (loc, OPT_Wrestrict,
  		    "%qD accessing %wu or more bytes at offsets %s "
  		    "and %s overlaps between %wu and %wu bytes "
  		    "at offset %s",
  		    func, sizrange[0], offstr[0], offstr[1],
  		    ovlsiz[0], ovlsiz[1], offstr[2]);
        else
! 	warning_at (loc, OPT_Wrestrict,
  		    "%qD accessing %wu or more bytes at offsets %s "
  		    "and %s overlaps %wu or more bytes at offset %s",
  		    func, sizrange[0], offstr[0], offstr[1],
--- 1586,1599 ----
  		   func, sizrange[0], offstr[0], offstr[1],
  		   ovlsiz[0], offstr[2]);
        else if (ovlsiz[1] >= 0 && ovlsiz[1] < maxobjsize.to_shwi ())
! 	warning_at (&richloc, OPT_Wrestrict,
  		    "%qD accessing %wu or more bytes at offsets %s "
  		    "and %s overlaps between %wu and %wu bytes "
  		    "at offset %s",
  		    func, sizrange[0], offstr[0], offstr[1],
  		    ovlsiz[0], ovlsiz[1], offstr[2]);
        else
! 	warning_at (&richloc, OPT_Wrestrict,
  		    "%qD accessing %wu or more bytes at offsets %s "
  		    "and %s overlaps %wu or more bytes at offset %s",
  		    func, sizrange[0], offstr[0], offstr[1],
*************** maybe_diag_overlap (location_t loc, gimp
*** 1606,1619 ****
        if (ovlsiz[1] == 1)
  	{
  	  if (open_range)
! 	    warning_n (loc, OPT_Wrestrict, sizrange[1],
  		       "%qD accessing %wu byte may overlap "
  		       "%wu byte",
  		       "%qD accessing %wu bytes may overlap "
  		       "%wu byte",
  		       func, sizrange[1], ovlsiz[1]);
  	  else
! 	    warning_n (loc, OPT_Wrestrict, sizrange[1],
  		       "%qD accessing %wu byte at offsets %s "
  		       "and %s may overlap %wu byte at offset %s",
  		       "%qD accessing %wu bytes at offsets %s "
--- 1621,1634 ----
        if (ovlsiz[1] == 1)
  	{
  	  if (open_range)
! 	    warning_n (&richloc, OPT_Wrestrict, sizrange[1],
  		       "%qD accessing %wu byte may overlap "
  		       "%wu byte",
  		       "%qD accessing %wu bytes may overlap "
  		       "%wu byte",
  		       func, sizrange[1], ovlsiz[1]);
  	  else
! 	    warning_n (&richloc, OPT_Wrestrict, sizrange[1],
  		       "%qD accessing %wu byte at offsets %s "
  		       "and %s may overlap %wu byte at offset %s",
  		       "%qD accessing %wu bytes at offsets %s "
*************** maybe_diag_overlap (location_t loc, gimp
*** 1624,1637 ****
  	}
  
        if (open_range)
! 	warning_n (loc, OPT_Wrestrict, sizrange[1],
  		   "%qD accessing %wu byte may overlap "
  		   "up to %wu bytes",
  		   "%qD accessing %wu bytes may overlap "
  		   "up to %wu bytes",
  		   func, sizrange[1], ovlsiz[1]);
        else
! 	warning_n (loc, OPT_Wrestrict, sizrange[1],
  		   "%qD accessing %wu byte at offsets %s and "
  		   "%s may overlap up to %wu bytes at offset %s",
  		   "%qD accessing %wu bytes at offsets %s and "
--- 1639,1652 ----
  	}
  
        if (open_range)
! 	warning_n (&richloc, OPT_Wrestrict, sizrange[1],
  		   "%qD accessing %wu byte may overlap "
  		   "up to %wu bytes",
  		   "%qD accessing %wu bytes may overlap "
  		   "up to %wu bytes",
  		   func, sizrange[1], ovlsiz[1]);
        else
! 	warning_n (&richloc, OPT_Wrestrict, sizrange[1],
  		   "%qD accessing %wu byte at offsets %s and "
  		   "%s may overlap up to %wu bytes at offset %s",
  		   "%qD accessing %wu bytes at offsets %s and "
*************** maybe_diag_overlap (location_t loc, gimp
*** 1644,1657 ****
    if (sizrange[1] >= 0 && sizrange[1] < maxobjsize.to_shwi ())
      {
        if (open_range)
! 	warning_n (loc, OPT_Wrestrict, ovlsiz[1],
  		   "%qD accessing between %wu and %wu bytes "
  		   "may overlap %wu byte",
  		   "%qD accessing between %wu and %wu bytes "
  		   "may overlap up to %wu bytes",
  		   func, sizrange[0], sizrange[1], ovlsiz[1]);
        else
! 	warning_n (loc, OPT_Wrestrict, ovlsiz[1],
  		   "%qD accessing between %wu and %wu bytes "
  		   "at offsets %s and %s may overlap %wu byte "
  		   "at offset %s",
--- 1659,1672 ----
    if (sizrange[1] >= 0 && sizrange[1] < maxobjsize.to_shwi ())
      {
        if (open_range)
! 	warning_n (&richloc, OPT_Wrestrict, ovlsiz[1],
  		   "%qD accessing between %wu and %wu bytes "
  		   "may overlap %wu byte",
  		   "%qD accessing between %wu and %wu bytes "
  		   "may overlap up to %wu bytes",
  		   func, sizrange[0], sizrange[1], ovlsiz[1]);
        else
! 	warning_n (&richloc, OPT_Wrestrict, ovlsiz[1],
  		   "%qD accessing between %wu and %wu bytes "
  		   "at offsets %s and %s may overlap %wu byte "
  		   "at offset %s",
*************** maybe_diag_overlap (location_t loc, gimp
*** 1663,1669 ****
        return true;
      }
  
!   warning_n (loc, OPT_Wrestrict, ovlsiz[1],
  	     "%qD accessing %wu or more bytes at offsets %s "
  	     "and %s may overlap %wu byte at offset %s",
  	     "%qD accessing %wu or more bytes at offsets %s "
--- 1678,1684 ----
        return true;
      }
  
!   warning_n (&richloc, OPT_Wrestrict, ovlsiz[1],
  	     "%qD accessing %wu or more bytes at offsets %s "
  	     "and %s may overlap %wu byte at offset %s",
  	     "%qD accessing %wu or more bytes at offsets %s "
*************** maybe_diag_access_bounds (gimple *call,
*** 1693,1698 ****
--- 1708,1715 ----
    location_t loc = gimple_location (call);
    const offset_int maxobjsize = ref.maxobjsize;
  
+   rich_location_with_details richloc (loc, call);
+ 
    /* Check for excessive size first and regardless of warning options
       since the result is used to make codegen decisions.  */
    if (ref.sizrange[0] > maxobjsize)
*************** maybe_diag_access_bounds (gimple *call,
*** 1709,1721 ****
        if (warn_stringop_overflow)
  	{
  	  if (ref.sizrange[0] == ref.sizrange[1])
! 	    warned = warning_at (loc, opt,
  				 "%qD specified bound %wu "
  				 "exceeds maximum object size %wu",
  				 func, ref.sizrange[0].to_uhwi (),
  				 maxobjsize.to_uhwi ());
  	  else
! 	    warned = warning_at (loc, opt,
  				 "%qD specified bound between %wu and %wu "
  				 "exceeds maximum object size %wu",
  				 func, ref.sizrange[0].to_uhwi (),
--- 1726,1738 ----
        if (warn_stringop_overflow)
  	{
  	  if (ref.sizrange[0] == ref.sizrange[1])
! 	    warned = warning_at (&richloc, opt,
  				 "%qD specified bound %wu "
  				 "exceeds maximum object size %wu",
  				 func, ref.sizrange[0].to_uhwi (),
  				 maxobjsize.to_uhwi ());
  	  else
! 	    warned = warning_at (&richloc, opt,
  				 "%qD specified bound between %wu and %wu "
  				 "exceeds maximum object size %wu",
  				 func, ref.sizrange[0].to_uhwi (),
*************** maybe_diag_access_bounds (gimple *call,
*** 1776,1782 ****
  	  && TREE_CODE (type = TREE_TYPE (ref.base)) == ARRAY_TYPE)
  	{
  	  auto_diagnostic_group d;
! 	  if (warning_at (loc, opt,
  			  "%qD pointer overflow between offset %s "
  			  "and size %s accessing array %qD with type %qT",
  			  func, rangestr[0], rangestr[1], ref.base, type))
--- 1793,1799 ----
  	  && TREE_CODE (type = TREE_TYPE (ref.base)) == ARRAY_TYPE)
  	{
  	  auto_diagnostic_group d;
! 	  if (warning_at (&richloc, opt,
  			  "%qD pointer overflow between offset %s "
  			  "and size %s accessing array %qD with type %qT",
  			  func, rangestr[0], rangestr[1], ref.base, type))
*************** maybe_diag_access_bounds (gimple *call,
*** 1786,1798 ****
  	      warned = true;
  	    }
  	  else
! 	    warned = warning_at (loc, opt,
  				 "%qD pointer overflow between offset %s "
  				 "and size %s",
  				 func, rangestr[0], rangestr[1]);
  	}
        else
! 	warned = warning_at (loc, opt,
  			     "%qD pointer overflow between offset %s "
  			     "and size %s",
  			     func, rangestr[0], rangestr[1]);
--- 1803,1815 ----
  	      warned = true;
  	    }
  	  else
! 	    warned = warning_at (&richloc, opt,
  				 "%qD pointer overflow between offset %s "
  				 "and size %s",
  				 func, rangestr[0], rangestr[1]);
  	}
        else
! 	warned = warning_at (&richloc, opt,
  			     "%qD pointer overflow between offset %s "
  			     "and size %s",
  			     func, rangestr[0], rangestr[1]);
*************** maybe_diag_access_bounds (gimple *call,
*** 1808,1814 ****
  	{
  	  auto_diagnostic_group d;
  	  if ((ref.basesize < maxobjsize
! 	       && warning_at (loc, opt,
  			      form
  			      ? G_("%qD forming offset %s is out of "
  				   "the bounds [0, %wu] of object %qD with "
--- 1825,1831 ----
  	{
  	  auto_diagnostic_group d;
  	  if ((ref.basesize < maxobjsize
! 	       && warning_at (&richloc, opt,
  			      form
  			      ? G_("%qD forming offset %s is out of "
  				   "the bounds [0, %wu] of object %qD with "
*************** maybe_diag_access_bounds (gimple *call,
*** 1817,1823 ****
  				   "[0, %wu] of object %qD with type %qT"),
  			      func, rangestr[0], ref.basesize.to_uhwi (),
  			      ref.base, TREE_TYPE (ref.base)))
! 	      || warning_at (loc, opt,
  			     form
  			     ? G_("%qD forming offset %s is out of "
  				  "the bounds of object %qD with type %qT")
--- 1834,1840 ----
  				   "[0, %wu] of object %qD with type %qT"),
  			      func, rangestr[0], ref.basesize.to_uhwi (),
  			      ref.base, TREE_TYPE (ref.base)))
! 	      || warning_at (&richloc, opt,
  			     form
  			     ? G_("%qD forming offset %s is out of "
  				  "the bounds of object %qD with type %qT")
*************** maybe_diag_access_bounds (gimple *call,
*** 1832,1838 ****
  	    }
  	}
        else if (ref.basesize < maxobjsize)
! 	warned = warning_at (loc, opt,
  			     form
  			     ? G_("%qD forming offset %s is out "
  				  "of the bounds [0, %wu]")
--- 1849,1855 ----
  	    }
  	}
        else if (ref.basesize < maxobjsize)
! 	warned = warning_at (&richloc, opt,
  			     form
  			     ? G_("%qD forming offset %s is out "
  				  "of the bounds [0, %wu]")
*************** maybe_diag_access_bounds (gimple *call,
*** 1840,1846 ****
  				  "of the bounds [0, %wu]"),
  			     func, rangestr[0], ref.basesize.to_uhwi ());
        else
! 	warned = warning_at (loc, opt,
  			     form
  			     ? G_("%qD forming offset %s is out of bounds")
  			     : G_("%qD offset %s is out of bounds"),
--- 1857,1863 ----
  				  "of the bounds [0, %wu]"),
  			     func, rangestr[0], ref.basesize.to_uhwi ());
        else
! 	warned = warning_at (&richloc, opt,
  			     form
  			     ? G_("%qD forming offset %s is out of bounds")
  			     : G_("%qD offset %s is out of bounds"),
*************** maybe_diag_access_bounds (gimple *call,
*** 1854,1860 ****
  	type = TREE_TYPE (type);
        type = TYPE_MAIN_VARIANT (type);
  
!       if (warning_at (loc, opt,
  		      "%qD offset %s from the object at %qE is out "
  		      "of the bounds of %qT",
  		      func, rangestr[0], ref.base, type))
--- 1871,1877 ----
  	type = TREE_TYPE (type);
        type = TYPE_MAIN_VARIANT (type);
  
!       if (warning_at (&richloc, opt,
  		      "%qD offset %s from the object at %qE is out "
  		      "of the bounds of %qT",
  		      func, rangestr[0], ref.base, type))
*************** maybe_diag_access_bounds (gimple *call,
*** 1872,1878 ****
        tree refop = TREE_OPERAND (ref.ref, 0);
        tree type = TYPE_MAIN_VARIANT (TREE_TYPE (ref.ref));
  
!       if (warning_at (loc, opt,
  		      "%qD offset %s from the object at %qE is out "
  		      "of the bounds of referenced subobject %qD with "
  		      "type %qT at offset %wi",
--- 1889,1895 ----
        tree refop = TREE_OPERAND (ref.ref, 0);
        tree type = TYPE_MAIN_VARIANT (TREE_TYPE (ref.ref));
  
!       if (warning_at (&richloc, opt,
  		      "%qD offset %s from the object at %qE is out "
  		      "of the bounds of referenced subobject %qD with "
  		      "type %qT at offset %wi",
diff -Nrcpad gcc-16-20250817/gcc/ifcvt.cc gcc-16-20250824/gcc/ifcvt.cc
*** gcc-16-20250817/gcc/ifcvt.cc	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/ifcvt.cc	Sun Aug 24 22:32:21 2025
*************** noce_try_move (struct noce_if_info *if_i
*** 1179,1184 ****
--- 1179,1385 ----
    return false;
  }
  
+ /* If a sign bit test is selecting across constants, we may be able
+    to generate efficient code utilizing the -1/0 result of a sign
+    bit splat idiom. 
+ 
+    Do this before trying the generalized conditional move as these
+    (when applicable) are hopefully faster than a conditional move.  */
+ 
+ static bool
+ noce_try_sign_bit_splat (struct noce_if_info *if_info)
+ {
+   rtx cond = if_info->cond;
+   enum rtx_code code = GET_CODE (cond);
+ 
+   /* We're looking for sign bit tests, so only a few cases are
+      interesting.  LT/GE 0 LE/GT -1.  */
+   if (((code == LT || code == GE)
+        && XEXP (cond, 1) == CONST0_RTX (GET_MODE (cond)))
+       || ((code == LE || code == GT)
+ 	  && XEXP (cond, 1) == CONSTM1_RTX (GET_MODE (cond))))
+     ;
+   else
+     return false;
+ 
+   /* It would be good if this could be extended since constant synthesis
+      on some platforms will result in blocks which fail this test.  */
+   if (!noce_simple_bbs (if_info))
+     return false;
+ 
+   /* Only try this for constants in the true/false arms and a REG
+      destination.   We could select between 0 and a REG pretty
+      easily with a logical AND.  */
+   if (!CONST_INT_P (if_info->a)
+       || !CONST_INT_P (if_info->b)
+       || !REG_P (if_info->x))
+     return false;
+ 
+   machine_mode mode = GET_MODE (if_info->x);
+ 
+   /* If the mode of the destination does not match the mode of
+      the value we're testing, then this optimization is not valid.  */
+   if (mode != GET_MODE (XEXP (cond, 0)))
+     return false;
+ 
+   HOST_WIDE_INT val_a = INTVAL (if_info->a);
+   HOST_WIDE_INT val_b = INTVAL (if_info->b);
+ 
+   rtx_insn *seq;
+   start_sequence ();
+ 
+   /* We're testing the sign bit of this operand.  */
+   rtx condop = XEXP (cond, 0);
+ 
+   /* To splat the sign bit we arithmetically shift the
+      input value right by the size of the object - 1 bits. 
+ 
+      Note some targets do not have strong shifters, but do have
+      alternative ways to generate the sign bit splat.  The
+      profitability test when we end the sequence should reject
+      cases when the branchy sequence is better.  */
+   int splat_count = GET_MODE_BITSIZE (GET_MODE (condop)).to_constant () - 1;
+   rtx splat = GEN_INT (splat_count);
+ 
+   rtx temp;
+   temp = expand_simple_binop (GET_MODE (XEXP (cond, 0)), ASHIFTRT,
+ 			      XEXP (cond, 0), splat, NULL_RTX,
+ 			      false, OPTAB_WIDEN);
+   if (!temp)
+     goto fail;
+ 
+   /* IOR of anything with -1 still results in -1.  So we can
+      IOR the other operand to generate a select between -1 and
+      an arbitrary constant.  */
+   if (val_a == -1)
+     {
+       if (code == LT || code == LE)
+ 	{
+ 	  temp = expand_simple_unop (mode, NOT, temp, NULL_RTX, true);
+ 	  if (!temp)
+ 	    goto fail;
+ 	}
+ 
+       temp = expand_simple_binop (mode, IOR, temp, GEN_INT (val_b),
+ 				  if_info->x, false, OPTAB_WIDEN);
+     }
+   /* AND of anything with 0 is still zero.  So we can AND
+      with the -1 operand with the a constant to select
+      between the constant and zero.  */
+   else if (val_b == 0)
+     {
+       if (code == LT || code == LE)
+ 	{
+ 	  temp = expand_simple_unop (mode, NOT, temp, NULL_RTX, true);
+ 	  if (!temp)
+ 	    goto fail;
+ 	}
+ 
+       /* Since we know the value is currenly -1 or 0, some constants may
+ 	 be more easily handled by shifting the value again.  A right
+ 	 logical shift constructs 2^n-1 constants a left shift constructs
+ 	 ~(2^n-1) constants.  Given some targets don't have efficient
+ 	 shifts, generate the obvious RTL for both forms and select the
+ 	 one with smaller cost.  */
+       rtx and_form = gen_rtx_AND (mode, temp, GEN_INT (val_a));
+       rtx shift_left = gen_rtx_ASHIFT (mode, temp, GEN_INT (ctz_hwi (val_a)));
+       rtx shift_right = gen_rtx_LSHIFTRT (mode, temp, GEN_INT (ctz_hwi (~val_a)));
+       bool speed_p = optimize_insn_for_speed_p ();
+       if (exact_log2 (val_a + 1) >= 0
+ 	  && (rtx_cost (shift_right, mode, SET, 1, speed_p)
+ 	      <= rtx_cost (and_form, mode, SET, 1, speed_p)))
+ 	temp = expand_simple_binop (mode, LSHIFTRT, temp,
+ 				    GEN_INT (ctz_hwi (~val_a)),
+ 				    if_info->x, false, OPTAB_WIDEN);
+       else if (exact_log2 (~val_a + 1) >= 0
+ 	       && (rtx_cost (shift_left, mode, SET, 1, speed_p)
+ 		   <= rtx_cost (and_form, mode, SET, 1, speed_p)))
+ 	temp = expand_simple_binop (mode, ASHIFT, temp,
+ 				    GEN_INT (ctz_hwi (val_a)),
+ 				    if_info->x, false, OPTAB_WIDEN);
+       else
+ 	temp = expand_simple_binop (mode, AND, temp, GEN_INT (val_a),
+ 				    if_info->x, false, OPTAB_WIDEN);
+     }
+   /* Same cases, but with the test or arms swapped.  These
+      can be realized as well, though it typically costs
+      an extra instruction.  */
+   else if (val_b == -1)
+     {
+       if (code != LT && code != LE)
+ 	{
+ 	  temp = expand_simple_unop (mode, NOT, temp, NULL_RTX, true);
+ 	  if (!temp)
+ 	    goto fail;
+ 	}
+ 
+       temp = expand_simple_binop (mode, IOR, temp, GEN_INT (val_a),
+ 				  if_info->x, false, OPTAB_WIDEN);
+     }
+   else if (val_a == 0)
+     {
+       if (code != LT && code != LE)
+ 	{
+ 	  temp = expand_simple_unop (mode, NOT, temp, NULL_RTX, true);
+ 	  if (!temp)
+ 	    goto fail;
+ 	}
+ 
+       /* Since we know the value is currenly -1 or 0, some constants may
+ 	 be more easily handled by shifting the value again.  A right
+ 	 logical shift constructs 2^n-1 constants a left shift constructs
+ 	 ~(2^n-1) constants.  Given some targets don't have efficient
+ 	 shifts, generate the obvious RTL for both forms and select the
+ 	 one with smaller cost.  */
+       rtx and_form = gen_rtx_AND (mode, temp, GEN_INT (val_b));
+       rtx shift_left = gen_rtx_ASHIFT (mode, temp, GEN_INT (ctz_hwi (val_b)));
+       rtx shift_right = gen_rtx_LSHIFTRT (mode, temp, GEN_INT (ctz_hwi (~val_b)));
+       bool speed_p = optimize_insn_for_speed_p ();
+       if (exact_log2 (val_b + 1) >= 0
+ 	  && (rtx_cost (shift_right, mode, SET, 1, speed_p)
+ 	      <= rtx_cost (and_form, mode, SET, 1, speed_p)))
+ 	temp = expand_simple_binop (mode, LSHIFTRT, temp,
+ 				    GEN_INT (ctz_hwi (~val_b)),
+ 				    if_info->x, false, OPTAB_WIDEN);
+       else if (exact_log2 (~val_b + 1) >= 0
+ 	       && (rtx_cost (shift_left, mode, SET, 1, speed_p)
+ 		   <= rtx_cost (and_form, mode, SET, 1, speed_p)))
+ 	temp = expand_simple_binop (mode, ASHIFT, temp,
+ 				    GEN_INT (ctz_hwi (val_b)),
+ 				    if_info->x, false, OPTAB_WIDEN);
+       else
+         temp = expand_simple_binop (mode, AND, temp, GEN_INT (val_b),
+ 				    if_info->x, false, OPTAB_WIDEN);
+     }
+   /* Nothing worked.  */
+   else
+     temp = NULL_RTX;
+ 
+   if (!temp)
+     goto fail;
+ 
+   /* Move into the final destination if the value wasn't
+      constructed there.  */
+   if (if_info->x != temp)
+     emit_move_insn (if_info->x, temp);
+ 
+   /* This ends the sequence and tests the cost model.  */
+   seq = end_ifcvt_sequence (if_info);
+   if (!seq || !targetm.noce_conversion_profitable_p (seq, if_info))
+     return false;
+ 
+   /* Everything looks good.  Install the if-converted sequence.  */
+   emit_insn_before_setloc (seq, if_info->jump,
+ 			   INSN_LOCATION (if_info->insn_a));
+   if_info->transform_name = "splat_sign_bit_trivial";
+   return true;
+ 
+  fail:
+   end_ifcvt_sequence (if_info);
+   return false;
+ }
+ 
+ 
  /* Try forming an IF_THEN_ELSE (cond, b, a) and collapsing that
     through simplify_rtx.  Sometimes that can eliminate the IF_THEN_ELSE.
     If that is the case, emit the result into x.  */
*************** noce_process_if_block (struct noce_if_in
*** 4238,4243 ****
--- 4439,4446 ----
    if (!targetm.have_conditional_execution ()
        && noce_try_store_flag_constants (if_info))
      goto success;
+   if (noce_try_sign_bit_splat (if_info))
+     goto success;
    if (HAVE_conditional_move
        && noce_try_cmove (if_info))
      goto success;
diff -Nrcpad gcc-16-20250817/gcc/ipa-prop.h gcc-16-20250824/gcc/ipa-prop.h
*** gcc-16-20250817/gcc/ipa-prop.h	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/ipa-prop.h	Sun Aug 24 22:32:22 2025
*************** bool unadjusted_ptr_and_unit_offset (tre
*** 1276,1285 ****
  void ipa_get_range_from_ip_invariant (vrange &r, tree val, cgraph_node *node);
  void ipa_prop_cc_finalize (void);
  
- /* From tree-sra.cc:  */
- tree build_ref_for_offset (location_t, tree, poly_int64, bool, tree,
- 			   gimple_stmt_iterator *, bool);
- 
  /* In ipa-cp.cc  */
  void ipa_cp_cc_finalize (void);
  bool ipa_return_value_range (value_range &range, tree decl);
--- 1276,1281 ----
diff -Nrcpad gcc-16-20250817/gcc/late-combine.cc gcc-16-20250824/gcc/late-combine.cc
*** gcc-16-20250817/gcc/late-combine.cc	Sun Aug 17 22:32:09 2025
--- gcc-16-20250824/gcc/late-combine.cc	Sun Aug 24 22:32:22 2025
***************
*** 17,25 ****
  // along with GCC; see the file COPYING3.  If not see
  // <http://www.gnu.org/licenses/>.
  
! // The current purpose of this pass is to substitute definitions into
! // all uses, so that the definition can be removed.  However, it could
! // be extended to handle other combination-related optimizations in future.
  //
  // The pass can run before or after register allocation.  When running
  // before register allocation, it tries to avoid cases that are likely
--- 17,32 ----
  // along with GCC; see the file COPYING3.  If not see
  // <http://www.gnu.org/licenses/>.
  
! // This pass currently has two purposes:
! //
! // - to substitute definitions into all uses, so that the definition
! //   can be removed.
! //
! // - to try to parallelise sets of condition-code registers with a
! //   related instruction (see combine_cc_setter for details).
! //
! // However, it could be extended to handle other combination-related
! // optimizations in future.
  //
  // The pass can run before or after register allocation.  When running
  // before register allocation, it tries to avoid cases that are likely
*************** public:
*** 111,122 ****
    unsigned int execute (function *);
  
  private:
!   rtx optimizable_set (insn_info *);
    bool check_register_pressure (insn_info *, rtx);
    bool check_uses (set_info *, rtx);
!   bool combine_into_uses (insn_info *, insn_info *);
  
    auto_vec<insn_info *> m_worklist;
  };
  
  insn_combination::insn_combination (set_info *def, rtx dest, rtx src)
--- 118,135 ----
    unsigned int execute (function *);
  
  private:
!   rtx optimizable_set (set_info *);
    bool check_register_pressure (insn_info *, rtx);
    bool check_uses (set_info *, rtx);
!   bool combine_into_uses (set_info *, rtx, insn_info *);
!   bool parallelize_insns (set_info *, rtx, set_info *, rtx);
!   bool combine_cc_setter (set_info *, rtx);
!   bool combine_insn (insn_info *, insn_info *);
  
    auto_vec<insn_info *> m_worklist;
+ 
+   // A spare PARALLEL rtx, or null if none.
+   rtx m_parallel = NULL_RTX;
  };
  
  insn_combination::insn_combination (set_info *def, rtx dest, rtx src)
*************** insn_combination::run ()
*** 454,464 ****
    return true;
  }
  
! // See whether INSN is a single_set that we can optimize.  Return the
! // set if so, otherwise return null.
  rtx
! late_combine::optimizable_set (insn_info *insn)
  {
    if (!insn->can_be_optimized ()
        || insn->is_asm ()
        || insn->is_call ()
--- 467,492 ----
    return true;
  }
  
! // DEF is the result of calling single_set_info on its instruction.
! // See whether that instruction is a single_set that we can optimize.
! // Return the set if so, otherwise return null.
  rtx
! late_combine::optimizable_set (set_info *def)
  {
+   // For simplicity, don't try to handle sets of multiple hard registers.
+   // And for correctness, don't remove any assignments to the stack or
+   // frame pointers, since that would implicitly change the set of valid
+   // memory locations between this assignment and the next.
+   //
+   // Removing assignments to the hard frame pointer would invalidate
+   // backtraces.
+   if (!def->is_reg ()
+       || def->regno () == STACK_POINTER_REGNUM
+       || def->regno () == FRAME_POINTER_REGNUM
+       || def->regno () == HARD_FRAME_POINTER_REGNUM)
+     return NULL_RTX;
+ 
+   auto *insn = def->insn ();
    if (!insn->can_be_optimized ()
        || insn->is_asm ()
        || insn->is_call ()
*************** late_combine::optimizable_set (insn_info
*** 467,473 ****
        || !can_move_insn_p (insn))
      return NULL_RTX;
  
!   return single_set (insn->rtl ());
  }
  
  // Suppose that we can replace all uses of SET_DEST (SET) with SET_SRC (SET),
--- 495,510 ----
        || !can_move_insn_p (insn))
      return NULL_RTX;
  
!   rtx set = single_set (insn->rtl ());
!   if (!set)
!     return NULL_RTX;
! 
!   // For simplicity, don't try to handle subreg destinations.
!   rtx dest = SET_DEST (set);
!   if (!REG_P (dest) || REG_NREGS (dest) != 1 || def->regno () != REGNO (dest))
!     return NULL_RTX;
! 
!   return set;
  }
  
  // Suppose that we can replace all uses of SET_DEST (SET) with SET_SRC (SET),
*************** late_combine::check_uses (set_info *def,
*** 643,677 ****
    return true;
  }
  
! // Try to remove INSN by substituting a definition into all uses.
! // If the optimization moves any instructions before CURSOR, add those
! // instructions to the end of m_worklist.
  bool
! late_combine::combine_into_uses (insn_info *insn, insn_info *cursor)
  {
!   // For simplicity, don't try to handle sets of multiple hard registers.
!   // And for correctness, don't remove any assignments to the stack or
!   // frame pointers, since that would implicitly change the set of valid
!   // memory locations between this assignment and the next.
!   //
!   // Removing assignments to the hard frame pointer would invalidate
!   // backtraces.
!   set_info *def = single_set_info (insn);
!   if (!def
!       || !def->is_reg ()
!       || def->regno () == STACK_POINTER_REGNUM
!       || def->regno () == FRAME_POINTER_REGNUM
!       || def->regno () == HARD_FRAME_POINTER_REGNUM)
!     return false;
! 
!   rtx set = optimizable_set (insn);
!   if (!set)
!     return false;
! 
!   // For simplicity, don't try to handle subreg destinations.
!   rtx dest = SET_DEST (set);
!   if (!REG_P (dest) || def->regno () != REGNO (dest))
!     return false;
  
    // Don't prolong the live ranges of allocatable hard registers, or put
    // them into more complicated instructions.  Failing to prevent this
--- 680,692 ----
    return true;
  }
  
! // Try to remove DEF's instruction by substituting DEF into all uses.
! // SET is the rtx set associated with DEF.  If the optimization moves any
! // instructions before CURSOR, add those instructions to the end of m_worklist.
  bool
! late_combine::combine_into_uses (set_info *def, rtx set, insn_info *cursor)
  {
!   auto *insn = def->insn ();
  
    // Don't prolong the live ranges of allocatable hard registers, or put
    // them into more complicated instructions.  Failing to prevent this
*************** late_combine::combine_into_uses (insn_in
*** 698,703 ****
--- 713,870 ----
    return true;
  }
  
+ // CC_SET is a single_set that sets (only) CC_DEF; OTHER_SET is likewise
+ // a single_set that sets (only) OTHER_DEF.  CC_SET is known to set a
+ // condition-code register and the instruction that contains CC_SET is
+ // known to use OTHER_DEF.  Try to do CC_SET and OTHER_SET in parallel.
+ bool
+ late_combine::parallelize_insns (set_info *cc_def, rtx cc_set,
+ 				 set_info *other_def, rtx other_set)
+ {
+   auto attempt = crtl->ssa->new_change_attempt ();
+ 
+   insn_info *cc_insn = cc_def->insn ();
+   insn_info *other_insn = other_def->insn ();
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     fprintf (dump_file, "trying to parallelize insn %d and insn %d\n",
+ 	     other_insn->uid (), cc_insn->uid ());
+ 
+   // Try to substitute OTHER_SET into CC_INSN.
+   insn_change_watermark rtl_watermark;
+   rtx_insn *cc_rtl = cc_insn->rtl ();
+   insn_propagation prop (cc_rtl, SET_DEST (other_set), SET_SRC (other_set));
+   if (!prop.apply_to_pattern (&PATTERN (cc_rtl))
+       || prop.num_replacements == 0)
+     {
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	fprintf (dump_file, "-- failed to substitute all uses of r%d\n",
+ 		 other_def->regno ());
+       return false;
+     }
+ 
+   // Restrict the uses to those outside notes.
+   use_array cc_uses = remove_note_accesses (attempt, cc_insn->uses ());
+   use_array other_set_uses = remove_note_accesses (attempt,
+ 						   other_insn->uses ());
+ 
+   // Remove the use of the substituted value.
+   cc_uses = remove_uses_of_def (attempt, cc_uses, other_def);
+ 
+   // Get the list of uses for the new instruction.
+   insn_change cc_change (cc_insn);
+   cc_change.new_uses = merge_access_arrays (attempt, other_set_uses, cc_uses);
+   if (!cc_change.new_uses.is_valid ())
+     {
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	fprintf (dump_file, "-- cannot merge uses\n");
+       return false;
+     }
+ 
+   // The instruction initially defines just two registers.  recog can add
+   // extra clobbers if necessary.
+   auto_vec<access_info *, 2> new_defs;
+   new_defs.quick_push (cc_def);
+   new_defs.quick_push (other_def);
+   sort_accesses (new_defs);
+   cc_change.new_defs = def_array (access_array (new_defs));
+ 
+   // Make sure there is somewhere that the new instruction could live.
+   auto other_change = insn_change::delete_insn (other_insn);
+   insn_change *changes[] = { &other_change, &cc_change };
+   cc_change.move_range = cc_insn->ebb ()->insn_range ();
+   if (!restrict_movement (cc_change, ignore_changing_insns (changes)))
+     {
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	fprintf (dump_file, "-- cannot satisfy all definitions and uses\n");
+       return false;
+     }
+ 
+   // Tentatively install the new pattern.  By convention, the CC set
+   // must be first.
+   if (m_parallel)
+     {
+       XVECEXP (m_parallel, 0, 0) = cc_set;
+       XVECEXP (m_parallel, 0, 1) = other_set;
+     }
+   else
+     {
+       rtvec vec = gen_rtvec (2, cc_set, other_set);
+       m_parallel = gen_rtx_PARALLEL (VOIDmode, vec);
+     }
+   validate_change (cc_rtl, &PATTERN (cc_rtl), m_parallel, 1);
+ 
+   // These routines report failures themselves.
+   if (!recog (attempt, cc_change, ignore_changing_insns (changes))
+       || !changes_are_worthwhile (changes)
+       || !crtl->ssa->verify_insn_changes (changes))
+     return false;
+ 
+   remove_reg_equal_equiv_notes (cc_rtl);
+   confirm_change_group ();
+   crtl->ssa->change_insns (changes);
+   m_parallel = NULL_RTX;
+   return true;
+ }
+ 
+ // CC_SET is a single_set that sets (only) CC_DEF.  See whether CC_DEF
+ // is a definition of a condition-code register and try to optimize it
+ // with related instructions if so.  Return true if something changed.
+ //
+ // This function looks for sequences of the form:
+ //
+ //    A: (set (reg R1) X1)
+ //    B: ...instructions that might change the value of X1...
+ //    C: (set (reg CC) X2) // X2 uses R1
+ //
+ // and tries to change them to:
+ //
+ //    C': [(set (reg CC) X2')
+ //         (set (reg R1) X1)]
+ //    B: ...instructions that might change the value of X1...
+ //
+ // where X2' is the result of replacing R1 with X1 in X2.
+ //
+ // Combine can handle this optimization if B doesn't exist and if A and
+ // C are in the same BB.  This pass instead handles cases where B does
+ // exist and cases where A and C are in different BBs of the same EBB.
+ bool
+ late_combine::combine_cc_setter (set_info *cc_def, rtx cc_set)
+ {
+   // Check for a set of a CC register.  This isn't needed for correctness;
+   // it's just a way of narrowing the search space.  It could be relaxed if
+   // there are other situations that would benefit from the same optimization.
+   if (!HARD_REGISTER_NUM_P (cc_def->regno ())
+       || GET_MODE_CLASS (cc_def->mode()) != MODE_CC)
+     return false;
+ 
+   // Search the registers used by the CC setter for an easily-substitutable
+   // def-use chain.
+   for (use_info *other_use : cc_def->insn ()->uses ())
+     if (auto *other_def = other_use->def ())
+       if (other_use->regno () != cc_def->regno ()
+ 	  && other_def->ebb () == cc_def->ebb ()
+ 	  && other_def == single_set_info (other_def->insn ()))
+ 	if (rtx other_set = optimizable_set (other_def))
+ 	  if (parallelize_insns (cc_def, cc_set, other_def, other_set))
+ 	    return true;
+ 
+   return false;
+ }
+ 
+ // Try to optimize INSN in some way.  If the optimization moves any
+ // instructions before CURSOR, and if further optimizations might be
+ // possible on those instructions, add them to the end of m_worklist.
+ bool
+ late_combine::combine_insn (insn_info *insn, insn_info *cursor)
+ {
+   if (set_info *def = single_set_info (insn))
+     if (rtx set = optimizable_set (def))
+       return (combine_into_uses (def, set, cursor)
+ 	      || combine_cc_setter (def, set));
+ 
+   return false;
+ }
+ 
  // Run the pass on function FN.
  unsigned int
  late_combine::execute (function *fn)
*************** late_combine::execute (function *fn)
*** 715,721 ****
        if (!insn->is_artificial ())
  	{
  	  insn_info *prev = insn->prev_nondebug_insn ();
! 	  if (combine_into_uses (insn, prev))
  	    {
  	      // Any instructions that get added to the worklist were
  	      // previously after PREV.  Thus if we were able to move
--- 882,888 ----
        if (!insn->is_artificial ())
  	{
  	  insn_info *prev = insn->prev_nondebug_insn ();
! 	  if (combine_insn (insn, prev))
  	    {
  	      // Any instructions that get added to the worklist were
  	      // previously after PREV.  Thus if we were able to move
*************** late_combine::execute (function *fn)
*** 725,731 ****
  	      // the worklist should be free of backwards dependencies,
  	      // even if it isn't necessarily in RPO.
  	      for (unsigned int i = 0; i < m_worklist.length (); ++i)
! 		combine_into_uses (m_worklist[i], prev);
  	      m_worklist.truncate (0);
  	      insn = prev;
  	    }
--- 892,898 ----
  	      // the worklist should be free of backwards dependencies,
  	      // even if it isn't necessarily in RPO.
  	      for (unsigned int i = 0; i < m_worklist.length (); ++i)
! 		combine_insn (m_worklist[i], prev);
  	      m_worklist.truncate (0);
  	      insn = prev;
  	    }
diff -Nrcpad gcc-16-20250817/gcc/match.pd gcc-16-20250824/gcc/match.pd
*** gcc-16-20250817/gcc/match.pd	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/match.pd	Sun Aug 24 22:32:22 2025
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3629,3640 ****
  	if (__builtin_mul_overflow (X, Y, &result))
  	  return -1;
  	else
! 	  return -(T)overflow_p | 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))))
  )
  
  /* The boundary condition for case 10: IMM = 1:
--- 3629,3665 ----
  	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)))))
  )
  
  /* The boundary condition for case 10: IMM = 1:
diff -Nrcpad gcc-16-20250817/gcc/opts.cc gcc-16-20250824/gcc/opts.cc
*** gcc-16-20250817/gcc/opts.cc	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/opts.cc	Sun Aug 24 22:32:22 2025
*************** vec<const char *> help_option_arguments;
*** 993,999 ****
  /* Return the string name describing a sanitizer argument which has been
     provided on the command line and has set this particular flag.  */
  const char *
! find_sanitizer_argument (struct gcc_options *opts, unsigned int flags)
  {
    for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
      {
--- 993,1000 ----
  /* Return the string name describing a sanitizer argument which has been
     provided on the command line and has set this particular flag.  */
  const char *
! find_sanitizer_argument (struct gcc_options *opts,
! 			 sanitize_code_type flags)
  {
    for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
      {
*************** find_sanitizer_argument (struct gcc_opti
*** 1027,1036 ****
     set these flags.  */
  static void
  report_conflicting_sanitizer_options (struct gcc_options *opts, location_t loc,
! 				      unsigned int left, unsigned int right)
  {
!   unsigned int left_seen = (opts->x_flag_sanitize & left);
!   unsigned int right_seen = (opts->x_flag_sanitize & right);
    if (left_seen && right_seen)
      {
        const char* left_arg = find_sanitizer_argument (opts, left_seen);
--- 1028,1038 ----
     set these flags.  */
  static void
  report_conflicting_sanitizer_options (struct gcc_options *opts, location_t loc,
! 				      sanitize_code_type left,
! 				      sanitize_code_type right)
  {
!   sanitize_code_type left_seen = (opts->x_flag_sanitize & left);
!   sanitize_code_type right_seen = (opts->x_flag_sanitize & right);
    if (left_seen && right_seen)
      {
        const char* left_arg = find_sanitizer_argument (opts, left_seen);
*************** const struct sanitizer_opts_s sanitizer_
*** 2168,2176 ****
    SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true, true),
    SANITIZER_OPT (builtin, SANITIZE_BUILTIN, true, true),
    SANITIZER_OPT (shadow-call-stack, SANITIZE_SHADOW_CALL_STACK, false, false),
!   SANITIZER_OPT (all, ~0U, true, true),
  #undef SANITIZER_OPT
!   { NULL, 0U, 0UL, false, false }
  };
  
  /* -fzero-call-used-regs= suboptions.  */
--- 2170,2178 ----
    SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true, true),
    SANITIZER_OPT (builtin, SANITIZE_BUILTIN, true, true),
    SANITIZER_OPT (shadow-call-stack, SANITIZE_SHADOW_CALL_STACK, false, false),
!   SANITIZER_OPT (all, ~sanitize_code_type (0), true, true),
  #undef SANITIZER_OPT
!   { NULL, sanitize_code_type (0), 0UL, false, false }
  };
  
  /* -fzero-call-used-regs= suboptions.  */
*************** get_closest_sanitizer_option (const stri
*** 2241,2247 ****
      {
        /* -fsanitize=all is not valid, so don't offer it.  */
        if (code == OPT_fsanitize_
! 	  && opts[i].flag == ~0U
  	  && value)
  	continue;
  
--- 2243,2249 ----
      {
        /* -fsanitize=all is not valid, so don't offer it.  */
        if (code == OPT_fsanitize_
! 	  && opts[i].flag == ~sanitize_code_type (0)
  	  && value)
  	continue;
  
*************** get_closest_sanitizer_option (const stri
*** 2268,2276 ****
     adjust previous FLAGS and return new ones.  If COMPLAIN is false,
     don't issue diagnostics.  */
  
! unsigned int
  parse_sanitizer_options (const char *p, location_t loc, int scode,
! 			 unsigned int flags, int value, bool complain)
  {
    enum opt_code code = (enum opt_code) scode;
  
--- 2270,2278 ----
     adjust previous FLAGS and return new ones.  If COMPLAIN is false,
     don't issue diagnostics.  */
  
! sanitize_code_type
  parse_sanitizer_options (const char *p, location_t loc, int scode,
! 			 sanitize_code_type flags, int value, bool complain)
  {
    enum opt_code code = (enum opt_code) scode;
  
*************** parse_sanitizer_options (const char *p,
*** 2296,2302 ****
  	    && memcmp (p, sanitizer_opts[i].name, len) == 0)
  	  {
  	    /* Handle both -fsanitize and -fno-sanitize cases.  */
! 	    if (value && sanitizer_opts[i].flag == ~0U)
  	      {
  		if (code == OPT_fsanitize_)
  		  {
--- 2298,2304 ----
  	    && memcmp (p, sanitizer_opts[i].name, len) == 0)
  	  {
  	    /* Handle both -fsanitize and -fno-sanitize cases.  */
! 	    if (value && sanitizer_opts[i].flag == ~sanitize_code_type (0))
  	      {
  		if (code == OPT_fsanitize_)
  		  {
*************** parse_sanitizer_options (const char *p,
*** 2377,2386 ****
  /* Parse string values of no_sanitize attribute passed in VALUE.
     Values are separated with comma.  */
  
! unsigned int
  parse_no_sanitize_attribute (char *value)
  {
!   unsigned int flags = 0;
    unsigned int i;
    char *q = strtok (value, ",");
  
--- 2379,2388 ----
  /* Parse string values of no_sanitize attribute passed in VALUE.
     Values are separated with comma.  */
  
! sanitize_code_type
  parse_no_sanitize_attribute (char *value)
  {
!   sanitize_code_type flags = 0;
    unsigned int i;
    char *q = strtok (value, ",");
  
diff -Nrcpad gcc-16-20250817/gcc/opts.h gcc-16-20250824/gcc/opts.h
*** gcc-16-20250817/gcc/opts.h	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/opts.h	Sun Aug 24 22:32:22 2025
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,28 ----
  
  #include "rich-location.h"
  #include "obstack.h"
+ #include "flag-types.h"
  
  /* Specifies how a switch's VAR_VALUE relates to its FLAG_VAR.  */
  enum cl_var_type {
*************** extern char *write_langs (unsigned int m
*** 432,441 ****
  extern void print_ignored_options (void);
  extern void handle_common_deferred_options (void);
  extern void handle_deferred_dump_options (void);
! unsigned int parse_sanitizer_options (const char *, location_t, int,
! 				      unsigned int, int, bool);
  
! unsigned int parse_no_sanitize_attribute (char *value);
  extern bool common_handle_option (struct gcc_options *opts,
  				  struct gcc_options *opts_set,
  				  const struct cl_decoded_option *decoded,
--- 433,442 ----
  extern void print_ignored_options (void);
  extern void handle_common_deferred_options (void);
  extern void handle_deferred_dump_options (void);
! sanitize_code_type parse_sanitizer_options (const char *, location_t, int,
! 					    sanitize_code_type, int, bool);
  
! sanitize_code_type parse_no_sanitize_attribute (char *value);
  extern bool common_handle_option (struct gcc_options *opts,
  				  struct gcc_options *opts_set,
  				  const struct cl_decoded_option *decoded,
*************** extern bool opt_enum_arg_to_value (size_
*** 477,483 ****
  extern const struct sanitizer_opts_s
  {
    const char *const name;
!   unsigned int flag;
    size_t len;
    bool can_recover;
    bool can_trap;
--- 478,484 ----
  extern const struct sanitizer_opts_s
  {
    const char *const name;
!   sanitize_code_type flag;
    size_t len;
    bool can_recover;
    bool can_trap;
diff -Nrcpad gcc-16-20250817/gcc/po/de.po gcc-16-20250824/gcc/po/de.po
*** gcc-16-20250817/gcc/po/de.po	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/po/de.po	Sun Aug 24 22:32:22 2025
*************** msgstr ""
*** 11,17 ****
  "Project-Id-Version: gcc 15.2.0\n"
  "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
  "POT-Creation-Date: 2025-08-01 17:58+0000\n"
! "PO-Revision-Date: 2025-08-10 02:26+0200\n"
  "Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
  "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
  "Language: de\n"
--- 11,17 ----
  "Project-Id-Version: gcc 15.2.0\n"
  "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
  "POT-Creation-Date: 2025-08-01 17:58+0000\n"
! "PO-Revision-Date: 2025-08-23 14:50+0200\n"
  "Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
  "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
  "Language: de\n"
*************** msgstr ""
*** 20,26 ****
  "Content-Transfer-Encoding: 8bit\n"
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
  "X-Bugs: Report translation errors to the Language-Team address.\n"
! "X-Generator: Poedit 3.6\n"
  "X-Poedit-Bookmarks: -1,-1,-1,6017,-1,-1,-1,-1,-1,-1\n"
  
  #: cif-code.def:39
--- 20,26 ----
  "Content-Transfer-Encoding: 8bit\n"
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
  "X-Bugs: Report translation errors to the Language-Team address.\n"
! "X-Generator: Poedit 3.7\n"
  "X-Poedit-Bookmarks: -1,-1,-1,6017,-1,-1,-1,-1,-1,-1\n"
  
  #: cif-code.def:39
*************** msgstr "Funktion kann nicht »inline« s
*** 45,51 ****
  
  #: cif-code.def:60
  msgid "function body can be overwritten at link time"
! msgstr "Funktionskörper kann zum Link-Zeitpunkt überschrieben werden"
  
  #: cif-code.def:64
  msgid "function not inline candidate"
--- 45,51 ----
  
  #: cif-code.def:60
  msgid "function body can be overwritten at link time"
! msgstr "Funktionskörper kann zum Bindezeitpunkt überschrieben werden"
  
  #: cif-code.def:64
  msgid "function not inline candidate"
*************** msgstr "Funktion nicht »inline« deklar
*** 89,95 ****
  
  #: cif-code.def:96
  msgid "mismatched declarations during linktime optimization"
! msgstr "Unpassende Deklarationen während Linkzeit-Optimierung"
  
  #: cif-code.def:100
  msgid "variadic thunk call"
--- 89,95 ----
  
  #: cif-code.def:96
  msgid "mismatched declarations during linktime optimization"
! msgstr "Unpassende Deklarationen während Bindezeit-Optimierung"
  
  #: cif-code.def:100
  msgid "variadic thunk call"
*************** msgstr "-fuse-linker-plugin wird in dies
*** 258,264 ****
  
  #: gcc.cc:1115
  msgid "cannot specify -static with -fsanitize=address"
! msgstr "»-static« kann nicht mit »-fsanitize=Adresse« angegeben werden"
  
  #: gcc.cc:1117
  msgid "cannot specify -static with -fsanitize=hwaddress"
--- 258,264 ----
  
  #: gcc.cc:1115
  msgid "cannot specify -static with -fsanitize=address"
! msgstr "»-static« kann nicht mit »-fsanitize=address« angegeben werden"
  
  #: gcc.cc:1117
  msgid "cannot specify -static with -fsanitize=hwaddress"
*************** msgstr "rdynamic wird nicht unterstützt
*** 343,349 ****
  #: config/dragonfly.h:76 config/i386/freebsd.h:82 config/i386/freebsd64.h:35
  #: config/ia64/freebsd.h:26 config/rs6000/sysv4.h:750 config/sparc/freebsd.h:45
  msgid "consider using '-pg' instead of '-p' with gprof(1)"
! msgstr "evtl. »-pg« statt »-p« mit gprof(1) verwendet"
  
  #: config/lynx.h:69
  msgid "cannot use mthreads and mlegacy-threads together"
--- 343,349 ----
  #: config/dragonfly.h:76 config/i386/freebsd.h:82 config/i386/freebsd64.h:35
  #: config/ia64/freebsd.h:26 config/rs6000/sysv4.h:750 config/sparc/freebsd.h:45
  msgid "consider using '-pg' instead of '-p' with gprof(1)"
! msgstr "evtl. »-pg« statt »-p« mit gprof(1) verwenden"
  
  #: config/lynx.h:69
  msgid "cannot use mthreads and mlegacy-threads together"
*************** msgstr "Darwin unterstützt »-mfentry«
*** 401,407 ****
  
  #: config/i386/sol2.h:59
  msgid "-mx32 is not supported on Solaris"
! msgstr "%<-mx32%> wird unter Solaris nicht unterstützt"
  
  #: config/mcore/mcore.h:53
  msgid "the m210 does not have little endian support"
--- 401,407 ----
  
  #: config/i386/sol2.h:59
  msgid "-mx32 is not supported on Solaris"
! msgstr "»-mx32« wird unter Solaris nicht unterstützt"
  
  #: config/mcore/mcore.h:53
  msgid "the m210 does not have little endian support"
*************** msgstr "»-mdata-region« benötigt das
*** 430,436 ****
  #: config/pa/pa-hpux11.h:134 config/pa/pa-hpux11.h:137 config/pa/pa64-hpux.h:29
  #: config/pa/pa64-hpux.h:32 config/pa/pa64-hpux.h:41 config/pa/pa64-hpux.h:44
  msgid "warning: consider linking with '-static' as system libraries with"
! msgstr "Warnung: Evtl. mit »-static« linken, da Systembibliotheken mit"
  
  #: config/pa/pa-hpux11.h:135 config/pa/pa-hpux11.h:138 config/pa/pa64-hpux.h:30
  #: config/pa/pa64-hpux.h:33 config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
--- 430,436 ----
  #: config/pa/pa-hpux11.h:134 config/pa/pa-hpux11.h:137 config/pa/pa64-hpux.h:29
  #: config/pa/pa64-hpux.h:32 config/pa/pa64-hpux.h:41 config/pa/pa64-hpux.h:44
  msgid "warning: consider linking with '-static' as system libraries with"
! msgstr "Warnung: Evtl. mit »-static« binden, da Systembibliotheken mit"
  
  #: config/pa/pa-hpux11.h:135 config/pa/pa-hpux11.h:138 config/pa/pa64-hpux.h:30
  #: config/pa/pa64-hpux.h:33 config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
*************** msgstr "Für gnat2why wird »-c« benöt
*** 497,507 ****
  
  #: ada/gcc-interface/lang-specs.h:67
  msgid "-c required for gnat2scil"
! msgstr "Für gnat2scil wird -c benötigt"
  
  #: fortran/lang-specs.h:63 fortran/lang-specs.h:81
  msgid "gfortran does not support -E without -cpp"
! msgstr "gfortran unterstützt nicht -E ohne -cpp"
  
  #: objc/lang-specs.h:30 objc/lang-specs.h:41
  msgid "GNU Objective C no longer supports traditional compilation"
--- 497,507 ----
  
  #: ada/gcc-interface/lang-specs.h:67
  msgid "-c required for gnat2scil"
! msgstr "Für gnat2scil wird »-c« benötigt"
  
  #: fortran/lang-specs.h:63 fortran/lang-specs.h:81
  msgid "gfortran does not support -E without -cpp"
! msgstr "gfortran unterstützt »-E« nur zusammen mit »-cpp«"
  
  #: objc/lang-specs.h:30 objc/lang-specs.h:41
  msgid "GNU Objective C no longer supports traditional compilation"
*************** msgstr "Unpassende Argumente in Prozedur
*** 697,703 ****
  #: fortran/lang.opt:390
  #, no-c-format
  msgid "Eliminate multiple function invocations also for impure functions."
! msgstr "Mehrere Funktionsaufrufe auch für unreine Funktionen entfernen."
  
  #: fortran/lang.opt:394
  #, no-c-format
--- 697,703 ----
  #: fortran/lang.opt:390
  #, no-c-format
  msgid "Eliminate multiple function invocations also for impure functions."
! msgstr "Mehrfache Funktionsaufrufe auch für unreine Funktionen entfernen."
  
  #: fortran/lang.opt:394
  #, no-c-format
*************** msgstr "Eine literale BOZ-Konstante in e
*** 717,723 ****
  #: fortran/lang.opt:410
  #, no-c-format
  msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements."
! msgstr "Lokale Variablen und COMMON-Blöcke behandeln, als ob sie in SAVE-Anweisungen benannt worden wären."
  
  #: fortran/lang.opt:414
  #, no-c-format
--- 717,723 ----
  #: fortran/lang.opt:410
  #, no-c-format
  msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements."
! msgstr "Lokale Variablen und COMMON-Blöcke nicht so behandeln, als ob sie in SAVE-Anweisungen benannt worden wären."
  
  #: fortran/lang.opt:414
  #, no-c-format
*************** msgstr "Angeben, dass Backslashes in Zei
*** 727,733 ****
  #: fortran/lang.opt:418
  #, no-c-format
  msgid "Produce a backtrace when a runtime error is encountered."
! msgstr "Backtrace erzeugen, wenn Laufzeitfehler auftritt."
  
  #: fortran/lang.opt:422
  #, no-c-format
--- 727,733 ----
  #: fortran/lang.opt:418
  #, no-c-format
  msgid "Produce a backtrace when a runtime error is encountered."
! msgstr "Backtrace erzeugen, wenn ein Laufzeitfehler auftritt."
  
  #: fortran/lang.opt:422
  #, no-c-format
*************** msgstr "C-Prototypen aus BIND(C)-Deklara
*** 757,768 ****
  #: fortran/lang.opt:470
  #, no-c-format
  msgid "Generate C prototypes from non-BIND(C) external procedure definitions."
! msgstr "C-Prototypen aus Nicht-BIND(C)-Deklarationen für externe Prozeduren generieren."
  
  #: fortran/lang.opt:474
  #, no-c-format
  msgid "Ignore 'D' in column one in fixed form."
! msgstr "»D« in Spalte eins in statischer Form ignorieren."
  
  #: fortran/lang.opt:478
  #, no-c-format
--- 757,768 ----
  #: fortran/lang.opt:470
  #, no-c-format
  msgid "Generate C prototypes from non-BIND(C) external procedure definitions."
! msgstr "C-Prototypen aus Nicht-BIND(C)-Definitionen für externe Prozeduren generieren."
  
  #: fortran/lang.opt:474
  #, no-c-format
  msgid "Ignore 'D' in column one in fixed form."
! msgstr "»D« in Spalte eins in fester Form ignorieren."
  
  #: fortran/lang.opt:478
  #, no-c-format
*************** msgstr "Artspezifische Varianten der int
*** 807,813 ****
  #: fortran/lang.opt:511
  #, no-c-format
  msgid "Enable legacy math intrinsics for compatibility."
! msgstr "Intrinsische Altlasten-Mathematik-Funktionen für Kompatibilität einschaltet."
  
  #: fortran/lang.opt:515
  #, no-c-format
--- 807,813 ----
  #: fortran/lang.opt:511
  #, no-c-format
  msgid "Enable legacy math intrinsics for compatibility."
! msgstr "Intrinsische Altlasten-Mathematik-Funktionen für Kompatibilität einschalten."
  
  #: fortran/lang.opt:515
  #, no-c-format
*************** msgstr "Dollarzeichen in Entitätsnamen
*** 852,858 ****
  #: fortran/lang.opt:551
  #, no-c-format
  msgid "Display the code tree after parsing."
! msgstr "Codebaum nach Analyse anzeigen."
  
  #: fortran/lang.opt:555
  #, no-c-format
--- 852,858 ----
  #: fortran/lang.opt:551
  #, no-c-format
  msgid "Display the code tree after parsing."
! msgstr "Codebaum nach dem Parsen anzeigen."
  
  #: fortran/lang.opt:555
  #, no-c-format
*************** msgstr "Die globale Symboltabelle nach d
*** 867,873 ****
  #: fortran/lang.opt:563
  #, no-c-format
  msgid "Display the code tree after parsing; deprecated option."
! msgstr "Codebaum nach Analyse anzeigen; veraltete Option."
  
  #: fortran/lang.opt:567
  #, no-c-format
--- 867,873 ----
  #: fortran/lang.opt:563
  #, no-c-format
  msgid "Display the code tree after parsing; deprecated option."
! msgstr "Codebaum nach dem Parsen anzeigen; veraltete Option."
  
  #: fortran/lang.opt:567
  #, no-c-format
*************** msgstr "-ffixed-line-length-<n>\tIm fest
*** 912,918 ****
  #: fortran/lang.opt:603
  #, no-c-format
  msgid "Pad shorter fixed form lines to line width with spaces."
! msgstr "Kürzere feste Formularzeilen mit Leerzeichen auf Zeilenbreite auffüllen."
  
  #: fortran/lang.opt:607
  #, no-c-format
--- 912,918 ----
  #: fortran/lang.opt:603
  #, no-c-format
  msgid "Pad shorter fixed form lines to line width with spaces."
! msgstr "Kürzere Zeilen in fester Form mit Leerzeichen auf Zeilenbreite auffüllen."
  
  #: fortran/lang.opt:607
  #, no-c-format
*************** msgstr "-fmax-stack-var-size=<n>\tGröß
*** 1022,1028 ****
  #: fortran/lang.opt:732
  #, no-c-format
  msgid "Put all local arrays on stack."
! msgstr "Alle lokalen Felder über Stapel übergeben."
  
  #: fortran/lang.opt:736
  #, no-c-format
--- 1022,1028 ----
  #: fortran/lang.opt:732
  #, no-c-format
  msgid "Put all local arrays on stack."
! msgstr "Alle lokalen Felder auf dem Stapel anlegen."
  
  #: fortran/lang.opt:736
  #, no-c-format
*************** msgstr "Metadaten direkt in Objektdateie
*** 1289,1295 ****
  #: rust/lang.opt:152
  #, no-c-format
  msgid "-frust-metadata-output=<path.rox>  Path to output crate metadata"
! msgstr "-frust-metadata-output=<Pfad.rox>  Pfad, in den die Create-Metadaten geschrieben werden"
  
  #: rust/lang.opt:160
  #, no-c-format
--- 1289,1295 ----
  #: rust/lang.opt:152
  #, no-c-format
  msgid "-frust-metadata-output=<path.rox>  Path to output crate metadata"
! msgstr "-frust-metadata-output=<Pfad.rox>  Pfad, in den die Crate-Metadaten geschrieben werden"
  
  #: rust/lang.opt:160
  #, no-c-format
*************** msgstr "-D<Makro>[=<Wert>]\tEin <Makro>
*** 1344,1350 ****
  #: c-family/c.opt:211
  #, no-c-format
  msgid "-F <dir>\tAdd <dir> to the end of the main framework include path."
! msgstr "-F <Verz>\t<Verz> an das Ende des Haupt-Einfügepfades des Frameworks anfügen."
  
  #: c-family/c.opt:215
  #, no-c-format
--- 1344,1350 ----
  #: c-family/c.opt:211
  #, no-c-format
  msgid "-F <dir>\tAdd <dir> to the end of the main framework include path."
! msgstr "-F <Verz>\t<Verz> an das Ende des Haupt-Framework-Pfads für Includedateien anfügen."
  
  #: c-family/c.opt:215
  #, no-c-format
*************** msgstr "Namen der Header-Dateien ausgebe
*** 1359,1375 ****
  #: c-family/c.opt:223
  #, no-c-format
  msgid "-I <dir>\tAdd <dir> to the end of the main include path."
! msgstr "-I <Verz>\t<Verz> an das Ende des Haupteinfügepfades anfügen."
  
  #: c-family/c.opt:227
  #, no-c-format
  msgid "Generate make dependencies."
! msgstr "Make-Abhängigkeiten erzeugen."
  
  #: c-family/c.opt:231
  #, no-c-format
  msgid "Generate make dependencies and compile."
! msgstr "Make-Abhängigkeiten erzeugen und Code übersetzen."
  
  #: c-family/c.opt:235
  #, no-c-format
--- 1359,1375 ----
  #: c-family/c.opt:223
  #, no-c-format
  msgid "-I <dir>\tAdd <dir> to the end of the main include path."
! msgstr "-I <Verz>\t<Verz> an das Ende des Hauptpfades für Includedateien anfügen."
  
  #: c-family/c.opt:227
  #, no-c-format
  msgid "Generate make dependencies."
! msgstr "Abhängigkeiten für »make« erzeugen."
  
  #: c-family/c.opt:231
  #, no-c-format
  msgid "Generate make dependencies and compile."
! msgstr "Abhängigkeiten für »make« erzeugen und Code übersetzen."
  
  #: c-family/c.opt:235
  #, no-c-format
*************** msgstr "Fehlende Header-Dateien als gene
*** 1384,1395 ****
  #: c-family/c.opt:243
  #, no-c-format
  msgid "Like -M but ignore system header files."
! msgstr "Wie -M, aber System-Header-Dateien ignorieren."
  
  #: c-family/c.opt:247
  #, no-c-format
  msgid "Like -MD but ignore system header files."
! msgstr "Wie -MD, aber System-Header-Dateien ignorieren."
  
  #: c-family/c.opt:251
  #, no-c-format
--- 1384,1395 ----
  #: c-family/c.opt:243
  #, no-c-format
  msgid "Like -M but ignore system header files."
! msgstr "Wie »-M«, aber System-Header-Dateien ignorieren."
  
  #: c-family/c.opt:247
  #, no-c-format
  msgid "Like -MD but ignore system header files."
! msgstr "Wie »-MD«, aber System-Header-Dateien ignorieren."
  
  #: c-family/c.opt:251
  #, no-c-format
*************** msgstr "Die Warnung Walloca-larger-than=
*** 1529,1535 ****
  #: c-family/c.opt:378
  #, no-c-format
  msgid "Warn if conversion of the result of arithmetic might change the value even though converting the operands cannot."
! msgstr "Warnen, wenn das Ergebnis der arithmetischen Berechnungen einen falschen Wert ergeben könnte, selbst wenn die Operanden korrekt konvertiert werden."
  
  #: c-family/c.opt:386
  #, no-c-format
--- 1529,1535 ----
  #: c-family/c.opt:378
  #, no-c-format
  msgid "Warn if conversion of the result of arithmetic might change the value even though converting the operands cannot."
! msgstr "Warnen, wenn die Umwandlung eines Ergebnisses von arithmetischen Berechnungen einen falschen Wert ergeben könnte, selbst wenn die Operanden korrekt umgewandelt werden."
  
  #: c-family/c.opt:386
  #, no-c-format
*************** msgstr "Bei Merkmalen, die in ISO C23, a
*** 1584,1590 ****
  #: c-family/c.opt:453
  #, no-c-format
  msgid "Deprecated in favor of -Wc11-c23-compat."
! msgstr "Veraltet zugunsten von -Wc11-c23-compat."
  
  #: c-family/c.opt:457
  #, no-c-format
--- 1584,1590 ----
  #: c-family/c.opt:453
  #, no-c-format
  msgid "Deprecated in favor of -Wc11-c23-compat."
! msgstr "Veraltet zugunsten von »-Wc11-c23-compat«."
  
  #: c-family/c.opt:457
  #, no-c-format
*************** msgstr "Bei Variablen, die von »longjmp
*** 1721,1727 ****
  #: c-family/c.opt:570
  #, no-c-format
  msgid "Warn about uses of a comma operator within a subscripting expression."
! msgstr "Warnen, wenn innerhalb eines Arrayindex ein Komma-Operator verwendet wird."
  
  #: c-family/c.opt:574
  #, no-c-format
--- 1721,1727 ----
  #: c-family/c.opt:570
  #, no-c-format
  msgid "Warn about uses of a comma operator within a subscripting expression."
! msgstr "Warnen, wenn innerhalb eines Arrayindex-Ausdrucks ein Komma-Operator verwendet wird."
  
  #: c-family/c.opt:574
  #, no-c-format
*************** msgstr "Bei möglicherweise geschachtelt
*** 1731,1737 ****
  #: c-family/c.opt:578
  #, no-c-format
  msgid "Synonym for -Wcomment."
! msgstr "Synonym für -Wcomment."
  
  #: c-family/c.opt:582
  #, no-c-format
--- 1731,1737 ----
  #: c-family/c.opt:578
  #, no-c-format
  msgid "Synonym for -Wcomment."
! msgstr "Synonym für »-Wcomment«."
  
  #: c-family/c.opt:582
  #, no-c-format
*************** msgstr "Warnen, wenn eine explizit vorge
*** 1796,1802 ****
  #: c-family/c.opt:639
  #, no-c-format
  msgid "Warn when deleting a pointer to incomplete type."
! msgstr "Warnen, wenn ein Zeiger auf unvollständigen Typen gelöscht wird."
  
  #: c-family/c.opt:643
  #, no-c-format
--- 1796,1802 ----
  #: c-family/c.opt:639
  #, no-c-format
  msgid "Warn when deleting a pointer to incomplete type."
! msgstr "Warnen, wenn »delete« mit einem Zeiger auf einen unvollständigen Typen aufgerufen wird."
  
  #: c-family/c.opt:643
  #, no-c-format
*************** msgstr "Bei Vermischung von enum/integer
*** 1916,1922 ****
  #: c-family/c.opt:746
  #, no-c-format
  msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen -Werror=implicit-function-declaration verwenden."
  
  #: c-family/c.opt:750
  #, no-c-format
--- 1916,1922 ----
  #: c-family/c.opt:746
  #, no-c-format
  msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen »-Werror=implicit-function-declaration« verwenden."
  
  #: c-family/c.opt:750
  #, no-c-format
*************** msgstr "Bei impliziten Typumwandlungen w
*** 1946,1952 ****
  #: c-family/c.opt:775
  #, no-c-format
  msgid "Warn if testing floating point numbers for equality."
! msgstr "Bei Test von Gleitkommawerten auf Gleichheit warnen."
  
  #: c-family/c.opt:779 c-family/c.opt:834
  #, no-c-format
--- 1946,1952 ----
  #: c-family/c.opt:775
  #, no-c-format
  msgid "Warn if testing floating point numbers for equality."
! msgstr "Bei Tests von Gleitkommawerten auf Gleichheit warnen."
  
  #: c-family/c.opt:779 c-family/c.opt:834
  #, no-c-format
*************** msgstr "Bei Formatstrings, die keine Lit
*** 1976,1982 ****
  #: c-family/c.opt:799
  #, no-c-format
  msgid "Warn about function calls with format strings that write past the end of the destination region.  Same as -Wformat-overflow=1."
! msgstr "Bei Funktionsaufrufen mit Formatzeichenketten warnen, die hinter das Ende der Zielregion schreiben. Entspricht -Wformat-overflow=1."
  
  #: c-family/c.opt:804
  #, no-c-format
--- 1976,1982 ----
  #: c-family/c.opt:799
  #, no-c-format
  msgid "Warn about function calls with format strings that write past the end of the destination region.  Same as -Wformat-overflow=1."
! msgstr "Bei Funktionsaufrufen mit Formatzeichenketten warnen, die hinter das Ende der Zielregion schreiben. Entspricht »-Wformat-overflow=1«."
  
  #: c-family/c.opt:804
  #, no-c-format
*************** msgstr "Vor Vorzeichenunterschieden mit
*** 1996,2002 ****
  #: c-family/c.opt:817
  #, no-c-format
  msgid "Warn about calls to snprintf and similar functions that truncate output. Same as -Wformat-truncation=1."
! msgstr "Bei Aufrufen von snprintf und ähnlichen Funktionen warnen, wenn sie die Ausgabe abschneiden. Entspricht -Wformat-truncation=1."
  
  #: c-family/c.opt:822
  #, no-c-format
--- 1996,2002 ----
  #: c-family/c.opt:817
  #, no-c-format
  msgid "Warn about calls to snprintf and similar functions that truncate output. Same as -Wformat-truncation=1."
! msgstr "Bei Aufrufen von snprintf und ähnlichen Funktionen warnen, wenn sie die Ausgabe abschneiden. Entspricht »-Wformat-truncation=1«."
  
  #: c-family/c.opt:822
  #, no-c-format
*************** msgstr "Bei Verwendung von std::initiali
*** 2086,2092 ****
  #: c-family/c.opt:905
  #, no-c-format
  msgid "Warn about nonsensical values of --param destructive-interference-size or constructive-interference-size."
! msgstr "Warnung vor unsinnigen Werten von --param destructive-interference-size oder constructive-interference-size."
  
  #: c-family/c.opt:910
  #, no-c-format
--- 2086,2092 ----
  #: c-family/c.opt:905
  #, no-c-format
  msgid "Warn about nonsensical values of --param destructive-interference-size or constructive-interference-size."
! msgstr "Warnung vor unsinnigen Werten von »--param destructive-interference-size« oder »--param constructive-interference-size«."
  
  #: c-family/c.opt:910
  #, no-c-format
*************** msgstr "Warnen, wenn der Leerraum am Zei
*** 2141,2147 ****
  #: c-family/c.opt:965
  #, no-c-format
  msgid "Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore."
! msgstr "Warnen, wenn Zeichenkette oder Zeichenliteral gefolgt von UD-Suffix auftritt, der nicht mit Unterstrich anfängt."
  
  #: c-family/c.opt:969
  #, no-c-format
--- 2141,2147 ----
  #: c-family/c.opt:965
  #, no-c-format
  msgid "Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore."
! msgstr "Warnen, wenn Zeichenkette oder Zeichenliteral gefolgt von einem benutzerdefinierten Suffix auftritt, der nicht mit Unterstrich anfängt."
  
  #: c-family/c.opt:969
  #, no-c-format
*************** msgstr "Warnen, wenn ein logisches Nicht
*** 2151,2162 ****
  #: c-family/c.opt:973
  #, no-c-format
  msgid "Warn when a logical operator is suspiciously always evaluating to true or false."
! msgstr "Warnen, wenn ein logischer Operator verdächtigerweise immer zu »wahr« oder »falsch« auswertet."
  
  #: c-family/c.opt:977
  #, no-c-format
  msgid "Do not warn about using \"long long\" when -pedantic."
! msgstr "Nicht bei Verwendung von »long long« mit -pedantic warnen."
  
  #: c-family/c.opt:981
  #, no-c-format
--- 2151,2162 ----
  #: c-family/c.opt:973
  #, no-c-format
  msgid "Warn when a logical operator is suspiciously always evaluating to true or false."
! msgstr "Warnen, wenn ein logischer Operator verdächtigerweise immer zu »true« oder »false« auswertet."
  
  #: c-family/c.opt:977
  #, no-c-format
  msgid "Do not warn about using \"long long\" when -pedantic."
! msgstr "Nicht bei Verwendung von »long long« mit »-pedantic« warnen."
  
  #: c-family/c.opt:981
  #, no-c-format
*************** msgstr "Warnen, wenn eine Klasse neudekl
*** 2196,2202 ****
  #: c-family/c.opt:1019
  #, no-c-format
  msgid "Warn about declarations of entities that may be missing attributes that related entities have been declared with."
! msgstr "Bei Deklarationen von Entitys warnen, in denen Attribute fehlen, die bei verwandten Entitys jedoch angegeben wurden."
  
  #: c-family/c.opt:1024
  #, no-c-format
--- 2196,2202 ----
  #: c-family/c.opt:1019
  #, no-c-format
  msgid "Warn about declarations of entities that may be missing attributes that related entities have been declared with."
! msgstr "Bei Deklarationen von Entitäten warnen, in denen Attribute fehlen, die bei verwandten Entitäten jedoch angegeben wurden."
  
  #: c-family/c.opt:1024
  #, no-c-format
*************** msgstr "Bei direkter Mehrfachvererbung w
*** 2261,2267 ****
  #: c-family/c.opt:1079
  #, no-c-format
  msgid "Warn about unsafe macros expanding to multiple statements used as a body of a clause such as if, else, while, switch, or for."
! msgstr "Warnen bei unsicheren Makros, die zu mehreren Anweisungen expandiert werden und innerhalb eines if, else, while, switch oder for verwendet werden."
  
  #: c-family/c.opt:1083
  #, no-c-format
--- 2261,2267 ----
  #: c-family/c.opt:1079
  #, no-c-format
  msgid "Warn about unsafe macros expanding to multiple statements used as a body of a clause such as if, else, while, switch, or for."
! msgstr "Warnen bei unsicheren Makros, die zu mehreren Anweisungen expandieren und als Körper bei if, else, while, switch oder for verwendet werden."
  
  #: c-family/c.opt:1083
  #, no-c-format
*************** msgstr "Bei »extern«-Deklarationen au�
*** 2281,2287 ****
  #: c-family/c.opt:1095
  #, no-c-format
  msgid "Warn when a noexcept expression evaluates to false even though the expression can't actually throw."
! msgstr "Warnen, wenn ein »noexcept«-Ausdruck zu »falsch« auswertet, obwohl der Ausdruck nicht werfen kann."
  
  #: c-family/c.opt:1099
  #, no-c-format
--- 2281,2287 ----
  #: c-family/c.opt:1095
  #, no-c-format
  msgid "Warn when a noexcept expression evaluates to false even though the expression can't actually throw."
! msgstr "Warnen, wenn ein »noexcept«-Ausdruck zu »false« auswertet, obwohl der Ausdruck nicht werfen kann."
  
  #: c-family/c.opt:1099
  #, no-c-format
*************** msgstr "Bei nicht-virtuellen Destruktore
*** 2301,2307 ****
  #: c-family/c.opt:1111
  #, no-c-format
  msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL."
! msgstr "Warnen, wenn NULL an Argumentstellen, die als nicht-NULL erfordernd markiert sind, übergeben wird."
  
  #: c-family/c.opt:1127
  #, no-c-format
--- 2301,2307 ----
  #: c-family/c.opt:1111
  #, no-c-format
  msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL."
! msgstr "Warnen, wenn NULL an Parameter, die nicht-NULL erfordern, übergeben wird."
  
  #: c-family/c.opt:1127
  #, no-c-format
*************** msgstr "Bei Arithmetik mit Funktionszeig
*** 2406,2412 ****
  #: c-family/c.opt:1239
  #, no-c-format
  msgid "Warn when a pointer differs in signedness in an assignment."
! msgstr "Warnen, wenn sich ein Zeiger im Vorzeichenbesitz in einer Zuweisung unterscheidet."
  
  #: c-family/c.opt:1243
  #, no-c-format
--- 2406,2412 ----
  #: c-family/c.opt:1239
  #, no-c-format
  msgid "Warn when a pointer differs in signedness in an assignment."
! msgstr "Warnen, wenn Zeiger zugewiesen werden, die auf Typen mit unterschiedlichem Vorzeichenbesitz zeigen."
  
  #: c-family/c.opt:1243
  #, no-c-format
*************** msgstr "Warnen, wenn der Compiler Code u
*** 2476,2487 ****
  #: c-family/c.opt:1295
  #, no-c-format
  msgid "Warn when an argument passed to a restrict-qualified parameter aliases with another argument."
! msgstr "Warnen, wenn ein Argument für einen »restrict«-Parameter auch in einem anderen Argument vorkommt."
  
  #: c-family/c.opt:1300
  #, no-c-format
  msgid "Warn whenever void-returning functions return a non-void expressions, or a return expression is missing in a function not returning void."
! msgstr "Warnen, wenn Funktionen, die void zurückgeben, einen nicht-void-Ausdruck zurückgeben, oder ein Rückgabeausdruck in einer Funktion fehlt, die nicht void zurückgibt."
  
  #: c-family/c.opt:1304
  #, no-c-format
--- 2476,2487 ----
  #: c-family/c.opt:1295
  #, no-c-format
  msgid "Warn when an argument passed to a restrict-qualified parameter aliases with another argument."
! msgstr "Warnen, wenn ein Argument für einen »restrict«-Parameter ein anderes Argument überlagert."
  
  #: c-family/c.opt:1300
  #, no-c-format
  msgid "Warn whenever void-returning functions return a non-void expressions, or a return expression is missing in a function not returning void."
! msgstr "Warnen, wenn eine Funktion mit Rückgabetyp »void« einen nicht-void-Ausdruck zurückgibt, oder wenn eine Funktion mit Rückgabetyp ungleich »void« keinen Wert zurückgibt."
  
  #: c-family/c.opt:1304
  #, no-c-format
*************** msgstr "Bei Standardrückgabetyp »int«
*** 2491,2497 ****
  #: c-family/c.opt:1308
  #, no-c-format
  msgid "Warn on suspicious constructs involving reverse scalar storage order."
! msgstr "Bei verdächtigen Konstrukten waren, an denen die umgekehrte skalare Speicherreihenfolge beteiligt ist."
  
  #: c-family/c.opt:1312
  #, no-c-format
--- 2491,2497 ----
  #: c-family/c.opt:1308
  #, no-c-format
  msgid "Warn on suspicious constructs involving reverse scalar storage order."
! msgstr "Bei verdächtigen Konstrukten warnen, an denen die umgekehrte skalare Speicherreihenfolge beteiligt ist."
  
  #: c-family/c.opt:1312
  #, no-c-format
*************** msgstr "Warnen, wenn Schiebe-Anzahl nega
*** 2526,2532 ****
  #: c-family/c.opt:1340
  #, no-c-format
  msgid "Warn if shift count >= width of type."
! msgstr "Warnen, wenn Rechts-Schiebe-Anzahl >= Breite des Typs ist."
  
  #: c-family/c.opt:1344
  #, no-c-format
--- 2526,2532 ----
  #: c-family/c.opt:1340
  #, no-c-format
  msgid "Warn if shift count >= width of type."
! msgstr "Warnen, wenn Schiebe-Anzahl >= Breite des Typs ist."
  
  #: c-family/c.opt:1344
  #, no-c-format
*************** msgstr "Bei impliziten Typumwandlungen z
*** 2546,2552 ****
  #: c-family/c.opt:1360
  #, no-c-format
  msgid "Warn when overload promotes from unsigned to signed."
! msgstr "Warnen, wenn Überladung zur Umwandlung von vorzeichenbehaftet zu vorzeichenlos führt."
  
  #: c-family/c.opt:1364
  #, no-c-format
--- 2546,2552 ----
  #: c-family/c.opt:1360
  #, no-c-format
  msgid "Warn when overload promotes from unsigned to signed."
! msgstr "Warnen, wenn Überladung zur Umwandlung von vorzeichenlos zu vorzeichenbehaftet führt."
  
  #: c-family/c.opt:1364
  #, no-c-format
*************** msgstr "Warnen, wenn Deallokationsfunkti
*** 2556,2562 ****
  #: c-family/c.opt:1368
  #, no-c-format
  msgid "Warn about divisions of two sizeof operators when the first one is applied to an array and the divisor does not equal the size of the array element."
! msgstr "Bei Divisionen von zwei %<sizeof%>-Operatoren warnen, wenn der erste auf ein Array angewendet wird und der Divisor nicht die Größe des Arrayelements ist."
  
  #: c-family/c.opt:1373
  #, no-c-format
--- 2556,2562 ----
  #: c-family/c.opt:1368
  #, no-c-format
  msgid "Warn about divisions of two sizeof operators when the first one is applied to an array and the divisor does not equal the size of the array element."
! msgstr "Bei Divisionen von zwei »sizeof«-Operatoren warnen, wenn der erste auf ein Array angewendet wird und der zweite nicht die Größe des Arrayelements ist."
  
  #: c-family/c.opt:1373
  #, no-c-format
*************** msgstr "Unter der Kontrolle des Object-S
*** 2612,2618 ****
  #: c-family/c.opt:1426
  #, no-c-format
  msgid "Warn about reading past the end of a source array in string manipulation functions like memchr and memcpy."
! msgstr "Warnen, wenn das Quellarray über das Ende hinaus gelesen wird, in Speicherfunktionen wie %<memchr%> und %<memcpy%>."
  
  #: c-family/c.opt:1430
  #, no-c-format
--- 2612,2618 ----
  #: c-family/c.opt:1426
  #, no-c-format
  msgid "Warn about reading past the end of a source array in string manipulation functions like memchr and memcpy."
! msgstr "Warnen, wenn das Quellarray über das Ende hinaus gelesen wird, in Speicherfunktionen wie »memchr« und »memcpy«."
  
  #: c-family/c.opt:1430
  #, no-c-format
*************** msgstr "Bei simple-template-id in einem
*** 2687,2693 ****
  #: c-family/c.opt:1491
  #, no-c-format
  msgid "Warn about templates naming TU-local entities in a module."
! msgstr "Warnen, wenn Templates TU-lokale Entitys innerhalb eines Moduls benennen."
  
  #: c-family/c.opt:1495
  #, no-c-format
--- 2687,2693 ----
  #: c-family/c.opt:1491
  #, no-c-format
  msgid "Warn about templates naming TU-local entities in a module."
! msgstr "Warnen, wenn Templates TU-lokale Entitäten innerhalb eines Moduls benennen."
  
  #: c-family/c.opt:1495
  #, no-c-format
*************** msgstr "Bei Zugriffen auf ein innenliege
*** 2842,2848 ****
  #: c-family/c.opt:1661
  #, no-c-format
  msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)."
! msgstr "Ein Synonym für -std=c89 (für C) oder -std=c++98 (für C++)."
  
  #: c-family/c.opt:1669
  #, no-c-format
--- 2842,2848 ----
  #: c-family/c.opt:1661
  #, no-c-format
  msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)."
! msgstr "Ein Synonym für »-std=c89« (für C) oder »-std=c++98« (für C++)."
  
  #: c-family/c.opt:1669
  #, no-c-format
*************** msgstr "In GCC 15 entfernt. Dieser Schal
*** 2918,2924 ****
  #: c-family/c.opt:1823
  #, no-c-format
  msgid "Specify maximum error replay depth during recursive diagnosis of a constraint satisfaction failure."
! msgstr "Maximale Fehlerwiedergabetiefe während der rekursiven Diagnose eines Fehlschlags der Constraint-Erfüllung an."
  
  #: c-family/c.opt:1827
  #, no-c-format
--- 2918,2924 ----
  #: c-family/c.opt:1823
  #, no-c-format
  msgid "Specify maximum error replay depth during recursive diagnosis of a constraint satisfaction failure."
! msgstr "Maximale Fehlerwiedergabetiefe während der rekursiven Diagnose eines Fehlschlags der Constraint-Erfüllung angeben."
  
  #: c-family/c.opt:1827
  #, no-c-format
*************** msgstr "-fconstexpr-loop-limit=<Anzahl>\
*** 2953,2959 ****
  #: c-family/c.opt:1855
  #, no-c-format
  msgid "-fconstexpr-ops-limit=<number>\tSpecify maximum number of constexpr operations during a single constexpr evaluation."
! msgstr "-fconstexpr-ops-limit=<Anzahl>\tHöchstzahl der constexpr-Operationen pro einzelner »constexpr« angeben."
  
  #: c-family/c.opt:1859
  #, no-c-format
--- 2953,2959 ----
  #: c-family/c.opt:1855
  #, no-c-format
  msgid "-fconstexpr-ops-limit=<number>\tSpecify maximum number of constexpr operations during a single constexpr evaluation."
! msgstr "-fconstexpr-ops-limit=<Anzahl>\tHöchstzahl der constexpr-Operationen pro einzelner »constexpr«-Auswertung angeben."
  
  #: c-family/c.opt:1859
  #, no-c-format
*************** msgstr "Hierarchische Vergleiche ausgebe
*** 3018,3024 ****
  #: c-family/c.opt:1924
  #, no-c-format
  msgid "Note all candidates during overload resolution failure."
! msgstr "Wenn das Auflösen von Überladungen nicht eindeutig ist, alle Kandidaten auflisten."
  
  #: c-family/c.opt:1928
  #, no-c-format
--- 3018,3024 ----
  #: c-family/c.opt:1924
  #, no-c-format
  msgid "Note all candidates during overload resolution failure."
! msgstr "Wenn das Auflösen von Überladungen scheitert, alle Kandidaten auflisten."
  
  #: c-family/c.opt:1928
  #, no-c-format
*************** msgstr "-iwithprefixbefore <Verz>\t<Verz
*** 3568,3574 ****
  #: c-family/c.opt:2525
  #, no-c-format
  msgid "Do not search standard system include directories (those specified with -isystem will still be used)."
! msgstr "Standard-System-Einfügepfade nicht durchsuchen (die mit -isystem angegebenen werden trotzdem noch verwendet)."
  
  #: c-family/c.opt:2529
  #, no-c-format
--- 3568,3574 ----
  #: c-family/c.opt:2525
  #, no-c-format
  msgid "Do not search standard system include directories (those specified with -isystem will still be used)."
! msgstr "Standard-System-Einfügepfade nicht durchsuchen (die mit »-isystem« angegebenen werden trotzdem noch verwendet)."
  
  #: c-family/c.opt:2529
  #, no-c-format
*************** msgstr "Mit dem ISO-C++-Standard von 201
*** 3598,3609 ****
  #: c-family/c.opt:2561
  #, no-c-format
  msgid "Deprecated in favor of -std=c++11."
! msgstr "Veraltet zugunsten von -std=c++11."
  
  #: c-family/c.opt:2565
  #, no-c-format
  msgid "Deprecated in favor of -std=c++14."
! msgstr "Veraltet zugunsten von -std=c++14."
  
  #: c-family/c.opt:2569
  #, no-c-format
--- 3598,3609 ----
  #: c-family/c.opt:2561
  #, no-c-format
  msgid "Deprecated in favor of -std=c++11."
! msgstr "Veraltet zugunsten von »-std=c++11«."
  
  #: c-family/c.opt:2565
  #, no-c-format
  msgid "Deprecated in favor of -std=c++14."
! msgstr "Veraltet zugunsten von »-std=c++14«."
  
  #: c-family/c.opt:2569
  #, no-c-format
*************** msgstr "Mit dem ISO-C++-Standard von 201
*** 3613,3619 ****
  #: c-family/c.opt:2573
  #, no-c-format
  msgid "Deprecated in favor of -std=c++17."
! msgstr "Veraltet zugunsten von -std=c++17."
  
  #: c-family/c.opt:2577
  #, no-c-format
--- 3613,3619 ----
  #: c-family/c.opt:2573
  #, no-c-format
  msgid "Deprecated in favor of -std=c++17."
! msgstr "Veraltet zugunsten von »-std=c++17«."
  
  #: c-family/c.opt:2577
  #, no-c-format
*************** msgstr "Mit dem ISO-C-Standard von 2011
*** 3643,3649 ****
  #: c-family/c.opt:2609
  #, no-c-format
  msgid "Deprecated in favor of -std=c11."
! msgstr "Veraltet zugunsten von -std=c11."
  
  #: c-family/c.opt:2613 c-family/c.opt:2617 c-family/c.opt:2771
  #: c-family/c.opt:2775
--- 3643,3649 ----
  #: c-family/c.opt:2609
  #, no-c-format
  msgid "Deprecated in favor of -std=c11."
! msgstr "Veraltet zugunsten von »-std=c11«."
  
  #: c-family/c.opt:2613 c-family/c.opt:2617 c-family/c.opt:2771
  #: c-family/c.opt:2775
*************** msgstr "Mit dem ISO-C-Standard von 2023
*** 3659,3665 ****
  #: c-family/c.opt:2625
  #, no-c-format
  msgid "Deprecated in favor of -std=c23."
! msgstr "Veraltet zugunsten von -std=c23."
  
  #: c-family/c.opt:2629
  #, no-c-format
--- 3659,3665 ----
  #: c-family/c.opt:2625
  #, no-c-format
  msgid "Deprecated in favor of -std=c23."
! msgstr "Veraltet zugunsten von »-std=c23«."
  
  #: c-family/c.opt:2629
  #, no-c-format
*************** msgstr "Mit dem ISO-C-Standard von 1999
*** 3679,3685 ****
  #: c-family/c.opt:2645
  #, no-c-format
  msgid "Deprecated in favor of -std=c99."
! msgstr "Veraltet zugunsten von -std=c99."
  
  #: c-family/c.opt:2649 c-family/c.opt:2654
  #, no-c-format
--- 3679,3685 ----
  #: c-family/c.opt:2645
  #, no-c-format
  msgid "Deprecated in favor of -std=c99."
! msgstr "Veraltet zugunsten von »-std=c99«."
  
  #: c-family/c.opt:2649 c-family/c.opt:2654
  #, no-c-format
*************** msgstr "Mit dem ISO-C++-Standard von 201
*** 3694,3705 ****
  #: c-family/c.opt:2663
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu++11."
! msgstr "Veraltet zugunsten von -std=gnu++11."
  
  #: c-family/c.opt:2667
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu++14."
! msgstr "Veraltet zugunsten von -std=gnu++14."
  
  #: c-family/c.opt:2671
  #, no-c-format
--- 3694,3705 ----
  #: c-family/c.opt:2663
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu++11."
! msgstr "Veraltet zugunsten von »-std=gnu++11«."
  
  #: c-family/c.opt:2667
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu++14."
! msgstr "Veraltet zugunsten von »-std=gnu++14«."
  
  #: c-family/c.opt:2671
  #, no-c-format
*************** msgstr "Mit dem ISO-C++-Standard von 201
*** 3709,3715 ****
  #: c-family/c.opt:2675
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu++17."
! msgstr "Veraltet zugunsten von -std=gnu++17."
  
  #: c-family/c.opt:2679
  #, no-c-format
--- 3709,3715 ----
  #: c-family/c.opt:2675
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu++17."
! msgstr "Veraltet zugunsten von »-std=gnu++17«."
  
  #: c-family/c.opt:2679
  #, no-c-format
*************** msgstr "Mit dem ISO-C-Standard von von 2
*** 3739,3745 ****
  #: c-family/c.opt:2711
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu11."
! msgstr "Veraltet zugunsten von -std=gnu11."
  
  #: c-family/c.opt:2715 c-family/c.opt:2719
  #, no-c-format
--- 3739,3745 ----
  #: c-family/c.opt:2711
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu11."
! msgstr "Veraltet zugunsten von »-std=gnu11«."
  
  #: c-family/c.opt:2715 c-family/c.opt:2719
  #, no-c-format
*************** msgstr "Mit dem ISO-C-Standard von 2023
*** 3754,3760 ****
  #: c-family/c.opt:2727
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu23."
! msgstr "Veraltet zugunsten von -std=gnu23."
  
  #: c-family/c.opt:2731
  #, no-c-format
--- 3754,3760 ----
  #: c-family/c.opt:2727
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu23."
! msgstr "Veraltet zugunsten von »-std=gnu23«."
  
  #: c-family/c.opt:2731
  #, no-c-format
*************** msgstr "Mit dem ISO-C-Standard von von 1
*** 3774,3780 ****
  #: c-family/c.opt:2747
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu99."
! msgstr "Veraltet zugunsten von -std=gnu99."
  
  #: c-family/c.opt:2755
  #, no-c-format
--- 3774,3780 ----
  #: c-family/c.opt:2747
  #, no-c-format
  msgid "Deprecated in favor of -std=gnu99."
! msgstr "Veraltet zugunsten von »-std=gnu99«."
  
  #: c-family/c.opt:2755
  #, no-c-format
*************** msgstr "Mit dem ISO-C-Standard von 1990,
*** 3784,3790 ****
  #: c-family/c.opt:2763
  #, no-c-format
  msgid "Deprecated in favor of -std=iso9899:1999."
! msgstr "Veraltet zugunsten von -std=iso9899:1999."
  
  #: c-family/c.opt:2783
  #, no-c-format
--- 3784,3790 ----
  #: c-family/c.opt:2763
  #, no-c-format
  msgid "Deprecated in favor of -std=iso9899:1999."
! msgstr "Veraltet zugunsten von »-std=iso9899:1999«."
  
  #: c-family/c.opt:2783
  #, no-c-format
*************** msgstr "Quellcode-Abdeckungsverpflichtun
*** 3884,3890 ****
  #: ada/gcc-interface/lang.opt:65
  #, no-c-format
  msgid "Synonym of -gnatk8."
! msgstr "Synonym für -gnatk8."
  
  #: ada/gcc-interface/lang.opt:73
  #, no-c-format
--- 3884,3890 ----
  #: ada/gcc-interface/lang.opt:65
  #, no-c-format
  msgid "Synonym of -gnatk8."
! msgstr "Synonym für »-gnatk8«."
  
  #: ada/gcc-interface/lang.opt:73
  #, no-c-format
*************** msgstr "den C-Präprozessor verwenden, u
*** 4314,4320 ****
  #: m2/lang.opt:79 m2/lang.opt:83
  #, no-c-format
  msgid "passed to the preprocessor if -fcpp is used (internal switch)"
! msgstr "wird an den Präprozessor weitergereicht, wenn -fcpp verwendet wird (interne Option)"
  
  #: m2/lang.opt:87
  #, no-c-format
--- 4314,4320 ----
  #: m2/lang.opt:79 m2/lang.opt:83
  #, no-c-format
  msgid "passed to the preprocessor if -fcpp is used (internal switch)"
! msgstr "wird an den Präprozessor weitergereicht, wenn »-fcpp« verwendet wird (interne Option)"
  
  #: m2/lang.opt:87
  #, no-c-format
*************** msgstr "erzwingen, dass MOD stets positi
*** 4489,4495 ****
  #: m2/lang.opt:227
  #, no-c-format
  msgid "link against the pthread library (default on)"
! msgstr "mit der pthread-Bibliothek übersetzen (Vorgabe: ein)"
  
  #: m2/lang.opt:231
  #, no-c-format
--- 4489,4495 ----
  #: m2/lang.opt:227
  #, no-c-format
  msgid "link against the pthread library (default on)"
! msgstr "mit der pthread-Bibliothek binden (Vorgabe: ein)"
  
  #: m2/lang.opt:231
  #, no-c-format
*************** msgstr "eine gemeinsam genutzte Biblioth
*** 4539,4545 ****
  #: m2/lang.opt:271
  #, no-c-format
  msgid "turns on all software runtime checking (an abbreviation for -fnil -frange -findex -fwholediv -fcase -freturn -fwholevalue -ffloatvalue)"
! msgstr "alle Software-Laufzeitüberprüfungen einschalten (das ist die Abkürzung für -fnil -frange -findex -fwholediv -fcase -freturn -fwholevalue -ffloatvalue)"
  
  #: m2/lang.opt:275
  #, no-c-format
--- 4539,4545 ----
  #: m2/lang.opt:271
  #, no-c-format
  msgid "turns on all software runtime checking (an abbreviation for -fnil -frange -findex -fwholediv -fcase -freturn -fwholevalue -ffloatvalue)"
! msgstr "alle Software-Laufzeitüberprüfungen einschalten (das ist die Abkürzung für »-fnil -frange -findex -fwholediv -fcase -freturn -fwholevalue -ffloatvalue«)"
  
  #: m2/lang.opt:275
  #, no-c-format
*************** msgstr "Funktionen, die Werte zurückgeb
*** 4644,4650 ****
  #: go/lang.opt:90
  #, no-c-format
  msgid "Emit debugging information related to the escape analysis pass when run with -fgo-optimize-allocs."
! msgstr "Debuginformation für den Escape-Analyse-Durchlauf ausgeben, wenn mit -fgo-optimize-allocs aufgerufen."
  
  #: go/lang.opt:94
  #, no-c-format
--- 4644,4650 ----
  #: go/lang.opt:90
  #, no-c-format
  msgid "Emit debugging information related to the escape analysis pass when run with -fgo-optimize-allocs."
! msgstr "Debuginformation für den Escape-Analyse-Durchlauf ausgeben, wenn mit »-fgo-optimize-allocs« aufgerufen."
  
  #: go/lang.opt:94
  #, no-c-format
*************** msgstr "Little-Endian-Code erzeugen."
*** 5179,5185 ****
  #: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
  #, no-c-format
  msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line."
! msgstr "Annehmen, dass Laufzeitunterstützung vorhanden ist, und daher -lsim von Linker-Kommandozeile auslassen."
  
  #: config/mcore/mcore.opt:60
  #, no-c-format
--- 5179,5185 ----
  #: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
  #, no-c-format
  msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line."
! msgstr "Annehmen, dass Laufzeitunterstützung vorhanden ist, und daher »-lsim« von Binder-Kommandozeile auslassen."
  
  #: config/mcore/mcore.opt:60
  #, no-c-format
*************** msgstr "Codeerzeugung von Stummeln für
*** 5349,5355 ****
  #: config/darwin.opt:92
  #, no-c-format
  msgid "-mtarget-linker <version>\tSpecify that ld64 <version> is the toolchain linker for the current invocation."
! msgstr "-mtarget-linker <Version>\tld64 <Version> als Toolchain-Linker für den aktuellen Aufruf festlegen."
  
  #: config/darwin.opt:98
  #, no-c-format
--- 5349,5355 ----
  #: config/darwin.opt:92
  #, no-c-format
  msgid "-mtarget-linker <version>\tSpecify that ld64 <version> is the toolchain linker for the current invocation."
! msgstr "-mtarget-linker <Version>\tld64 <Version> als Toolchain-Binder für den aktuellen Aufruf festlegen."
  
  #: config/darwin.opt:98
  #, no-c-format
*************** msgstr "-client_name <Name>\tErlauben, d
*** 5399,5405 ****
  #: config/darwin.opt:134
  #, no-c-format
  msgid "-compatibility_version <number>\tSet the version for the client interface.  Client programs must record a value less than or equal to <number>, or the binding will fail at runtime."
! msgstr "-compatibility_version <Nummer>\tMinimale Version für das Client-Interface festlegen. Clients müssen diese <Nummer> oder eine größere angeben, oder das Binden wird zur Laufzeit fehlschlagen."
  
  #: config/darwin.opt:138
  #, no-c-format
--- 5399,5405 ----
  #: config/darwin.opt:134
  #, no-c-format
  msgid "-compatibility_version <number>\tSet the version for the client interface.  Client programs must record a value less than or equal to <number>, or the binding will fail at runtime."
! msgstr "-compatibility_version <Nummer>\tMinimale Version für das Client-Interface festlegen. Clients müssen diese <Nummer> oder eine größere angeben, oder das Binden wird zur Laufzeit scheitern."
  
  #: config/darwin.opt:138
  #, no-c-format
*************** msgstr "Code und Daten, die unerreichbar
*** 5414,5420 ****
  #: config/darwin.opt:146
  #, no-c-format
  msgid "-dylib_file install_name:file_name\tThis allows linking of a dylib with \"install_name\" but to be found in a different install position \"file_name\""
! msgstr "-dylib_file Installationsname:Dateiname\tDies ermöglicht die Verknüpfung einer Dylib mit »Installationsname«, die aber in einer anderen Installationsposition »Dateiname« zu finden ist"
  
  #: config/darwin.opt:150
  #, no-c-format
--- 5414,5420 ----
  #: config/darwin.opt:146
  #, no-c-format
  msgid "-dylib_file install_name:file_name\tThis allows linking of a dylib with \"install_name\" but to be found in a different install position \"file_name\""
! msgstr "-dylib_file Installationsname:Dateiname\tDies ermöglicht das Binden einer Dylib mit »Installationsname«, die aber in einer anderen Installationsposition »Dateiname« zu finden ist"
  
  #: config/darwin.opt:150
  #, no-c-format
*************** msgstr "Eine gemeinsam genutzte Mach-O-B
*** 5439,5445 ****
  #: config/darwin.opt:166
  #, no-c-format
  msgid "-exported_symbols_list <filename>\tExport global symbols in <filename> in linked output file; any symbols not mentioned will be treated as \"hidden\"."
! msgstr "-exported_symbols_list <Dateiname>\tGlobale Symbole in <Dateiname> werden aus der gelinkten Ausgabedatei exportiert, alle nicht erwähnten Symbole werden als versteckt behandelt."
  
  #: config/darwin.opt:170
  #, no-c-format
--- 5439,5445 ----
  #: config/darwin.opt:166
  #, no-c-format
  msgid "-exported_symbols_list <filename>\tExport global symbols in <filename> in linked output file; any symbols not mentioned will be treated as \"hidden\"."
! msgstr "-exported_symbols_list <Dateiname>\tGlobale Symbole in <Dateiname> werden aus der gebundenen Ausgabedatei exportiert, alle nicht erwähnten Symbole werden als versteckt behandelt."
  
  #: config/darwin.opt:170
  #, no-c-format
*************** msgstr "Den normalen zweistufigen Namens
*** 5459,5465 ****
  #: config/darwin.opt:182
  #, no-c-format
  msgid "For the assembler (and linker) permit any architecture sub-variant to be used without error."
! msgstr "Dem Assembler (und Linker) erlauben, jede beliebige Architektur-Untervariante ohne Fehler zu verwenden."
  
  #: config/darwin.opt:186
  #, no-c-format
--- 5459,5465 ----
  #: config/darwin.opt:182
  #, no-c-format
  msgid "For the assembler (and linker) permit any architecture sub-variant to be used without error."
! msgstr "Dem Assembler (und Binder) erlauben, jede beliebige Architektur-Untervariante ohne Fehler zu verwenden."
  
  #: config/darwin.opt:186
  #, no-c-format
*************** msgstr "Das Ausgabeobjekt so festlegen,
*** 5469,5475 ****
  #: config/darwin.opt:190
  #, no-c-format
  msgid "-framework <name>\tThe linker should search for the framework <name> in the framework search path."
! msgstr "-framework <Name>\tDas Framework <Name> im Pfad für Frameworks suchen."
  
  #: config/darwin.opt:198
  #, no-c-format
--- 5469,5475 ----
  #: config/darwin.opt:190
  #, no-c-format
  msgid "-framework <name>\tThe linker should search for the framework <name> in the framework search path."
! msgstr "-framework <Name>\tDer Binder sollte das Framework <Name> im Suchpfad für Frameworks suchen."
  
  #: config/darwin.opt:198
  #, no-c-format
*************** msgstr "-install_name <Name>\tLegt den I
*** 5504,5510 ****
  #: config/darwin.opt:222
  #, no-c-format
  msgid "Usually \"private extern\" (hidden) symbols are made local when linking, this command suppresses that such that they remain exported."
! msgstr "Normalerweise werden Symbole, die »private extern« (versteckt) sind, beim Linken lokal gemacht. Dieser Befehl unterdrückt das, so dass sie exportiert bleiben."
  
  #: config/darwin.opt:226
  #, no-c-format
--- 5504,5510 ----
  #: config/darwin.opt:222
  #, no-c-format
  msgid "Usually \"private extern\" (hidden) symbols are made local when linking, this command suppresses that such that they remain exported."
! msgstr "Normalerweise werden Symbole, die »private extern« (versteckt) sind, beim Binden lokal gemacht. Dieser Befehl unterdrückt das, so dass sie exportiert bleiben."
  
  #: config/darwin.opt:226
  #, no-c-format
*************** msgstr "(Obsolet nach 10.4) -multiply_de
*** 5524,5530 ****
  #: config/darwin.opt:238
  #, no-c-format
  msgid "(Obsolete) Current linkers never dead-strip these items, so the option is not needed."
! msgstr "(Obsolet) Aktuelle Linker entfernen diese Elemente nie, daher wird diese Option nicht benötigt."
  
  #: config/darwin.opt:242
  #, no-c-format
--- 5524,5530 ----
  #: config/darwin.opt:238
  #, no-c-format
  msgid "(Obsolete) Current linkers never dead-strip these items, so the option is not needed."
! msgstr "(Obsolet) Aktuelle Binder entfernen diese Elemente nie, daher wird diese Option nicht benötigt."
  
  #: config/darwin.opt:242
  #, no-c-format
*************** msgstr "Erzeugt eine Mach-O-Datei, die f
*** 5569,5580 ****
  #: config/darwin.opt:291
  #, no-c-format
  msgid "(Obsolete) Allowed linking to proceed with \"-flat_namespace\" when a linked bundle contained a symbol also exported from the main executable."
! msgstr "(Obsolet) Erlaubte das Verlinken mit »-flat_namespace« fortzusetzen, wenn ein verlinktes Bundle ein Symbol enthält, das ebenfalls aus der Hauptausführungsdatei exportiert wurde."
  
  #: config/darwin.opt:298
  #, no-c-format
  msgid "Synonym for \"-export-dynamic\" for linker versions that support it."
! msgstr "Synonym für »-export-dynamic« für Linker-Versionen, die dies unterstützen."
  
  #: config/darwin.opt:302
  #, no-c-format
--- 5569,5580 ----
  #: config/darwin.opt:291
  #, no-c-format
  msgid "(Obsolete) Allowed linking to proceed with \"-flat_namespace\" when a linked bundle contained a symbol also exported from the main executable."
! msgstr "(Obsolet) Erlaubte das Binden mit »-flat_namespace« fortzusetzen, wenn ein gebundenes Bundle ein Symbol enthält, das ebenfalls aus der Hauptausführungsdatei exportiert wurde."
  
  #: config/darwin.opt:298
  #, no-c-format
  msgid "Synonym for \"-export-dynamic\" for linker versions that support it."
! msgstr "Synonym für »-export-dynamic« für Binder-Versionen, die dies unterstützen."
  
  #: config/darwin.opt:302
  #, no-c-format
*************** msgstr "-seg_addr_table <Datei>\tBasisad
*** 5609,5615 ****
  #: config/darwin.opt:327
  #, no-c-format
  msgid "(Obsolete, ld_classic only) -seg_addr_table_filename <path>."
! msgstr "(Obsolet, nur ld_classic) -seg_addr_table_filename <Pfad>."
  
  #: config/darwin.opt:331
  #, no-c-format
--- 5609,5615 ----
  #: config/darwin.opt:327
  #, no-c-format
  msgid "(Obsolete, ld_classic only) -seg_addr_table_filename <path>."
! msgstr "(Obsolet, nur ld_classic) »-seg_addr_table_filename <Pfad>«."
  
  #: config/darwin.opt:331
  #, no-c-format
*************** msgstr "-unexported_symbols_list <Datei>
*** 5689,5695 ****
  #: config/darwin.opt:392
  #, no-c-format
  msgid "-weak_framework <framework>\tMake a weak link to the specified framework."
! msgstr "-weak_framework <framework>\tEine schwache Verknüpfung zu dem angegebenen Rahmenwerk herstellen."
  
  #: config/darwin.opt:396
  #, no-c-format
--- 5689,5695 ----
  #: config/darwin.opt:392
  #, no-c-format
  msgid "-weak_framework <framework>\tMake a weak link to the specified framework."
! msgstr "-weak_framework <framework>\tEine schwache Bindung zu dem angegebenen Rahmenwerk herstellen."
  
  #: config/darwin.opt:396
  #, no-c-format
*************** msgstr "-weak_reference_mismatches <Ausw
*** 5699,5705 ****
  #: config/darwin.opt:400
  #, no-c-format
  msgid "Logs which object files the linker loads."
! msgstr "Die vom Linker geladenen Objektdateien wegschreiben."
  
  #: config/darwin.opt:404
  #, no-c-format
--- 5699,5705 ----
  #: config/darwin.opt:400
  #, no-c-format
  msgid "Logs which object files the linker loads."
! msgstr "Die vom Binder geladenen Objektdateien wegschreiben."
  
  #: config/darwin.opt:404
  #, no-c-format
*************** msgstr "ID-basierte Shared Library einsc
*** 5754,5760 ****
  #: config/bfin/bfin.opt:69
  #, no-c-format
  msgid "Generate code that won't be linked against any other ID shared libraries, but may be used as a shared library."
! msgstr "Code erzeugen, der nicht mit anderen ID-shared Libraries gelinkt werden würde, aber als Shared Library verwendet werden kann."
  
  #: config/bfin/bfin.opt:74 config/m68k/m68k.opt:180
  #, no-c-format
--- 5754,5760 ----
  #: config/bfin/bfin.opt:69
  #, no-c-format
  msgid "Generate code that won't be linked against any other ID shared libraries, but may be used as a shared library."
! msgstr "Code erzeugen, der nicht mit anderen ID-shared Libraries gebunden werden würde, aber als Shared Library verwendet werden kann."
  
  #: config/bfin/bfin.opt:74 config/m68k/m68k.opt:180
  #, no-c-format
*************** msgstr "Erzeugung PC-relativer Aufrufe v
*** 5774,5780 ****
  #: config/bfin/bfin.opt:86
  #, no-c-format
  msgid "Link with the fast floating-point library."
! msgstr "Mit schneller Gleitkomma-Bibliothek linken."
  
  #: config/bfin/bfin.opt:90 config/arm/arm.opt:345 config/frv/frv.opt:130
  #, no-c-format
--- 5774,5780 ----
  #: config/bfin/bfin.opt:86
  #, no-c-format
  msgid "Link with the fast floating-point library."
! msgstr "Mit schneller Gleitkomma-Bibliothek binden."
  
  #: config/bfin/bfin.opt:90 config/arm/arm.opt:345 config/frv/frv.opt:130
  #, no-c-format
*************** msgstr "Annahme, dass ICPLBs zur Laufzei
*** 5819,5835 ****
  #: config/m68k/m68k-tables.opt:25
  #, no-c-format
  msgid "Known M68K CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte M68K-CPUs (für Verwendung mit Option -mcpu=):"
  
  #: config/m68k/m68k-tables.opt:365
  #, no-c-format
  msgid "Known M68K microarchitectures (for use with the -mtune= option):"
! msgstr "Bekannte M68K-Mikroarchitekturen (für Verwendung mit Option -mtune=):"
  
  #: config/m68k/m68k-tables.opt:411
  #, no-c-format
  msgid "Known M68K ISAs (for use with the -march= option):"
! msgstr "Bekannte M68K-ISAs (für Verwendung mit Option -march=):"
  
  #: config/m68k/ieee.opt:24 config/i386/i386.opt:389
  #, no-c-format
--- 5819,5835 ----
  #: config/m68k/m68k-tables.opt:25
  #, no-c-format
  msgid "Known M68K CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte M68K-CPUs (für Verwendung mit der Option »-mcpu=«):"
  
  #: config/m68k/m68k-tables.opt:365
  #, no-c-format
  msgid "Known M68K microarchitectures (for use with the -mtune= option):"
! msgstr "Bekannte M68K-Mikroarchitekturen (für Verwendung mit der Option »-mtune=«):"
  
  #: config/m68k/m68k-tables.opt:411
  #, no-c-format
  msgid "Known M68K ISAs (for use with the -march= option):"
! msgstr "Bekannte M68K-ISAs (für Verwendung mit der Option »-march=«):"
  
  #: config/m68k/ieee.opt:24 config/i386/i386.opt:389
  #, no-c-format
*************** msgstr "-mbranch-cost=N\tSprungkosten au
*** 6057,6063 ****
  #: config/riscv/riscv.opt:38
  #, no-c-format
  msgid "This option is deprecated; use -fplt or -fno-plt instead."
! msgstr "Diese Option ist veraltet; verwenden Sie stattdessen -fplt oder -fno-plt."
  
  #: config/riscv/riscv.opt:42
  #, no-c-format
--- 6057,6063 ----
  #: config/riscv/riscv.opt:38
  #, no-c-format
  msgid "This option is deprecated; use -fplt or -fno-plt instead."
! msgstr "Diese Option ist veraltet; verwenden Sie stattdessen »-fplt« oder »-fno-plt«."
  
  #: config/riscv/riscv.opt:42
  #, no-c-format
*************** msgstr "Versuch, den Stapel an dieser Po
*** 6072,6078 ****
  #: config/riscv/riscv.opt:50
  #, no-c-format
  msgid "Supported ABIs (for use with the -mabi= option):"
! msgstr "Unterstützte ABIs (für Verwendung mit Option »-mabi=«):"
  
  #: config/riscv/riscv.opt:78
  #, no-c-format
--- 6072,6078 ----
  #: config/riscv/riscv.opt:50
  #, no-c-format
  msgid "Supported ABIs (for use with the -mabi= option):"
! msgstr "Unterstützte ABIs (für Verwendung mit der Option »-mabi=«):"
  
  #: config/riscv/riscv.opt:78
  #, no-c-format
*************** msgstr "-march=\tCode für die angegeben
*** 6092,6098 ****
  #: config/riscv/riscv.opt:91
  #, no-c-format
  msgid "-march=help\tPrint supported -march extensions."
! msgstr "-march=help\tUnterstützte -march-Erweiterungen ausgeben."
  
  #: config/riscv/riscv.opt:103 config/mips/mips.opt:426
  #, no-c-format
--- 6092,6098 ----
  #: config/riscv/riscv.opt:91
  #, no-c-format
  msgid "-march=help\tPrint supported -march extensions."
! msgstr "-march=help\tUnterstützte »-march«-Erweiterungen ausgeben."
  
  #: config/riscv/riscv.opt:103 config/mips/mips.opt:426
  #, no-c-format
*************** msgstr "Keine Vektor-Speicherzugriffe mi
*** 6144,6150 ****
  #: config/rs6000/aix64.opt:36 config/rs6000/linux64.opt:32
  #, no-c-format
  msgid "Known code models (for use with the -mcmodel= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit Option -mcmodel=):"
  
  #: config/riscv/riscv.opt:154
  #, no-c-format
--- 6144,6150 ----
  #: config/rs6000/aix64.opt:36 config/rs6000/linux64.opt:32
  #, no-c-format
  msgid "Known code models (for use with the -mcmodel= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit der Option »-mcmodel=«):"
  
  #: config/riscv/riscv.opt:154
  #, no-c-format
*************** msgstr "%reloc()-Operatoren statt Assemb
*** 6154,6160 ****
  #: config/riscv/riscv.opt:158 config/loongarch/loongarch.opt:278
  #, no-c-format
  msgid "Take advantage of linker relaxations to reduce the number of instructions required to materialize symbol addresses."
! msgstr "Linker-Lockerungen ausnutzen, um die Anzahl der Befehle zu reduzieren, die für das Materialisieren von Symboladressen verwendet werden."
  
  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109100
  #: config/riscv/riscv.opt:163
--- 6154,6160 ----
  #: config/riscv/riscv.opt:158 config/loongarch/loongarch.opt:278
  #, no-c-format
  msgid "Take advantage of linker relaxations to reduce the number of instructions required to materialize symbol addresses."
! msgstr "Binder-Lockerungen ausnutzen, um die Anzahl der Befehle zu reduzieren, die für das Materialisieren von Symboladressen verwendet werden."
  
  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109100
  #: config/riscv/riscv.opt:163
*************** msgstr "Die angegebene Datenausrichtung
*** 6181,6187 ****
  #: config/riscv/riscv.opt:199 config/i386/i386.opt:265
  #, no-c-format
  msgid "Known data alignment choices (for use with the -malign-data= option):"
! msgstr "Bekannte Datenausrichtungen (für Verwendung mit Option -malign-data=):"
  
  #: config/riscv/riscv.opt:209 config/aarch64/aarch64.opt:313
  #: config/i386/i386.opt:1021 config/arm/arm.opt:349
--- 6181,6187 ----
  #: config/riscv/riscv.opt:199 config/i386/i386.opt:265
  #, no-c-format
  msgid "Known data alignment choices (for use with the -malign-data= option):"
! msgstr "Bekannte Datenausrichtungen (für Verwendung mit der Option »-malign-data=«):"
  
  #: config/riscv/riscv.opt:209 config/aarch64/aarch64.opt:313
  #: config/i386/i386.opt:1021 config/arm/arm.opt:349
*************** msgstr "Angegebenen Stapelschutz-Wächte
*** 6194,6200 ****
  #: config/arm/arm.opt:353 config/rs6000/rs6000.opt:562
  #, no-c-format
  msgid "Valid arguments to -mstack-protector-guard=:"
! msgstr "Gültige Argumente für -mstack-protector-guart=:"
  
  #: config/riscv/riscv.opt:223 config/i386/i386.opt:1035
  #: config/rs6000/rs6000.opt:572
--- 6194,6200 ----
  #: config/arm/arm.opt:353 config/rs6000/rs6000.opt:562
  #, no-c-format
  msgid "Valid arguments to -mstack-protector-guard=:"
! msgstr "Gültige Argumente für »-mstack-protector-guard=«:"
  
  #: config/riscv/riscv.opt:223 config/i386/i386.opt:1035
  #: config/rs6000/rs6000.opt:572
*************** msgstr "Angegebenen Offset zur Addressie
*** 6211,6217 ****
  #: config/riscv/riscv.opt:543
  #, no-c-format
  msgid "Supported ISA specs (for use with the -misa-spec= option):"
! msgstr "Unterstützte ISA-Spezifikationen (für Verwendung mit Option »-misa-spec=«):"
  
  #: config/riscv/riscv.opt:556
  #, no-c-format
--- 6211,6217 ----
  #: config/riscv/riscv.opt:543
  #, no-c-format
  msgid "Supported ISA specs (for use with the -misa-spec= option):"
! msgstr "Unterstützte ISA-Spezifikationen (für Verwendung mit der Option »-misa-spec=«):"
  
  #: config/riscv/riscv.opt:556
  #, no-c-format
*************** msgstr "-mrvv-max-lmul=<Zeichenkette>\tD
*** 6261,6267 ****
  #: config/riscv/riscv.opt:610
  #, no-c-format
  msgid "Valid arguments to -param=vsetvl-strategy=:"
! msgstr "Gültige Argumente für -param=vsetvl-strategy=:"
  
  #: config/riscv/riscv.opt:623
  #, no-c-format
--- 6261,6267 ----
  #: config/riscv/riscv.opt:610
  #, no-c-format
  msgid "Valid arguments to -param=vsetvl-strategy=:"
! msgstr "Gültige Argumente für »-param=vsetvl-strategy=«:"
  
  #: config/riscv/riscv.opt:623
  #, no-c-format
*************** msgstr "-param=riscv-two-source-permutes
*** 6276,6282 ****
  #: config/riscv/riscv.opt:631 config/i386/i386.opt:496
  #, no-c-format
  msgid "Valid arguments to -mstringop-strategy=:"
! msgstr "Gültige Arguments für -mstringop-strategy=:"
  
  #: config/riscv/riscv.opt:647
  #, no-c-format
--- 6276,6282 ----
  #: config/riscv/riscv.opt:631 config/i386/i386.opt:496
  #, no-c-format
  msgid "Valid arguments to -mstringop-strategy=:"
! msgstr "Gültige Arguments für »-mstringop-strategy=«:"
  
  #: config/riscv/riscv.opt:647
  #, no-c-format
*************** msgstr "Kleines Speichermodell wählen �
*** 6388,6394 ****
  #: config/msp430/msp430.opt:60
  #, no-c-format
  msgid "Optimize opcode sizes at link time."
! msgstr "Opcodegrößen zur Linkzeit optimieren."
  
  #: config/msp430/msp430.opt:67 config/pru/pru.opt:26
  #, no-c-format
--- 6388,6394 ----
  #: config/msp430/msp430.opt:60
  #, no-c-format
  msgid "Optimize opcode sizes at link time."
! msgstr "Opcodegrößen zur Bindezeit optimieren."
  
  #: config/msp430/msp430.opt:67 config/pru/pru.opt:26
  #, no-c-format
*************** msgstr "Für Bitschiebeoperationen mit k
*** 6438,6444 ****
  #: config/aarch64/aarch64.opt:70 config/loongarch/loongarch.opt:248
  #, no-c-format
  msgid "The code model option names for -mcmodel:"
! msgstr "Codemodell-Optionsnamen für -mcmodel:"
  
  #: config/aarch64/aarch64.opt:87 config/i386/i386.opt:1056
  #, no-c-format
--- 6438,6444 ----
  #: config/aarch64/aarch64.opt:70 config/loongarch/loongarch.opt:248
  #, no-c-format
  msgid "The code model option names for -mcmodel:"
! msgstr "Codemodell-Optionsnamen für »-mcmodel«:"
  
  #: config/aarch64/aarch64.opt:87 config/i386/i386.opt:1056
  #, no-c-format
*************** msgstr "-moverride=<Zeichenkette>\tNur f
*** 6508,6514 ****
  #: config/aarch64/aarch64.opt:197
  #, no-c-format
  msgid "Known AArch64 ABIs (for use with the -mabi= option):"
! msgstr "Bekannte AArch64-ABIs (für Verwendung mit Option -mabi=):"
  
  #: config/aarch64/aarch64.opt:207
  #, no-c-format
--- 6508,6514 ----
  #: config/aarch64/aarch64.opt:197
  #, no-c-format
  msgid "Known AArch64 ABIs (for use with the -mabi= option):"
! msgstr "Bekannte AArch64-ABIs (für Verwendung mit der Option »-mabi=«):"
  
  #: config/aarch64/aarch64.opt:207
  #, no-c-format
*************** msgstr "Annäherung der reziproken Quadr
*** 6538,6544 ****
  #: config/aarch64/aarch64.opt:238
  #, no-c-format
  msgid "Enable the square root approximation.  Enabling this reduces precision of square root results to about 16 bits for single precision and to 32 bits for double precision. If enabled, it implies -mlow-precision-recip-sqrt."
! msgstr "Annäherung der Quadratwurzel einschalten. Dies reduziert die Genauigkeit der Quadratwurzelergebnisse auf etwa 16 Bits für einfache Genauigkeit und 32 Bits für doppelte Genauigkeit. Wenn eingeschaltet, bringt es »-mlow-precition-recip-sqrt« mit sich."
  
  #: config/aarch64/aarch64.opt:245
  #, no-c-format
--- 6538,6544 ----
  #: config/aarch64/aarch64.opt:238
  #, no-c-format
  msgid "Enable the square root approximation.  Enabling this reduces precision of square root results to about 16 bits for single precision and to 32 bits for double precision. If enabled, it implies -mlow-precision-recip-sqrt."
! msgstr "Annäherung der Quadratwurzel einschalten. Dies reduziert die Genauigkeit der Quadratwurzelergebnisse auf etwa 16 Bits für einfache Genauigkeit und 32 Bits für doppelte Genauigkeit. Wenn eingeschaltet, bringt es »-mlow-precision-recip-sqrt« mit sich."
  
  #: config/aarch64/aarch64.opt:245
  #, no-c-format
*************** msgstr "Code für die gegebene CPU plane
*** 6869,6875 ****
  #: config/ia64/ia64.opt:126
  #, no-c-format
  msgid "Known Itanium CPUs (for use with the -mtune= option):"
! msgstr "Bekannte Itanium-CPUs (für Verwendung mit Option -mtune=):"
  
  #: config/ia64/ia64.opt:136
  #, no-c-format
--- 6869,6875 ----
  #: config/ia64/ia64.opt:126
  #, no-c-format
  msgid "Known Itanium CPUs (for use with the -mtune= option):"
! msgstr "Bekannte Itanium-CPUs (für Verwendung mit der Option »-mtune=«):"
  
  #: config/ia64/ia64.opt:136
  #, no-c-format
*************** msgstr "-mmcu=MCU\tZiel-System-On-Chip-V
*** 7134,7140 ****
  #: config/pru/pru.opt:35
  #, no-c-format
  msgid "Make GCC pass the --no-relax command-line option to the linker instead of the --relax option."
! msgstr "Dem Linker die Befehlszeilenoption »--no-relax« anstelle der Option »--relax« übergeben."
  
  #: config/pru/pru.opt:40
  #, no-c-format
--- 7134,7140 ----
  #: config/pru/pru.opt:35
  #, no-c-format
  msgid "Make GCC pass the --no-relax command-line option to the linker instead of the --relax option."
! msgstr "Dem Binder die Befehlszeilenoption »--no-relax« anstelle der Option »--relax« übergeben."
  
  #: config/pru/pru.opt:40
  #, no-c-format
*************** msgstr "Angegebenen Assemblerdialekt ver
*** 7347,7353 ****
  #: config/i386/i386.opt:286
  #, no-c-format
  msgid "Known assembler dialects (for use with the -masm= option):"
! msgstr "Bekannte Assemblerdialekte (für Verwendung mit Option »-masm=«):"
  
  #: config/i386/i386.opt:296
  #, no-c-format
--- 7347,7353 ----
  #: config/i386/i386.opt:286
  #, no-c-format
  msgid "Known assembler dialects (for use with the -masm= option):"
! msgstr "Bekannte Assemblerdialekte (für Verwendung mit der Option »-masm=«):"
  
  #: config/i386/i386.opt:296
  #, no-c-format
*************** msgstr "Angegebenen Adressierungsmodus v
*** 7372,7378 ****
  #: config/i386/i386.opt:331
  #, no-c-format
  msgid "Known address mode (for use with the -maddress-mode= option):"
! msgstr "Bekannter Adressmodus (für Verwendung mit Option -maddress-mode=):"
  
  #: config/i386/i386.opt:344
  #, no-c-format
--- 7372,7378 ----
  #: config/i386/i386.opt:331
  #, no-c-format
  msgid "Known address mode (for use with the -maddress-mode= option):"
! msgstr "Bekannter Adressmodus (für Verwendung mit der Option »-maddress-mode=«):"
  
  #: config/i386/i386.opt:344
  #, no-c-format
*************** msgstr "Gleitkommaarithmetik mit gegeben
*** 7397,7403 ****
  #: config/i386/i386.opt:360
  #, no-c-format
  msgid "Valid arguments to -mfpmath=:"
! msgstr "Gültige Argumente für -mfpmath=:"
  
  #: config/i386/i386.opt:393
  #, no-c-format
--- 7397,7403 ----
  #: config/i386/i386.opt:360
  #, no-c-format
  msgid "Valid arguments to -mfpmath=:"
! msgstr "Gültige Argumente für »-mfpmath=«:"
  
  #: config/i386/i386.opt:393
  #, no-c-format
*************** msgstr "Gegebenen Thread-lokalen Speiche
*** 7507,7513 ****
  #: config/i386/i386.opt:528
  #, no-c-format
  msgid "Known TLS dialects (for use with the -mtls-dialect= option):"
! msgstr "Bekannte TLS-Dialekte (für Verwendung mit Option -mtls-dialect=):"
  
  #: config/i386/i386.opt:538
  #, no-c-format
--- 7507,7513 ----
  #: config/i386/i386.opt:528
  #, no-c-format
  msgid "Known TLS dialects (for use with the -mtls-dialect= option):"
! msgstr "Bekannte TLS-Dialekte (für Verwendung mit der Option »-mtls-dialect=«):"
  
  #: config/i386/i386.opt:538
  #, no-c-format
*************** msgstr "Code erzeugen, der zum angegeben
*** 7537,7543 ****
  #: config/i386/i386.opt:565 config/nds32/nds32.opt:51
  #, no-c-format
  msgid "Known ABIs (for use with the -mabi= option):"
! msgstr "Bekannte ABIs (für Verwendung mit Option -mabi=):"
  
  #: config/i386/i386.opt:575
  #, no-c-format
--- 7537,7543 ----
  #: config/i386/i386.opt:565 config/nds32/nds32.opt:51
  #, no-c-format
  msgid "Known ABIs (for use with the -mabi= option):"
! msgstr "Bekannte ABIs (für Verwendung mit der Option »-mabi=«):"
  
  #: config/i386/i386.opt:575
  #, no-c-format
*************** msgstr "Zu verwendendes Vektorbibliothek
*** 7552,7558 ****
  #: config/i386/i386.opt:583
  #, no-c-format
  msgid "Known vectorization library ABIs (for use with the -mveclibabi= option):"
! msgstr "Bekannte ABIs für Vektorisierungs-Bibliothek (für Verwendung mit Schalter -mveclibabi=):"
  
  #: config/i386/i386.opt:596
  #, no-c-format
--- 7552,7558 ----
  #: config/i386/i386.opt:583
  #, no-c-format
  msgid "Known vectorization library ABIs (for use with the -mveclibabi= option):"
! msgstr "Bekannte ABIs für Vektorisierungs-Bibliothek (für Verwendung mit der Option »-mveclibabi=«):"
  
  #: config/i386/i386.opt:596
  #, no-c-format
*************** msgstr "Im Autovektorisierer die angegeb
*** 7607,7613 ****
  #: config/i386/i386.opt:639
  #, no-c-format
  msgid "Known preferred register vector length (to use with the -mprefer-vector-width= option):"
! msgstr "Bekannte bevorzugte Länge von Registervektoren (für Verwendung mit der Option -mprefer-vector-width=):"
  
  #: config/i386/i386.opt:655
  #, no-c-format
--- 7607,7613 ----
  #: config/i386/i386.opt:639
  #, no-c-format
  msgid "Known preferred register vector length (to use with the -mprefer-vector-width= option):"
! msgstr "Bekannte bevorzugte Länge von Registervektoren (für Verwendung mit der Option »-mprefer-vector-width=«):"
  
  #: config/i386/i386.opt:655
  #, no-c-format
*************** msgstr "Eingebaute PKU-Funktionen und Co
*** 8047,8053 ****
  #: config/i386/i386.opt:1025
  #, no-c-format
  msgid "Known stack protector guard (for use with the -mstack-protector-guard= option):"
! msgstr "Bekannte Stapelschutz-Wächter (für Verwendung mit Option -mstack-protector-guard=):"
  
  #: config/i386/i386.opt:1049
  #, no-c-format
--- 8047,8053 ----
  #: config/i386/i386.opt:1025
  #, no-c-format
  msgid "Known stack protector guard (for use with the -mstack-protector-guard= option):"
! msgstr "Bekannte Stapelschutz-Wächter (für Verwendung mit der Option »-mstack-protector-guard=«):"
  
  #: config/i386/i386.opt:1049
  #, no-c-format
*************** msgstr "Funktionsrückkehr in Aufruf umw
*** 8087,8093 ****
  #: config/i386/i386.opt:1087 config/s390/s390.opt:279
  #, no-c-format
  msgid "Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options):"
! msgstr "Bekannte indirekte Sprungauswahlen (für Verwendung mit den Optionen -mindirect-branch=/-mfunction-return=):"
  
  #: config/i386/i386.opt:1103
  #, no-c-format
--- 8087,8093 ----
  #: config/i386/i386.opt:1087 config/s390/s390.opt:279
  #, no-c-format
  msgid "Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options):"
! msgstr "Bekannte indirekte Sprungauswahlen (für Verwendung mit den Optionen »-mindirect-branch=« und »-mfunction-return=«):"
  
  #: config/i386/i386.opt:1103
  #, no-c-format
*************** msgstr "Verlassen von Funktionen mit __f
*** 8127,8133 ****
  #: config/i386/i386.opt:1131
  #, no-c-format
  msgid "Known choices for return instrumentation with -minstrument-return=:"
! msgstr "Bekannte Werte für Rückkehr-Instrumentierung mit -minstrument-return=:"
  
  #: config/i386/i386.opt:1144
  #, no-c-format
--- 8127,8133 ----
  #: config/i386/i386.opt:1131
  #, no-c-format
  msgid "Known choices for return instrumentation with -minstrument-return=:"
! msgstr "Bekannte Werte für Rückkehr-Instrumentierung mit »-minstrument-return=«:"
  
  #: config/i386/i386.opt:1144
  #, no-c-format
*************** msgstr "Kohärente Cachesteuerungs-Hinwe
*** 8423,8429 ****
  #: config/pa/pa.opt:58
  #, no-c-format
  msgid "Disable FP regs.  Equivalent to -msoft-float."
! msgstr "Gleitkommaregister ausschalten. Äquivalent zu -msoft-float."
  
  #: config/pa/pa.opt:62
  #, no-c-format
--- 8423,8429 ----
  #: config/pa/pa.opt:58
  #, no-c-format
  msgid "Disable FP regs.  Equivalent to -msoft-float."
! msgstr "Gleitkommaregister ausschalten. Äquivalent zu »-msoft-float«."
  
  #: config/pa/pa.opt:62
  #, no-c-format
*************** msgstr "Verwendung der kurzen Ladebefehl
*** 8543,8549 ****
  #: config/v850/v850.opt:71
  #, no-c-format
  msgid "Same as: -mep -mprolog-function."
! msgstr "Das gleiche wie: -mep -mprolog-function."
  
  #: config/v850/v850.opt:75
  #, no-c-format
--- 8543,8549 ----
  #: config/v850/v850.opt:71
  #, no-c-format
  msgid "Same as: -mep -mprolog-function."
! msgstr "Das gleiche wie: »-mep -mprolog-function«."
  
  #: config/v850/v850.opt:75
  #, no-c-format
*************** msgstr "Multi-Threading unterstützen."
*** 8663,8669 ****
  #: config/nvptx/nvptx-gen.opt:24
  #, no-c-format
  msgid "Known PTX ISA target architectures (for use with the -misa= option):"
! msgstr "Bekannte PTX-ISA-Architekturen (für Verwendung mit Option -misa=):"
  
  #: config/nvptx/nvptx.opt:31
  #, no-c-format
--- 8663,8669 ----
  #: config/nvptx/nvptx-gen.opt:24
  #, no-c-format
  msgid "Known PTX ISA target architectures (for use with the -misa= option):"
! msgstr "Bekannte PTX-ISA-Architekturen (für Verwendung mit der Option »-misa=«):"
  
  #: config/nvptx/nvptx.opt:31
  #, no-c-format
*************** msgstr "Alias:"
*** 8713,8719 ****
  #: config/nvptx/nvptx.opt:125
  #, no-c-format
  msgid "Known PTX ISA versions (for use with the -mptx= option):"
! msgstr "Bekannte PTX-ISA-Versionen (für Verwendung mit Option -mptx=):"
  
  #: config/nvptx/nvptx.opt:159
  #, no-c-format
--- 8713,8719 ----
  #: config/nvptx/nvptx.opt:125
  #, no-c-format
  msgid "Known PTX ISA versions (for use with the -mptx= option):"
! msgstr "Bekannte PTX-ISA-Versionen (für Verwendung mit der Option »-mptx=«):"
  
  #: config/nvptx/nvptx.opt:159
  #, no-c-format
*************** msgstr "Alle indirekten Rücksprünge mi
*** 9193,9199 ****
  #: config/s390/s390.opt:295
  #, no-c-format
  msgid "Generate sections .s390_indirect_jump, .s390_indirect_call, .s390_return_reg, and .s390_return_mem to contain the indirect branch locations which have been patched as part of using one of the -mindirect-branch* or -mfunction-return* options.  The sections consist of an array of 32 bit elements. Each entry holds the offset from the entry to the patched location."
! msgstr "Abschnitte .s390_indirect_jump, .s390_indirect_call, .s390_return_reg, und .s390_return_mem erzeugen, in denen die Adressen für indirekte Sprungziele gespeichert werden, die aufgrund der Optionen -mindirect-branch* oder -mfunction-return* gepatcht wurden. Die Abschnitte bestehen aus einem Array von 32-Bit-Elementen. Jedes Element enthält den Offset vom Eintrag zu der gepatchten Adresse."
  
  #: config/s390/s390.opt:304
  #, no-c-format
--- 9193,9199 ----
  #: config/s390/s390.opt:295
  #, no-c-format
  msgid "Generate sections .s390_indirect_jump, .s390_indirect_call, .s390_return_reg, and .s390_return_mem to contain the indirect branch locations which have been patched as part of using one of the -mindirect-branch* or -mfunction-return* options.  The sections consist of an array of 32 bit elements. Each entry holds the offset from the entry to the patched location."
! msgstr "Abschnitte .s390_indirect_jump, .s390_indirect_call, .s390_return_reg, und .s390_return_mem erzeugen, in denen die Adressen für indirekte Sprungziele gespeichert werden, die aufgrund der Optionen »-mindirect-branch*« oder »-mfunction-return*« gepatcht wurden. Die Abschnitte bestehen aus einem Array von 32-Bit-Elementen. Jedes Element enthält den Offset vom Eintrag zu der gepatchten Adresse."
  
  #: config/s390/s390.opt:304
  #, no-c-format
*************** msgstr "Alle Register verwenden, dadurch
*** 9238,9244 ****
  #: config/rl78/rl78.opt:54
  #, no-c-format
  msgid "Enable assembler and linker relaxation.  Enabled by default at -Os."
! msgstr "Lockerung des Assemblers und Linkers einschalten. Per Vorgabe eingeschaltet bei -Os."
  
  #: config/rl78/rl78.opt:58
  #, no-c-format
--- 9238,9244 ----
  #: config/rl78/rl78.opt:54
  #, no-c-format
  msgid "Enable assembler and linker relaxation.  Enabled by default at -Os."
! msgstr "Lockerung des Assemblers und Binders einschalten. Per Vorgabe eingeschaltet bei »-Os«."
  
  #: config/rl78/rl78.opt:58
  #, no-c-format
*************** msgstr "Wählt die Art der Ziel-RL78-Ker
*** 9248,9264 ****
  #: config/rl78/rl78.opt:77
  #, no-c-format
  msgid "Alias for -mcpu=g10."
! msgstr "Alias für --mcpu=g10."
  
  #: config/rl78/rl78.opt:81
  #, no-c-format
  msgid "Alias for -mcpu=g13."
! msgstr "Alias für -mcpu=g13."
  
  #: config/rl78/rl78.opt:85 config/rl78/rl78.opt:89
  #, no-c-format
  msgid "Alias for -mcpu=g14."
! msgstr "Alias für -mcpu=g14."
  
  #: config/rl78/rl78.opt:93
  #, no-c-format
--- 9248,9264 ----
  #: config/rl78/rl78.opt:77
  #, no-c-format
  msgid "Alias for -mcpu=g10."
! msgstr "Alias für »-mcpu=g10«."
  
  #: config/rl78/rl78.opt:81
  #, no-c-format
  msgid "Alias for -mcpu=g13."
! msgstr "Alias für »-mcpu=g13«."
  
  #: config/rl78/rl78.opt:85 config/rl78/rl78.opt:89
  #, no-c-format
  msgid "Alias for -mcpu=g14."
! msgstr "Alias für »-mcpu=g14«."
  
  #: config/rl78/rl78.opt:93
  #, no-c-format
*************** msgstr "Bibliotheken für den Simulator
*** 9278,9294 ****
  #: config/arm/arm-tables.opt:25
  #, no-c-format
  msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):"
! msgstr "Bekannte ARM-CPUs (für Verwendung mit Optionen -mcpu= und -mtune=):"
  
  #: config/arm/arm-tables.opt:305
  #, no-c-format
  msgid "Known ARM architectures (for use with the -march= option):"
! msgstr "Bekannte ARM-Architekturen (für Verwendung mit Option -march=):"
  
  #: config/arm/arm-tables.opt:411
  #, no-c-format
  msgid "Known ARM FPUs (for use with the -mfpu= option):"
! msgstr "Bekannte ARM-FPUs (für Verwendung mit Option -mfpu=):"
  
  #: config/arm/arm.opt:35
  #, no-c-format
--- 9278,9294 ----
  #: config/arm/arm-tables.opt:25
  #, no-c-format
  msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):"
! msgstr "Bekannte ARM-CPUs (für Verwendung mit der Optionen »-mcpu=« und »-mtune=«):"
  
  #: config/arm/arm-tables.opt:305
  #, no-c-format
  msgid "Known ARM architectures (for use with the -march= option):"
! msgstr "Bekannte ARM-Architekturen (für Verwendung mit der Option »-march=«):"
  
  #: config/arm/arm-tables.opt:411
  #, no-c-format
  msgid "Known ARM FPUs (for use with the -mfpu= option):"
! msgstr "Bekannte ARM-FPUs (für Verwendung mit der Option »-mfpu=«):"
  
  #: config/arm/arm.opt:35
  #, no-c-format
*************** msgstr "ABI angeben."
*** 9303,9309 ****
  #: config/arm/arm.opt:49
  #, no-c-format
  msgid "Known ARM ABIs (for use with the -mabi= option):"
! msgstr "Bekannte ARM-ABIs (für Verwendung mit Option -mabi=):"
  
  #: config/arm/arm.opt:68
  #, no-c-format
--- 9303,9309 ----
  #: config/arm/arm.opt:49
  #, no-c-format
  msgid "Known ARM ABIs (for use with the -mabi= option):"
! msgstr "Bekannte ARM-ABIs (für Verwendung mit der Option »-mabi=«):"
  
  #: config/arm/arm.opt:68
  #, no-c-format
*************** msgstr "Angeben, dass der Compiler auf s
*** 9348,9354 ****
  #: config/arm/arm.opt:129 config/csky/csky.opt:77
  #, no-c-format
  msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):"
! msgstr "Bekannte Gleitkomma-ABIs (für Verwendung mit Option -mfloat-abi=):"
  
  #: config/arm/arm.opt:142
  #, no-c-format
--- 9348,9354 ----
  #: config/arm/arm.opt:129 config/csky/csky.opt:77
  #, no-c-format
  msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):"
! msgstr "Bekannte Gleitkomma-ABIs (für Verwendung mit der Option »-mfloat-abi=«):"
  
  #: config/arm/arm.opt:142
  #, no-c-format
*************** msgstr "Gleitkommaformat __fp16 angeben.
*** 9363,9369 ****
  #: config/arm/arm.opt:150
  #, no-c-format
  msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
! msgstr "Bekannte __fp16-Formate (für Verwendung mit der Option -mfp16-format=):"
  
  #: config/arm/arm.opt:163
  #, no-c-format
--- 9363,9369 ----
  #: config/arm/arm.opt:150
  #, no-c-format
  msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
! msgstr "Bekannte __fp16-Formate (für Verwendung mit der Option »-mfp16-format=«):"
  
  #: config/arm/arm.opt:163
  #, no-c-format
*************** msgstr "Angeben, wie auf den Threadzeige
*** 9423,9429 ****
  #: config/arm/arm.opt:221
  #, no-c-format
  msgid "Valid arguments to -mtp=:"
! msgstr "Gültige Argumente für -mtp=:"
  
  #: config/arm/arm.opt:243
  #, no-c-format
--- 9423,9429 ----
  #: config/arm/arm.opt:221
  #, no-c-format
  msgid "Valid arguments to -mtp=:"
! msgstr "Gültige Argumente für »-mtp=«:"
  
  #: config/arm/arm.opt:243
  #, no-c-format
*************** msgstr "32-Bit-Code erzeugen."
*** 9734,9740 ****
  #: config/rs6000/rs6000-tables.opt:24
  #, no-c-format
  msgid "Known CPUs (for use with the -mcpu= and -mtune= options):"
! msgstr "Bekannte CPUs (für Verwendung mit Optionen -mcpu= und -mtune=):"
  
  #: config/rs6000/476.opt:24
  #, no-c-format
--- 9734,9740 ----
  #: config/rs6000/rs6000-tables.opt:24
  #, no-c-format
  msgid "Known CPUs (for use with the -mcpu= and -mtune= options):"
! msgstr "Bekannte CPUs (für Verwendung mit der Optionen »-mcpu=« und »-mtune=«):"
  
  #: config/rs6000/476.opt:24
  #, no-c-format
*************** msgstr "PowerPC V2.06 popcntd-Befehl ver
*** 9834,9840 ****
  #: config/rs6000/rs6000.opt:191
  #, no-c-format
  msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions."
! msgstr "Unter -ffast-math einen FRIZ-Befehl für (double)(long long)-Umwandlungen erzeugen."
  
  #: config/rs6000/rs6000.opt:199
  #, no-c-format
--- 9834,9840 ----
  #: config/rs6000/rs6000.opt:191
  #, no-c-format
  msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions."
! msgstr "Unter »-ffast-math« einen FRIZ-Befehl für (double)(long long)-Umwandlungen erzeugen."
  
  #: config/rs6000/rs6000.opt:199
  #, no-c-format
*************** msgstr "Alles in reguläres TOC legen."
*** 9919,9925 ****
  #: config/rs6000/rs6000.opt:305
  #, no-c-format
  msgid "Emit NOPs before global and after local entry point for -fpatchable-function-entry."
! msgstr "NOPs vor dem globalen und nach dem lokalen Einstiegspunkt für -fpatchable-function-entry generieren."
  
  #: config/rs6000/rs6000.opt:309
  #, no-c-format
--- 9919,9925 ----
  #: config/rs6000/rs6000.opt:305
  #, no-c-format
  msgid "Emit NOPs before global and after local entry point for -fpatchable-function-entry."
! msgstr "NOPs vor dem globalen und nach dem lokalen Einstiegspunkt für »-fpatchable-function-entry« generieren."
  
  #: config/rs6000/rs6000.opt:309
  #, no-c-format
*************** msgstr "Beim Erzeugen von AltiVec-Code V
*** 9929,9940 ****
  #: config/rs6000/rs6000.opt:313
  #, no-c-format
  msgid "Deprecated option.  Use -mno-vrsave instead."
! msgstr "Veraltete Option. Stattdessen -mno-vrsave verwenden."
  
  #: config/rs6000/rs6000.opt:317
  #, no-c-format
  msgid "Deprecated option.  Use -mvrsave instead."
! msgstr "Veraltete Option. Stattdessen -mvrsave verwenden."
  
  #: config/rs6000/rs6000.opt:321
  #, no-c-format
--- 9929,9940 ----
  #: config/rs6000/rs6000.opt:313
  #, no-c-format
  msgid "Deprecated option.  Use -mno-vrsave instead."
! msgstr "Veraltete Option. Stattdessen »-mno-vrsave« verwenden."
  
  #: config/rs6000/rs6000.opt:317
  #, no-c-format
  msgid "Deprecated option.  Use -mvrsave instead."
! msgstr "Veraltete Option. Stattdessen »-mvrsave« verwenden."
  
  #: config/rs6000/rs6000.opt:321
  #, no-c-format
*************** msgstr "Ausrichtung der Strukturfelder a
*** 10054,10060 ****
  #: config/rs6000/rs6000.opt:453
  #, no-c-format
  msgid "Valid arguments to -malign-:"
! msgstr "Gültige Argumente für -malign-:"
  
  #: config/rs6000/rs6000.opt:463
  #, no-c-format
--- 10054,10060 ----
  #: config/rs6000/rs6000.opt:453
  #, no-c-format
  msgid "Valid arguments to -malign-:"
! msgstr "Gültige Argumente für »-malign-«:"
  
  #: config/rs6000/rs6000.opt:463
  #, no-c-format
*************** msgstr "Code für altes ausführbares BS
*** 10356,10362 ****
  #: config/rs6000/sysv4.opt:165
  #, no-c-format
  msgid "Use inline plt sequences to implement long calls and -fno-plt."
! msgstr "Inline-PLT-Sequenzen verwenden, um lange Aufrufe und -fno-plt zu implementieren."
  
  #: config/rs6000/sysv4.opt:169
  #, no-c-format
--- 10356,10362 ----
  #: config/rs6000/sysv4.opt:165
  #, no-c-format
  msgid "Use inline plt sequences to implement long calls and -fno-plt."
! msgstr "Inline-PLT-Sequenzen verwenden, um lange Aufrufe und »-fno-plt« zu implementieren."
  
  #: config/rs6000/sysv4.opt:169
  #, no-c-format
*************** msgstr "Bedingte Kopierbefehle für Glei
*** 10616,10622 ****
  #: config/loongarch/loongarch.opt:206
  #, no-c-format
  msgid "Prevent optimizing block moves, which is also the default behavior of -Os."
! msgstr "Die Optimierung von Blockkopieraktionen verhindern, was auch das Standardverhalten von -Os ist."
  
  #: config/loongarch/loongarch.opt:214
  #, no-c-format
--- 10616,10622 ----
  #: config/loongarch/loongarch.opt:206
  #, no-c-format
  msgid "Prevent optimizing block moves, which is also the default behavior of -Os."
! msgstr "Die Optimierung von Blockkopieraktionen verhindern, was auch das Standardverhalten von »-Os« ist."
  
  #: config/loongarch/loongarch.opt:214
  #, no-c-format
*************** msgstr "-mmax-inline-memcpy-size=SIZE\tD
*** 10626,10632 ****
  #: config/loongarch/loongarch.opt:218 config/mips/mips.opt:150
  #, no-c-format
  msgid "The code model option names for -mexplicit-relocs:"
! msgstr "Die Optionsnamen für Codemodelle für -mexplicit-relocs:"
  
  #: config/loongarch/loongarch.opt:231 config/mips/mips.opt:163
  #, no-c-format
--- 10626,10632 ----
  #: config/loongarch/loongarch.opt:218 config/mips/mips.opt:150
  #, no-c-format
  msgid "The code model option names for -mexplicit-relocs:"
! msgstr "Die Optionsnamen für Codemodelle für »-mexplicit-relocs«:"
  
  #: config/loongarch/loongarch.opt:231 config/mips/mips.opt:163
  #, no-c-format
*************** msgstr "Die GOT möglichst nicht verwend
*** 10651,10657 ****
  #: config/loongarch/loongarch.opt:283
  #, no-c-format
  msgid "Pass -mrelax or -mno-relax option to the assembler."
! msgstr "Die Option -mrelax oder -mno-relax an den Assembler übergeben."
  
  #: config/loongarch/loongarch.opt:301
  #, no-c-format
--- 10651,10657 ----
  #: config/loongarch/loongarch.opt:283
  #, no-c-format
  msgid "Pass -mrelax or -mno-relax option to the assembler."
! msgstr "Die Option »-mrelax« oder »-mno-relax« an den Assembler übergeben."
  
  #: config/loongarch/loongarch.opt:301
  #, no-c-format
*************** msgstr "Für das newlib-Board-spezifisch
*** 10696,10702 ****
  #: config/or1k/elf.opt:32
  #, no-c-format
  msgid "This option is ignored; it is provided for compatibility purposes only.  This used to select linker and preprocessor options for use with newlib."
! msgstr "Diese Option wird ignoriert; sie wird nur zu Kompatibilitätszwecken bereitgestellt. Sie diente zur Auswahl von Linker- und Präprozessor-Optionen für die Verwendung mit der newlib."
  
  #: config/or1k/or1k.opt:29
  #, no-c-format
--- 10696,10702 ----
  #: config/or1k/elf.opt:32
  #, no-c-format
  msgid "This option is ignored; it is provided for compatibility purposes only.  This used to select linker and preprocessor options for use with newlib."
! msgstr "Diese Option wird ignoriert; sie wird nur zu Kompatibilitätszwecken bereitgestellt. Sie diente zur Auswahl von Binder- und Präprozessor-Optionen für die Verwendung mit der newlib."
  
  #: config/or1k/or1k.opt:29
  #, no-c-format
*************** msgstr "Das Codemodell für den Zugriff
*** 10746,10752 ****
  #: config/or1k/or1k.opt:77
  #, no-c-format
  msgid "Known code model types (for use with the -mcmodel= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit Option -mcmodel=):"
  
  #: config/or1k/or1k.opt:87
  #, no-c-format
--- 10746,10752 ----
  #: config/or1k/or1k.opt:77
  #, no-c-format
  msgid "Known code model types (for use with the -mcmodel= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit der Option »-mcmodel=«):"
  
  #: config/or1k/or1k.opt:87
  #, no-c-format
*************** msgstr "Nur für Rückwärtskompatibilit
*** 10916,10927 ****
  #: config/sol2.opt:32
  #, no-c-format
  msgid "Clear hardware capabilities when linking."
! msgstr "Hardwarefähigkeiten beim Linken löschen."
  
  #: config/sol2.opt:36
  #, no-c-format
  msgid "Pass -z text to linker."
! msgstr "»-z text« an den Linker übergeben."
  
  #: config/moxie/moxie.opt:31
  #, no-c-format
--- 10916,10927 ----
  #: config/sol2.opt:32
  #, no-c-format
  msgid "Clear hardware capabilities when linking."
! msgstr "Hardwarefähigkeiten beim Binden löschen."
  
  #: config/sol2.opt:36
  #, no-c-format
  msgid "Pass -z text to linker."
! msgstr "»-z text« an den Binder übergeben."
  
  #: config/moxie/moxie.opt:31
  #, no-c-format
*************** msgstr "Hardware-»prefetch«-Befehle ve
*** 11036,11042 ****
  #: config/microblaze/microblaze.opt:132
  #, no-c-format
  msgid "Data referenced by offset from start of text instead of GOT (with -fPIC/-fPIE)."
! msgstr "Daten werden ausgehend vom Start des Programmcodes statt der GOT adressiert (mit -fPIC/-fPIE)."
  
  #: config/vax/vax.opt:23 config/vax/vax.opt:27
  #, no-c-format
--- 11036,11042 ----
  #: config/microblaze/microblaze.opt:132
  #, no-c-format
  msgid "Data referenced by offset from start of text instead of GOT (with -fPIC/-fPIE)."
! msgstr "Daten werden ausgehend vom Start des Programmcodes statt der GOT adressiert (mit »-fPIC« oder »-fPIE«)."
  
  #: config/vax/vax.opt:23 config/vax/vax.opt:27
  #, no-c-format
*************** msgstr "Ziel-CPU-Typ angeben."
*** 11126,11132 ****
  #: config/frv/frv.opt:73
  #, no-c-format
  msgid "Known FR-V CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte FR-V-CPUs (für Verwendung mit Option -mcpu=):"
  
  #: config/frv/frv.opt:122
  #, no-c-format
--- 11126,11132 ----
  #: config/frv/frv.opt:73
  #, no-c-format
  msgid "Known FR-V CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte FR-V-CPUs (für Verwendung mit der Option »-mcpu=«):"
  
  #: config/frv/frv.opt:122
  #, no-c-format
*************** msgstr "Gas veranlassen, Tomcat-Statisti
*** 11246,11252 ****
  #: config/frv/frv.opt:233
  #, no-c-format
  msgid "Link with the library-pic libraries."
! msgstr "Mit Library-PIC-Bibliotheken linken."
  
  #: config/frv/frv.opt:237
  #, no-c-format
--- 11246,11252 ----
  #: config/frv/frv.opt:233
  #, no-c-format
  msgid "Link with the library-pic libraries."
! msgstr "Mit Library-PIC-Bibliotheken binden."
  
  #: config/frv/frv.opt:237
  #, no-c-format
*************** msgstr "Strategie zur Adresserzeugung f�
*** 11301,11307 ****
  #: config/nds32/nds32-elf.opt:7 config/nds32/nds32-linux.opt:7
  #, no-c-format
  msgid "Known cmodel types (for use with the -mcmodel= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit Option -mcmodel=):"
  
  #: config/nds32/nds32.opt:29 config/nds32/nds32.opt:89
  #, no-c-format
--- 11301,11307 ----
  #: config/nds32/nds32-elf.opt:7 config/nds32/nds32-linux.opt:7
  #, no-c-format
  msgid "Known cmodel types (for use with the -mcmodel= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit der Option »-mcmodel=«):"
  
  #: config/nds32/nds32.opt:29 config/nds32/nds32.opt:89
  #, no-c-format
*************** msgstr "ABI-Art, für die der Code gener
*** 11331,11342 ****
  #: config/nds32/nds32.opt:61
  #, no-c-format
  msgid "Specify use soft floating point ABI which mean alias to -mabi=2."
! msgstr "Software-Gleitkomma-ABI verwenden, gleichbedeutend mit -mabi=2."
  
  #: config/nds32/nds32.opt:65
  #, no-c-format
  msgid "Specify use soft floating point ABI which mean alias to -mabi=2fp+."
! msgstr "Software-Gleitkomma-ABI verwenden, gleichbedeutend mit -mabi=2fp+."
  
  #: config/nds32/nds32.opt:71
  #, no-c-format
--- 11331,11342 ----
  #: config/nds32/nds32.opt:61
  #, no-c-format
  msgid "Specify use soft floating point ABI which mean alias to -mabi=2."
! msgstr "Software-Gleitkomma-ABI verwenden, gleichbedeutend mit »-mabi=2«."
  
  #: config/nds32/nds32.opt:65
  #, no-c-format
  msgid "Specify use soft floating point ABI which mean alias to -mabi=2fp+."
! msgstr "Software-Gleitkomma-ABI verwenden, gleichbedeutend mit »-mabi=2fp+«."
  
  #: config/nds32/nds32.opt:71
  #, no-c-format
*************** msgstr "Verhindern, dass $fp während de
*** 11366,11372 ****
  #: config/nds32/nds32.opt:101
  #, no-c-format
  msgid "Forbid using $fp to access static and global variables.  This option strictly forbids fp-as-gp optimization regardless of '-mforce-fp-as-gp'."
! msgstr "Verbieten, dass mittels $fp auf statische oder globale Variablen zugegriffen wird. Diese Option verhindert die FP-als-GP-Optimierung, unabhängig von -mforce-fp-as-gp."
  
  #: config/nds32/nds32.opt:105
  #, no-c-format
--- 11366,11372 ----
  #: config/nds32/nds32.opt:101
  #, no-c-format
  msgid "Forbid using $fp to access static and global variables.  This option strictly forbids fp-as-gp optimization regardless of '-mforce-fp-as-gp'."
! msgstr "Verbieten, dass mittels $fp auf statische oder globale Variablen zugegriffen wird. Diese Option verhindert die FP-als-GP-Optimierung, unabhängig von »-mforce-fp-as-gp«."
  
  #: config/nds32/nds32.opt:105
  #, no-c-format
*************** msgstr "Strategie zur Adresserzeugung f�
*** 11376,11382 ****
  #: config/nds32/nds32.opt:109
  #, no-c-format
  msgid "Known cmodel types (for use with the -mict-model= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit Option -mict-model=):"
  
  #: config/nds32/nds32.opt:119
  #, no-c-format
--- 11376,11382 ----
  #: config/nds32/nds32.opt:109
  #, no-c-format
  msgid "Known cmodel types (for use with the -mict-model= option):"
! msgstr "Bekannte Codemodelle (für Verwendung mit der Option »-mict-model=«):"
  
  #: config/nds32/nds32.opt:119
  #, no-c-format
*************** msgstr "16-Bit-Befehle erzeugen."
*** 11421,11427 ****
  #: config/nds32/nds32.opt:151
  #, no-c-format
  msgid "Insert relax hint for linker to do relaxation."
! msgstr "Lockerungs-Hinweis an Linker übergeben, um Lockerung durchzuführen."
  
  #: config/nds32/nds32.opt:155
  #, no-c-format
--- 11421,11427 ----
  #: config/nds32/nds32.opt:151
  #, no-c-format
  msgid "Insert relax hint for linker to do relaxation."
! msgstr "Lockerungs-Hinweis an Binder übergeben, um Lockerung durchzuführen."
  
  #: config/nds32/nds32.opt:155
  #, no-c-format
*************** msgstr "Die Größe jedes Cache-Blocks (
*** 11446,11452 ****
  #: config/nds32/nds32.opt:175
  #, no-c-format
  msgid "Known arch types (for use with the -march= option):"
! msgstr "Bekannte Architekturen (für Verwendung mit Option -march=):"
  
  #: config/nds32/nds32.opt:197
  #, no-c-format
--- 11446,11452 ----
  #: config/nds32/nds32.opt:175
  #, no-c-format
  msgid "Known arch types (for use with the -march= option):"
! msgstr "Bekannte Architekturen (für Verwendung mit der Option »-march=«):"
  
  #: config/nds32/nds32.opt:197
  #, no-c-format
*************** msgstr "CPU für Pipeline-Modell angeben
*** 11456,11462 ****
  #: config/nds32/nds32.opt:201
  #, no-c-format
  msgid "Known cpu types (for use with the -mcpu= option):"
! msgstr "Bekannte CPU-Typen (für Verwendung mit Option -mcpu=):"
  
  #: config/nds32/nds32.opt:361
  #, no-c-format
--- 11456,11462 ----
  #: config/nds32/nds32.opt:201
  #, no-c-format
  msgid "Known cpu types (for use with the -mcpu= option):"
! msgstr "Bekannte CPU-Typen (für Verwendung mit der Option »-mcpu=«):"
  
  #: config/nds32/nds32.opt:361
  #, no-c-format
*************** msgstr "FPU-Konfigurationswert von 0 bis
*** 11466,11472 ****
  #: config/nds32/nds32.opt:365
  #, no-c-format
  msgid "Known floating-point number of registers (for use with the -mconfig-fpu= option):"
! msgstr "Bekannte Anzahl der Gleitkomma-Register (für Verwendung mit der Option -mconfig-fpu=):"
  
  #: config/nds32/nds32.opt:393
  #, no-c-format
--- 11466,11472 ----
  #: config/nds32/nds32.opt:365
  #, no-c-format
  msgid "Known floating-point number of registers (for use with the -mconfig-fpu= option):"
! msgstr "Bekannte Anzahl der Gleitkomma-Register (für Verwendung mit der Option »-mconfig-fpu=«):"
  
  #: config/nds32/nds32.opt:393
  #, no-c-format
*************** msgstr "Konstruktor-/Destruktor-Feature
*** 11486,11492 ****
  #: config/nds32/nds32.opt:429
  #, no-c-format
  msgid "Guide linker to relax instructions."
! msgstr "Linker anweisen, Befehle zu lockern."
  
  #: config/nds32/nds32.opt:433
  #, no-c-format
--- 11486,11492 ----
  #: config/nds32/nds32.opt:429
  #, no-c-format
  msgid "Guide linker to relax instructions."
! msgstr "Binder anweisen, Befehle zu lockern."
  
  #: config/nds32/nds32.opt:433
  #, no-c-format
*************** msgstr "Gleitkommabefehle doppelter Gena
*** 11506,11512 ****
  #: config/nds32/nds32.opt:445
  #, no-c-format
  msgid "Force disable hardware loop, even use -mext-dsp."
! msgstr "Ausschalten der Hardwareschleife erzwingen, selbst wenn -mext-dsp angegeben ist."
  
  #: config/nds32/nds32.opt:449
  #, no-c-format
--- 11506,11512 ----
  #: config/nds32/nds32.opt:445
  #, no-c-format
  msgid "Force disable hardware loop, even use -mext-dsp."
! msgstr "Ausschalten der Hardwareschleife erzwingen, selbst wenn »-mext-dsp« angegeben ist."
  
  #: config/nds32/nds32.opt:449
  #, no-c-format
*************** msgstr "CPU für Planzwecke angeben."
*** 11541,11547 ****
  #: config/iq2000/iq2000.opt:51
  #, no-c-format
  msgid "Known IQ2000 CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte IQ2000-CPUs (für Verwendung mit Option -mcpu=):"
  
  #: config/iq2000/iq2000.opt:61 config/mips/mips.opt:142
  #, no-c-format
--- 11541,11547 ----
  #: config/iq2000/iq2000.opt:51
  #, no-c-format
  msgid "Known IQ2000 CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte IQ2000-CPUs (für Verwendung mit der Option »-mcpu=«):"
  
  #: config/iq2000/iq2000.opt:61 config/mips/mips.opt:142
  #, no-c-format
*************** msgstr "Kein voreingestelltes crt0.o."
*** 11556,11562 ****
  #: config/iq2000/iq2000.opt:74 config/mips/mips.opt:442
  #, no-c-format
  msgid "Put uninitialized constants in ROM (needs -membedded-data)."
! msgstr "Uninitialisierte Konstanten im ROM ablegen (benötigt -membedded-data)."
  
  #: config/csky/csky.opt:34
  #, no-c-format
--- 11556,11562 ----
  #: config/iq2000/iq2000.opt:74 config/mips/mips.opt:442
  #, no-c-format
  msgid "Put uninitialized constants in ROM (needs -membedded-data)."
! msgstr "Uninitialisierte Konstanten im ROM ablegen (benötigt »-membedded-data«)."
  
  #: config/csky/csky.opt:34
  #, no-c-format
*************** msgstr "Planung von Funktionsprolog- und
*** 11691,11712 ****
  #: config/csky/csky_tables.opt:24
  #, no-c-format
  msgid "Known CSKY CPUs (for use with the -mcpu= options):"
! msgstr "Bekannte CSKY-CPUs (für Verwendung mit Option -mcpu=):"
  
  #: config/csky/csky_tables.opt:205
  #, no-c-format
  msgid "Known CSKY architectures (for use with the -march= option):"
! msgstr "Bekannte CSKY-Architekturen (für Verwendung mit Option -march=):"
  
  #: config/csky/csky_tables.opt:227
  #, no-c-format
  msgid "Known CSKY FPUs (for use with the -mfpu= option):"
! msgstr "Bekannte CSKY-FPUs (für Verwendung mit Option -mfpu=):"
  
  #: config/c6x/c6x-tables.opt:24
  #, no-c-format
  msgid "Known C6X ISAs (for use with the -march= option):"
! msgstr "Bekannte C6X ISAs (für Verwendung mit der Option -march=):"
  
  #: config/c6x/c6x.opt:30 config/mips/mips.opt:134
  #, no-c-format
--- 11691,11712 ----
  #: config/csky/csky_tables.opt:24
  #, no-c-format
  msgid "Known CSKY CPUs (for use with the -mcpu= options):"
! msgstr "Bekannte CSKY-CPUs (für Verwendung mit der Option »-mcpu=«):"
  
  #: config/csky/csky_tables.opt:205
  #, no-c-format
  msgid "Known CSKY architectures (for use with the -march= option):"
! msgstr "Bekannte CSKY-Architekturen (für Verwendung mit der Option »-march=«):"
  
  #: config/csky/csky_tables.opt:227
  #, no-c-format
  msgid "Known CSKY FPUs (for use with the -mfpu= option):"
! msgstr "Bekannte CSKY-FPUs (für Verwendung mit der Option »-mfpu=«):"
  
  #: config/c6x/c6x-tables.opt:24
  #, no-c-format
  msgid "Known C6X ISAs (for use with the -march= option):"
! msgstr "Bekannte C6X ISAs (für Verwendung mit der Option »-march=«):"
  
  #: config/c6x/c6x.opt:30 config/mips/mips.opt:134
  #, no-c-format
*************** msgstr "Methode für sdata-Behandlung au
*** 11726,11732 ****
  #: config/c6x/c6x.opt:46
  #, no-c-format
  msgid "Valid arguments for the -msdata= option:"
! msgstr "Gültige Argumente für die Option -msdata=:"
  
  #: config/c6x/c6x.opt:59
  #, no-c-format
--- 11726,11732 ----
  #: config/c6x/c6x.opt:46
  #, no-c-format
  msgid "Valid arguments for the -msdata= option:"
! msgstr "Gültige Argumente für die Option »-msdata=«:"
  
  #: config/c6x/c6x.opt:59
  #, no-c-format
*************** msgstr "Prüfungen generieren, die bei A
*** 11831,11837 ****
  #: config/cris/cris.opt:188
  #, no-c-format
  msgid "Handle atomic builtins that may be applied to unaligned data by calling library functions. Overrides -mtrap-unaligned-atomic."
! msgstr "Bibliotheksfunktionen aufrufen, wenn atomare eingebaute Operationen auf unausgerichteten Speicher angewendet werden können. Hebt -mtrap-unaligned-atomic auf."
  
  #: config/sh/superh.opt:6
  #, no-c-format
--- 11831,11837 ----
  #: config/cris/cris.opt:188
  #, no-c-format
  msgid "Handle atomic builtins that may be applied to unaligned data by calling library functions. Overrides -mtrap-unaligned-atomic."
! msgstr "Bibliotheksfunktionen aufrufen, wenn atomare eingebaute Operationen auf unausgerichteten Speicher angewendet werden können. Hebt »-mtrap-unaligned-atomic« auf."
  
  #: config/sh/superh.opt:6
  #, no-c-format
*************** msgstr "ELF-FDPIC-Code erzeugen."
*** 12056,12062 ****
  #: config/sh/sh.opt:223
  #, no-c-format
  msgid "Enable the use of 64-bit floating point registers in fmov instructions.  See -mdalign if 64-bit alignment is required."
! msgstr "Verwendung von 64-Bit Gleitkommaregistern in FMOV-Befehlen einschalten. Siehe auch -mdalign, wenn 64-Bit-Ausrichtung benötigt wird."
  
  #: config/sh/sh.opt:231 config/sh/sh.opt:269
  #, no-c-format
--- 12056,12062 ----
  #: config/sh/sh.opt:223
  #, no-c-format
  msgid "Enable the use of 64-bit floating point registers in fmov instructions.  See -mdalign if 64-bit alignment is required."
! msgstr "Verwendung von 64-Bit Gleitkommaregistern in FMOV-Befehlen einschalten. Siehe auch »-mdalign«, wenn 64-Bit-Ausrichtung benötigt wird."
  
  #: config/sh/sh.opt:231 config/sh/sh.opt:269
  #, no-c-format
*************** msgstr "Auswählen, für welche eBPF-ISA
*** 12271,12282 ****
  #: config/bpf/bpf.opt:84
  #, no-c-format
  msgid "Valid ISA versions (for use with the -mcpu= option)"
! msgstr "Gültige ISA-Versionen (für Verwendung mit der Option -mcpu=)"
  
  #: config/bpf/bpf.opt:104
  #, no-c-format
  msgid "Known assembler dialects (for use with the -masm= option)"
! msgstr "Bekannte Assemblerdialekte (für Verwendung mit Option »-masm=«)"
  
  #: config/bpf/bpf.opt:114
  #, no-c-format
--- 12271,12282 ----
  #: config/bpf/bpf.opt:84
  #, no-c-format
  msgid "Valid ISA versions (for use with the -mcpu= option)"
! msgstr "Gültige ISA-Versionen (für Verwendung mit der Option »-mcpu=«)"
  
  #: config/bpf/bpf.opt:104
  #, no-c-format
  msgid "Known assembler dialects (for use with the -masm= option)"
! msgstr "Bekannte Assemblerdialekte (für Verwendung mit der Option »-masm=«)"
  
  #: config/bpf/bpf.opt:114
  #, no-c-format
*************** msgstr "-mabi=ABI\tCode erzeugen, der zu
*** 12291,12297 ****
  #: config/mips/mips.opt:36
  #, no-c-format
  msgid "Known MIPS ABIs (for use with the -mabi= option):"
! msgstr "Bekannte MIPS-ABIs (für Verwendung mit Option -mabi=):"
  
  #: config/mips/mips.opt:55
  #, no-c-format
--- 12291,12297 ----
  #: config/mips/mips.opt:36
  #, no-c-format
  msgid "Known MIPS ABIs (for use with the -mabi= option):"
! msgstr "Bekannte MIPS-ABIs (für Verwendung mit der Option »-mabi=«):"
  
  #: config/mips/mips.opt:55
  #, no-c-format
*************** msgstr "-mcode-readable=SETTING\tAngeben
*** 12331,12337 ****
  #: config/mips/mips.opt:91
  #, no-c-format
  msgid "Valid arguments to -mcode-readable=:"
! msgstr "Gültige Argumente für -mcode-readable=:"
  
  #: config/mips/mips.opt:104
  #, no-c-format
--- 12331,12337 ----
  #: config/mips/mips.opt:91
  #, no-c-format
  msgid "Valid arguments to -mcode-readable=:"
! msgstr "Gültige Argumente für »-mcode-readable=«:"
  
  #: config/mips/mips.opt:104
  #, no-c-format
*************** msgstr "-mnan=CODIERUNG\tDatencodierung
*** 12461,12467 ****
  #: config/mips/mips.opt:247
  #, no-c-format
  msgid "Known MIPS IEEE 754 settings (for use with the -mabs= and -mnan= options):"
! msgstr "Bekannte MIPS-IEEE-754-Einstellungen (für Verwendung mit Optionen -mabs= und -mnan=):"
  
  #: config/mips/mips.opt:257
  #, no-c-format
--- 12461,12467 ----
  #: config/mips/mips.opt:247
  #, no-c-format
  msgid "Known MIPS IEEE 754 settings (for use with the -mabs= and -mnan= options):"
! msgstr "Bekannte MIPS-IEEE-754-Einstellungen (für Verwendung mit der Optionen »-mabs=« und »-mnan=«):"
  
  #: config/mips/mips.opt:257
  #, no-c-format
*************** msgstr "Code erzeugen, der sicher mit MI
*** 12496,12502 ****
  #: config/mips/mips.opt:281
  #, no-c-format
  msgid "An alias for minterlink-compressed provided for backward-compatibility."
! msgstr "Alias für -minterlink-compressed; für Rückwärtskompatibilität erhalten."
  
  #: config/mips/mips.opt:285
  #, no-c-format
--- 12496,12502 ----
  #: config/mips/mips.opt:281
  #, no-c-format
  msgid "An alias for minterlink-compressed provided for backward-compatibility."
! msgstr "Alias für »-minterlink-compressed«; für Rückwärtskompatibilität erhalten."
  
  #: config/mips/mips.opt:285
  #, no-c-format
*************** msgstr "-mr10k-cache-barrier=EINSTELLUNG
*** 12606,12622 ****
  #: config/mips/mips.opt:369
  #, no-c-format
  msgid "Valid arguments to -mr10k-cache-barrier=:"
! msgstr "Gültige Argumente für -mr10k-cache-barrier=:"
  
  #: config/mips/mips.opt:382
  #, no-c-format
  msgid "Try to allow the linker to turn PIC calls into direct calls."
! msgstr "Dem Linker erlauben, PIC-Aufrufe in direkte Aufrufe umzuwandeln."
  
  #: config/mips/mips.opt:386
  #, no-c-format
  msgid "When generating -mabicalls code, make the code suitable for use in shared libraries."
! msgstr "Bei Erzeugung von -mabicalls den Code tauglich für gemeinsam genutzte Bibliotheken machen."
  
  #: config/mips/mips.opt:394
  #, no-c-format
--- 12606,12622 ----
  #: config/mips/mips.opt:369
  #, no-c-format
  msgid "Valid arguments to -mr10k-cache-barrier=:"
! msgstr "Gültige Argumente für »-mr10k-cache-barrier=«:"
  
  #: config/mips/mips.opt:382
  #, no-c-format
  msgid "Try to allow the linker to turn PIC calls into direct calls."
! msgstr "Dem Binder erlauben, PIC-Aufrufe in direkte Aufrufe umzuwandeln."
  
  #: config/mips/mips.opt:386
  #, no-c-format
  msgid "When generating -mabicalls code, make the code suitable for use in shared libraries."
! msgstr "Bei Erzeugung von »-mabicalls« den Code tauglich für gemeinsam genutzte Bibliotheken machen."
  
  #: config/mips/mips.opt:394
  #, no-c-format
*************** msgstr "Keinen Code mit unausgerichtetem
*** 12661,12672 ****
  #: config/mips/mips.opt:434
  #, no-c-format
  msgid "Generate code with unaligned load store for R6 (alias of -mno-strict-align)."
! msgstr "Code mit unausgerichtetem load/store für R6 generieren (Alias von -mno-strict-align)."
  
  #: config/mips/mips.opt:438
  #, no-c-format
  msgid "Don't generate code with unaligned load store for R6 (alias of -mstrict-align)."
! msgstr "Keinen Code mit unausgerichtetem load/store für R6 generieren (Alias von -mstrict-align)."
  
  #: config/mips/mips.opt:446
  #, no-c-format
--- 12661,12672 ----
  #: config/mips/mips.opt:434
  #, no-c-format
  msgid "Generate code with unaligned load store for R6 (alias of -mno-strict-align)."
! msgstr "Code mit unausgerichtetem load/store für R6 generieren (Alias von »-mno-strict-align«)."
  
  #: config/mips/mips.opt:438
  #, no-c-format
  msgid "Don't generate code with unaligned load store for R6 (alias of -mstrict-align)."
! msgstr "Keinen Code mit unausgerichtetem load/store für R6 generieren (Alias von »-mstrict-align«)."
  
  #: config/mips/mips.opt:446
  #, no-c-format
*************** msgstr "Loongson-Erweiterungsbefehle R2
*** 12741,12757 ****
  #: config/mips/mips-tables.opt:24
  #, no-c-format
  msgid "Known MIPS CPUs (for use with the -march= and -mtune= options):"
! msgstr "Bekannte MIPS-CPUs (für Verwendung mit Optionen -march= und -mtune=):"
  
  #: config/mips/mips-tables.opt:28
  #, no-c-format
  msgid "Known MIPS ISA levels (for use with the -mips option):"
! msgstr "Bekannte MIPS-ISA-Stufen (für Verwendung mit Option -mips):"
  
  #: config/arc/arc-tables.opt:25
  #, no-c-format
  msgid "Known ARC CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte ARC-CPUs (für Verwendung mit Option -mcpu=):"
  
  #: config/arc/arc.opt:26
  #, no-c-format
--- 12741,12757 ----
  #: config/mips/mips-tables.opt:24
  #, no-c-format
  msgid "Known MIPS CPUs (for use with the -march= and -mtune= options):"
! msgstr "Bekannte MIPS-CPUs (für Verwendung mit der Optionen »-march=« und »-mtune=«):"
  
  #: config/mips/mips-tables.opt:28
  #, no-c-format
  msgid "Known MIPS ISA levels (for use with the -mips option):"
! msgstr "Bekannte MIPS-ISA-Stufen (für Verwendung mit der Option »-mips«):"
  
  #: config/arc/arc-tables.opt:25
  #, no-c-format
  msgid "Known ARC CPUs (for use with the -mcpu= option):"
! msgstr "Bekannte ARC-CPUs (für Verwendung mit der Option »-mcpu=«):"
  
  #: config/arc/arc.opt:26
  #, no-c-format
*************** msgstr "ARCompact-32-Bit-Code für ARC60
*** 12776,12782 ****
  #: config/arc/arc.opt:42
  #, no-c-format
  msgid "Same as -mA6."
! msgstr "Identisch zu -mA6."
  
  #: config/arc/arc.opt:46
  #, no-c-format
--- 12776,12782 ----
  #: config/arc/arc.opt:42
  #, no-c-format
  msgid "Same as -mA6."
! msgstr "Identisch zu »-mA6«."
  
  #: config/arc/arc.opt:46
  #, no-c-format
*************** msgstr "ARCompact-32-Bit-Code für ARC70
*** 12791,12797 ****
  #: config/arc/arc.opt:54
  #, no-c-format
  msgid "Same as -mA7."
! msgstr "Identisch zu -mA7."
  
  #: config/arc/arc.opt:58
  #, no-c-format
--- 12791,12797 ----
  #: config/arc/arc.opt:54
  #, no-c-format
  msgid "Same as -mA7."
! msgstr "Identisch zu »-mA7«."
  
  #: config/arc/arc.opt:58
  #, no-c-format
*************** msgstr "-mcpu=CPU\tCode für ARC-Variant
*** 12921,12927 ****
  #: config/arc/arc.opt:238
  #, no-c-format
  msgid "Size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os."
! msgstr "Größenoptimierungsstufe: 0:keine 1:vorteilhaft 2:regalloc 3:drop align, -Os."
  
  #: config/arc/arc.opt:246
  #, no-c-format
--- 12921,12927 ----
  #: config/arc/arc.opt:238
  #, no-c-format
  msgid "Size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os."
! msgstr "Größenoptimierungsstufe: 0:keine 1:vorteilhaft 2:regalloc 3:drop align, »-Os«."
  
  #: config/arc/arc.opt:246
  #, no-c-format
*************** msgstr "Erweiterung für 64-Bit-Zeitstem
*** 13021,13042 ****
  #: config/arc/arc.opt:388
  #, no-c-format
  msgid "Pass -EB option through to linker."
! msgstr "Option -EB an den Linker übergeben."
  
  #: config/arc/arc.opt:392
  #, no-c-format
  msgid "Pass -EL option through to linker."
! msgstr "Option -EL an den Linker übergeben."
  
  #: config/arc/arc.opt:396
  #, no-c-format
  msgid "Pass -marclinux option through to linker."
! msgstr "Option -marclinux an den Linker übergeben."
  
  #: config/arc/arc.opt:400
  #, no-c-format
  msgid "Pass -marclinux_prof option through to linker."
! msgstr "Option -marclinux_prof an den Linker übergeben."
  
  #: config/arc/arc.opt:409
  #, no-c-format
--- 13021,13042 ----
  #: config/arc/arc.opt:388
  #, no-c-format
  msgid "Pass -EB option through to linker."
! msgstr "Option »-EB« an den Binder übergeben."
  
  #: config/arc/arc.opt:392
  #, no-c-format
  msgid "Pass -EL option through to linker."
! msgstr "Option »-EL« an den Binder übergeben."
  
  #: config/arc/arc.opt:396
  #, no-c-format
  msgid "Pass -marclinux option through to linker."
! msgstr "Option »-marclinux« an den Binder übergeben."
  
  #: config/arc/arc.opt:400
  #, no-c-format
  msgid "Pass -marclinux_prof option through to linker."
! msgstr "Option »-marclinux_prof« an den Binder übergeben."
  
  #: config/arc/arc.opt:409
  #, no-c-format
*************** msgstr "Die Opcodes ENTER_S und LEAVE_S
*** 13116,13127 ****
  #: config/vxworks-smp.opt:25
  #, no-c-format
  msgid "Select VxWorks SMP C runtimes for linking."
! msgstr "SMP-C-Laufzeiten von VxWorks zum Linken auswählen."
  
  #: lto/lang.opt:50
  #, no-c-format
  msgid "Set linker output type (used internally during LTO optimization)."
! msgstr "Ausgabeart des Linkers festlegen (wird intern während der LTO-Optimierung verwendet)."
  
  #: lto/lang.opt:54
  #, no-c-format
--- 13116,13127 ----
  #: config/vxworks-smp.opt:25
  #, no-c-format
  msgid "Select VxWorks SMP C runtimes for linking."
! msgstr "SMP-C-Laufzeiten von VxWorks zum Binden auswählen."
  
  #: lto/lang.opt:50
  #, no-c-format
  msgid "Set linker output type (used internally during LTO optimization)."
! msgstr "Ausgabeart des Binders festlegen (wird intern während der LTO-Optimierung verwendet)."
  
  #: lto/lang.opt:54
  #, no-c-format
*************** msgstr "--help=<Klasse>\tBeschreibungen
*** 13231,13237 ****
  #: common.opt:420
  #, no-c-format
  msgid "Display target specific command line options (including assembler and linker options)."
! msgstr "Zielspezifische Befehlszeilenoptionen (einschließlich Assembler- und Linker-Optionen) anzeigen."
  
  #: common.opt:472
  #, no-c-format
--- 13231,13237 ----
  #: common.opt:420
  #, no-c-format
  msgid "Display target specific command line options (including assembler and linker options)."
! msgstr "Zielspezifische Befehlszeilenoptionen (einschließlich Assembler- und Binder-Optionen) anzeigen."
  
  #: common.opt:472
  #, no-c-format
*************** msgstr "Aggressiv auf Größe statt Gesc
*** 13261,13267 ****
  #: common.opt:528
  #, no-c-format
  msgid "This switch is deprecated; use -Wextra instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen -Wextra verwenden."
  
  #: common.opt:541
  #, no-c-format
--- 13261,13267 ----
  #: common.opt:528
  #, no-c-format
  msgid "This switch is deprecated; use -Wextra instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen »-Wextra« verwenden."
  
  #: common.opt:541
  #, no-c-format
*************** msgstr "Warnen, wenn ein Zeiger oder ein
*** 13426,13432 ****
  #: common.opt:706
  #, no-c-format
  msgid "Warn about some C++ One Definition Rule violations during link time optimization."
! msgstr "Während der Optimierungen zur Linkzeit bei einigen Verletzungen der One-Definition-Rule aus C++ warnen."
  
  #: common.opt:710
  #, no-c-format
--- 13426,13432 ----
  #: common.opt:706
  #, no-c-format
  msgid "Warn about some C++ One Definition Rule violations during link time optimization."
! msgstr "Während der Optimierungen zur Bindezeit bei einigen Verletzungen der One-Definition-Rule aus C++ warnen."
  
  #: common.opt:710
  #, no-c-format
*************** msgstr "Bei Überlauf in arithmetischen
*** 13436,13442 ****
  #: common.opt:714
  #, no-c-format
  msgid "During link time optimization warn about mismatched types of global declarations."
! msgstr "Während der Optimierungen zur Linkzeit bei unpassenden Typen von globalen Deklarationen warnen."
  
  #: common.opt:718
  #, no-c-format
--- 13436,13442 ----
  #: common.opt:714
  #, no-c-format
  msgid "During link time optimization warn about mismatched types of global declarations."
! msgstr "Während der Optimierungen zur Bindezeit bei unpassenden Typen von globalen Deklarationen warnen."
  
  #: common.opt:718
  #, no-c-format
*************** msgstr "Bei Rückgabe eines Zeigers/Refe
*** 13461,13467 ****
  #: common.opt:734
  #, no-c-format
  msgid "Warn when one variable shadows another.  Same as -Wshadow=global."
! msgstr "Warnen, wenn eine Variable eine andere überdeckt. Entspricht -Wshadow=global."
  
  #: common.opt:738
  #, no-c-format
--- 13461,13467 ----
  #: common.opt:734
  #, no-c-format
  msgid "Warn when one variable shadows another.  Same as -Wshadow=global."
! msgstr "Warnen, wenn eine Variable eine andere überdeckt. Entspricht »-Wshadow=global«."
  
  #: common.opt:738
  #, no-c-format
*************** msgstr "Bei virtuellen Methoden in C++ w
*** 13546,13552 ****
  #: common.opt:816
  #, no-c-format
  msgid "Warn about statements between switch's controlling expression and the first case."
! msgstr "Bei Anweisungen warnen, die zwischen »switch (...)« und dem ersten »case:« stehen."
  
  #: common.opt:821
  #, no-c-format
--- 13546,13552 ----
  #: common.opt:816
  #, no-c-format
  msgid "Warn about statements between switch's controlling expression and the first case."
! msgstr "Bei Anweisungen warnen, die zwischen »switch (…)« und dem ersten »case:« stehen."
  
  #: common.opt:821
  #, no-c-format
*************** msgstr "Warnungen aus System-Headern nic
*** 13556,13562 ****
  #: common.opt:825
  #, no-c-format
  msgid "Warn if a comparison always evaluates to true or false."
! msgstr "Warnen, wenn ein Vergleich immer zu »wahr« oder »falsch« auswertet."
  
  #: common.opt:829
  #, no-c-format
--- 13556,13562 ----
  #: common.opt:825
  #, no-c-format
  msgid "Warn if a comparison always evaluates to true or false."
! msgstr "Warnen, wenn ein Vergleich immer zu »true« oder »false« auswertet."
  
  #: common.opt:829
  #, no-c-format
*************** msgstr "Warnen, wenn ein Trampolin gener
*** 13566,13577 ****
  #: common.opt:833
  #, no-c-format
  msgid "Warn about cases where -ftrivial-auto-var-init cannot initialize an auto variable."
! msgstr "Vor Fällen warnen, in denen -ftrivial-auto-var-init eine Auto-Variable nicht initialisieren kann."
  
  #: common.opt:837
  #, no-c-format
  msgid "Warn if a comparison is always true or always false due to the limited range of the data type."
! msgstr "Warnen, wenn ein Vergleich durch beschränkten Wertebereich des Datentyps stets »wahr« oder »unwahr« ist."
  
  #: common.opt:841
  #, no-c-format
--- 13566,13577 ----
  #: common.opt:833
  #, no-c-format
  msgid "Warn about cases where -ftrivial-auto-var-init cannot initialize an auto variable."
! msgstr "Vor Fällen warnen, in denen »-ftrivial-auto-var-init« eine Auto-Variable nicht initialisieren kann."
  
  #: common.opt:837
  #, no-c-format
  msgid "Warn if a comparison is always true or always false due to the limited range of the data type."
! msgstr "Warnen, wenn ein Vergleich durch beschränkten Wertebereich des Datentyps stets »true« oder »false« ist."
  
  #: common.opt:841
  #, no-c-format
*************** msgstr "Bei möglicherweise nicht initia
*** 13586,13592 ****
  #: common.opt:853
  #, no-c-format
  msgid "Enable all -Wunused- warnings."
! msgstr "Alle -Wunused- Warnungen einschalten."
  
  #: common.opt:857
  #, no-c-format
--- 13586,13592 ----
  #: common.opt:853
  #, no-c-format
  msgid "Enable all -Wunused- warnings."
! msgstr "Alle »-Wunused«-Warnungen einschalten."
  
  #: common.opt:857
  #, no-c-format
*************** msgstr "Warnen, wenn eine Variable nicht
*** 13626,13632 ****
  #: common.opt:885
  #, no-c-format
  msgid "Warn in case profiles in -fprofile-use do not match."
! msgstr "Warnen, wenn Profile in -fprofile-use nicht zueinander passen."
  
  #: common.opt:889
  #, no-c-format
--- 13626,13632 ----
  #: common.opt:885
  #, no-c-format
  msgid "Warn in case profiles in -fprofile-use do not match."
! msgstr "Warnen, wenn Profile in »-fprofile-use« nicht zueinander passen."
  
  #: common.opt:889
  #, no-c-format
*************** msgstr "-fpath-coverage-limit=<Anzahl> F
*** 13646,13657 ****
  #: common.opt:903
  #, no-c-format
  msgid "Warn if a function exceeds the number of paths (controlled by -fpath-coverage-limit) and path coverage give up instrumenting the function. The limit is approximate and conservative and coverage might give up even if the actual number is slightly below the limit."
! msgstr "Warnen, wenn eine Funktion die Anzahl der Pfade (gesteuert durch -fpath-coverage-limit) überschreitet und die Pfadabdeckung die Instrumentierung der Funktion aufgibt. Der Grenzwert ist annähernd und konservativ, und die Abdeckung könnte auch dann aufgeben, wenn die tatsächliche Anzahl etwas unter dem Grenzwert liegt."
  
  #: common.opt:910
  #, no-c-format
  msgid "Warn in case profiles in -fprofile-use do not exist."
! msgstr "Warnen, wenn Profile in -fprofile-use nicht existieren."
  
  #: common.opt:914
  #, no-c-format
--- 13646,13657 ----
  #: common.opt:903
  #, no-c-format
  msgid "Warn if a function exceeds the number of paths (controlled by -fpath-coverage-limit) and path coverage give up instrumenting the function. The limit is approximate and conservative and coverage might give up even if the actual number is slightly below the limit."
! msgstr "Warnen, wenn eine Funktion die Anzahl der Pfade (gesteuert durch »-fpath-coverage-limit«) überschreitet und die Pfadabdeckung die Instrumentierung der Funktion aufgibt. Der Grenzwert ist annähernd und konservativ, und die Abdeckung könnte auch dann aufgeben, wenn die tatsächliche Anzahl etwas unter dem Grenzwert liegt."
  
  #: common.opt:910
  #, no-c-format
  msgid "Warn in case profiles in -fprofile-use do not exist."
! msgstr "Warnen, wenn Profile in »-fprofile-use« nicht existieren."
  
  #: common.opt:914
  #, no-c-format
*************** msgstr "Nach dem Erkennen von undefinier
*** 13756,13762 ****
  #: common.opt:1158
  #, no-c-format
  msgid "This switch is deprecated; use -fsanitize-recover= instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen -fsanitize-recover= verwenden."
  
  #: common.opt:1162
  #, no-c-format
--- 13756,13762 ----
  #: common.opt:1158
  #, no-c-format
  msgid "This switch is deprecated; use -fsanitize-recover= instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen »-fsanitize-recover=« verwenden."
  
  #: common.opt:1162
  #, no-c-format
*************** msgstr "Für das Bereinigen von undefini
*** 13766,13772 ****
  #: common.opt:1172
  #, no-c-format
  msgid "This switch is deprecated; use -fsanitize-trap= instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen -fsanitize-trap= verwenden."
  
  #: common.opt:1176
  #, no-c-format
--- 13766,13772 ----
  #: common.opt:1172
  #, no-c-format
  msgid "This switch is deprecated; use -fsanitize-trap= instead."
! msgstr "Dieser Schalter ist veraltet; stattdessen »-fsanitize-trap=« verwenden."
  
  #: common.opt:1176
  #, no-c-format
*************** msgstr "Uninitialisierte globale Symbole
*** 13866,13877 ****
  #: common.opt:1281
  #, no-c-format
  msgid "-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump."
! msgstr "-fcompare-debug[=<Optionen>]\tMit und ohne z.B. -gtoggle kompilieren, und den Dump der »final-insns« vergleichen."
  
  #: common.opt:1285
  #, no-c-format
  msgid "Run only the second compilation of -fcompare-debug."
! msgstr "Nur die zweite Kompilierung von -fcompare-debug laufen lassen."
  
  #: common.opt:1289
  #, no-c-format
--- 13866,13877 ----
  #: common.opt:1281
  #, no-c-format
  msgid "-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump."
! msgstr "-fcompare-debug[=<Optionen>]\tMit und ohne z.B. »-gtoggle« kompilieren, und den Dump der »final-insns« vergleichen."
  
  #: common.opt:1285
  #, no-c-format
  msgid "Run only the second compilation of -fcompare-debug."
! msgstr "Nur die zweite Kompilierung von »-fcompare-debug« laufen lassen."
  
  #: common.opt:1289
  #, no-c-format
*************** msgstr "Alle Schleifen als parallel mark
*** 14326,14332 ****
  #: common.opt:1852 common.opt:1860 common.opt:3246
  #, no-c-format
  msgid "Enable loop nest transforms.  Same as -floop-nest-optimize."
! msgstr "Schleifenschachtelungs-Umwandlungen einschalten. Entspricht -floop-next-optimize."
  
  #: common.opt:1856
  #, no-c-format
--- 14326,14332 ----
  #: common.opt:1852 common.opt:1860 common.opt:3246
  #, no-c-format
  msgid "Enable loop nest transforms.  Same as -floop-nest-optimize."
! msgstr "Schleifenschachtelungs-Umwandlungen einschalten. Entspricht »-floop-nest-optimize«."
  
  #: common.opt:1856
  #, no-c-format
*************** msgstr "-finline-stringops[=memcmp|memcp
*** 14481,14487 ****
  #: common.opt:2058
  #, no-c-format
  msgid "Equivalent to -fcf-protection=full."
! msgstr "Äquivalent zu -fcf-protection=full."
  
  #: common.opt:2062
  #, no-c-format
--- 14481,14487 ----
  #: common.opt:2058
  #, no-c-format
  msgid "Equivalent to -fcf-protection=full."
! msgstr "Äquivalent zu »-fcf-protection=full«."
  
  #: common.opt:2062
  #, no-c-format
*************** msgstr "Anzahl der Cache-Einträge in de
*** 14686,14692 ****
  #: common.opt:2301
  #, no-c-format
  msgid "Specify the algorithm to partition symbols and vars at linktime."
! msgstr "Algorithmus, mit dem Symbole und Variablen zur Linkzeit partitioniert werden."
  
  #: common.opt:2306
  #, no-c-format
--- 14686,14692 ----
  #: common.opt:2301
  #, no-c-format
  msgid "Specify the algorithm to partition symbols and vars at linktime."
! msgstr "Algorithmus, mit dem Symbole und Variablen zur Bindezeit partitioniert werden."
  
  #: common.opt:2306
  #, no-c-format
*************** msgstr "Kompressionsstufe <Zahl> für zl
*** 14696,14707 ****
  #: common.opt:2314
  #, no-c-format
  msgid "Report various link-time optimization statistics."
! msgstr "Verschiedene Statistiken über Linkzeit-Optimierung ausgeben."
  
  #: common.opt:2318
  #, no-c-format
  msgid "Report various link-time optimization statistics for WPA only."
! msgstr "Nur in WPA verschiedene Statistiken über Linkzeit-Optimierung ausgeben."
  
  #: common.opt:2322
  #, no-c-format
--- 14696,14707 ----
  #: common.opt:2314
  #, no-c-format
  msgid "Report various link-time optimization statistics."
! msgstr "Verschiedene Statistiken über Bindezeit-Optimierung ausgeben."
  
  #: common.opt:2318
  #, no-c-format
  msgid "Report various link-time optimization statistics for WPA only."
! msgstr "Nur in WPA verschiedene Statistiken über Bindezeit-Optimierung ausgeben."
  
  #: common.opt:2322
  #, no-c-format
*************** msgstr "Allgemeine Optionen zum Erzeugen
*** 15011,15017 ****
  #: common.opt:2641
  #, no-c-format
  msgid "Enable common options for generating profile info for profile feedback directed optimizations, and set -fprofile-dir=."
! msgstr "Allgemeine Optionen zum Erzeugen von Profil-Info für Profil-Feedback-gerichtete Optimierungen einschalten, und -fprofile-dir= setzen."
  
  #: common.opt:2645
  #, no-c-format
--- 15011,15017 ----
  #: common.opt:2641
  #, no-c-format
  msgid "Enable common options for generating profile info for profile feedback directed optimizations, and set -fprofile-dir=."
! msgstr "Allgemeine Optionen zum Erzeugen von Profil-Info für Profil-Feedback-gerichtete Optimierungen einschalten, und »-fprofile-dir=« setzen."
  
  #: common.opt:2645
  #, no-c-format
*************** msgstr "Allgemeine Optionen zum Durchfü
*** 15036,15042 ****
  #: common.opt:2661
  #, no-c-format
  msgid "Enable common options for performing profile feedback directed optimizations, and set -fprofile-dir=."
! msgstr "Allgemeine Optionen zum Durchführen von Profil-Feedback-gerichteten Optimierungen einschalten, und -fprofile-dir= setzen."
  
  #: common.opt:2665
  #, no-c-format
--- 15036,15042 ----
  #: common.opt:2661
  #, no-c-format
  msgid "Enable common options for performing profile feedback directed optimizations, and set -fprofile-dir=."
! msgstr "Allgemeine Optionen zum Durchführen von Profil-Feedback-gerichteten Optimierungen einschalten, und »-fprofile-dir=« setzen."
  
  #: common.opt:2665
  #, no-c-format
*************** msgstr "Regionen mit Pipelining ohne Pip
*** 15211,15217 ****
  #: common.opt:2855
  #, no-c-format
  msgid "Allow interposing function (or variables) by ones with different semantics (or initializer) respectively by dynamic linker."
! msgstr "Erlauben, dass der dynamische Linker Funktionen und Variablen mit solchen unterschiedlicher Semantik (oder Initialisierungen) gemischt platzieren darf."
  
  #: common.opt:2861
  #, no-c-format
--- 15211,15217 ----
  #: common.opt:2855
  #, no-c-format
  msgid "Allow interposing function (or variables) by ones with different semantics (or initializer) respectively by dynamic linker."
! msgstr "Erlauben, dass der dynamische Binder Funktionen und Variablen mit solchen unterschiedlicher Semantik (oder Initialisierungen) gemischt platzieren darf."
  
  #: common.opt:2861
  #, no-c-format
*************** msgstr "-fstack-check=[no|generic|specif
*** 15351,15357 ****
  #: common.opt:2982
  #, no-c-format
  msgid "Insert stack checking code into the program.  Same as -fstack-check=specific."
! msgstr "Code zur Stapelprüfung in das Programm einfügen. Dasselbe wie -fstack-check=specific."
  
  #: common.opt:2986
  #, no-c-format
--- 15351,15357 ----
  #: common.opt:2982
  #, no-c-format
  msgid "Insert stack checking code into the program.  Same as -fstack-check=specific."
! msgstr "Code zur Stapelprüfung in das Programm einfügen. Dasselbe wie »-fstack-check=specific«."
  
  #: common.opt:2986
  #, no-c-format
*************** msgstr "Annehmen, dass strenge Alias-Reg
*** 15401,15407 ****
  #: common.opt:3034
  #, no-c-format
  msgid "Treat signed overflow as undefined.  Negated as -fwrapv -fwrapv-pointer."
! msgstr "Vorzeichenbehafteten Überlauf als undefiniertes Verhalten behandeln. Wird mit -fwrapv -fwrapv-pointer negiert."
  
  #: common.opt:3038
  #, no-c-format
--- 15401,15407 ----
  #: common.opt:3034
  #, no-c-format
  msgid "Treat signed overflow as undefined.  Negated as -fwrapv -fwrapv-pointer."
! msgstr "Vorzeichenbehafteten Überlauf als undefiniertes Verhalten behandeln. Wird mit »-fwrapv -fwrapv-pointer« negiert."
  
  #: common.opt:3038
  #, no-c-format
*************** msgstr "Optimierung für Gleitkommaarith
*** 15701,15707 ****
  #: common.opt:3351
  #, no-c-format
  msgid "Same as -fassociative-math for expressions which include division."
! msgstr "Das gleiche wie -fassociative-math für Ausdrücke, die Division enthalten."
  
  #: common.opt:3359
  #, no-c-format
--- 15701,15707 ----
  #: common.opt:3351
  #, no-c-format
  msgid "Same as -fassociative-math for expressions which include division."
! msgstr "Das gleiche wie »-fassociative-math« für Ausdrücke, die Division enthalten."
  
  #: common.opt:3359
  #, no-c-format
*************** msgstr "Einfach Abwicklungstabellen für
*** 15731,15752 ****
  #: common.opt:3379
  #, no-c-format
  msgid "Use the bfd linker instead of the default linker."
! msgstr "BFD-Linker statt Standardlinker verwenden."
  
  #: common.opt:3383
  #, no-c-format
  msgid "Use the gold linker instead of the default linker."
! msgstr "Gold-Linker statt Standardlinker verwenden."
  
  #: common.opt:3387
  #, no-c-format
  msgid "Use the lld LLVM linker instead of the default linker."
! msgstr "Den LLVM-lld-Linker statt des Standardlinkers verwenden."
  
  #: common.opt:3391
  #, no-c-format
  msgid "Use the Modern linker (MOLD) linker instead of the default linker."
! msgstr "Den Modernen Linker (MOLD) statt des Standardlinkers verwenden."
  
  #: common.opt:3401
  #, no-c-format
--- 15731,15752 ----
  #: common.opt:3379
  #, no-c-format
  msgid "Use the bfd linker instead of the default linker."
! msgstr "BFD-Binder statt Standardlinker verwenden."
  
  #: common.opt:3383
  #, no-c-format
  msgid "Use the gold linker instead of the default linker."
! msgstr "Gold-Binder statt Standardlinker verwenden."
  
  #: common.opt:3387
  #, no-c-format
  msgid "Use the lld LLVM linker instead of the default linker."
! msgstr "Den LLVM-lld-Binder statt des Standardlinkers verwenden."
  
  #: common.opt:3391
  #, no-c-format
  msgid "Use the Modern linker (MOLD) linker instead of the default linker."
! msgstr "Den Modernen Binder (MOLD) statt des Standardlinkers verwenden."
  
  #: common.opt:3401
  #, no-c-format
*************** msgstr "Funktionsprofilierung einschalte
*** 16041,16047 ****
  #: common.opt:3813
  #, no-c-format
  msgid "Like -pedantic but issue errors instead of warnings."
! msgstr "Wie -pedantic, aber Fehler statt Warnungen ausgeben."
  
  #: common.opt:3853
  #, no-c-format
--- 16041,16047 ----
  #: common.opt:3813
  #, no-c-format
  msgid "Like -pedantic but issue errors instead of warnings."
! msgstr "Wie »-pedantic«, aber Fehler statt Warnungen ausgeben."
  
  #: common.opt:3853
  #, no-c-format
*************** msgstr "Rückruffunktionen statt inline-
*** 16131,16137 ****
  #: params.opt:55
  #, no-c-format
  msgid "Prefix calls to memcpy, memset and memmove with __asan_ or __hwasan_ for -fsanitize=kernel-address or -fsanitize=kernel-hwaddress."
! msgstr "Aufrufen von memcpy, memset und memmove ein __asan_ oder __hwasan_ voranstellen, für -fsanitize=kernel-address oder -fsanitize=kernel-hwaddress."
  
  #: params.opt:59
  #, no-c-format
--- 16131,16137 ----
  #: params.opt:55
  #, no-c-format
  msgid "Prefix calls to memcpy, memset and memmove with __asan_ or __hwasan_ for -fsanitize=kernel-address or -fsanitize=kernel-hwaddress."
! msgstr "Aufrufen von memcpy, memset und memmove ein __asan_ oder __hwasan_ voranstellen, für »-fsanitize=kernel-address« oder »-fsanitize=kernel-hwaddress«."
  
  #: params.opt:59
  #, no-c-format
*************** msgstr "Wahrscheinlichkeit, dass die COM
*** 16216,16222 ****
  #: params.opt:123
  #, no-c-format
  msgid "Maximum number of namespaces to search for alternatives when name lookup fails."
! msgstr "Höchstzahl der Namensräume, in denen alternativ gesucht wird, wenn Nachschlagen eines Namens fehlschlägt."
  
  #: params.opt:127
  #, no-c-format
--- 16216,16222 ----
  #: params.opt:123
  #, no-c-format
  msgid "Maximum number of namespaces to search for alternatives when name lookup fails."
! msgstr "Höchstzahl der Namensräume, in denen alternativ gesucht wird, wenn Nachschlagen eines Namens scheitert."
  
  #: params.opt:127
  #, no-c-format
*************** msgstr "Die Anzahl der Ausführungen ein
*** 16291,16297 ****
  #: params.opt:186
  #, no-c-format
  msgid "Whether codegen errors should be ICEs when -fchecking."
! msgstr "Ob bei -fchecking Fehler im Codegenerator als interne Compilerfehler behandelt werden sollen."
  
  #: params.opt:190
  #, no-c-format
--- 16291,16297 ----
  #: params.opt:186
  #, no-c-format
  msgid "Whether codegen errors should be ICEs when -fchecking."
! msgstr "Ob bei »-fchecking« Fehler im Codegenerator als interne Compilerfehler behandelt werden sollen."
  
  #: params.opt:190
  #, no-c-format
*************** msgstr "Höchstzahl der Parameter in ein
*** 16306,16317 ****
  #: params.opt:198
  #, no-c-format
  msgid "Maximum number of blocks for -fharden-control-flow-redundancy."
! msgstr "Maximale Blockanzahl für -fharden-control-flow-redundancy."
  
  #: params.opt:202
  #, no-c-format
  msgid "Maximum number of blocks for in-line -fharden-control-flow-redundancy."
! msgstr "Maximale Blockanzahl für in-line -fharden-control-flow-redundancy."
  
  #: params.opt:206
  #, no-c-format
--- 16306,16317 ----
  #: params.opt:198
  #, no-c-format
  msgid "Maximum number of blocks for -fharden-control-flow-redundancy."
! msgstr "Maximale Blockanzahl für »-fharden-control-flow-redundancy«."
  
  #: params.opt:202
  #, no-c-format
  msgid "Maximum number of blocks for in-line -fharden-control-flow-redundancy."
! msgstr "Maximale Blockanzahl für in-line »-fharden-control-flow-redundancy«."
  
  #: params.opt:206
  #, no-c-format
*************** msgstr "Höchstzahl der LTO-Partitionen,
*** 16631,16637 ****
  #: params.opt:466
  #, no-c-format
  msgid "Minimal size of a partition for LTO (in estimated instructions)."
! msgstr "Kleinste Größe einer Partition für Linkzeitoptimierung (in geschätzten Befehlen)."
  
  #: params.opt:470
  #, no-c-format
--- 16631,16637 ----
  #: params.opt:466
  #, no-c-format
  msgid "Minimal size of a partition for LTO (in estimated instructions)."
! msgstr "Kleinste Größe einer Partition für Bindezeitoptimierung (in geschätzten Befehlen)."
  
  #: params.opt:470
  #, no-c-format
*************** msgstr "Maximale Größe eines einzelnen
*** 17301,17307 ****
  #: params.opt:1088
  #, no-c-format
  msgid "Maximum number of instruction distance that a small store forwarded to a larger load may stall. Value '0' disables the cost checks for the avoid-store-forwarding pass."
! msgstr "Maximaler Abstand von Befehlen, die eine kleine Speicheroperation, der an eine größere Ladeoperation weitergeleitet wird, blockieren kann. Der Wert 0 deaktiviert die Kostenüberprüfungen für den \"avoid-store-forwarding\"-Durchgang."
  
  #: params.opt:1092
  #, no-c-format
--- 17301,17307 ----
  #: params.opt:1088
  #, no-c-format
  msgid "Maximum number of instruction distance that a small store forwarded to a larger load may stall. Value '0' disables the cost checks for the avoid-store-forwarding pass."
! msgstr "Maximaler Abstand von Befehlen, die eine kleine Speicheroperation, der an eine größere Ladeoperation weitergeleitet wird, blockieren kann. Der Wert 0 deaktiviert die Kostenüberprüfungen für den »avoid-store-forwarding«-Durchgang."
  
  #: params.opt:1092
  #, no-c-format
*************** msgstr "Schleifenvektorisierung von Glei
*** 17512,17518 ****
  #: params.opt:1266
  #, no-c-format
  msgid "Force the use of SLP when vectorizing, fail if not possible."
! msgstr "Die Verwendung von SLP bei der Vektorisierung erzwingen; fehlschlagen, wenn dies nicht möglich ist."
  
  #: params.opt:1270
  #, no-c-format
--- 17512,17518 ----
  #: params.opt:1266
  #, no-c-format
  msgid "Force the use of SLP when vectorizing, fail if not possible."
! msgstr "Die Verwendung von SLP bei der Vektorisierung erzwingen; scheitern, wenn dies nicht möglich ist."
  
  #: params.opt:1270
  #, no-c-format
*************** msgstr ""
*** 17756,17762 ****
  msgid "Please submit a full bug report, with preprocessed source (by using -freport-bug).\n"
  msgstr ""
  "Bitte senden Sie einen vollständigen Fehlerbericht auf Englisch ein;\n"
! "inclusive vorverarbeitetem Quellcode (siehe -freport-bug).\n"
  
  #: diagnostic.cc:976
  #, c-format
--- 17756,17762 ----
  msgid "Please submit a full bug report, with preprocessed source (by using -freport-bug).\n"
  msgstr ""
  "Bitte senden Sie einen vollständigen Fehlerbericht auf Englisch ein;\n"
! "inclusive vorverarbeitetem Quellcode (siehe »-freport-bug«).\n"
  
  #: diagnostic.cc:976
  #, c-format
*************** msgstr "  --help                   Diese
*** 17923,17929 ****
  
  #: gcc.cc:3742
  msgid "  --target-help            Display target specific command line options (including assembler and linker options).\n"
! msgstr "  --target-help            Zielspezifische Kommandozeilenoptionen (inklusive Assembler- und Linkeroptionen) anzeigen.\n"
  
  #: gcc.cc:3744
  msgid "  --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].\n"
--- 17923,17929 ----
  
  #: gcc.cc:3742
  msgid "  --target-help            Display target specific command line options (including assembler and linker options).\n"
! msgstr "  --target-help            Zielspezifische Kommandozeilenoptionen (inklusive Assembler- und Binderoptionen) anzeigen.\n"
  
  #: gcc.cc:3744
  msgid "  --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].\n"
*************** msgstr "  -Wp,<Optionen>           Die d
*** 18015,18021 ****
  
  #: gcc.cc:3769
  msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker.\n"
! msgstr "  -Wl,<Optionen>           Die durch Kommata getrennten <Optionen> an den Linker übergeben.\n"
  
  #: gcc.cc:3770
  msgid "  -Xassembler <arg>        Pass <arg> on to the assembler.\n"
--- 18015,18021 ----
  
  #: gcc.cc:3769
  msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker.\n"
! msgstr "  -Wl,<Optionen>           Die durch Kommata getrennten <Optionen> an den Binder übergeben.\n"
  
  #: gcc.cc:3770
  msgid "  -Xassembler <arg>        Pass <arg> on to the assembler.\n"
*************** msgstr "  -Xpreprocessor <Arg>     <Arg>
*** 18027,18033 ****
  
  #: gcc.cc:3772
  msgid "  -Xlinker <arg>           Pass <arg> on to the linker.\n"
! msgstr "  -Xlinker <Arg>           <Arg> an den Linker übergeben.\n"
  
  #: gcc.cc:3773
  msgid "  -save-temps              Do not delete intermediate files.\n"
--- 18027,18033 ----
  
  #: gcc.cc:3772
  msgid "  -Xlinker <arg>           Pass <arg> on to the linker.\n"
! msgstr "  -Xlinker <Arg>           <Arg> an den Binder übergeben.\n"
  
  #: gcc.cc:3773
  msgid "  -save-temps              Do not delete intermediate files.\n"
*************** msgstr ""
*** 18089,18099 ****
  msgid "  -E                       Preprocess only; do not compile, assemble or link.\n"
  msgstr ""
  "  -E                       Nur den Präprozessor ausführen, nicht Compiler, Assembler oder\n"
! "                           Linker.\n"
  
  #: gcc.cc:3789
  msgid "  -S                       Compile only; do not assemble or link.\n"
! msgstr "  -S                       Nur kompilieren, nicht assemblieren oder linken.\n"
  
  #: gcc.cc:3790
  msgid "  -c                       Compile and assemble, but do not link.\n"
--- 18089,18099 ----
  msgid "  -E                       Preprocess only; do not compile, assemble or link.\n"
  msgstr ""
  "  -E                       Nur den Präprozessor ausführen, nicht Compiler, Assembler oder\n"
! "                           Binder.\n"
  
  #: gcc.cc:3789
  msgid "  -S                       Compile only; do not assemble or link.\n"
! msgstr "  -S                       Nur kompilieren, nicht assemblieren oder binden.\n"
  
  #: gcc.cc:3790
  msgid "  -c                       Compile and assemble, but do not link.\n"
*************** msgid ""
*** 18108,18115 ****
  "  -pie                     Create a dynamically linked position independent\n"
  "                           executable.\n"
  msgstr ""
! "  -pie                     Eine ausführbare Datei mit positionsunabhängigem\n"
! "                           Code erzeugen.\n"
  
  #: gcc.cc:3794
  msgid "  -shared                  Create a shared library.\n"
--- 18108,18115 ----
  "  -pie                     Create a dynamically linked position independent\n"
  "                           executable.\n"
  msgstr ""
! "  -pie                     Eine dynamisch gebundene ausführbare Datei mit\n"
! "                           positionsunabhängigem Code erzeugen.\n"
  
  #: gcc.cc:3794
  msgid "  -shared                  Create a shared library.\n"
*************** msgid ""
*** 18136,18145 ****
  " other options on to these processes the -W<letter> options must be used.\n"
  msgstr ""
  "\n"
! "Optionen, die mit -g, -f, -m, -O, -W, oder --param beginnen, werden automatisch\n"
! " an die verschiedenen Subprozesse, die von %s aufgerufen werden, übergeben.\n"
! " Um weitere Optionen an diese Prozesse zu übergeben, müssen die Optionen\n"
! " -W<Buchstabe> verwendet werden.\n"
  
  #: gcc.cc:6948
  #, c-format
--- 18136,18146 ----
  " other options on to these processes the -W<letter> options must be used.\n"
  msgstr ""
  "\n"
! "Optionen, die mit »-g«, »-f«, »-m«, »-O«, »-W«, oder »--param« beginnen,\n"
! " werden automatisch an die verschiedenen Subprozesse, die von %s aufgerufen\n"
! " werden, übergeben.\n"
! " Um andere Optionen an diese Prozesse zu übergeben, müssen die Optionen\n"
! " »-W<Buchstabe>« verwendet werden.\n"
  
  #: gcc.cc:6948
  #, c-format
*************** msgid ""
*** 18253,18259 ****
  "\n"
  msgstr ""
  "\n"
! "Linkeroptionen\n"
  "==============\n"
  "\n"
  
--- 18254,18260 ----
  "\n"
  msgstr ""
  "\n"
! "Binderoptionen\n"
  "==============\n"
  "\n"
  
*************** msgid ""
*** 18263,18269 ****
  "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n"
  "\n"
  msgstr ""
! "»-Wl,OPTION« verwenden, um »OPTION« an den Linker zu übergeben.\n"
  "\n"
  
  #: gcc.cc:10689
--- 18264,18270 ----
  "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n"
  "\n"
  msgstr ""
! "»-Wl,OPTION« verwenden, um »OPTION« an den Binder zu übergeben.\n"
  "\n"
  
  #: gcc.cc:10689
*************** msgstr ""
*** 21757,21763 ****
  "\n"
  "\n"
  "/* WARNUNG: Wegen abweichender Argumente für eine externe\n"
! "   Prozedur ist diese Header-Datei nicht kompatibel mit -std=c23.\n"
  "\n"
  "   Verwenden Sie eine andere -std-Option zum Kompilieren. */\n"
  
--- 21758,21764 ----
  "\n"
  "\n"
  "/* WARNUNG: Wegen abweichender Argumente für eine externe\n"
! "   Prozedur ist diese Header-Datei nicht kompatibel mit »-std=c23«.\n"
  "\n"
  "   Verwenden Sie eine andere -std-Option zum Kompilieren. */\n"
  
*************** msgstr "%<-mfused-madd%> ist veraltet; s
*** 23372,23383 ****
  #: config/microblaze/microblaze.opt:87
  #, gcc-internal-format
  msgid "%qs is deprecated; use -fstack-check"
! msgstr "%qs ist veraltet; stattdessen -fstack-check verwenden"
  
  #: config/microblaze/microblaze.opt:95
  #, gcc-internal-format
  msgid "%qs is deprecated; use -fno-zero-initialized-in-bss"
! msgstr "%qs ist veraltet; stattdessen -fno-zero-initialized-in-bss verwenden"
  
  #: config/arc/arc.opt:169 config/arc/arc.opt:333 config/arc/arc.opt:337
  #: config/arc/arc.opt:341 config/arc/arc.opt:348 config/arc/arc.opt:352
--- 23373,23384 ----
  #: config/microblaze/microblaze.opt:87
  #, gcc-internal-format
  msgid "%qs is deprecated; use -fstack-check"
! msgstr "%qs ist veraltet; stattdessen %<-fstack-check%> verwenden"
  
  #: config/microblaze/microblaze.opt:95
  #, gcc-internal-format
  msgid "%qs is deprecated; use -fno-zero-initialized-in-bss"
! msgstr "%qs ist veraltet; stattdessen %<-fno-zero-initialized-in-bss%> verwenden"
  
  #: config/arc/arc.opt:169 config/arc/arc.opt:333 config/arc/arc.opt:337
  #: config/arc/arc.opt:341 config/arc/arc.opt:348 config/arc/arc.opt:352
*************** msgstr "%qs ist veraltet"
*** 23390,23396 ****
  #: lto/lang.opt:28
  #, gcc-internal-format
  msgid "unknown linker output %qs"
! msgstr "unbekannte Linkerausgabe %qs"
  
  #: common.opt:1689
  #, gcc-internal-format
--- 23391,23397 ----
  #: lto/lang.opt:28
  #, gcc-internal-format
  msgid "unknown linker output %qs"
! msgstr "unbekannte Binderausgabe %qs"
  
  #: common.opt:1689
  #, gcc-internal-format
*************** msgstr "Intervallüberlappung von %<-fdb
*** 25405,25411 ****
  #: dbgcnt.cc:157
  #, gcc-internal-format
  msgid "%<-fdbg-cnt=%s:%d-%d%> has smaller upper limit than the lower"
! msgstr "%<-fdbg-cnt=%s:%d:%d%> hat kleinere obere als untere Grenze"
  
  #: dbgcnt.cc:169
  #, gcc-internal-format
--- 25406,25412 ----
  #: dbgcnt.cc:157
  #, gcc-internal-format
  msgid "%<-fdbg-cnt=%s:%d-%d%> has smaller upper limit than the lower"
! msgstr "%<-fdbg-cnt=%s:%d-%d%> hat kleinere obere als untere Grenze"
  
  #: dbgcnt.cc:169
  #, gcc-internal-format
*************** msgstr "Aufruf von %qs mit Attributwarnu
*** 25648,25654 ****
  #: expr.cc:13544
  #, gcc-internal-format
  msgid "assuming signed overflow does not occur when simplifying %<X - Y %s 0%> to %<X %s Y%>"
! msgstr "der Compiler geht davon aus, dass kein vorzeichenbehafteter Überlauf auftritt, und vereinfacht daher %<X - Y %s 0%> zu %<X %s 0%>"
  
  #: ext-dce.cc:1202
  #, gcc-internal-format
--- 25649,25655 ----
  #: expr.cc:13544
  #, gcc-internal-format
  msgid "assuming signed overflow does not occur when simplifying %<X - Y %s 0%> to %<X %s Y%>"
! msgstr "der Compiler geht davon aus, dass kein vorzeichenbehafteter Überlauf auftritt, und vereinfacht daher %<X - Y %s 0%> zu %<X %s Y%>"
  
  #: ext-dce.cc:1202
  #, gcc-internal-format
*************** msgstr "%qs ist eine unbekannte Option f
*** 25871,25877 ****
  #: gcc.cc:5062
  #, gcc-internal-format
  msgid "linker hardening options not enabled by %<-fhardened%> because other link options were specified on the command line"
! msgstr "linker-Härtungsoptionen nicht durch %<-fhardened%> aktiviert, da andere Link-Optionen auf der Kommandozeile angegeben wurden"
  
  #: gcc.cc:5086 toplev.cc:717
  #, gcc-internal-format
--- 25872,25878 ----
  #: gcc.cc:5062
  #, gcc-internal-format
  msgid "linker hardening options not enabled by %<-fhardened%> because other link options were specified on the command line"
! msgstr "Binder-Härtungsoptionen nicht durch %<-fhardened%> aktiviert, da andere Binder-Optionen auf der Kommandozeile angegeben wurden"
  
  #: gcc.cc:5086 toplev.cc:717
  #, gcc-internal-format
*************** msgstr "%<-x %s%> hinter letzter Eingabe
*** 25896,25902 ****
  #: gcc.cc:5767
  #, gcc-internal-format
  msgid "unable to locate default linker script %qs in the library search paths"
! msgstr "Standard-Linkerscript %qs kann nicht in den Bibliotheks-Suchpfaden gefunden werden"
  
  #: gcc.cc:5974
  #, gcc-internal-format
--- 25897,25903 ----
  #: gcc.cc:5767
  #, gcc-internal-format
  msgid "unable to locate default linker script %qs in the library search paths"
! msgstr "Standard-Binderscript %qs kann nicht in den Bibliotheks-Suchpfaden gefunden werden"
  
  #: gcc.cc:5974
  #, gcc-internal-format
*************** msgstr "%<-fuse-linker-plugin%>, aber %s
*** 26070,26076 ****
  #: gcc.cc:9301
  #, gcc-internal-format, gfc-internal-format
  msgid "%s: linker input file unused because linking not done"
! msgstr "%s: Eingabedatei des Linkers unbenutzt, da das Linken nicht durchgeführt wird"
  
  #. This is can be an indication the user specifed an errorneous
  #. separated option value, (or used the wrong prefix for an
--- 26071,26077 ----
  #: gcc.cc:9301
  #, gcc-internal-format, gfc-internal-format
  msgid "%s: linker input file unused because linking not done"
! msgstr "%s: Eingabedatei des Binders unbenutzt, da das Binden nicht durchgeführt wird"
  
  #. This is can be an indication the user specifed an errorneous
  #. separated option value, (or used the wrong prefix for an
*************** msgstr "%s: Eingabedatei des Linkers unb
*** 26078,26084 ****
  #: gcc.cc:9307
  #, gcc-internal-format
  msgid "%s: linker input file not found: %m"
! msgstr "%s: Linker-Eingabedatei nicht gefunden: %m"
  
  #: gcc.cc:9379 c-family/c-opts.cc:852
  #, gcc-internal-format
--- 26079,26085 ----
  #: gcc.cc:9307
  #, gcc-internal-format
  msgid "%s: linker input file not found: %m"
! msgstr "%s: Binder-Eingabedatei nicht gefunden: %m"
  
  #: gcc.cc:9379 c-family/c-opts.cc:852
  #, gcc-internal-format
*************** msgstr "%<-fstack-protector-strong%> wir
*** 30154,30160 ****
  #: opts.cc:1231
  #, gcc-internal-format
  msgid "%<-fno-fat-lto-objects%> are supported only with linker plugin"
! msgstr "%<-fno-fat-lto-objects%> werden nur mit Linker-Plugin unterstützt"
  
  #: opts.cc:1239
  #, gcc-internal-format
--- 30155,30161 ----
  #: opts.cc:1231
  #, gcc-internal-format
  msgid "%<-fno-fat-lto-objects%> are supported only with linker plugin"
! msgstr "%<-fno-fat-lto-objects%> werden nur mit Binder-Plugin unterstützt"
  
  #: opts.cc:1239
  #, gcc-internal-format
*************** msgstr "unbekannter Stapel-Überprüfung
*** 30335,30341 ****
  #: opts.cc:3290
  #, gcc-internal-format
  msgid "%<-gdwarf%s%> is ambiguous; use %<-gdwarf-%s%> for DWARF version or %<-gdwarf%> %<-g%s%> for debug level"
! msgstr "%<-gdwarf=%s%> ist mehrdeutig; verwenden Sie %<-gdwarf-%s%> für die DWARF-Version und %<-gdwarf -g%s%> für die Debugstufe"
  
  #: opts.cc:3301
  #, gcc-internal-format
--- 30336,30342 ----
  #: opts.cc:3290
  #, gcc-internal-format
  msgid "%<-gdwarf%s%> is ambiguous; use %<-gdwarf-%s%> for DWARF version or %<-gdwarf%> %<-g%s%> for debug level"
! msgstr "%<-gdwarf%s%> ist mehrdeutig; verwenden Sie %<-gdwarf-%s%> für die DWARF-Version und %<-gdwarf -g%s%> für die Debugstufe"
  
  #: opts.cc:3301
  #, gcc-internal-format
*************** msgstr "Argument des Attributs %<symver%
*** 34248,34254 ****
  #: c-family/c-attribs.cc:3148 d/d-attribs.cc:1126
  #, gcc-internal-format
  msgid "symver attribute argument must have format %<name@nodename%>"
! msgstr "Argument des Attributs »symver« muss das Format %<Name@Nodenname%> haben"
  
  #: c-family/c-attribs.cc:3149 d/d-attribs.cc:1127
  #, gcc-internal-format
--- 34249,34255 ----
  #: c-family/c-attribs.cc:3148 d/d-attribs.cc:1126
  #, gcc-internal-format
  msgid "symver attribute argument must have format %<name@nodename%>"
! msgstr "Argument des Attributs »symver« muss das Format %<Name@Knotenname%> haben"
  
  #: c-family/c-attribs.cc:3149 d/d-attribs.cc:1127
  #, gcc-internal-format
*************** msgstr "Ungültige Operanden für binär
*** 34943,34954 ****
  #: c-family/c-common.cc:3227
  #, gcc-internal-format
  msgid "comparison is always false due to limited range of data type"
! msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »unwahr«"
  
  #: c-family/c-common.cc:3230
  #, gcc-internal-format
  msgid "comparison is always true due to limited range of data type"
! msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »wahr«"
  
  #: c-family/c-common.cc:3332
  #, gcc-internal-format
--- 34944,34955 ----
  #: c-family/c-common.cc:3227
  #, gcc-internal-format
  msgid "comparison is always false due to limited range of data type"
! msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »false«"
  
  #: c-family/c-common.cc:3230
  #, gcc-internal-format
  msgid "comparison is always true due to limited range of data type"
! msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »true«"
  
  #: c-family/c-common.cc:3332
  #, gcc-internal-format
*************** msgstr "enum-Konstante in booleschem Zus
*** 34978,34984 ****
  #: c-family/c-common.cc:3661 d/d-convert.cc:149
  #, gcc-internal-format
  msgid "the address of %qD will always evaluate as %<true%>"
! msgstr "Die Adresse von %qD wird immer zu %<wahr%> auswerten"
  
  #: c-family/c-common.cc:3706
  #, gcc-internal-format
--- 34979,34985 ----
  #: c-family/c-common.cc:3661 d/d-convert.cc:149
  #, gcc-internal-format
  msgid "the address of %qD will always evaluate as %<true%>"
! msgstr "Die Adresse von %qD wird immer zu %<true%> auswerten"
  
  #: c-family/c-common.cc:3706
  #, gcc-internal-format
*************** msgstr "%<?:%> mit Ganzzahlkonstanten in
*** 35004,35010 ****
  #: c-family/c-common.cc:3780
  #, gcc-internal-format
  msgid "the compiler can assume that the address of %qD will always evaluate to %<true%>"
! msgstr "der Compiler kann davon ausgehen, dass die Adresse von %qD immer zu %<true%> evaluiert"
  
  #: c-family/c-common.cc:3816 cp/semantics.cc:1030
  #, gcc-internal-format
--- 35005,35011 ----
  #: c-family/c-common.cc:3780
  #, gcc-internal-format
  msgid "the compiler can assume that the address of %qD will always evaluate to %<true%>"
! msgstr "der Compiler darf davon ausgehen, dass die Adresse von %qD immer zu %<true%> evaluiert"
  
  #: c-family/c-common.cc:3816 cp/semantics.cc:1030
  #, gcc-internal-format
*************** msgstr "logisches %<und%> auf nicht-bool
*** 37029,37040 ****
  #: c-family/c-warn.cc:307
  #, gcc-internal-format
  msgid "logical %<or%> of collectively exhaustive tests is always true"
! msgstr "logisches %<oder%> bei gemeinsam erschöpfenden Tests ist immer »wahr«"
  
  #: c-family/c-warn.cc:311
  #, gcc-internal-format
  msgid "logical %<and%> of mutually exclusive tests is always false"
! msgstr "logisches %<und%> bei sich gegenseitig ausschließenden Tests ist immer »falsch«"
  
  #: c-family/c-warn.cc:321
  #, gcc-internal-format
--- 37030,37041 ----
  #: c-family/c-warn.cc:307
  #, gcc-internal-format
  msgid "logical %<or%> of collectively exhaustive tests is always true"
! msgstr "logisches %<oder%> bei gemeinsam erschöpfenden Tests ist immer »true«"
  
  #: c-family/c-warn.cc:311
  #, gcc-internal-format
  msgid "logical %<and%> of mutually exclusive tests is always false"
! msgstr "logisches %<und%> bei sich gegenseitig ausschließenden Tests ist immer »false«"
  
  #: c-family/c-warn.cc:321
  #, gcc-internal-format
*************** msgstr "ungültiger Wert %qs für %<-mma
*** 38418,38424 ****
  #: config/darwin-driver.cc:379
  #, gcc-internal-format
  msgid "this compiler does not support PowerPC (%<-arch%> option ignored)"
! msgstr "dieser Compiler unterstützt PowerPC nicht (%<arch%>-Option wird ignoriert)"
  
  #: config/darwin-driver.cc:386
  #, gcc-internal-format
--- 38419,38425 ----
  #: config/darwin-driver.cc:379
  #, gcc-internal-format
  msgid "this compiler does not support PowerPC (%<-arch%> option ignored)"
! msgstr "dieser Compiler unterstützt PowerPC nicht (die Option %<-arch%> wird ignoriert)"
  
  #: config/darwin-driver.cc:386
  #, gcc-internal-format
*************** msgstr "%<-gsplit-dwarf%> wird für dies
*** 38493,38499 ****
  #: config/darwin.cc:3449
  #, gcc-internal-format
  msgid "%<-g3%> is not supported by the debug linker in use (set to 2)"
! msgstr "%<-g3%> wird nicht vom verwendeten Debugginglinker unterstützt (wird auf 2 gesetzt)"
  
  #: config/darwin.cc:3541
  #, gcc-internal-format
--- 38494,38500 ----
  #: config/darwin.cc:3449
  #, gcc-internal-format
  msgid "%<-g3%> is not supported by the debug linker in use (set to 2)"
! msgstr "%<-g3%> wird nicht vom verwendeten Debuggingbinder unterstützt (wird auf 2 gesetzt)"
  
  #: config/darwin.cc:3541
  #, gcc-internal-format
*************** msgstr "%<-fstack-check=specific%> für
*** 40504,40510 ****
  #: config/arm/arm.cc:33865
  #, gcc-internal-format
  msgid "invalid fpu for target attribute or pragma %qs"
! msgstr "ungültige FPU für Zielattribut oder -pragma %qs"
  
  #. This doesn't really make sense until we support
  #. general dynamic selection of the architecture and all
--- 40505,40511 ----
  #: config/arm/arm.cc:33865
  #, gcc-internal-format
  msgid "invalid fpu for target attribute or pragma %qs"
! msgstr "ungültige FPU für Zielattribut oder Pragma %qs"
  
  #. This doesn't really make sense until we support
  #. general dynamic selection of the architecture and all
*************** msgstr "automatische FPU-Auswahl ist hie
*** 40517,40528 ****
  #: config/arm/arm.cc:33886
  #, gcc-internal-format
  msgid "invalid architecture for target attribute or pragma %qs"
! msgstr "Ungültige Architektur für Zielattribut oder -pragma %qs"
  
  #: config/arm/arm.cc:33900
  #, gcc-internal-format
  msgid "unknown target attribute or pragma %qs"
! msgstr "Unbekanntes Zielattribut oder -pragma %qs"
  
  #: config/arm/arm.cc:36137
  #, gcc-internal-format
--- 40518,40529 ----
  #: config/arm/arm.cc:33886
  #, gcc-internal-format
  msgid "invalid architecture for target attribute or pragma %qs"
! msgstr "Ungültige Architektur für Zielattribut oder Pragma %qs"
  
  #: config/arm/arm.cc:33900
  #, gcc-internal-format
  msgid "unknown target attribute or pragma %qs"
! msgstr "Unbekanntes Zielattribut oder Pragma %qs"
  
  #: config/arm/arm.cc:36137
  #, gcc-internal-format
*************** msgstr "%qs ist in der AVR-LibC ein rese
*** 40652,40658 ****
  #: config/avr/avr.cc:1022
  #, gcc-internal-format
  msgid "%qs is a deprecated identifier in AVR-LibC.  Consider %<#include <avr/interrupt.h>%> or %<#include <compat/deprecated.h>%> before using the %qs macro"
! msgstr "%qs ist in der AVR-LibC ein veralteter Bezeichner. Erwägen Sie %<#include <avr/interrupt.h>%> oder %<#include <compat&deprecated.h>%> vor der Benutzung des Makros %qs"
  
  #: config/avr/avr.cc:1244
  #, gcc-internal-format
--- 40653,40659 ----
  #: config/avr/avr.cc:1022
  #, gcc-internal-format
  msgid "%qs is a deprecated identifier in AVR-LibC.  Consider %<#include <avr/interrupt.h>%> or %<#include <compat/deprecated.h>%> before using the %qs macro"
! msgstr "%qs ist in der AVR-LibC ein veralteter Bezeichner. Erwägen Sie %<#include <avr/interrupt.h>%> oder %<#include <compat/deprecated.h>%> vor der Benutzung des Makros %qs"
  
  #: config/avr/avr.cc:1244
  #, gcc-internal-format
*************** msgstr "keine Multilib-fähige ABI %qs k
*** 42563,42569 ****
  #: config/loongarch/loongarch-opts.cc:533
  #, gcc-internal-format
  msgid "ABI %qs is not enabled at configure-time, the linker might report an error"
! msgstr "ABI %qs ist zur Konfigurationszeit nicht aktiviert, der Linker meldet möglicherweise einen Fehler"
  
  #: config/loongarch/loongarch-opts.cc:536
  #, gcc-internal-format, gfc-internal-format
--- 42564,42570 ----
  #: config/loongarch/loongarch-opts.cc:533
  #, gcc-internal-format
  msgid "ABI %qs is not enabled at configure-time, the linker might report an error"
! msgstr "ABI %qs ist zur Konfigurationszeit nicht aktiviert, der Binder meldet möglicherweise einen Fehler"
  
  #: config/loongarch/loongarch-opts.cc:536
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "%<target()%>-Attribut: tune ersc
*** 43817,43823 ****
  #: config/riscv/riscv-target-attr.cc:228
  #, gcc-internal-format
  msgid "%<target()%> attribute: unknown TUNE %qs"
! msgstr "%<Ziel()%>-Attribut: unbekanntes TUNE %qs"
  
  #: config/riscv/riscv-target-attr.cc:241
  #, gcc-internal-format
--- 43818,43824 ----
  #: config/riscv/riscv-target-attr.cc:228
  #, gcc-internal-format
  msgid "%<target()%> attribute: unknown TUNE %qs"
! msgstr "%<target()%>-Attribut: unbekanntes TUNE %qs"
  
  #: config/riscv/riscv-target-attr.cc:241
  #, gcc-internal-format
*************** msgstr "Objekt mit volatile-Feld kann ni
*** 46188,46194 ****
  #: c/c-decl.cc:6163
  #, gcc-internal-format
  msgid "uninitialized %<const %D%> is invalid in C++"
! msgstr "nicht initialisiertes %<const %qD%> ist in C++ ungültig"
  
  #: c/c-decl.cc:6178 cp/decl.cc:9533
  #, gcc-internal-format
--- 46189,46195 ----
  #: c/c-decl.cc:6163
  #, gcc-internal-format
  msgid "uninitialized %<const %D%> is invalid in C++"
! msgstr "nicht initialisiertes %<const %D%> ist in C++ ungültig"
  
  #: c/c-decl.cc:6178 cp/decl.cc:9533
  #, gcc-internal-format
*************** msgstr "%<atomic_default_mem_order%>-Kla
*** 50048,50054 ****
  #: c/c-parser.cc:28409 cp/parser.cc:52430
  #, gcc-internal-format
  msgid "%<pragma omp requires%> requires at least one clause"
! msgstr "%<pragma omp requires%> erfordert mindestens eine Klausel"
  
  #: c/c-parser.cc:28428
  #, gcc-internal-format
--- 50049,50055 ----
  #: c/c-parser.cc:28409 cp/parser.cc:52430
  #, gcc-internal-format
  msgid "%<pragma omp requires%> requires at least one clause"
! msgstr "%<#pragma omp requires%> erfordert mindestens eine Klausel"
  
  #: c/c-parser.cc:28428
  #, gcc-internal-format
*************** msgstr "keine passende Freigabefunktion
*** 53210,53216 ****
  #: cp/call.cc:8310
  #, gcc-internal-format
  msgid "destroying delete %qD cannot be used to release the allocated memory if the initialization throws because the object is not constructed yet"
! msgstr "das zerstörende Delete für %qD kann nicht verwendet werden, um den zugewiesenen Speicher freizugeben, wenn die Initialisierung fehlschlägt, weil das Objekt noch nicht konstruiert ist"
  
  #: cp/call.cc:8319
  #, gcc-internal-format
--- 53211,53217 ----
  #: cp/call.cc:8310
  #, gcc-internal-format
  msgid "destroying delete %qD cannot be used to release the allocated memory if the initialization throws because the object is not constructed yet"
! msgstr "das zerstörende Delete für %qD kann nicht verwendet werden, um den zugewiesenen Speicher freizugeben, wenn die Initialisierung scheitert, weil das Objekt noch nicht konstruiert ist"
  
  #: cp/call.cc:8319
  #, gcc-internal-format
*************** msgstr "Zeiger auf Element %qD wird ange
*** 54241,54247 ****
  #: cp/class.cc:9098
  #, gcc-internal-format
  msgid "(a pointer to member can only be formed with %<&%E%>)"
! msgstr "(ein Zeiger auf ein Element kann nur mit %<»&%E%> erzeugt werden)"
  
  #: cp/class.cc:9177
  #, gcc-internal-format
--- 54242,54248 ----
  #: cp/class.cc:9098
  #, gcc-internal-format
  msgid "(a pointer to member can only be formed with %<&%E%>)"
! msgstr "(ein Zeiger auf ein Element kann nur mit %<&%E%> erzeugt werden)"
  
  #: cp/class.cc:9177
  #, gcc-internal-format
*************** msgstr "Koroutinen erfordern ein Traits-
*** 55623,55629 ****
  #: cp/coroutines.cc:509
  #, gcc-internal-format
  msgid "perhaps %<#include <coroutine>%> is missing"
! msgstr "möglicherweise fehlt %<#include <Koroutine>%>"
  
  #: cp/coroutines.cc:564
  #, gcc-internal-format
--- 55624,55630 ----
  #: cp/coroutines.cc:509
  #, gcc-internal-format
  msgid "perhaps %<#include <coroutine>%> is missing"
! msgstr "möglicherweise fehlt %<#include <coroutine>%>"
  
  #: cp/coroutines.cc:564
  #, gcc-internal-format
*************** msgstr "roher Literaloperator %q#D steht
*** 56432,56438 ****
  #: cp/decl.cc:1955
  #, gcc-internal-format
  msgid "%q#D redeclared as different kind of entity"
! msgstr "%q#D als andere Symbolart redeklariert"
  
  #: cp/decl.cc:1980
  #, gcc-internal-format
--- 56433,56439 ----
  #: cp/decl.cc:1955
  #, gcc-internal-format
  msgid "%q#D redeclared as different kind of entity"
! msgstr "%q#D als andere Entitätsart redeklariert"
  
  #: cp/decl.cc:1980
  #, gcc-internal-format
*************** msgstr "bisherige Deklaration als %q#D"
*** 56462,56473 ****
  #: cp/decl.cc:2047
  #, gcc-internal-format
  msgid "redeclaration of %<pragma omp declare reduction%>"
! msgstr "Redeklaration von %<pragma omp declare reduction%>"
  
  #: cp/decl.cc:2049
  #, gcc-internal-format
  msgid "previous %<pragma omp declare reduction%> declaration"
! msgstr "vorherige Deklaration von %<pragma omp declare reduction%>"
  
  #: cp/decl.cc:2107
  #, gcc-internal-format
--- 56463,56474 ----
  #: cp/decl.cc:2047
  #, gcc-internal-format
  msgid "redeclaration of %<pragma omp declare reduction%>"
! msgstr "Redeklaration von %<#pragma omp declare reduction%>"
  
  #: cp/decl.cc:2049
  #, gcc-internal-format
  msgid "previous %<pragma omp declare reduction%> declaration"
! msgstr "vorherige Deklaration von %<#pragma omp declare reduction%>"
  
  #: cp/decl.cc:2107
  #, gcc-internal-format
*************** msgstr "Operator %<delete []%> auf unvol
*** 60530,60541 ****
  #: cp/init.cc:4173
  #, gcc-internal-format
  msgid "possible problem detected in invocation of operator %<delete []%>"
! msgstr "mögliches Problem bei Aufruf von %<operator delete []%> erkannt"
  
  #: cp/init.cc:4177
  #, gcc-internal-format
  msgid "neither the destructor nor the class-specific operator %<delete []%> will be called, even if they are declared when the class is defined"
! msgstr "weder der Destruktor noch der klassenspezifische %<operator delete []%> wird aufgerufen, auch wenn sie bei der Klassendefinition deklariert werden"
  
  #: cp/init.cc:4912
  #, gcc-internal-format
--- 60531,60542 ----
  #: cp/init.cc:4173
  #, gcc-internal-format
  msgid "possible problem detected in invocation of operator %<delete []%>"
! msgstr "mögliches Problem bei Aufruf des Operators %<delete []%> erkannt"
  
  #: cp/init.cc:4177
  #, gcc-internal-format
  msgid "neither the destructor nor the class-specific operator %<delete []%> will be called, even if they are declared when the class is defined"
! msgstr "weder der Destruktor noch der klassenspezifische Operator %<delete []%> wird aufgerufen, auch wenn sie bei der Klassendefinition deklariert werden"
  
  #: cp/init.cc:4912
  #, gcc-internal-format
*************** msgstr "%qD verweist auf die TU-lokale F
*** 61221,61227 ****
  #: cp/module.cc:15089
  #, gcc-internal-format
  msgid "%qD exposes TU-local entity %qD"
! msgstr "%qD macht die TU-lokale Einheit %qD sichtbar"
  
  #: cp/module.cc:15104
  #, gcc-internal-format
--- 61222,61228 ----
  #: cp/module.cc:15089
  #, gcc-internal-format
  msgid "%qD exposes TU-local entity %qD"
! msgstr "%qD macht die TU-lokale Entität %qD sichtbar"
  
  #: cp/module.cc:15104
  #, gcc-internal-format
*************** msgstr "beim Laden der ausstehenden Einh
*** 61495,61501 ****
  #: cp/module.cc:21314
  #, gcc-internal-format
  msgid "import of named module %qs inside language-linkage block"
! msgstr "Import eines benannten Moduls %qs innerhalb eines Sprachverlinkungsblocks"
  
  #: cp/module.cc:21345
  #, gcc-internal-format
--- 61496,61502 ----
  #: cp/module.cc:21314
  #, gcc-internal-format
  msgid "import of named module %qs inside language-linkage block"
! msgstr "Import eines benannten Moduls %qs innerhalb eines Sprachbindungsblocks"
  
  #: cp/module.cc:21345
  #, gcc-internal-format
*************** msgstr "%q#D verdeckt Konstruktor für %
*** 61615,61621 ****
  #: cp/name-lookup.cc:3233
  #, gcc-internal-format
  msgid "conflicting C language linkage declaration %q#D"
! msgstr "in Konflikt stehende Deklaration %q#D mit Bindung für die Sprache \"C\""
  
  #: cp/name-lookup.cc:3238
  #, gcc-internal-format
--- 61616,61622 ----
  #: cp/name-lookup.cc:3233
  #, gcc-internal-format
  msgid "conflicting C language linkage declaration %q#D"
! msgstr "in Konflikt stehende Deklaration %q#D mit Bindung für die Sprache »C«"
  
  #: cp/name-lookup.cc:3238
  #, gcc-internal-format
*************** msgstr "Namensbereich-Alias %qD ist hier
*** 61854,61860 ****
  #: cp/name-lookup.cc:9294
  #, gcc-internal-format
  msgid "exporting namespace %qD with internal linkage"
! msgstr "Namensraum %qD mit interner Verknüpfung wird exportiert"
  
  #: cp/name-lookup.cc:9296
  #, gcc-internal-format
--- 61855,61861 ----
  #: cp/name-lookup.cc:9294
  #, gcc-internal-format
  msgid "exporting namespace %qD with internal linkage"
! msgstr "Namensraum %qD mit interner Bindung wird exportiert"
  
  #: cp/name-lookup.cc:9296
  #, gcc-internal-format
*************** msgstr "Ausdruck muss in runden Klammern
*** 64410,64416 ****
  #: cp/parser.cc:32348
  #, gcc-internal-format
  msgid "missing additional %<requires%> to start a requires-expression"
! msgstr "Fehlendes zusätzliches %<requries%>, um eine requires-expression zu beginnen"
  
  #: cp/parser.cc:32589
  #, gcc-internal-format
--- 64411,64417 ----
  #: cp/parser.cc:32348
  #, gcc-internal-format
  msgid "missing additional %<requires%> to start a requires-expression"
! msgstr "Fehlendes zusätzliches %<requires%>, um eine requires-expression zu beginnen"
  
  #: cp/parser.cc:32589
  #, gcc-internal-format
*************** msgstr "ISO C++ unterstützt keine Opera
*** 64470,64481 ****
  #: cp/parser.cc:33859
  #, gcc-internal-format
  msgid "literal operator template %qD has invalid parameter list; expected non-type template parameter pack %<<char...>%> or single non-type parameter of class type"
! msgstr "literales Operatortemplate %qD hat ungültige Parameterliste; nicht-Typ Templateargumentpack %<<char…>%> oder einzelner Nicht-Typ-Parameter von Klassentyp erwartet"
  
  #: cp/parser.cc:33865
  #, gcc-internal-format
  msgid "literal operator template %qD has invalid parameter list; expected non-type template parameter pack %<<char...>%>"
! msgstr "literales Operatortemplate %qD hat ungültige Parameterliste; Template für Nicht-Typ Argumentpack %<<char…>%> erwartet"
  
  #: cp/parser.cc:33905
  #, gcc-internal-format
--- 64471,64482 ----
  #: cp/parser.cc:33859
  #, gcc-internal-format
  msgid "literal operator template %qD has invalid parameter list; expected non-type template parameter pack %<<char...>%> or single non-type parameter of class type"
! msgstr "literales Operatortemplate %qD hat ungültige Parameterliste; nicht-Typ-Templateargumentpack %<<char...>%> oder einzelner Nicht-Typ-Parameter von Klassentyp erwartet"
  
  #: cp/parser.cc:33865
  #, gcc-internal-format
  msgid "literal operator template %qD has invalid parameter list; expected non-type template parameter pack %<<char...>%>"
! msgstr "literales Operatortemplate %qD hat ungültige Parameterliste; Template für Nicht-Typ Argumentpack %<<char...>%> erwartet"
  
  #: cp/parser.cc:33905
  #, gcc-internal-format
*************** msgstr "%<auto(x)%> kann nicht eingeschr
*** 68844,68850 ****
  #: cp/typeck2.cc:2513
  #, gcc-internal-format
  msgid "%<auto(x)%> only available with %<-std=c++23%> or %<-std=gnu++23%>"
! msgstr "%<auto{x}%> ist erst ab %<-std=c++23%> oder %<-std=gnu++23%> verfügbar"
  
  #: cp/typeck2.cc:2538
  #, gcc-internal-format
--- 68845,68851 ----
  #: cp/typeck2.cc:2513
  #, gcc-internal-format
  msgid "%<auto(x)%> only available with %<-std=c++23%> or %<-std=gnu++23%>"
! msgstr "%<auto(x)%> ist erst ab %<-std=c++23%> oder %<-std=gnu++23%> verfügbar"
  
  #: cp/typeck2.cc:2538
  #, gcc-internal-format
*************** msgstr "Parameter vom Typ %<va_list%> {a
*** 69008,69014 ****
  #: d/d-lang.cc:463
  #, gcc-internal-format
  msgid "bad argument for %<-fdebug=%>: %qs"
! msgstr "falsches Argument für %<-fdebug%>: %qs"
  
  #: d/d-lang.cc:518
  #, gcc-internal-format
--- 69009,69015 ----
  #: d/d-lang.cc:463
  #, gcc-internal-format
  msgid "bad argument for %<-fdebug=%>: %qs"
! msgstr "falsches Argument für %<-fdebug=%>: %qs"
  
  #: d/d-lang.cc:518
  #, gcc-internal-format
*************** msgstr "falsches Argument für %<-fexter
*** 69018,69029 ****
  #: d/d-lang.cc:541
  #, gcc-internal-format
  msgid "bad argument for %<-fmodule-file=%>: %qs"
! msgstr "falsches Argument für %<-fmodule-file%>: %qs"
  
  #: d/d-lang.cc:708
  #, gcc-internal-format
  msgid "bad argument for %<-fversion=%>: %qs"
! msgstr "falsches Argument für %<-fversion%>: %qs"
  
  #: d/d-lang.cc:984
  #, gcc-internal-format
--- 69019,69030 ----
  #: d/d-lang.cc:541
  #, gcc-internal-format
  msgid "bad argument for %<-fmodule-file=%>: %qs"
! msgstr "falsches Argument für %<-fmodule-file=%>: %qs"
  
  #: d/d-lang.cc:708
  #, gcc-internal-format
  msgid "bad argument for %<-fversion=%>: %qs"
! msgstr "falsches Argument für %<-fversion=%>: %qs"
  
  #: d/d-lang.cc:984
  #, gcc-internal-format
*************** msgstr "Argument %qE kann nicht zur Übe
*** 69205,69211 ****
  #: d/intrinsics.cc:446
  #, gcc-internal-format
  msgid "element index %qE is out of bounds %<[0 .. %E]%>"
! msgstr "Elementindex %qE ist außerhalb der Grenzen %<[0 .. %E%>"
  
  #: d/intrinsics.cc:493
  #, gcc-internal-format
--- 69206,69212 ----
  #: d/intrinsics.cc:446
  #, gcc-internal-format
  msgid "element index %qE is out of bounds %<[0 .. %E]%>"
! msgstr "Elementindex %qE ist außerhalb der Grenzen %<[0 .. %E]%>"
  
  #: d/intrinsics.cc:493
  #, gcc-internal-format
*************** msgstr "gfc_compare_expr(): Bad basic ty
*** 69457,69463 ****
  #: fortran/arith.cc:1846
  #, gcc-internal-format, gfc-internal-format
  msgid "Unsigned exponentiation not permitted with -pedantic at %L"
! msgstr "Vorzeichenlose Potenzierung nicht erlaubt mit -pedantic bei %L"
  
  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79596
  #: fortran/arith.cc:1910
--- 69458,69464 ----
  #: fortran/arith.cc:1846
  #, gcc-internal-format, gfc-internal-format
  msgid "Unsigned exponentiation not permitted with -pedantic at %L"
! msgstr "Vorzeichenlose Potenzierung nicht erlaubt mit »-pedantic« bei %L"
  
  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79596
  #: fortran/arith.cc:1910
*************** msgstr "Nicht-konstante untere Grenze in
*** 71507,71513 ****
  #: fortran/decl.cc:2255
  #, gcc-internal-format
  msgid "Entity %qs at %L is incompatible with a BOZ literal constant"
! msgstr "Entity %qs bei %L ist inkompatibel zu einer BOZ-Literal-Konstante"
  
  #: fortran/decl.cc:2321 fortran/decl.cc:2328
  #, gcc-internal-format, gfc-internal-format
--- 71508,71514 ----
  #: fortran/decl.cc:2255
  #, gcc-internal-format
  msgid "Entity %qs at %L is incompatible with a BOZ literal constant"
! msgstr "Entität %qs bei %L ist inkompatibel zu einer BOZ-Literal-Konstante"
  
  #: fortran/decl.cc:2321 fortran/decl.cc:2328
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "IMPORT-Anweisung bei %C"
*** 71916,71922 ****
  #: fortran/decl.cc:5140
  #, gcc-internal-format, gfc-internal-format
  msgid "Expecting list of named entities at %C"
! msgstr "Liste benannter Einträge bei %C erwartet"
  
  #: fortran/decl.cc:5169
  #, gcc-internal-format
--- 71917,71923 ----
  #: fortran/decl.cc:5140
  #, gcc-internal-format, gfc-internal-format
  msgid "Expecting list of named entities at %C"
! msgstr "Liste benannter Entitäten bei %C erwartet"
  
  #: fortran/decl.cc:5169
  #, gcc-internal-format
*************** msgstr "Syntaxfehler in !GCC$ ATTRIBUTES
*** 73114,73120 ****
  #: fortran/decl.cc:11977
  #, gcc-internal-format
  msgid "%<GCC unroll%> directive requires a non-negative integral constant less than or equal to %u at %C"
! msgstr "Direktive %<GCC unroll%> bei %2$C verlangt eine konstante Anzahl (maximal %1$u)"
  
  #: fortran/decl.cc:11991
  #, gcc-internal-format, gfc-internal-format
--- 73115,73121 ----
  #: fortran/decl.cc:11977
  #, gcc-internal-format
  msgid "%<GCC unroll%> directive requires a non-negative integral constant less than or equal to %u at %C"
! msgstr "Direktive %<GCC unroll%> verlangt eine konstante Anzahl (maximal %u), bei %C"
  
  #: fortran/decl.cc:11991
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Ziel der Rang-Neuzuordnung ist k
*** 73670,73676 ****
  #: fortran/expr.cc:4504
  #, gcc-internal-format, gfc-internal-format
  msgid "The assumed rank target at %L is an experimental F202y feature. Use option -std=f202y to enable"
! msgstr "Das angenommene Rangziel bei %L ist ein experimentelles Merkmal von F202y. Verwenden Sie die Option -std=f202y zum Einschalten"
  
  #: fortran/expr.cc:4516
  #, gcc-internal-format, gfc-internal-format
--- 73671,73677 ----
  #: fortran/expr.cc:4504
  #, gcc-internal-format, gfc-internal-format
  msgid "The assumed rank target at %L is an experimental F202y feature. Use option -std=f202y to enable"
! msgstr "Das angenommene Rangziel bei %L ist ein experimentelles Merkmal von F202y. Verwenden Sie die Option »-std=f202y« zum Einschalten"
  
  #: fortran/expr.cc:4516
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Argument bei %L mit angenommenem
*** 74872,74878 ****
  #: fortran/intrinsic.cc:301
  #, gcc-internal-format, gfc-internal-format
  msgid "Assumed-rank argument at %L is only permitted as actual argument to intrinsic inquiry functions or to RESHAPE. The latter is an experimental F202y feature. Use -std=f202y to enable"
! msgstr "Argument mit angenommenem Rang bei %L ist nur als tatsächliches Argument der intrinsischen Abfragefunktionen oder von RESHAPE erlaubt. Letzteres ist ein experimentelles F202y-Feature. Verwenden Sie -std=f202y, um es einzuschalten"
  
  #: fortran/intrinsic.cc:309
  #, gcc-internal-format, gfc-internal-format
--- 74873,74879 ----
  #: fortran/intrinsic.cc:301
  #, gcc-internal-format, gfc-internal-format
  msgid "Assumed-rank argument at %L is only permitted as actual argument to intrinsic inquiry functions or to RESHAPE. The latter is an experimental F202y feature. Use -std=f202y to enable"
! msgstr "Argument mit angenommenem Rang bei %L ist nur als tatsächliches Argument der intrinsischen Abfragefunktionen oder von RESHAPE erlaubt. Letzteres ist ein experimentelles F202y-Feature. Verwenden Sie »-std=f202y«, um es einzuschalten"
  
  #: fortran/intrinsic.cc:309
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Interner Fehler: make_generic():
*** 74910,74926 ****
  #: fortran/intrinsic.cc:4469
  #, gcc-internal-format, gfc-internal-format
  msgid "ALLOCATED intrinsic at %L requires an array or scalar allocatable entity"
! msgstr "Das intrinsische ALLOCATED bei %L erfordert ein Feld oder eine skalar allozierbare Entity"
  
  #: fortran/intrinsic.cc:4482
  #, gcc-internal-format, gfc-internal-format
  msgid "Scalar entity required at %L"
! msgstr "Skalare Einheit bei %L benötigt"
  
  #: fortran/intrinsic.cc:4493
  #, gcc-internal-format, gfc-internal-format
  msgid "Array entity required at %L"
! msgstr "Feldeinheit bei %L benötigt"
  
  #: fortran/intrinsic.cc:4500
  #, gcc-internal-format
--- 74911,74927 ----
  #: fortran/intrinsic.cc:4469
  #, gcc-internal-format, gfc-internal-format
  msgid "ALLOCATED intrinsic at %L requires an array or scalar allocatable entity"
! msgstr "Das intrinsische ALLOCATED bei %L erfordert ein Feld oder eine skalar allozierbare Entität"
  
  #: fortran/intrinsic.cc:4482
  #, gcc-internal-format, gfc-internal-format
  msgid "Scalar entity required at %L"
! msgstr "Skalare Entität bei %L benötigt"
  
  #: fortran/intrinsic.cc:4493
  #, gcc-internal-format, gfc-internal-format
  msgid "Array entity required at %L"
! msgstr "Feldentität bei %L benötigt"
  
  #: fortran/intrinsic.cc:4500
  #, gcc-internal-format
*************** msgstr "Name einer Strukturkomponente od
*** 75781,75787 ****
  #: fortran/match.cc:227
  #, gcc-internal-format
  msgid "%qs is neither a defined operator nor a structure component in dotted string at %C"
! msgstr "in der gepunkteten Zeichenkette bei %2$C ist %1$qs weder ein definierter Operator noch eine Strukturkomponente"
  
  #: fortran/match.cc:298
  #, gcc-internal-format
--- 75782,75788 ----
  #: fortran/match.cc:227
  #, gcc-internal-format
  msgid "%qs is neither a defined operator nor a structure component in dotted string at %C"
! msgstr "in der gepunkteten Zeichenkette ist %qs weder ein definierter Operator noch eine Strukturkomponente, bei %C"
  
  #: fortran/match.cc:298
  #, gcc-internal-format
*************** msgstr "Falsche Bounds-Remapping-Liste b
*** 75982,75988 ****
  #: fortran/match.cc:1946
  #, gcc-internal-format, gfc-internal-format
  msgid "The bounds remapping list at %C is an experimental F202y feature. Use std=f202y to enable"
! msgstr "Die Bounds-Remapping-Liste bei %C ist eine experimentelle F202y-Funktion. Verwenden Sie -std=f202y zum Aktivieren"
  
  #: fortran/match.cc:1952
  #, gcc-internal-format, gfc-internal-format
--- 75983,75989 ----
  #: fortran/match.cc:1946
  #, gcc-internal-format, gfc-internal-format
  msgid "The bounds remapping list at %C is an experimental F202y feature. Use std=f202y to enable"
! msgstr "Die Bounds-Remapping-Liste bei %C ist eine experimentelle F202y-Funktion. Verwenden Sie »-std=f202y« zum Aktivieren"
  
  #: fortran/match.cc:1952
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Modul-Eigenschaft in USE-Anweisu
*** 76909,76920 ****
  #: fortran/module.cc:571
  #, gcc-internal-format, gfc-internal-format
  msgid "\"::\" was expected after module nature at %C but was not found"
! msgstr "\"::\" nach Modul-Eigenschaft bei %C erwartet, aber nicht gefunden"
  
  #: fortran/module.cc:581
  #, gcc-internal-format, gfc-internal-format
  msgid "\"USE :: module\" at %C"
! msgstr "\"USE :: module\" bei %C"
  
  #: fortran/module.cc:640
  #, gcc-internal-format, gfc-internal-format
--- 76910,76921 ----
  #: fortran/module.cc:571
  #, gcc-internal-format, gfc-internal-format
  msgid "\"::\" was expected after module nature at %C but was not found"
! msgstr "»::« nach Modul-Eigenschaft bei %C erwartet, aber nicht gefunden"
  
  #: fortran/module.cc:581
  #, gcc-internal-format, gfc-internal-format
  msgid "\"USE :: module\" at %C"
! msgstr "»USE :: module« bei %C"
  
  #: fortran/module.cc:640
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Vorherige !$OMP DECLARE REDUCTIO
*** 77013,77019 ****
  #: fortran/module.cc:5616
  #, gcc-internal-format
  msgid "%qs of module %qs, imported at %C, is also the name of the current program unit"
! msgstr "Bei %3$C importiertes %1$qs von Modul %2$qs ist auch der Name der aktuellen Programmeinheit"
  
  #: fortran/module.cc:5753
  #, gcc-internal-format
--- 77014,77020 ----
  #: fortran/module.cc:5616
  #, gcc-internal-format
  msgid "%qs of module %qs, imported at %C, is also the name of the current program unit"
! msgstr "Das %qs von Modul %qs, das bei %C importiert wurde, ist auch der Name der aktuellen Programmeinheit"
  
  #: fortran/module.cc:5753
  #, gcc-internal-format
*************** msgstr "Verwendung des intrinsischen Mod
*** 77107,77118 ****
  #: fortran/module.cc:7466
  #, gcc-internal-format
  msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %L is incompatible with option %qs"
! msgstr "Verwendung der Konstante NUMERIC_STORAGE_SIZE aus intrinsischem Modul ISO_FORTRAN_ENV bei %L ist mit Option %qs unverträglich"
  
  #: fortran/module.cc:7543
  #, gcc-internal-format, gfc-internal-format
  msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %C is incompatible with option %s"
! msgstr "Verwendung der Konstante NUMERIC_STORAGE_SIZE aus intrinsischem Modul ISO_FORTRAN_ENV bei %C ist mit Option %s unverträglich"
  
  #: fortran/module.cc:7603
  #, gcc-internal-format
--- 77108,77119 ----
  #: fortran/module.cc:7466
  #, gcc-internal-format
  msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %L is incompatible with option %qs"
! msgstr "Verwendung der Konstante NUMERIC_STORAGE_SIZE aus intrinsischem Modul ISO_FORTRAN_ENV bei %L ist mit der Option %qs unverträglich"
  
  #: fortran/module.cc:7543
  #, gcc-internal-format, gfc-internal-format
  msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %C is incompatible with option %s"
! msgstr "Verwendung der Konstante NUMERIC_STORAGE_SIZE aus intrinsischem Modul ISO_FORTRAN_ENV bei %C ist mit der Option %s unverträglich"
  
  #: fortran/module.cc:7603
  #, gcc-internal-format
*************** msgstr "Verwendung des nicht-intrinsisch
*** 77172,77183 ****
  #: fortran/module.cc:7748
  #, gcc-internal-format
  msgid "File %qs opened at %C is not a GNU Fortran module file"
! msgstr "Bei %2$C geöffnete Datei %1$qs ist keine GNU-Fortran-Moduldatei"
  
  #: fortran/module.cc:7769
  #, gcc-internal-format
  msgid "Cannot read module file %qs opened at %C, because it was created by a different version of GNU Fortran"
! msgstr "Bei %2$C geöffnete Moduldatei %1$qs kann nicht gelesen werden, da sie von einer anderen Version von GNU Fortran erstellt wurde"
  
  #: fortran/module.cc:7786
  #, gcc-internal-format
--- 77173,77184 ----
  #: fortran/module.cc:7748
  #, gcc-internal-format
  msgid "File %qs opened at %C is not a GNU Fortran module file"
! msgstr "Geöffnete Datei %qs ist keine GNU-Fortran-Moduldatei, bei %C"
  
  #: fortran/module.cc:7769
  #, gcc-internal-format
  msgid "Cannot read module file %qs opened at %C, because it was created by a different version of GNU Fortran"
! msgstr "Moduldatei %qs kann nicht gelesen werden, da sie von einer anderen Version von GNU Fortran erstellt wurde, bei %C"
  
  #: fortran/module.cc:7786
  #, gcc-internal-format
*************** msgstr "%<(%> nach %qs bei %C erwartet"
*** 77449,77455 ****
  #: fortran/openmp.cc:2309
  #, gcc-internal-format
  msgid "Invalid expression after %<%s(%> at %C"
! msgstr "Ungültiger Ausdruck nach %<%s%> bei %C"
  
  #: fortran/openmp.cc:2369
  #, gcc-internal-format, gfc-internal-format
--- 77450,77456 ----
  #: fortran/openmp.cc:2309
  #, gcc-internal-format
  msgid "Invalid expression after %<%s(%> at %C"
! msgstr "Ungültiger Ausdruck nach %<%s(%> bei %C"
  
  #: fortran/openmp.cc:2369
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Doppelte Klausel mit Abhängigke
*** 77524,77530 ****
  #: fortran/openmp.cc:2892
  #, gcc-internal-format
  msgid "Expected %<)%> or %<omp_cur_iteration)%> at %C"
! msgstr "%<)%> oder %<omp_cur_iteration%> bei %C erwartet"
  
  #: fortran/openmp.cc:2904
  #, gcc-internal-format, gfc-internal-format
--- 77525,77531 ----
  #: fortran/openmp.cc:2892
  #, gcc-internal-format
  msgid "Expected %<)%> or %<omp_cur_iteration)%> at %C"
! msgstr "%<)%> oder %<omp_cur_iteration)%> bei %C erwartet"
  
  #: fortran/openmp.cc:2904
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Die Direktive %<GCC unroll%> bei
*** 80052,80068 ****
  #: fortran/parse.cc:6717
  #, gcc-internal-format
  msgid "%<GCC ivdep%> directive not at the start of a loop at %C"
! msgstr "Die Direktive %<GCC unroll%> bei %C darf nur direkt vor einem Schleifenbeginn stehen"
  
  #: fortran/parse.cc:6720
  #, gcc-internal-format
  msgid "%<GCC vector%> directive not at the start of a loop at %C"
! msgstr "Die Direktive %<GCC unroll%> bei %C darf nur direkt vor einem Schleifenbeginn stehen"
  
  #: fortran/parse.cc:6723
  #, gcc-internal-format
  msgid "%<GCC novector%> directive not at the start of a loop at %C"
! msgstr "Die Direktive %<GCC unroll%> bei %C darf nur direkt vor einem Schleifenbeginn stehen"
  
  #: fortran/parse.cc:6839
  #, gcc-internal-format
--- 80053,80069 ----
  #: fortran/parse.cc:6717
  #, gcc-internal-format
  msgid "%<GCC ivdep%> directive not at the start of a loop at %C"
! msgstr "Die Direktive %<GCC ivdep%> bei %C darf nur direkt vor einem Schleifenbeginn stehen"
  
  #: fortran/parse.cc:6720
  #, gcc-internal-format
  msgid "%<GCC vector%> directive not at the start of a loop at %C"
! msgstr "Die Direktive %<GCC vector%> bei %C darf nur direkt vor einem Schleifenbeginn stehen"
  
  #: fortran/parse.cc:6723
  #, gcc-internal-format
  msgid "%<GCC novector%> directive not at the start of a loop at %C"
! msgstr "Die Direktive %<GCC novector%> bei %C darf nur direkt vor einem Schleifenbeginn stehen"
  
  #: fortran/parse.cc:6839
  #, gcc-internal-format
*************** msgstr "gfc_caf_attr(): Bad array refere
*** 80460,80466 ****
  #: fortran/primary.cc:3401
  #, gcc-internal-format
  msgid "No initializer for allocatable component %qs given in the structure constructor at %C"
! msgstr "Im Strukturkonstruktor bei %2$C wurde keine Initialisierung für allozierbare Komponente %1$qs angegeben"
  
  #: fortran/primary.cc:3412
  #, gcc-internal-format, gfc-internal-format
--- 80461,80467 ----
  #: fortran/primary.cc:3401
  #, gcc-internal-format
  msgid "No initializer for allocatable component %qs given in the structure constructor at %C"
! msgstr "Im Strukturkonstruktor wurde keine Initialisierung für allozierbare Komponente %qs angegeben, bei %C"
  
  #: fortran/primary.cc:3412
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Strukturkonstruktor mit fehlende
*** 80470,80476 ****
  #: fortran/primary.cc:3421
  #, gcc-internal-format
  msgid "No initializer for component %qs given in the structure constructor at %C"
! msgstr "Im Strukturkonstruktor bei %2$C wurde keine Initialisierung für Komponente %1$qs angegeben"
  
  #: fortran/primary.cc:3469
  #, gcc-internal-format
--- 80471,80477 ----
  #: fortran/primary.cc:3421
  #, gcc-internal-format
  msgid "No initializer for component %qs given in the structure constructor at %C"
! msgstr "Im Strukturkonstruktor wurde keine Initialisierung für Komponente %qs angegeben, bei %C"
  
  #: fortran/primary.cc:3469
  #, gcc-internal-format
*************** msgstr "(F202y)Fehlende oder ungültige
*** 82121,82127 ****
  #: fortran/resolve.cc:10130
  #, gcc-internal-format
  msgid "Associating entity %qs at %L is a procedure pointer"
! msgstr "Zugeordneter Name %qs bei %L ist ein Prozedurzeiger"
  
  #: fortran/resolve.cc:10139
  #, gcc-internal-format
--- 82122,82128 ----
  #: fortran/resolve.cc:10130
  #, gcc-internal-format
  msgid "Associating entity %qs at %L is a procedure pointer"
! msgstr "Zuordnende Entität %qs bei %L ist ein Prozedurzeiger"
  
  #: fortran/resolve.cc:10139
  #, gcc-internal-format
*************** msgstr "Abgeleiteter Typ %qs kann bei %L
*** 82131,82137 ****
  #: fortran/resolve.cc:10156
  #, gcc-internal-format
  msgid "Associating entity %qs at %L is a procedure name"
! msgstr "Zugeordneter Name %qs bei %L ist ein Prozedurname"
  
  #: fortran/resolve.cc:10172
  #, gcc-internal-format, gfc-internal-format
--- 82132,82138 ----
  #: fortran/resolve.cc:10156
  #, gcc-internal-format
  msgid "Associating entity %qs at %L is a procedure name"
! msgstr "Zuordnende Entität %qs bei %L ist ein Prozedurname"
  
  #: fortran/resolve.cc:10172
  #, gcc-internal-format, gfc-internal-format
*************** msgstr "Überlappende ungleiche Initiali
*** 84514,84520 ****
  #: fortran/trans-array.cc:2469 fortran/trans-expr.cc:10450
  #, gcc-internal-format, gfc-internal-format
  msgid "The structure constructor at %L has been finalized. This feature was removed by f08/0011. Use -std=f2018 or -std=gnu to eliminate the finalization."
! msgstr "Der Strukturkonstruktor bei %L wurde finalisiert. Dieses Feature wurde aus f08/0011 entfernt. Verwenden Sie -std=f2018 oder -std=gnu, um die Finalisierung zu entfernen."
  
  #. Problems occur when we get something like
  #. integer :: a(lots) = (/(i, i=1, lots)/)
--- 84515,84521 ----
  #: fortran/trans-array.cc:2469 fortran/trans-expr.cc:10450
  #, gcc-internal-format, gfc-internal-format
  msgid "The structure constructor at %L has been finalized. This feature was removed by f08/0011. Use -std=f2018 or -std=gnu to eliminate the finalization."
! msgstr "Der Strukturkonstruktor bei %L wurde finalisiert. Dieses Feature wurde aus f08/0011 entfernt. Verwenden Sie »-std=f2018« oder »-std=gnu«, um die Finalisierung zu entfernen."
  
  #. Problems occur when we get something like
  #. integer :: a(lots) = (/(i, i=1, lots)/)
*************** msgstr "Hex-Zahl konnte nicht eingelesen
*** 85193,85199 ****
  #: lto/lto-common.cc:2100
  #, gcc-internal-format, gfc-internal-format
  msgid "unexpected file name %s in linker resolution file. Expected %s"
! msgstr "unerwarteter Dateiname %s in Linker-Auflösungsdatei. %s erwartet"
  
  #: lto/lto-common.cc:2109
  #, gcc-internal-format
--- 85194,85200 ----
  #: lto/lto-common.cc:2100
  #, gcc-internal-format, gfc-internal-format
  msgid "unexpected file name %s in linker resolution file. Expected %s"
! msgstr "unerwarteter Dateiname %s in Binder-Auflösungsdatei. %s erwartet"
  
  #: lto/lto-common.cc:2109
  #, gcc-internal-format
*************** msgstr "Bytecode-Strom in Datei %qs, mit
*** 85228,85234 ****
  #: lto/lto-common.cc:2305
  #, gcc-internal-format
  msgid "cannot read %<LTO_section_decls%> from %s"
! msgstr "Fehler beim Einlesen von %<LOT_section_decls%> aus %s"
  
  #: lto/lto-common.cc:2426
  #, gcc-internal-format, gfc-internal-format
--- 85229,85235 ----
  #: lto/lto-common.cc:2305
  #, gcc-internal-format
  msgid "cannot read %<LTO_section_decls%> from %s"
! msgstr "Fehler beim Einlesen von %<LTO_section_decls%> aus %s"
  
  #: lto/lto-common.cc:2426
  #, gcc-internal-format, gfc-internal-format
diff -Nrcpad gcc-16-20250817/gcc/rtl-ssa/accesses.cc gcc-16-20250824/gcc/rtl-ssa/accesses.cc
*** gcc-16-20250817/gcc/rtl-ssa/accesses.cc	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/rtl-ssa/accesses.cc	Sun Aug 24 22:32:22 2025
*************** rtl_ssa::lookup_use (splay_tree<use_info
*** 1087,1092 ****
--- 1087,1124 ----
    return tree.lookup (compare);
  }
  
+ // See the comment above the declaration.
+ use_lookup
+ function_info::find_use (set_info *def, insn_info *insn)
+ {
+   gcc_assert (!insn->is_debug_insn ());
+   use_info *first = def->first_nondebug_insn_use ();
+   if (!first)
+     // There are no uses.  The comparison result is pretty meaningless
+     // in this case.
+     return { nullptr, -1 };
+ 
+   // See whether the first use matches.
+   if (*insn <= *first->insn ())
+     {
+       int comparison = (insn == first->insn () ? 0 : -1);
+       return { first, comparison };
+     }
+ 
+   // See whether the last use matches.
+   use_info *last = def->last_nondebug_insn_use ();
+   if (*insn >= *last->insn ())
+     {
+       int comparison = (insn == last->insn () ? 0 : 1);
+       return { last, comparison };
+     }
+ 
+   // Resort to using a splay tree to search for the result.
+   need_use_splay_tree (def);
+   int comparison = lookup_use (def->m_use_tree, insn);
+   return { def->m_use_tree.root ()->value (), comparison };
+ }
+ 
  // Add USE to USE->def ()'s list of uses. inserting USE immediately before
  // BEFORE.  USE is not currently in the list.
  //
diff -Nrcpad gcc-16-20250817/gcc/rtl-ssa/accesses.h gcc-16-20250824/gcc/rtl-ssa/accesses.h
*** gcc-16-20250817/gcc/rtl-ssa/accesses.h	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/rtl-ssa/accesses.h	Sun Aug 24 22:32:22 2025
*************** public:
*** 1044,1049 ****
--- 1044,1085 ----
    int comparison;
  };
  
+ // This class represents the result of looking for a use of a particular
+ // definition at a particular point, here referred to as point P.
+ // There are four states:
+ //
+ // - USE is null if the definition has no uses.
+ //
+ // - Otherwise, COMPARISON is 0 if we found a definition at P.  USE then
+ //   contains this use.
+ //
+ // - Otherwise, COMPARISON is greater than 0 if we found a use that precedes P.
+ //   USE then contains this use.
+ //
+ // - Otherwise, COMPARISON is less than zero and we found a use that follows P.
+ //   USE then contains this use.
+ class use_lookup
+ {
+ public:
+   // If we found a use at P, return that use, otherwise return null.
+   use_info *matching_use () const;
+ 
+   // If we found a use at P, return that use, otherwise return prev_use ().
+   use_info *matching_or_prev_use () const;
+ 
+   // If we found a use at P, return that use, otherwise return next_use ().
+   use_info *matching_or_next_use () const;
+ 
+   // Return the last use that occurs before P, or null if none.
+   use_info *prev_use () const;
+ 
+   // Return the first use that occurs after P, or null if none.
+   use_info *next_use () const;
+ 
+   use_info *use;
+   int comparison;
+ };
+ 
  void pp_resource (pretty_printer *, resource_info);
  void pp_access (pretty_printer *, const access_info *,
  		unsigned int flags = PP_ACCESS_DEFAULT);
diff -Nrcpad gcc-16-20250817/gcc/rtl-ssa/blocks.cc gcc-16-20250824/gcc/rtl-ssa/blocks.cc
*** gcc-16-20250817/gcc/rtl-ssa/blocks.cc	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/rtl-ssa/blocks.cc	Sun Aug 24 22:32:22 2025
*************** function_info::add_live_out_use (bb_info
*** 315,329 ****
  
    // If the end of the block already has an artificial use, that use
    // acts to make DEF live at the appropriate point.
!   use_info *use = def->last_nondebug_insn_use ();
!   if (use && use->insn () == bb->end_insn ())
      return;
  
    // Currently there is no need to maintain a backward link from the end
    // instruction to the list of live-out uses.  Such a list would be
    // expensive to update if it was represented using the usual insn_info
    // access arrays.
!   use = allocate<use_info> (bb->end_insn (), def->resource (), def);
    use->set_is_live_out_use (true);
    add_use (use);
  }
--- 315,328 ----
  
    // If the end of the block already has an artificial use, that use
    // acts to make DEF live at the appropriate point.
!   if (find_use (def, bb->end_insn ()).matching_use ())
      return;
  
    // Currently there is no need to maintain a backward link from the end
    // instruction to the list of live-out uses.  Such a list would be
    // expensive to update if it was represented using the usual insn_info
    // access arrays.
!   auto *use = allocate<use_info> (bb->end_insn (), def->resource (), def);
    use->set_is_live_out_use (true);
    add_use (use);
  }
*************** function_info::live_out_value (bb_info *
*** 360,365 ****
--- 359,399 ----
    return set;
  }
  
+ // Make USE's definition available at USE, if it isn't already.  Assume that
+ // the caller has properly used make_use_available to check that this is
+ // possible.
+ void
+ function_info::commit_make_use_available (use_info *use)
+ {
+   // We only need to handle single dominating definitions here.
+   // Other cases are handled by degenerate phis, with create_degenerate_phi
+   // creating any necessary live-out uses.
+   set_info *def = use->def ();
+   if (def
+       && use->is_reg ()
+       && is_single_dominating_def (def)
+       && use->ebb () != def->ebb ())
+     {
+       // If USE's EBB has DEF's EBB as its single predecessor, it's enough
+       // to add a live-out use to the former's predecessor block.  Otherwise,
+       // conservatively add a live-out use at the end of DEF's block, so that
+       // DEF cannot move further down.  Doing a minimal yet accurate update
+       // would be an O(n.log(n)) operation in the worst case.
+       auto ebb_cfg_bb = def->ebb ()->first_bb ()->cfg_bb ();
+       if (single_pred_p (ebb_cfg_bb))
+ 	{
+ 	  bb_info *pred_bb = this->bb (single_pred (ebb_cfg_bb));
+ 	  if (pred_bb->ebb () == def->ebb ())
+ 	    {
+ 	      add_live_out_use (pred_bb, def);
+ 	      return;
+ 	    }
+ 	}
+       add_live_out_use (def->bb (), def);
+       return;
+     }
+ }
+ 
  // Add PHI to EBB and enter it into the function's hash table.
  void
  function_info::append_phi (ebb_info *ebb, phi_info *phi)
*************** function_info::create_degenerate_phi (eb
*** 540,551 ****
        basic_block pred_cfg_bb = single_pred (ebb->first_bb ()->cfg_bb ());
        bb_info *pred_bb = this->bb (pred_cfg_bb);
  
!       if (!bitmap_set_bit (DF_LR_IN (ebb->first_bb ()->cfg_bb ()), regno))
  	{
  	  // The register was not previously live on entry to EBB and
  	  // might not have been live on exit from PRED_BB either.
! 	  if (bitmap_set_bit (DF_LR_OUT (pred_cfg_bb), regno))
! 	    add_live_out_use (pred_bb, def);
  	}
        else
  	{
--- 574,585 ----
        basic_block pred_cfg_bb = single_pred (ebb->first_bb ()->cfg_bb ());
        bb_info *pred_bb = this->bb (pred_cfg_bb);
  
!       if (bitmap_set_bit (DF_LR_IN (ebb->first_bb ()->cfg_bb ()), regno))
  	{
  	  // The register was not previously live on entry to EBB and
  	  // might not have been live on exit from PRED_BB either.
! 	  bitmap_set_bit (DF_LR_OUT (pred_cfg_bb), regno);
! 	  add_live_out_use (pred_bb, def);
  	}
        else
  	{
diff -Nrcpad gcc-16-20250817/gcc/rtl-ssa/changes.cc gcc-16-20250824/gcc/rtl-ssa/changes.cc
*** gcc-16-20250817/gcc/rtl-ssa/changes.cc	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/rtl-ssa/changes.cc	Sun Aug 24 22:32:22 2025
*************** function_info::apply_changes_to_insn (in
*** 713,719 ****
  
    // Add all uses, now that their position is final.
    for (use_info *use : change.new_uses)
!     add_use (use);
  
    // Copy the uses and definitions.
    unsigned int num_defs = change.new_defs.size ();
--- 713,723 ----
  
    // Add all uses, now that their position is final.
    for (use_info *use : change.new_uses)
!     {
!       if (use->def ())
! 	commit_make_use_available (use);
!       add_use (use);
!     }
  
    // Copy the uses and definitions.
    unsigned int num_defs = change.new_defs.size ();
diff -Nrcpad gcc-16-20250817/gcc/rtl-ssa/functions.h gcc-16-20250824/gcc/rtl-ssa/functions.h
*** gcc-16-20250817/gcc/rtl-ssa/functions.h	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/rtl-ssa/functions.h	Sun Aug 24 22:32:22 2025
*************** public:
*** 131,138 ****
--- 131,153 ----
  
    // Look for a definition of RESOURCE at INSN.  Return the result of the
    // search as a def_lookup; see the comments there for more details.
+   //
+   // NOTE: This is not the function to use if INSN is known to be a real
+   // instruction (one with an RTL pattern) and if the caller is only
+   // interested in definitions within INSN itself.  In those cases
+   // it is better to use find_access.
    def_lookup find_def (resource_info resource, insn_info *insn);
  
+   // Search for a use of DEF around non-debug instruction INSN and return the
+   // result of the search as a use_lookup.  See the comment above the class
+   // for more details about the result means.
+   //
+   // NOTE: This is not the function to use if INSN is known to be a real
+   // instruction (one with an RTL pattern) and if the caller is only
+   // interested in uses within INSN itself.  In those cases it is better
+   // to use find_access.
+   use_lookup find_use (set_info *def, insn_info *insn);
+ 
    // Return an RAII object that owns all temporary RTL SSA memory
    // allocated during a change attempt.  The object should remain in
    // scope until the change has been aborted or successfully completed.
*************** private:
*** 294,299 ****
--- 309,315 ----
  
    void add_live_out_use (bb_info *, set_info *);
    set_info *live_out_value (bb_info *, set_info *);
+   void commit_make_use_available (use_info *);
  
    void append_phi (ebb_info *, phi_info *);
    void remove_phi (phi_info *);
diff -Nrcpad gcc-16-20250817/gcc/rtl-ssa/member-fns.inl gcc-16-20250824/gcc/rtl-ssa/member-fns.inl
*** gcc-16-20250817/gcc/rtl-ssa/member-fns.inl	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/rtl-ssa/member-fns.inl	Sun Aug 24 22:32:22 2025
*************** def_lookup::matching_set_or_first_def_of
*** 478,483 ****
--- 478,513 ----
    return first_def_of_next_group ();
  }
  
+ inline use_info *
+ use_lookup::prev_use () const
+ {
+   return !use || comparison > 0 ? use : use->prev_use ();
+ }
+ 
+ inline use_info *
+ use_lookup::next_use () const
+ {
+   return !use || comparison < 0 ? use : use->next_nondebug_insn_use ();
+ }
+ 
+ inline use_info *
+ use_lookup::matching_use () const
+ {
+   return comparison == 0 ? use : nullptr;
+ }
+ 
+ inline use_info *
+ use_lookup::matching_or_prev_use () const
+ {
+   return comparison == 0 ? use : prev_use ();
+ }
+ 
+ inline use_info *
+ use_lookup::matching_or_next_use () const
+ {
+   return comparison == 0 ? use : next_use ();
+ }
+ 
  inline insn_note::insn_note (insn_note_kind kind)
    : m_next_note (nullptr),
      m_kind (kind),
diff -Nrcpad gcc-16-20250817/gcc/rtlanal.cc gcc-16-20250824/gcc/rtlanal.cc
*** gcc-16-20250817/gcc/rtlanal.cc	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/rtlanal.cc	Sun Aug 24 22:32:22 2025
*************** pattern_cost (rtx pat, bool speed)
*** 5740,5746 ****
  	  rtx x = XVECEXP (pat, 0, i);
  	  if (GET_CODE (x) == SET)
  	    {
! 	      if (GET_CODE (SET_SRC (x)) == COMPARE)
  		{
  		  if (comparison)
  		    return 0;
--- 5740,5747 ----
  	  rtx x = XVECEXP (pat, 0, i);
  	  if (GET_CODE (x) == SET)
  	    {
! 	      if (GET_CODE (SET_SRC (x)) == COMPARE
! 		  || GET_MODE_CLASS (GET_MODE (SET_DEST (x))) == MODE_CC)
  		{
  		  if (comparison)
  		    return 0;
diff -Nrcpad gcc-16-20250817/gcc/testsuite/ChangeLog gcc-16-20250824/gcc/testsuite/ChangeLog
*** gcc-16-20250817/gcc/testsuite/ChangeLog	Sun Aug 17 22:32:10 2025
--- gcc-16-20250824/gcc/testsuite/ChangeLog	Sun Aug 24 22:32:22 2025
***************
*** 1,3 ****
--- 1,281 ----
+ 2025-08-23  Eczbek  <eczbek.void@gmail.com>
+ 
+ 	PR c++/116928
+ 	* g++.dg/parse/template33.C: New test.
+ 
+ 2025-08-23  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120933
+ 	* gcc.target/i386/noplt-gd-1.c (dg-options): Add
+ 	-mtls-dialect=gnu.
+ 	* gcc.target/i386/noplt-ld-1.c (dg-options): Likewise.
+ 
+ 2025-08-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120499
+ 	* g++.dg/modules/imp-member-4_a.C: New test.
+ 	* g++.dg/modules/imp-member-4_b.C: New test.
+ 	* g++.dg/modules/imp-member-4_c.C: New test.
+ 
+ 2025-08-22  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/120553
+ 	* gcc.target/riscv/pr120553-1.c: New test.
+ 	* gcc.target/riscv/pr120553-2.c: New test.
+ 	* gcc.target/riscv/pr120553-3.c: New test.
+ 	* gcc.target/riscv/pr120553-4.c: New test.
+ 	* gcc.target/riscv/pr120553-5.c: New test.
+ 	* gcc.target/riscv/pr120553-6.c: New test.
+ 	* gcc.target/riscv/pr120553-7.c: New test.
+ 	* gcc.target/riscv/pr120553-8.c: New test.
+ 
+ 2025-08-22  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.rv32.c: New test.
+ 
+ 2025-08-22  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121635
+ 	* gcc.target/i386/pr121635-1a.c: New test.
+ 	* gcc.target/i386/pr121635-1b.c: Likewise.
+ 
+ 2025-08-22  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	* g++.dg/abi/mangle83.C: Disable implicit enum test for
+ 	-fshort-enums.
+ 
+ 2025-08-22  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR rtl-optimization/120424
+ 	* lib/target-supports.exp (arm arches): Add arm_arch_v7.
+ 	* g++.target/arm/pr120424.C: Require armv7 support.  Use
+ 	dg-add-options arm_arch_v7 instead of explicit -march=armv7.
+ 
+ 2025-08-21  Steven G. Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/121627
+ 	* gfortran.dg/pr121627.f90: New test.
+ 
+ 2025-08-21  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR c/121478
+ 	* gcc.dg/torture/pr121478-1.c: New test.
+ 
+ 2025-08-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/121068
+ 	* g++.dg/cpp2a/constexpr-dtor18.C: New test.
+ 
+ 2025-08-21  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c: Call
+ 	check_effective_target_riscv_zvfh_ok rather than
+ 	check_effective_target_riscv_zvfh.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c: Likewise.
+ 	* lib/target-supports.exp (check_effective_target_riscv_zvfh_ok): Append
+ 	zvfh instead of v to march.
+ 	(remove_options_for_riscv_zvfh): Remove duplicate and
+ 	call remove_ rather than add_options_for_riscv_z_ext.
+ 
+ 2025-08-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/121619
+ 	* gcc.dg/pr121619.c: New test.
+ 
+ 2025-08-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121607
+ 	* gcc.target/i386/pr121607-1a.c: New test.
+ 	* gcc.target/i386/pr121607-1b.c: Likewise.
+ 
+ 2025-08-21  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84122
+ 	PR fortran/85942
+ 	* gfortran.dg/pdt_38.f03: New test.
+ 	* gfortran.dg/pdt_39.f03: New test.
+ 
+ 2025-08-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/120757
+ 	* g++.dg/cpp1y/auto-fn66.C: New test.
+ 
+ 2025-08-20  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/121553
+ 	* g++.dg/warn/Wshadow-19.C: Revert P2036 changes.
+ 	* g++.dg/warn/Wshadow-6.C: Likewise.
+ 	* g++.dg/warn/Wshadow-20.C: New test.
+ 	* g++.dg/warn/Wshadow-21.C: New test.
+ 
+ 2025-08-20  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	PR tree-optimization/109071
+ 	PR tree-optimization/85788
+ 	PR tree-optimization/88771
+ 	PR tree-optimization/106762
+ 	PR tree-optimization/108770
+ 	PR tree-optimization/115274
+ 	PR tree-optimization/117179
+ 	* gcc.dg/pr109071.c: New test.
+ 	* gcc.dg/pr109071_1.c: New test.
+ 	* gcc.dg/pr109071_10.c: New test.
+ 	* gcc.dg/pr109071_11.c: New test.
+ 	* gcc.dg/pr109071_12.c: New test.
+ 	* gcc.dg/pr109071_2.c: New test.
+ 	* gcc.dg/pr109071_3.c: New test.
+ 	* gcc.dg/pr109071_4.c: New test.
+ 	* gcc.dg/pr109071_5.c: New test.
+ 	* gcc.dg/pr109071_6.c: New test.
+ 	* gcc.dg/pr109071_7.c: New test.
+ 	* gcc.dg/pr109071_8.c: New test.
+ 	* gcc.dg/pr109071_9.c: New test.
+ 	* gcc.dg/pr117375.c: New test.
+ 
+ 2025-08-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121572
+ 	* gcc.target/i386/pr121572-1a.c: New test.
+ 	* gcc.target/i386/pr121572-1b.c: Likewise.
+ 	* gcc.target/i386/pr121572-2a.c: Likewise.
+ 	* gcc.target/i386/pr121572-2b.c: Likewise.
+ 
+ 2025-08-19  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/cpp26/expansion-stmt16.C: Add -fno-implicit-constexpr.
+ 
+ 2025-08-19  Ben Wu  <soggysocks206@gmail.com>
+ 
+ 	PR c++/120618
+ 	* g++.dg/cpp2a/concepts-requires5.C: Don't require
+ 	redundant diagnostic in static assertion.
+ 	* g++.dg/concepts/pr120618.C: New test.
+ 
+ 2025-08-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/120024
+ 	* gcc.dg/torture/malloc-1.c: New test.
+ 	* gcc.dg/torture/malloc-2.c: New test.
+ 
+ 2025-08-19  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/121351
+ 	* g++.dg/cpp2a/concepts-using7.C: New test.
+ 
+ 2025-08-19  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/121536
+ 	* g++.target/aarch64/sve/pr121536.cc: New test.
+ 
+ 2025-08-19  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121578
+ 	* g++.dg/abi/mangle83.C: Requires C++17.
+ 
+ 2025-08-19  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120195
+ 	* g++.dg/modules/using-32_a.C: New test.
+ 	* g++.dg/modules/using-32_b.C: New test.
+ 
+ 2025-08-19  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/108080
+ 	PR c++/121396
+ 	* g++.dg/modules/pr108080.H: Also allow target warnings.
+ 
+ 2025-08-17  Austin Law  <austinklaw@gmail.com>
+ 
+ 	PR target/121213
+ 	* gcc.target/riscv/amo/pr121213.c: New test.
+ 
+ 2025-08-17  dragan.mladjenovic  <dragan.mladjenovic@rt-rk.com>
+ 
+ 	* gcc.target/mips/tls-1.c: New file.
+ 
+ 2025-08-17  Matthew Fortune  <matthew.fortune@imgtec.com>
+ 
+ 	* gcc.target/mips/call-clobbered-1.c: Use HAS_LDC ghost
+ 	option instead of isa>=2.
+ 
+ 2025-08-17  Andrew Bennett  <andrew.bennett@imgtec.com>
+ 
+ 	* gcc.target/mips/near-far-1.c: Fix tests properly for
+ 	compact-branches (jals and balc).
+ 	* gcc.target/mips/near-far-2.c: Likewise.
+ 	* gcc.target/mips/near-far-3.c: Likewise.
+ 	* gcc.target/mips/near-far-4.c: Likewise.
+ 
+ 2025-08-17  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/mips/call-clobbered-2.c: Add a NOMIPS16 attribute.
+ 	* gcc.target/mips/call-clobbered-3.c: Likewise.
+ 	* gcc.target/mips/call-clobbered-5.c: Likewise.
+ 	* gcc.target/mips/ds-schedule-2.c: Add an -mno-mips16 option.
+ 	* gcc.target/mips/interrupt_handler-bug-1.c: Same as
+ 	call-clobbered-*.c tests.
+ 	* gcc.target/mips/movdf-1.c: Likewise.
+ 	* gcc.target/mips/movdf-2.c: Likewise.
+ 	* gcc.target/mips/movdf-3.c: Likewise.
+ 	* gcc.target/mips/msa-builtins.c: Same as ds-schedule-2.c.
+ 	Remove a NOMIPS16 attribute from builtins.
+ 	* gcc.target/mips/msa.c: Likewise.
+ 
+ 2025-08-17  Matthew Fortune  <matthew.fortune@imgtec.com>
+ 
+ 	* gcc.target/mips/insn-casesi.c: Require mips16 support but
+ 	not the command line option.
+ 	* gcc.target/mips/insn-tablejump.c: Force o32 ABI as
+ 	we do not really support n32/n64 microMIPS.  Require micromips
+ 	support but not the command line option.
+ 
+ 2025-08-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/121541
+ 	* gcc.target/i386/pr121541-1a.c: New test.
+ 	* gcc.target/i386/pr121541-1b.c: Likewise.
+ 	* gcc.target/i386/pr121541-2.c: Likewise.
+ 	* gcc.target/i386/pr121541-3.c: Likewise.
+ 	* gcc.target/i386/pr121541-4.c: Likewise.
+ 	* gcc.target/i386/pr121541-5a.c: Likewise.
+ 	* gcc.target/i386/pr121541-5b.c: Likewise.
+ 
  2025-08-17  Nathaniel Shead  <nathanieloshead@gmail.com>
  
  	PR c++/120503
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/abi/mangle83.C gcc-16-20250824/gcc/testsuite/g++.dg/abi/mangle83.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/abi/mangle83.C	Sun Aug 17 22:32:12 2025
--- gcc-16-20250824/gcc/testsuite/g++.dg/abi/mangle83.C	Sun Aug 24 22:32:25 2025
***************
*** 1,15 ****
  // PR c++/120503
  // Implement P2115r0 "merging definitions of unnamed unscoped enums"
! // { dg-do compile { target c++14 } }
  
  template<auto V> int Frob () { return int (V); }
  
  enum { A = (unsigned int)12345, B = 0 };
  template int Frob<A> ();
  template int Frob<B> ();
! // { dg-final { scan-assembler {_Z4FrobITnDaLUej1A12345EEiv:} { target c++20 } } }
  // { dg-final { scan-assembler {_Z4FrobITnDaL8._anon_012345EEiv:} { target c++17_down } } }
! // { dg-final { scan-assembler {_Z4FrobITnDaLUej1A0EEiv:} { target c++20 } } }
  // { dg-final { scan-assembler {_Z4FrobITnDaL8._anon_00EEiv:} { target c++17_down } } }
  
  enum { C = 5 } typedef X;
--- 1,15 ----
  // PR c++/120503
  // Implement P2115r0 "merging definitions of unnamed unscoped enums"
! // { dg-do compile { target c++17 } }
  
  template<auto V> int Frob () { return int (V); }
  
  enum { A = (unsigned int)12345, B = 0 };
  template int Frob<A> ();
  template int Frob<B> ();
! // { dg-final { scan-assembler {_Z4FrobITnDaLUej1A12345EEiv:} { target { c++20 && { ! short_enums } } } } }
  // { dg-final { scan-assembler {_Z4FrobITnDaL8._anon_012345EEiv:} { target c++17_down } } }
! // { dg-final { scan-assembler {_Z4FrobITnDaLUej1A0EEiv:} { target { c++20 && { ! short_enums } } } } }
  // { dg-final { scan-assembler {_Z4FrobITnDaL8._anon_00EEiv:} { target c++17_down } } }
  
  enum { C = 5 } typedef X;
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/concepts/pr120618.C gcc-16-20250824/gcc/testsuite/g++.dg/concepts/pr120618.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/concepts/pr120618.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/concepts/pr120618.C	Sun Aug 24 22:32:25 2025
***************
*** 0 ****
--- 1,13 ----
+ // { dg-do compile { target c++17 } }
+ // { dg-options "-fconcepts" }
+ 
+ class B{};
+ 
+ template <typename T>
+ requires (!requires(T t) { { t } -> bool; }) // { dg-error "return-type-requirement is not a type-constraint" }
+ void foo(T t) {}
+ 
+ int main() {
+   B b;
+   foo(b); // { dg-prune-output "no matching function" }
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C gcc-16-20250824/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/cpp1y/auto-fn66.C	Sun Aug 24 22:32:30 2025
***************
*** 0 ****
--- 1,20 ----
+ // PR c++/120757
+ // { dg-do compile { target c++14 } }
+ 
+ template <typename> struct A
+ {
+   auto foo() {}
+ };
+ 
+ auto bar(void (A<int>::*)()) {}
+ 
+ template <int> auto baz()
+ {
+   bar(&A<int>::foo);
+ }
+ 
+ int main()
+ {
+   baz<0>();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/cpp26/expansion-stmt16.C gcc-16-20250824/gcc/testsuite/g++.dg/cpp26/expansion-stmt16.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/cpp26/expansion-stmt16.C	Sun Aug 17 22:32:15 2025
--- gcc-16-20250824/gcc/testsuite/g++.dg/cpp26/expansion-stmt16.C	Sun Aug 24 22:32:30 2025
***************
*** 1,6 ****
  // C++26 P1306R5 - Expansion statements
  // { dg-do compile { target c++11 } }
! // { dg-options "" }
  
  struct A { int s; };
  constexpr A a[] = { { 3 }, { 4 }, { 5 }, { 6 }, { 7 } };
--- 1,6 ----
  // C++26 P1306R5 - Expansion statements
  // { dg-do compile { target c++11 } }
! // { dg-options "-fno-implicit-constexpr" }
  
  struct A { int s; };
  constexpr A a[] = { { 3 }, { 4 }, { 5 }, { 6 }, { 7 } };
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C gcc-16-20250824/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C	Sun Aug 17 22:32:15 2025
--- gcc-16-20250824/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C	Sun Aug 24 22:32:31 2025
*************** class D : /*private*/ B { };
*** 41,45 ****
  void driver_2()
  {
    static_assert(ConvertibleTo<D, B>()); // { dg-error "cannot call" }
!   static_assert(ConvertibleTo<D, B>); // { dg-error "static assertion failed" }
  }
--- 41,45 ----
  void driver_2()
  {
    static_assert(ConvertibleTo<D, B>()); // { dg-error "cannot call" }
!   static_assert(ConvertibleTo<D, B>); // { dg-prune-output "static assertion failed" }
  }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/cpp2a/concepts-using7.C gcc-16-20250824/gcc/testsuite/g++.dg/cpp2a/concepts-using7.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/cpp2a/concepts-using7.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/cpp2a/concepts-using7.C	Sun Aug 24 22:32:31 2025
***************
*** 0 ****
--- 1,23 ----
+ // PR c++/121351
+ // { dg-do compile { target c++20 } }
+ 
+ template<class T> concept C = true;
+ 
+ template<class T>
+ struct A;
+ 
+ template<class T>
+ struct A<T*> {
+   template<class U> void f(U) requires C<T>; // #1
+ };
+ 
+ template<class T>
+ struct B : A<T> {
+   using A<T>::f;
+   template<class U> void f(U) requires C<int>; // #2
+ };
+ 
+ int main() {
+   B<int*> b;
+   b.f(42); // OK, #2 corresponds to and therefore hides #1
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor18.C gcc-16-20250824/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor18.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor18.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor18.C	Sun Aug 24 22:32:31 2025
***************
*** 0 ****
--- 1,26 ----
+ // PR c++/121068
+ // { dg-do compile { target c++20 } }
+ 
+ template <class T>
+ constexpr void
+ destroy_at (T* p) { p->~T(); }
+ 
+ template <class T>
+ struct V {
+   union {
+     unsigned char buf[sizeof (T)];
+     const T ct;
+   };
+   bool active;
+   constexpr V(): active (false) {}
+   constexpr V(T t): ct (t), active (true) { }
+   constexpr ~V() { if (active) destroy_at (&ct); }
+ };
+ 
+ constexpr char f()
+ {
+   const V<int> vi {42};
+   return vi.ct;
+ }
+ 
+ static_assert (f() == 42);
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/modules/imp-member-4_a.C gcc-16-20250824/gcc/testsuite/g++.dg/modules/imp-member-4_a.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/modules/imp-member-4_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/modules/imp-member-4_a.C	Sun Aug 24 22:32:33 2025
***************
*** 0 ****
--- 1,25 ----
+ // PR c++/120499
+ // { dg-additional-options "-fmodules -fdump-lang-module-blocks" }
+ // { dg-module-cmi A }
+ 
+ export module A;
+ 
+ struct allocator {
+   ~allocator() {}
+ };
+ 
+ export template <typename _Tp>
+ struct vector {
+   struct _Vector_impl : public allocator {};
+   _Vector_impl _M_impl;
+   vector() = default;
+ };
+ 
+ template <typename T>
+ struct regex_token_iterator {
+   vector<int> _M_subs;
+ };
+ template struct regex_token_iterator<const char*>;
+ 
+ // No definition of _Vector_impl::~_Vector_impl here (not synthesized)
+ // { dg-final { scan-lang-dump-not {'::vector@A:1<int>::_Vector_impl@A:1<int>::__dt '} module } }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/modules/imp-member-4_b.C gcc-16-20250824/gcc/testsuite/g++.dg/modules/imp-member-4_b.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/modules/imp-member-4_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/modules/imp-member-4_b.C	Sun Aug 24 22:32:33 2025
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/120499
+ // { dg-additional-options "-fmodules -fdump-lang-module-blocks" }
+ // { dg-module-cmi B }
+ 
+ export module B;
+ import A;
+ 
+ struct Coll {
+   vector<int> vals;
+ };
+ 
+ export Coll createColl() {
+   return Coll{};
+ }
+ 
+ // But the definition of _Vector_impl::~_Vector_impl has been synthesized here
+ // { dg-final { scan-lang-dump-times {\[0\]=decl definition '::vector@A:1<int>::_Vector_impl@A:1<int>::__dt '} 1 module } }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/modules/imp-member-4_c.C gcc-16-20250824/gcc/testsuite/g++.dg/modules/imp-member-4_c.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/modules/imp-member-4_c.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/modules/imp-member-4_c.C	Sun Aug 24 22:32:33 2025
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/120499
+ // { dg-module-do link }
+ // { dg-additional-options "-fmodules -fdump-lang-module" }
+ 
+ import B;
+ 
+ int main() {
+   createColl();
+ }
+ 
+ // And we should use the definition of _Vector_impl::~_Vector_impl now.
+ // In this case we got the seeded import from A of the declaration
+ // so let's just ensure we stream the definition.
+ // { dg-final { scan-lang-dump {Reading function definition '::vector@A:1<int>::_Vector_impl@A:1<int>::__dt @A:1'} module } }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/modules/pr108080.H gcc-16-20250824/gcc/testsuite/g++.dg/modules/pr108080.H
*** gcc-16-20250817/gcc/testsuite/g++.dg/modules/pr108080.H	Sun Aug 17 22:32:17 2025
--- gcc-16-20250824/gcc/testsuite/g++.dg/modules/pr108080.H	Sun Aug 24 22:32:34 2025
***************
*** 2,5 ****
  // { dg-additional-options "-fmodules" }
  // Give a diagnostic message rather than a crash for unsupported features.
  
! [[gnu::optimize("-O3")]] void foo();  // { dg-warning "optimize" }
--- 2,5 ----
  // { dg-additional-options "-fmodules" }
  // Give a diagnostic message rather than a crash for unsupported features.
  
! [[gnu::optimize("-O3")]] void foo();  // { dg-warning "optimize|target" }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/modules/using-32_a.C gcc-16-20250824/gcc/testsuite/g++.dg/modules/using-32_a.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/modules/using-32_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/modules/using-32_a.C	Sun Aug 24 22:32:35 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/120195
+ // { dg-additional-options "-fmodules" }
+ 
+ export module M;
+ 
+ extern "C++" void foo() {}
+ export using ::foo;
+ 
+ namespace ns {
+   extern "C" void bar() {}
+ }
+ extern "C" void bar();
+ export using ns::bar;
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/modules/using-32_b.C gcc-16-20250824/gcc/testsuite/g++.dg/modules/using-32_b.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/modules/using-32_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/modules/using-32_b.C	Sun Aug 24 22:32:35 2025
***************
*** 0 ****
--- 1,9 ----
+ // PR c++/120195
+ // { dg-additional-options "-fmodules" }
+ 
+ import M;
+ 
+ int main() {
+   foo();
+   bar();
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/parse/template33.C gcc-16-20250824/gcc/testsuite/g++.dg/parse/template33.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/parse/template33.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/parse/template33.C	Sun Aug 24 22:32:35 2025
***************
*** 0 ****
--- 1,4 ----
+ // PR c++/116928
+ // { dg-do compile { target c++11 } }
+ 
+ template<int = { 0 > 0 }> struct A;
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-19.C gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-19.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-19.C	Sun Aug 17 22:32:20 2025
--- gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-19.C	Sun Aug 24 22:32:36 2025
***************
*** 1,5 ****
  // { dg-do compile }
! // { dg-options "-Wshadow -Wpedantic" }
  
  void
  foo (int x)
--- 1,5 ----
  // { dg-do compile }
! // { dg-options "-Wshadow" }
  
  void
  foo (int x)
*************** foo (int x)
*** 10,16 ****
      extern int y;				// { dg-warning "declaration of 'y' shadows a previous local" }
    }
  #if __cplusplus >= 201102L
!   auto fn = [x] () { extern int x; return 0; };    // { dg-warning "declaration of 'int x' shadows a parameter" "" { target c++11 } }
  #endif
  }
  
--- 10,16 ----
      extern int y;				// { dg-warning "declaration of 'y' shadows a previous local" }
    }
  #if __cplusplus >= 201102L
!   auto fn = [x] () { extern int x; return 0; };    // { dg-warning "declaration of 'x' shadows a lambda capture" "" { target c++11 } }
  #endif
  }
  
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-20.C gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-20.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-20.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-20.C	Sun Aug 24 22:32:36 2025
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/121553
+ // { dg-do compile { target c++11 } }
+ 
+ void foo () {
+  int i;
+   auto f = [i] () { int i; return 0; };
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-21.C gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-21.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-21.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-21.C	Sun Aug 24 22:32:36 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/121553
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-Wshadow" }
+ 
+ void foo () {
+  int i;
+   auto f = [i] () { int i; return 0; }; // { dg-warning "declaration of .i. shadows a lambda capture" }
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-6.C gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-6.C
*** gcc-16-20250817/gcc/testsuite/g++.dg/warn/Wshadow-6.C	Sun Aug 17 22:32:20 2025
--- gcc-16-20250824/gcc/testsuite/g++.dg/warn/Wshadow-6.C	Sun Aug 24 22:32:36 2025
*************** void f2(struct S i, int j) {
*** 33,40 ****
  
  void f3(int i) {
   [=]{
!    int j = i;			// { dg-message "previously declared here" }
!    int i;			// { dg-error "shadows a parameter" }
     i = 1;
   };
  }
--- 33,40 ----
  
  void f3(int i) {
   [=]{
!    int j = i;			// { dg-message "shadowed declaration" }
!    int i;			// { dg-warning "shadows a lambda capture" }
     i = 1;
   };
  }
*************** void f3(int i) {
*** 42,49 ****
  template <class T>
  void f4(int i) {
   [=]{
!    int j = i;			// { dg-message "previously declared here" }
!    int i;			// { dg-error "shadows a parameter" }
     i = 1;
   };
  }
--- 42,49 ----
  template <class T>
  void f4(int i) {
   [=]{
!    int j = i;			// { dg-message "shadowed declaration" }
!    int i;			// { dg-warning "shadows a " }
     i = 1;
   };
  }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.target/aarch64/sve/pr121536.cc gcc-16-20250824/gcc/testsuite/g++.target/aarch64/sve/pr121536.cc
*** gcc-16-20250817/gcc/testsuite/g++.target/aarch64/sve/pr121536.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/g++.target/aarch64/sve/pr121536.cc	Sun Aug 24 22:32:36 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-vect-all -std=c++14 -O3 -mcpu=neoverse-v2  -msve-vector-bits=128" } */
+ 
+ using a = long;
+ using b = a;
+ using c = double;
+ b d;
+ c e;
+ void f() {
+   for (b g; g < d; ++g)
+     e += g;
+ }
+ 
+ /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/g++.target/arm/pr120424.C gcc-16-20250824/gcc/testsuite/g++.target/arm/pr120424.C
*** gcc-16-20250817/gcc/testsuite/g++.target/arm/pr120424.C	Sun Aug 17 22:32:22 2025
--- gcc-16-20250824/gcc/testsuite/g++.target/arm/pr120424.C	Sun Aug 24 22:32:36 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=armv7 -O2 -fstack-clash-protection -fnon-call-exceptions" } */
  /* { dg-final { scan-assembler-not {#-8} } } */
  /* LRA register elimination gets confused when register spilling
     causes arm_frame_pointer_required to switch from false to true, and
--- 1,7 ----
  /* { dg-do compile } */
! /* { dg-require-effective-target arm_arch_v7_ok } */
! /* { dg-options "-O2 -fstack-clash-protection -fnon-call-exceptions" } */
! /* { dg-add-options arm_arch_v7 } */
  /* { dg-final { scan-assembler-not {#-8} } } */
  /* LRA register elimination gets confused when register spilling
     causes arm_frame_pointer_required to switch from false to true, and
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,43 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.  */  
+ /* { dg-options "-O2 -Wall -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ 
+ extern void warn(void);
+ static inline void assign(int val, int *regs, int index)
+ {
+   if (index >= 4)
+     warn();
+   *regs = val;
+ }
+ struct nums {int vals[4];};
+ 
+ void sparx5_set (int *ptr, struct nums *sg, int index)
+ {
+   int *val = &sg->vals[index]; /* { dg-warning "is above array bounds" } */
+ 
+   assign(0,    ptr, index);
+   assign(*val, ptr, index);
+ }
+ /* { dg-begin-multiline-output "" }
+    NN |   int *val = &sg->vals[index];
+       |               ~~~~~~~~^~~~~~~
+   'sparx5_set': events 1-2
+    NN |   if (index >= 4)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+       |               ~~~~~~~~~~~~~~~
+       |                       |
+       |                       (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | struct nums {int vals[4];};
+       |                  ^~~~
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_1.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_1.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_1.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,36 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.
+    test case is from PR88771, which is a duplication of PR109071.  */  
+ /* { dg-options "-O2 -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ typedef struct {
+   int a;
+ } * b;
+ 
+ char *c, *x;
+ int f;
+ 
+ void d() {
+   b e;
+   char a = f + 1 ?: f;
+   __builtin_strncpy(c, x, f); /* { dg-warning "exceeds maximum object size" } */
+   if (a)
+     e->a = 0;
+ }
+ /* { dg-begin-multiline-output "" }
+    NN |   __builtin_strncpy(c, x, f);
+       |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
+   'd': events 1-2
+    NN |   char a = f + 1 ?: f;
+       |        ^
+       |        |
+       |        (1) when the condition is evaluated to false
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |   __builtin_strncpy(c, x, f);
+       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~
+       |   |
+       |   (2) warning happens here
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_10.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_10.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_10.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_10.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,85 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to compiler optimization.  */
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=3" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ #define MAX_LENGTH 10
+ int a[MAX_LENGTH];
+ 
+ void __attribute__ ((noinline))  foo (int i, bool is_dollar)
+ {
+   if (i < MAX_LENGTH)
+     {
+       if (i == -1)
+         {
+           if (is_dollar)
+             __builtin_printf ("dollar");
+           else
+             __builtin_printf ("euro");
+           a[i] = -1; /* { dg-warning "is below array bounds of" } */
+         }
+       else
+         a[i] = i;
+     }
+   else
+     a[i] = i + 1; /* { dg-warning "is above array bounds of" } */
+ }
+ 
+ int main ()
+ {
+   for (int i = 0; i < MAX_LENGTH; i++)
+     foo (i, true);
+   return 0;
+ }
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |     a[i] = i + 1;
+       |     ~^~~
+   'foo': events 1-2
+    NN |   if (i < MAX_LENGTH)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to false
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |     a[i] = i + 1;
+       |     ~~~~
+       |      |
+       |      (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | int a[MAX_LENGTH];
+       |     ^
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |           a[i] = -1;
+       |           ~^~~
+   'foo': events 1-3
+    NN |   if (i < MAX_LENGTH)
+       |      ~    
+       |      |
+       |      (2) when the condition is evaluated to true
+    NN |     {
+    NN |       if (i == -1)
+       |          ^
+       |          |
+       |          (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |           a[i] = -1;
+       |           ~~~~
+       |            |
+       |            (3) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | int a[MAX_LENGTH];
+       |     ^
+    { dg-end-multiline-output "" } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_11.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_11.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_11.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_11.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,89 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to compiler optimization.  */
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=3" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ #define MAX_LENGTH 10
+ int a[MAX_LENGTH];
+ 
+ void __attribute__ ((noinline))  foo (int i, bool is_day, bool is_dollar)
+ {
+   if (i < MAX_LENGTH)
+     {
+       if (is_day)
+         __builtin_printf ("day");
+       else
+         __builtin_printf ("night");
+       if (i == -1)
+         {
+           if (is_dollar)
+             __builtin_printf ("dollar");
+           else
+             __builtin_printf ("euro");
+           a[i] = -1; /* { dg-warning "is below array bounds of" } */
+         }
+       else
+         a[i] = i;
+     }
+   else
+     a[i] = i + 1; /* { dg-warning "is above array bounds of" } */
+ }
+ 
+ int main ()
+ {
+   for (int i = 0; i < MAX_LENGTH; i++)
+     foo (i, false, true);
+   return 0;
+ }
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |     a[i] = i + 1;
+       |     ~^~~
+   'foo': events 1-2
+    NN |   if (i < MAX_LENGTH)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to false
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |     a[i] = i + 1;
+       |     ~~~~
+       |      |
+       |      (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | int a[MAX_LENGTH];
+       |     ^
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |           a[i] = -1;
+       |           ~^~~
+   'foo': events 1-3
+    NN |   if (i < MAX_LENGTH)
+       |      ~    
+       |      |
+       |      (2) when the condition is evaluated to true
+ ......
+    NN |       if (i == -1)
+       |          ^
+       |          |
+       |          (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |           a[i] = -1;
+       |           ~~~~
+       |            |
+       |            (3) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | int a[MAX_LENGTH];
+       |     ^
+    { dg-end-multiline-output "" } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_12.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_12.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_12.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_12.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,44 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.
+    to test the alias option -fdiagnostics-show-context.  */  
+ /* { dg-options "-O2 -Wall -fdiagnostics-show-context" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ 
+ extern void warn(void);
+ static inline void assign(int val, int *regs, int index)
+ {
+   if (index >= 4)
+     warn();
+   *regs = val;
+ }
+ struct nums {int vals[4];};
+ 
+ void sparx5_set (int *ptr, struct nums *sg, int index)
+ {
+   int *val = &sg->vals[index]; /* { dg-warning "is above array bounds" } */
+ 
+   assign(0,    ptr, index);
+   assign(*val, ptr, index);
+ }
+ /* { dg-begin-multiline-output "" }
+    NN |   int *val = &sg->vals[index];
+       |               ~~~~~~~~^~~~~~~
+   'sparx5_set': events 1-2
+    NN |   if (index >= 4)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+       |               ~~~~~~~~~~~~~~~
+       |                       |
+       |                       (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | struct nums {int vals[4];};
+       |                  ^~~~
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_2.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_2.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_2.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.
+    test case is from PR85788, which is a duplication of PR109071.  */  
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ int b=10;
+ int *d = &b, *e;
+ void a(void *k, long l) {
+   long f = __builtin_object_size(k, 0);
+   __builtin___memset_chk(k, b, l, f); /* { dg-warning "is out of the bounds" } */
+ }
+ typedef struct {
+   int g;
+   int h;
+   char i[8000 * 8];
+ } j;
+ static void make_str_raster(j *k) {
+   int *c = d;
+   for (; c; c = e)
+     k->g = k->h = 32767;
+ 
+   a(k->i, k->g / 8 * k->h);
+   for (; d;)
+     ;
+ }
+ j m;
+ void n() { make_str_raster(&m); }
+ /* { dg-begin-multiline-output "" }
+    NN |   __builtin___memset_chk(k, b, l, f);
+       |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   'n': events 1-2
+    NN |   __builtin___memset_chk(k, b, l, f);
+       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+       |   |
+       |   (2) warning happens here
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |   for (; c; c = e)
+       |          ^
+       |          |
+       |          (1) when the condition is evaluated to false
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | j m;
+       |   ^
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_3.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_3.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_3.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,42 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.
+    test case is from PR108770, which is a duplication of PR109071.  */  
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ extern void put(int i);
+ int check_idx(int i) {
+   if (i > 1)
+     put(i);
+   return i;
+ }
+ const char *arr[] = {"A", 0};
+ void init() {
+   int i = 0;
+   while (arr[check_idx(i)] != 0) { /* { dg-warning "is above array bounds of" } */
+     if (arr[check_idx(i)]) {}
+     i++;
+   }
+ }
+ /* { dg-begin-multiline-output "" }
+    NN |   while (arr[check_idx(i)] != 0) {
+       |          ~~~^~~~~~~~~~~~~~
+   'init': events 1-2
+    NN |   if (i > 1)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |   while (arr[check_idx(i)] != 0) {
+       |          ~~~~~~~~~~~~~~~~~
+       |             |
+       |             (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | const char *arr[] = {"A", 0};
+       |             ^~~
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_4.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_4.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_4.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,41 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.
+    test case is from PR106762, which is a duplication of PR109071.  */  
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ typedef long unsigned int size_t;
+ 
+ struct obj_t { size_t field0; size_t field1; };
+ struct obj_array_t { size_t objcnt; struct obj_t* objary; };
+ 
+ extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__(1)));
+ 
+ void bug(struct obj_array_t* ary)
+ {
+  size_t idx = 0;
+  struct obj_t* obj;
+  if (idx < ary->objcnt)
+   obj = &ary->objary[idx];
+  else
+   obj = 0;
+  memset(&obj->field1, 0xff, sizeof(obj->field1)); /* { dg-warning "is out of the bounds" } */ 
+  obj->field0 = 0;
+ }
+ /* { dg-begin-multiline-output "" }
+    NN |  memset(&obj->field1, 0xff, sizeof(obj->field1));
+       |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   'bug': events 1-2
+    NN |  if (idx < ary->objcnt)
+       |     ^
+       |     |
+       |     (1) when the condition is evaluated to false
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |  memset(&obj->field1, 0xff, sizeof(obj->field1));
+       |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+       |  |
+       |  (2) warning happens here
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_5.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_5.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_5.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,33 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.
+    test case is from PR115274, which is a duplication of PR109071.  */  
+ /* { dg-options "-O2 -Wstringop-overread -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ #include <string.h>
+ char *c;
+ void a(long);
+ int b(char *d) { return strlen(d); } /* { dg-warning "or more bytes from a region of size 0" } */
+ void e() {
+   long f = 1;
+   f = b(c + f);
+   if (c == 0)
+     a(f);
+ }
+ /* { dg-begin-multiline-output "" }
+    NN | int b(char *d) { return strlen(d); }
+       |                         ^~~~~~~~~
+   'e': events 1-2
+    NN | int b(char *d) { return strlen(d); }
+       |                         ~~~~~~~~~
+       |                         |
+       |                         (2) warning happens here
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |   if (c == 0)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_6.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_6.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_6.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,49 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to code duplication from jump threading.
+    test case is from PR117179, which is a duplication of PR109071.  */  
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ const char* commands[] = {"a", "b"};
+ 
+ int setval_internal(int comind)
+ {
+   if (comind > sizeof(commands)/sizeof(commands[0])) {
+     return 0;
+   }
+ 
+   return 1;
+ }
+ 
+ _Bool setval_internal_tilde(int comind, const char *com,
+ 			    const char *val)
+ {
+   int ret = setval_internal(comind);
+   if (commands[comind] == "b" && /* { dg-warning "is outside array bounds of" } */
+ 
+       ret)
+     return 1;
+   return 0;
+ }
+ /* { dg-begin-multiline-output "" }
+    NN |   if (commands[comind] == "b" &&
+       |       ~~~~~~~~^~~~~~~~
+   'setval_internal_tilde': events 1-2
+    NN |   if (comind > sizeof(commands)/sizeof(commands[0])) {
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |   if (commands[comind] == "b" &&
+       |       ~~~~~~~~~~~~~~~~
+       |               |
+       |               (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | const char* commands[] = {"a", "b"};
+       |             ^~~~~~~~
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_7.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_7.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_7.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,44 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to compiler optimization.  */
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ #define MAX_LENGTH 10
+ int a[MAX_LENGTH];
+ 
+ void __attribute__ ((noinline))  foo (int i)
+ {
+   if (i == 12)
+     a[i] = -1; /* { dg-warning "is above array bounds of" } */
+   else
+     a[i] = i;
+ }
+ 
+ int main ()
+ {
+   for (int i = 0; i < MAX_LENGTH; i++)
+     foo (i);
+   return 0;
+ }
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |     a[i] = -1;
+       |     ~^~~
+   'foo': events 1-2
+    NN |   if (i == 12)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |     a[i] = -1;
+       |     ~~~~
+       |      |
+       |      (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | int a[MAX_LENGTH];
+       |     ^
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_8.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_8.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_8.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,51 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to compiler optimization.  */
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ #define MAX_LENGTH 10
+ int a[MAX_LENGTH];
+ 
+ void __attribute__ ((noinline))  foo (int i, bool is_dollar)
+ {
+   if (i == -1)
+     {
+       if (is_dollar)
+ 	__builtin_printf ("dollar");
+       else
+ 	__builtin_printf ("euro");
+       a[i] = -1; /* { dg-warning "is below array bounds of" } */
+     }
+   else
+     a[i] = i;
+ }
+ 
+ int main ()
+ {
+   for (int i = 0; i < MAX_LENGTH; i++)
+     foo (i, true);
+   return 0;
+ }
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |       a[i] = -1;
+       |       ~^~~
+   'foo': events 1-2
+    NN |   if (i == -1)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |       a[i] = -1;
+       |       ~~~~
+       |        |
+       |        (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | int a[MAX_LENGTH];
+       |     ^
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_9.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_9.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr109071_9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr109071_9.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,61 ----
+ /* PR tree-optimization/109071 need more context for -Warray-bounds warnings
+    due to compiler optimization.  */
+ /* { dg-options "-O2 -Warray-bounds -fdiagnostics-show-context=1" } */
+ /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-enable-nn-line-numbers "" } */
+ #define MAX_LENGTH 10
+ int a[MAX_LENGTH];
+ 
+ void __attribute__ ((noinline))  foo (int i, bool is_dollar,
+ 				      bool is_hour, bool is_color)
+ {
+   if (i == -1)
+     {
+       if (is_dollar)
+ 	__builtin_printf ("dollar");
+       else
+ 	__builtin_printf ("euro");
+       if (is_hour)
+ 	__builtin_printf ("hour");
+       else
+ 	{
+ 	  if (is_color)
+ 	    __builtin_printf ("color minute");
+ 	  else		
+ 	    __builtin_printf ("non minute");
+ 	}
+       a[i] = -1; /* { dg-warning "is below array bounds of" } */
+     }
+   else
+     a[i] = i;
+ }
+ 
+ int main ()
+ {
+   for (int i = 0; i < MAX_LENGTH; i++)
+     foo (i, true, false, true);
+   return 0;
+ }
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |       a[i] = -1;
+       |       ~^~~
+   'foo': events 1-2
+    NN |   if (i == -1)
+       |      ^
+       |      |
+       |      (1) when the condition is evaluated to true
+ ......
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN |       a[i] = -1;
+       |       ~~~~
+       |        |
+       |        (2) warning happens here
+    { dg-end-multiline-output "" } */
+ 
+ /* { dg-begin-multiline-output "" }
+    NN | int a[MAX_LENGTH];
+       |     ^
+    { dg-end-multiline-output "" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr117375.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr117375.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr117375.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr117375.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,13 ----
+ /* PR middle-end/117375 ICE with -fdiagnostics-show-context=1 patch in sink pass.  */ 
+ /*    { dg-do compile }
+       { dg-options "-O2 -Wall -fdiagnostics-show-context=1" } */
+ 
+ int st, st_0;
+ int nbFilledBytes, max;
+ void ec_enc_shrink();
+ void max_allowed() {
+   int nbAvailableBytes = nbFilledBytes;
+   if (st && st_0)
+     if (max < nbAvailableBytes)
+       ec_enc_shrink();
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/pr121619.c gcc-16-20250824/gcc/testsuite/gcc.dg/pr121619.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/pr121619.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/pr121619.c	Sun Aug 24 22:32:41 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -fno-gcse -fno-tree-ter -fno-guess-branch-probability -fno-forward-propagate" } */
+ 
+ int printf(const char *, ...);
+ long a, c, d;
+ char b;
+ int main() {
+ f : {
+   short g = 100;
+   int h = 1;
+   while (1) {
+     char i = 0;
+     if (a)
+       i = h = -b;
+     short j = g;
+     c = h ^ g;
+     g = ~(-h / c + 1);
+     if (b > 6) {
+       a = g && -1;
+       goto f;
+     }
+     if (j < 100)
+       printf("%ld\n", d);
+     if (g - 1)
+       break;
+     b = i;
+   }
+   int k = 2L % g;
+   if (k)
+     goto f;
+   }
+   return 0;
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/torture/malloc-1.c gcc-16-20250824/gcc/testsuite/gcc.dg/torture/malloc-1.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/torture/malloc-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/torture/malloc-1.c	Sun Aug 24 22:32:42 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* PR middle-end/120024 */
+ 
+ void *f(unsigned) __attribute__((malloc));
+ void g()
+ {
+   void *(*g)(unsigned) = f;
+   void (*h)(unsigned) = (void (*)(unsigned))g;
+   h(1);
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/torture/malloc-2.c gcc-16-20250824/gcc/testsuite/gcc.dg/torture/malloc-2.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/torture/malloc-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/torture/malloc-2.c	Sun Aug 24 22:32:42 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* PR middle-end/120024 */
+ 
+ void *f(unsigned) __attribute__((malloc));
+ void h1(void);
+ void g(void)
+ {
+   void *(*g)(unsigned) = f;
+   void (*h)(unsigned) = (void (*)(unsigned))g;
+   h(1);
+   h1();
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.dg/torture/pr121478-1.c gcc-16-20250824/gcc/testsuite/gcc.dg/torture/pr121478-1.c
*** gcc-16-20250817/gcc/testsuite/gcc.dg/torture/pr121478-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.dg/torture/pr121478-1.c	Sun Aug 24 22:32:42 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-std=gnu23" } */
+ 
+ #include <stddef.h>
+ #include <stdlib.h>
+ typedef struct {
+     int data[5];
+     nullptr_t np;
+ } container_t;
+ void process_array(int *arr, size_t len, nullptr_t nullp) {
+     for (size_t i = 0; i < len; ++i) {
+         switch (arr[i] % 4) {
+             case 1:
+                 if (nullp == nullptr) {
+                     arr[i] *= -1;
+                     [[fallthrough]];
+                 }
+             case 2:
+                 arr[i] = abs(arr[i]);
+                 break;
+             default:
+                 arr[i] = 0;
+         }
+     }
+ }
+ int main(void) {
+     container_t c = {
+         .data = { -3, 1, 4, 2, 7 },
+         .np = nullptr
+     };
+     process_array(c.data, 5, c.np);
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/noplt-gd-1.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/noplt-gd-1.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/noplt-gd-1.c	Sun Aug 17 22:32:36 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/noplt-gd-1.c	Sun Aug 24 22:32:51 2025
***************
*** 1,5 ****
  /* { dg-do compile { target { *-*-linux* && tls_get_addr_via_got } } } */
! /* { dg-options "-fpic -fno-plt" } */
  
  extern __thread int gd;
  
--- 1,5 ----
  /* { dg-do compile { target { *-*-linux* && tls_get_addr_via_got } } } */
! /* { dg-options "-fpic -fno-plt -mtls-dialect=gnu" } */
  
  extern __thread int gd;
  
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/noplt-ld-1.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/noplt-ld-1.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/noplt-ld-1.c	Sun Aug 17 22:32:36 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/noplt-ld-1.c	Sun Aug 24 22:32:51 2025
***************
*** 1,5 ****
  /* { dg-do compile { target { *-*-linux* && tls_get_addr_via_got } } } */
! /* { dg-options "-fpic -fno-plt" } */
  
  static __thread int ld;
  
--- 1,5 ----
  /* { dg-do compile { target { *-*-linux* && tls_get_addr_via_got } } } */
! /* { dg-options "-fpic -fno-plt -mtls-dialect=gnu" } */
  
  static __thread int ld;
  
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-1a.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-1a.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-1a.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,41 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O0 -fpic -fplt -mtls-dialect=gnu" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **bug:
+ **.LFB[0-9]+:
+ **...
+ **	leaq	tv_cache@tlsld\(%rip\), %rdi
+ **	call	__tls_get_addr@PLT
+ **	movl	\$-1, %edi
+ **	mov[l|q]	%[e|r]ax, %[e|r]bx
+ **	call	val@PLT
+ **...
+ */
+ 
+ extern __thread int tv_cache __attribute__ ((visibility ("hidden")));
+ extern void use_cache (int);
+ extern int val (int v);
+ 
+ __attribute__ ((optimize (2)))
+ void
+ bug (void)
+ {
+   int compared = val (-1);
+ 
+   if (compared == 0 || (compared > 0 && val (2) == 0))
+     {
+       __builtin_trap ();
+     }
+ 
+   if (compared < 0)
+     {
+       use_cache (tv_cache);
+       return;
+     }
+ 
+   use_cache (tv_cache);
+   __builtin_trap ();
+ }
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-1b.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-1b.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-1b.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O0 -fpic -fplt -mtls-dialect=gnu2" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **bug:
+ **.LFB[0-9]+:
+ **...
+ **	lea[l|q]	tv_cache@TLSDESC\(%rip\), %[e|r]ax
+ **	movl	\$-1, %edi
+ **	call	\*tv_cache@TLSCALL\(%[e|r]ax\)
+ **	mov[l|q]	%[e|r]ax, %[e|r]bx
+ **	call	val@PLT
+ **...
+ */
+ 
+ #include "pr121572-1a.c"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-2a.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-2a.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-2a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-2a.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fpic -fplt -mtls-dialect=gnu" } */
+ 
+ typedef enum
+ {
+   MPFR_RNDN
+ } mpfr_rnd_t;
+ typedef int mpfr_t[1];
+ long __gmpfr_emin, mpfr_agm_expo_0;
+ _Thread_local long __gmpfr_emax;
+ int mpfr_agm_compare, mpfr_agm___trans_tmp_1;
+ mpfr_t mpfr_agm_u;
+ void mpfr_mul (int *, int, int, mpfr_rnd_t);
+ int
+ mpfr_agm (int op1)
+ {
+   int op2 = 0;
+   if (__builtin_expect (mpfr_agm_compare == 0, 0))
+     return 0;
+   if (mpfr_agm_compare > 0)
+     {
+       int t = op1;
+       op2 = t;
+     }
+   mpfr_agm_expo_0 = __gmpfr_emax;
+   for (;;)
+     {
+     retry:
+       mpfr_mul (mpfr_agm_u, op1, op2, MPFR_RNDN);
+       if (0)
+         goto retry;
+       if (__builtin_expect (mpfr_agm___trans_tmp_1, 1))
+         break;
+     }
+   __gmpfr_emin = __gmpfr_emax;
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-times "call\[ \t\]__tls_get_addr@PLT" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-2b.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-2b.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121572-2b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121572-2b.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fpic -fplt -mtls-dialect=gnu2" } */
+ 
+ #include "pr121572-2a.c"
+ 
+ /* { dg-final { scan-assembler-times "call\[ \t\]\\*__gmpfr_emax@TLSCALL\\(%(?:r|e)ax\\)" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121607-1a.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121607-1a.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121607-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121607-1a.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,59 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fpic -fplt -mtls-dialect=gnu -fno-semantic-interposition -fstack-protector" } */
+ 
+ typedef enum
+ {
+   bfd_error_invalid_error_code
+ } bfd_error_type;
+ thread_local bfd_error_type bfd_error;
+ int aout_16_write_syms___trans_tmp_1;
+ short aout_16_write_syms_g_0_0;
+ void xvec_0 (long, void *);
+ 
+ typedef struct
+ {
+   int output_section;
+ } asection;
+ 
+ void bfd_asymbol_section ();
+ 
+ struct pdp11_external_nlist
+ {
+   char e_desc[2];
+   char e_type[1];
+   char e_ovly[10];
+ } translate_to_native_sym_flags (struct pdp11_external_nlist *sym_pointer)
+ {
+   asection *sec;
+   sym_pointer->e_type[0] &= 5;
+   bfd_asymbol_section ();
+   if (sec == 0)
+     {
+       bfd_error_type error_tag;
+       bfd_error = error_tag;
+     }
+   if (sec->output_section)
+     {
+       bfd_error_type error_tag;
+       bfd_error = error_tag;
+     }
+ }
+ 
+ bool
+ aout_16_write_syms (void *abfd)
+ {
+   for (; aout_16_write_syms___trans_tmp_1;)
+     {
+       struct pdp11_external_nlist nsp;
+       if (abfd)
+         {
+           xvec_0 (aout_16_write_syms_g_0_0, nsp.e_desc);
+           nsp.e_ovly[0] = 0;
+         }
+       else
+         nsp.e_type[0] = 0;
+       translate_to_native_sym_flags (&nsp);
+     }
+ }
+ 
+ /* { dg-final { scan-assembler-times "call\[ \t\]__tls_get_addr@PLT" 2 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121607-1b.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121607-1b.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121607-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121607-1b.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fpic -fplt -mtls-dialect=gnu2 -fno-semantic-interposition -fstack-protector" } */
+ 
+ #include "pr121607-1a.c"
+ 
+ /* { dg-final { scan-assembler-times "call\[ \t\]\\*bfd_error@TLSCALL\\(%(?:r|e)ax\\)" 2 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121635-1a.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121635-1a.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121635-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121635-1a.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fpic -fplt -mtls-dialect=gnu" } */
+ 
+ extern int get_cordz_mean_interval ();
+ extern thread_local long cordz_next_sample, kIntervalIfDisabled;
+ extern bool cordz_should_profile_slow (void);
+ inline bool
+ cordz_should_profile (void)
+ {
+   return cordz_should_profile_slow ();
+ }
+ bool
+ cordz_should_profile_slow (void)
+ {
+   int mean_interval = get_cordz_mean_interval ();
+   if (mean_interval)
+     cordz_next_sample = kIntervalIfDisabled;
+   return cordz_next_sample || cordz_should_profile ();
+ }
+ 
+ /* { dg-final { scan-assembler-times "call\[ \t\]__tls_get_addr@PLT" 2 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121635-1b.c gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121635-1b.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/i386/pr121635-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/i386/pr121635-1b.c	Sun Aug 24 22:32:51 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile { target *-*-linux* } } */
+ /* { dg-options "-O2 -fpic -fplt -mtls-dialect=gnu2" } */
+ 
+ #include "pr121635-1a.c"
+ 
+ /* { dg-final { scan-assembler-times "call\[ \t\]\\*cordz_next_sample@TLSCALL\\(%(?:r|e)ax\\)" 1 { target { ! ia32 } } } } */
+ /* { dg-final { scan-assembler-times "call\[ \t\]\\*kIntervalIfDisabled@TLSCALL\\(%(?:r|e)ax\\)" 1 { target { ! ia32 } } } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-1.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-1.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-1.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define TYPE int
+ #else
+ #define ONE 1ULL
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c < 0 ? -ONE : (ONE << N); } \
+ 	      TYPE test2_##N (TYPE c) { return c >= 0 ? (ONE << N) : -ONE; } \
+ 
+ T1(0)
+ T1(1)
+ T1(2)
+ T1(3)
+ T1(4)
+ T1(5)
+ T1(6)
+ T1(7)
+ T1(8)
+ T1(9)
+ T1(10)
+ T1(11)
+ T1(12)
+ T1(13)
+ T1(14)
+ T1(15)
+ T1(16)
+ T1(17)
+ T1(18)
+ T1(19)
+ T1(20)
+ T1(21)
+ T1(22)
+ T1(23)
+ T1(24)
+ T1(25)
+ T1(26)
+ T1(27)
+ T1(28)
+ T1(29)
+ T1(30)
+ T1(31)
+ #if __riscv_xlen == 64
+ T1(32)
+ T1(33)
+ T1(34)
+ T1(35)
+ T1(36)
+ T1(37)
+ T1(38)
+ T1(39)
+ T1(40)
+ T1(41)
+ T1(42)
+ T1(43)
+ T1(44)
+ T1(45)
+ T1(46)
+ T1(47)
+ T1(48)
+ T1(49)
+ T1(50)
+ T1(51)
+ T1(52)
+ T1(53)
+ T1(54)
+ T1(55)
+ T1(56)
+ T1(57)
+ T1(58)
+ T1(59)
+ T1(60)
+ T1(61)
+ T1(62)
+ T1(63)
+ #endif
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 128 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "\\t(ori|bset)" 128 { target rv64 } } } */
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 64 { target rv32 } } } */
+ /* { dg-final { scan-assembler-times "\\t(ori|bset)" 64 { target rv32 } } } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-2.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-2.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-2.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define TYPE int
+ #else
+ #define ONE 1ULL
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c >= 0 ? -ONE : (ONE << N); } \
+ 	      TYPE test2_##N (TYPE c) { return c < 0 ? (ONE << N) : -ONE; } \
+ 
+ T1(0)
+ T1(1)
+ T1(2)
+ T1(3)
+ T1(4)
+ T1(5)
+ T1(6)
+ T1(7)
+ T1(8)
+ T1(9)
+ T1(10)
+ T1(11)
+ T1(12)
+ T1(13)
+ T1(14)
+ T1(15)
+ T1(16)
+ T1(17)
+ T1(18)
+ T1(19)
+ T1(20)
+ T1(21)
+ T1(22)
+ T1(23)
+ T1(24)
+ T1(25)
+ T1(26)
+ T1(27)
+ T1(28)
+ T1(29)
+ T1(30)
+ T1(31)
+ #if __riscv_xlen == 64
+ T1(32)
+ T1(33)
+ T1(34)
+ T1(35)
+ T1(36)
+ T1(37)
+ T1(38)
+ T1(39)
+ T1(40)
+ T1(41)
+ T1(42)
+ T1(43)
+ T1(44)
+ T1(45)
+ T1(46)
+ T1(47)
+ T1(48)
+ T1(49)
+ T1(50)
+ T1(51)
+ T1(52)
+ T1(53)
+ T1(54)
+ T1(55)
+ T1(56)
+ T1(57)
+ T1(58)
+ T1(59)
+ T1(60)
+ T1(61)
+ T1(62)
+ T1(63)
+ #endif
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 128 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "\\t(orn|ori|bset)" 128 { target rv64 } } } */
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 64 { target rv32 } } } */
+ /* { dg-final { scan-assembler-times "\\t(orn|ori|bset)" 64 { target rv32 } } } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-3.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-3.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-3.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define TYPE int
+ #else
+ #define ONE 1ULL
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c < 0 ? -ONE : 0xff; } \
+ 	      TYPE test2_##N (TYPE c) { return c >= 0 ? 0xff : -ONE; } \
+ 
+ T1(0)
+ T1(1)
+ T1(2)
+ T1(3)
+ T1(4)
+ T1(5)
+ T1(6)
+ T1(7)
+ T1(8)
+ T1(9)
+ T1(10)
+ T1(11)
+ T1(12)
+ T1(13)
+ T1(14)
+ T1(15)
+ T1(16)
+ T1(17)
+ T1(18)
+ T1(19)
+ T1(20)
+ T1(21)
+ T1(22)
+ T1(23)
+ T1(24)
+ T1(25)
+ T1(26)
+ T1(27)
+ T1(28)
+ T1(29)
+ T1(30)
+ T1(31)
+ #if __riscv_xlen == 64
+ T1(32)
+ T1(33)
+ T1(34)
+ T1(35)
+ T1(36)
+ T1(37)
+ T1(38)
+ T1(39)
+ T1(40)
+ T1(41)
+ T1(42)
+ T1(43)
+ T1(44)
+ T1(45)
+ T1(46)
+ T1(47)
+ T1(48)
+ T1(49)
+ T1(50)
+ T1(51)
+ T1(52)
+ T1(53)
+ T1(54)
+ T1(55)
+ T1(56)
+ T1(57)
+ T1(58)
+ T1(59)
+ T1(60)
+ T1(61)
+ T1(62)
+ T1(63)
+ #endif
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 128 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "\\t(ori|bset)" 128 { target rv64 } } } */
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 64 { target rv32 } } } */
+ /* { dg-final { scan-assembler-times "\\t(ori|bset)" 64 { target rv32 } } } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-4.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-4.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-4.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define TYPE int
+ #else
+ #define ONE 1ULL
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c < 0 ? -ONE : 0x7ff; } \
+ 	      TYPE test2_##N (TYPE c) { return c >= 0 ? 0x7ff : -ONE; } \
+ 
+ T1(0)
+ T1(1)
+ T1(2)
+ T1(3)
+ T1(4)
+ T1(5)
+ T1(6)
+ T1(7)
+ T1(8)
+ T1(9)
+ T1(10)
+ T1(11)
+ T1(12)
+ T1(13)
+ T1(14)
+ T1(15)
+ T1(16)
+ T1(17)
+ T1(18)
+ T1(19)
+ T1(20)
+ T1(21)
+ T1(22)
+ T1(23)
+ T1(24)
+ T1(25)
+ T1(26)
+ T1(27)
+ T1(28)
+ T1(29)
+ T1(30)
+ T1(31)
+ #if __riscv_xlen == 64
+ T1(32)
+ T1(33)
+ T1(34)
+ T1(35)
+ T1(36)
+ T1(37)
+ T1(38)
+ T1(39)
+ T1(40)
+ T1(41)
+ T1(42)
+ T1(43)
+ T1(44)
+ T1(45)
+ T1(46)
+ T1(47)
+ T1(48)
+ T1(49)
+ T1(50)
+ T1(51)
+ T1(52)
+ T1(53)
+ T1(54)
+ T1(55)
+ T1(56)
+ T1(57)
+ T1(58)
+ T1(59)
+ T1(60)
+ T1(61)
+ T1(62)
+ T1(63)
+ #endif
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 128 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "\\t(ori|bset)" 128 { target rv64 } } } */
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 64 { target rv32 } } } */
+ /* { dg-final { scan-assembler-times "\\t(ori|bset)" 64 { target rv32 } } } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-5.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-5.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-5.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,91 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define TYPE int
+ #else
+ #define ONE 1ULL
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c < 0 ? ~(ONE << N) : 0; } \
+ 	      TYPE test2_##N (TYPE c) { return c >= 0 ? 0 : ~(ONE << N); } \
+ 
+ T1(0)
+ T1(1)
+ T1(2)
+ T1(3)
+ T1(4)
+ T1(5)
+ T1(6)
+ T1(7)
+ T1(8)
+ T1(9)
+ T1(10)
+ T1(11)
+ T1(12)
+ T1(13)
+ T1(14)
+ T1(15)
+ T1(16)
+ T1(17)
+ T1(18)
+ T1(19)
+ T1(20)
+ T1(21)
+ T1(22)
+ T1(23)
+ T1(24)
+ T1(25)
+ T1(26)
+ T1(27)
+ T1(28)
+ T1(29)
+ T1(30)
+ T1(31)
+ #if __riscv_xlen == 64
+ T1(32)
+ T1(33)
+ T1(34)
+ T1(35)
+ T1(36)
+ T1(37)
+ T1(38)
+ T1(39)
+ T1(40)
+ T1(41)
+ T1(42)
+ T1(43)
+ T1(44)
+ T1(45)
+ T1(46)
+ T1(47)
+ T1(48)
+ T1(49)
+ T1(50)
+ T1(51)
+ T1(52)
+ T1(53)
+ T1(54)
+ T1(55)
+ T1(56)
+ T1(57)
+ T1(58)
+ T1(59)
+ T1(60)
+ T1(61)
+ T1(62)
+ T1(63)
+ #endif
+ 
+ /* The MSB case isn't handled the way we want.  */
+ /* { dg-final { scan-assembler-times "\\t(srai)" 126 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "\\t(slli|andi|bclr)" 126 { target rv64 } } } */
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 62 { target rv32 } } } */
+ /* { dg-final { scan-assembler-times "\\t(slli|andi|bclr)" 62 { target rv32 } } } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-6.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-6.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-6.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,91 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define TYPE int
+ #else
+ #define ONE 1ULL
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c >= 0 ? ~(ONE << N) : 0; } \
+ 	      TYPE test2_##N (TYPE c) { return c < 0 ? 0 : ~(ONE << N); } \
+ 
+ T1(0)
+ T1(1)
+ T1(2)
+ T1(3)
+ T1(4)
+ T1(5)
+ T1(6)
+ T1(7)
+ T1(8)
+ T1(9)
+ T1(10)
+ T1(11)
+ T1(12)
+ T1(13)
+ T1(14)
+ T1(15)
+ T1(16)
+ T1(17)
+ T1(18)
+ T1(19)
+ T1(20)
+ T1(21)
+ T1(22)
+ T1(23)
+ T1(24)
+ T1(25)
+ T1(26)
+ T1(27)
+ T1(28)
+ T1(29)
+ T1(30)
+ T1(31)
+ #if __riscv_xlen == 64
+ T1(32)
+ T1(33)
+ T1(34)
+ T1(35)
+ T1(36)
+ T1(37)
+ T1(38)
+ T1(39)
+ T1(40)
+ T1(41)
+ T1(42)
+ T1(43)
+ T1(44)
+ T1(45)
+ T1(46)
+ T1(47)
+ T1(48)
+ T1(49)
+ T1(50)
+ T1(51)
+ T1(52)
+ T1(53)
+ T1(54)
+ T1(55)
+ T1(56)
+ T1(57)
+ T1(58)
+ T1(59)
+ T1(60)
+ T1(61)
+ T1(62)
+ T1(63)
+ #endif
+ 
+ /* Not working for the high bit case yet.  */
+ /* { dg-final { scan-assembler-times "\\t(srai)" 126 { target rv64 } } } */
+ /* { dg-final { scan-assembler-times "\\t(andn|andi|bclr)" 126 { target rv64 } } } */
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 62 { target rv32 } } } */
+ /* { dg-final { scan-assembler-times "\\t(andn|andi|bclr)" 62 { target rv32 } } } */
+ 
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-7.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-7.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-7.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define TYPE int
+ #else
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c < 0 ? ~0xff : 0; } \
+ 	      TYPE test2_##N (TYPE c) { return c >= 0 ? 0 : ~0xff; } \
+ 
+ T1(0)
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 2 } } */
+ /* { dg-final { scan-assembler-times "\\t(slli|andi|bclr)" 2 } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-8.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-8.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/pr120553-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/pr120553-8.c	Sun Aug 24 22:33:03 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcb_zicond -mbranch-cost=3 -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gcb_zicond -mbranch-cost=3 -mabi=ilp32" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" } } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define TYPE int
+ #else
+ #define TYPE long
+ #endif
+ 
+ #define T1(N) TYPE test1_##N (TYPE c) { return c < 0 ? ~0x7ff : 0; } \
+ 	      TYPE test2_##N (TYPE c) { return c >= 0 ? 0 : ~0x7ff; } \
+ 
+ T1(0)
+ 
+ /* { dg-final { scan-assembler-times "\\t(srai)" 2 } } */
+ /* { dg-final { scan-assembler-times "\\t(slli|andi|bclr)" 2 } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmacc-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c	Sun Aug 17 22:32:43 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwnmsac-run-1-f16.c	Sun Aug 24 22:33:04 2025
***************
*** 1,6 ****
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
--- 1,6 ----
  /* { dg-do run { target { riscv_v } } } */
  /* { dg-require-effective-target riscv_v_ok } */
! /* { dg-require-effective-target riscv_zvfh_ok } */
  /* { dg-add-options "riscv_v" } */
  /* { dg-add-options "riscv_zvfh" } */
  /* { dg-additional-options "--param=fpr2vr-cost=0" } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Aug 17 22:32:49 2025
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Aug 24 22:33:05 2025
*************** sat_u_mul_##T##_fmt_2 (T a, T b)
*** 708,711 ****
--- 708,727 ----
  #define RUN_SAT_U_MUL_FMT_2(T, a, b) sat_u_mul_##T##_fmt_2 (a, b)
  #define RUN_SAT_U_MUL_FMT_2_WRAP(T, a, b) RUN_SAT_U_MUL_FMT_2(T, a, b)
  
+ #define DEF_SAT_U_MUL_FMT_3(NT, WT)             \
+ NT __attribute__((noinline))                    \
+ sat_u_mul_##NT##_from_##WT##_fmt_3 (NT a, NT b) \
+ {                                               \
+   WT x = (WT)a * (WT)b;                         \
+   if ((x >> sizeof(a) * 8) == 0)                \
+     return (NT)x;                               \
+   else                                          \
+     return (NT)-1;                              \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_3(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_3(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_3 (a, b)
+ #define RUN_SAT_U_MUL_FMT_3_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_3(NT, WT, a, b)
+ 
  #endif
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.rv32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.rv32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u16-from-u64.rv32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.rv32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.rv32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u32-from-u64.rv32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
+ /* { dg-final { scan-assembler-times "mulhu" 1 } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u64-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u64-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u64-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
+ /* { dg-final { scan-assembler-times "mulhu" 1 } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u16.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { 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_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.rv32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.rv32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-4-u8-from-u64.rv32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u32.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.rv32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.rv32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u16-from-u64.rv32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 } } } */
+ /* { 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.rv32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.rv32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u32-from-u64.rv32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 } } } */
+ /* { 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u64-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u64-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u64-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u128.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u128.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u128.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u16.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u16.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u16.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u32.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.c	Sun Aug 24 22:33:05 2025
***************
*** 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.rv32.c gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.rv32.c
*** gcc-16-20250817/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-4-u8-from-u64.rv32.c	Sun Aug 24 22:33:05 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 } } } */
+ /* { 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_3_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_3_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gfortran.dg/pdt_38.f03 gcc-16-20250824/gcc/testsuite/gfortran.dg/pdt_38.f03
*** gcc-16-20250817/gcc/testsuite/gfortran.dg/pdt_38.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gfortran.dg/pdt_38.f03	Sun Aug 24 22:33:09 2025
***************
*** 0 ****
--- 1,21 ----
+ ! { dg-do compile )
+ !
+ ! Test the fix for pr84122
+ !
+ ! Contributed by Neil Carlson  <neil.n.carlson@gmail.com>
+ !
+ module mod
+ type foo(idim)
+   integer, len, PUBLIC :: idim ! { dg-error "is not allowed" }
+   private
+   integer :: array(idim)
+ end type
+ end module
+ 
+ module bar
+ type foo(idim)
+   private
+   integer,len :: idim         ! { dg-error "must come before a PRIVATE statement" }
+   integer :: array(idim)
+ end type
+ end module
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gfortran.dg/pdt_39.f03 gcc-16-20250824/gcc/testsuite/gfortran.dg/pdt_39.f03
*** gcc-16-20250817/gcc/testsuite/gfortran.dg/pdt_39.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gfortran.dg/pdt_39.f03	Sun Aug 24 22:33:09 2025
***************
*** 0 ****
--- 1,123 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for pr95541.
+ !
+ ! Contributed by Juergen Reuter  <juergen.reuter@desy.de>
+ !
+ module mykinds 
+   use, intrinsic :: iso_fortran_env, only : i4 => int32, r4 => real32, r8 => real64 
+   implicit none
+   private
+   public :: i4, r4, r8
+ end module mykinds
+  
+ module matrix
+   use mykinds, only : r4, r8
+   implicit none
+   private
+  
+   type, public :: mat_t(k,c,r)
+      !.. type parameters
+      integer, kind :: k = r4
+      integer, len :: c = 1
+      integer, len :: r = 1
+      private
+      !.. private by default
+      !.. type data
+      real(kind=k) :: m_a(c,r)
+   end type mat_t
+  
+   interface assignment(=)
+      module procedure geta_r4
+      module procedure seta_r4
+      module procedure geta_r8
+      module procedure seta_r8
+      !.. additional bindings elided
+   end interface assignment(=)
+   
+   public :: assignment(=)
+   
+ contains
+   
+   subroutine geta_r4(a_lhs, t_rhs)   
+     real(r4), allocatable, intent(out) :: a_lhs(:,:)
+     class(mat_t(k=r4,c=*,r=*)), intent(in) :: t_rhs   
+     a_lhs = t_rhs%m_a
+     return
+   end subroutine geta_r4
+  
+   subroutine geta_r8(a_lhs, t_rhs)
+     real(r8), allocatable, intent(out) :: a_lhs(:,:)
+     class(mat_t(k=r8,c=*,r=*)), intent(in) :: t_rhs
+     a_lhs = t_rhs%m_a
+     return 
+   end subroutine geta_r8
+  
+   subroutine seta_r4(t_lhs, a_rhs) 
+     class(mat_t(k=r4,c=*,r=*)), intent(inout) :: t_lhs
+     real(r4), intent(in) :: a_rhs(:,:)
+     !.. checks on size elided
+     t_lhs%m_a = a_rhs
+     return 
+   end subroutine seta_r4
+  
+   subroutine seta_r8(t_lhs, a_rhs) 
+     class(mat_t(k=r8,c=*,r=*)), intent(inout) :: t_lhs
+     real(r8), intent(in) :: a_rhs(:,:)
+     !.. checks on size elided
+     t_lhs%m_a = a_rhs
+     return 
+   end subroutine seta_r8
+  
+ end module matrix
+ 
+ program p  
+   use mykinds, only : r4, r8
+   use matrix, only : mat_t, assignment(=)  
+   implicit none
+   type(mat_t(k=r4,c=:,r=:)), allocatable :: mat_r4
+   type(mat_t(k=r8,c=:,r=:)), allocatable :: mat_r8
+   real(r4), allocatable :: a_r4(:,:)
+   real(r8), allocatable :: a_r8(:,:)
+   integer :: N
+   integer :: M
+   integer :: i
+   integer :: istat
+   N = 2
+   M = 3
+   allocate( mat_t(k=r4,c=N,r=M) :: mat_r4, stat=istat )
+   if ( istat /= 0 ) then
+      print *, " error allocating mat_r4: stat = ", istat
+      stop
+   end if
+   if (mat_r4%k /= r4) stop 1
+   if (mat_r4%c /= N) stop 2
+   if (mat_r4%r /= M) stop 3
+   mat_r4 = reshape( [ (real(i, kind=mat_r4%k), i=1,N*M) ], [ N, M ] )
+   a_r4 = mat_r4
+   if (int (sum (a_r4)) /= 21) stop 4
+   N = 4
+   M = 4
+   allocate( mat_t(k=r8,c=N,r=M) :: mat_r8, stat=istat )
+   if ( istat /= 0 ) then
+      print *, " error allocating mat_r4: stat = ", istat
+      stop
+   end if
+   if (mat_r8%k /= r8) stop 5
+   if (mat_r8%c /= N) stop 6
+   if (mat_r8%r /= M) stop 7
+   mat_r8 = reshape( [ (real(i, kind=mat_r8%k), i=1,N*M) ], [ N, M ] )
+   a_r8 = mat_r8
+   if (int (sum (a_r8)) /= 136) stop 8
+   deallocate( mat_r4, stat=istat )
+   if ( istat /= 0 ) then
+      print *, " error deallocating mat_r4: stat = ", istat
+      stop
+   end if
+   deallocate( mat_r8, stat=istat )
+   if ( istat /= 0 ) then
+      print *, " error deallocating mat_r4: stat = ", istat
+      stop
+   end if
+   stop
+ end program p
diff -Nrcpad gcc-16-20250817/gcc/testsuite/gfortran.dg/pr121627.f90 gcc-16-20250824/gcc/testsuite/gfortran.dg/pr121627.f90
*** gcc-16-20250817/gcc/testsuite/gfortran.dg/pr121627.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/gcc/testsuite/gfortran.dg/pr121627.f90	Sun Aug 24 22:33:09 2025
***************
*** 0 ****
--- 1,5 ----
+ ! { dg-do compile }
+ program real_kinds         ! { dg-error "already declared at" }
+   use iso_fortran_env      ! { dg-error "already declared at" }
+   i = real64
+ end program real_kinds
diff -Nrcpad gcc-16-20250817/gcc/testsuite/lib/target-supports.exp gcc-16-20250824/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20250817/gcc/testsuite/lib/target-supports.exp	Sun Aug 17 22:33:10 2025
--- gcc-16-20250824/gcc/testsuite/lib/target-supports.exp	Sun Aug 24 22:33:14 2025
*************** proc check_effective_target_riscv_zvfh_o
*** 2342,2348 ****
  
      # check if we can execute vector insns with the given hardware or
      # simulator
!     set gcc_march [regsub {[[:alnum:]]*} [riscv_get_arch] &v]
      if { [check_runtime ${gcc_march}_zvfh_exec {
  	int main()
  	{
--- 2342,2348 ----
  
      # check if we can execute vector insns with the given hardware or
      # simulator
!     set gcc_march [regsub {[[:alnum:]]*} [riscv_get_arch] &zvfh]
      if { [check_runtime ${gcc_march}_zvfh_exec {
  	int main()
  	{
*************** proc remove_options_for_riscv_ztso { fla
*** 2711,2720 ****
      return [remove_options_for_riscv_z_ext ztso $flags]
  }
  
- proc remove_options_for_riscv_zvfh { flags } {
-     return [add_options_for_riscv_z_ext zvfh $flags]
- }
- 
  proc add_options_for_riscv_zvbb { flags } {
      return [add_options_for_riscv_z_ext zvbb $flags]
  }
--- 2711,2716 ----
*************** proc add_options_for_riscv_zvfh { flags
*** 2728,2734 ****
  }
  
  proc remove_options_for_riscv_zvfh { flags } {
!     return [add_options_for_riscv_z_ext zvfh $flags]
  }
  
  # Return 1 if the target is ia32 or x86_64.
--- 2724,2730 ----
  }
  
  proc remove_options_for_riscv_zvfh { flags } {
!     return [remove_options_for_riscv_z_ext zvfh $flags]
  }
  
  # Return 1 if the target is ia32 or x86_64.
*************** foreach { armfunc armflag armdefs } {
*** 6126,6131 ****
--- 6122,6128 ----
  	v6z_arm "-march=armv6z+fp -marm" "__ARM_ARCH_6Z__ && !__thumb__"
  	v6z_thumb "-march=armv6z+fp -mthumb -mfloat-abi=softfp" "__ARM_ARCH_6Z__ && __thumb__"
  	v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__
+ 	v7 "-march=armv7+fp" __ARM_ARCH_7__
  	v7a "-march=armv7-a+fp" __ARM_ARCH_7A__
  	v7a_arm "-march=armv7-a+fp -marm" "__ARM_ARCH_7A__ && !__thumb__"
  	v7a_fp_hard "-march=armv7-a+fp -mfpu=auto -mfloat-abi=hard" __ARM_ARCH_7A__
diff -Nrcpad gcc-16-20250817/gcc/tree-cfg.cc gcc-16-20250824/gcc/tree-cfg.cc
*** gcc-16-20250817/gcc/tree-cfg.cc	Sun Aug 17 22:33:12 2025
--- gcc-16-20250824/gcc/tree-cfg.cc	Sun Aug 24 22:33:16 2025
*************** dump_default_def (FILE *file, tree def,
*** 8180,8186 ****
  static void
  print_no_sanitize_attr_value (FILE *file, tree value)
  {
!   unsigned int flags = tree_to_uhwi (value);
    bool first = true;
    for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
      {
--- 8180,8186 ----
  static void
  print_no_sanitize_attr_value (FILE *file, tree value)
  {
!   sanitize_code_type flags = tree_to_sanitize_code_type (value);
    bool first = true;
    for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
      {
diff -Nrcpad gcc-16-20250817/gcc/tree-parloops.cc gcc-16-20250824/gcc/tree-parloops.cc
*** gcc-16-20250817/gcc/tree-parloops.cc	Sun Aug 17 22:33:12 2025
--- gcc-16-20250824/gcc/tree-parloops.cc	Sun Aug 24 22:33:16 2025
*************** parloops_valid_reduction_input_p (stmt_v
*** 205,374 ****
  	      && !is_loop_header_bb_p (gimple_bb (def_stmt_info->stmt))));
  }
  
- /* Detect SLP reduction of the form:
- 
-    #a1 = phi <a5, a0>
-    a2 = operation (a1)
-    a3 = operation (a2)
-    a4 = operation (a3)
-    a5 = operation (a4)
- 
-    #a = phi <a5>
- 
-    PHI is the reduction phi node (#a1 = phi <a5, a0> above)
-    FIRST_STMT is the first reduction stmt in the chain
-    (a2 = operation (a1)).
- 
-    Return TRUE if a reduction chain was detected.  */
- 
- static bool
- parloops_is_slp_reduction (loop_vec_info loop_info, gimple *phi,
- 			   gimple *first_stmt)
- {
-   class loop *loop = (gimple_bb (phi))->loop_father;
-   class loop *vect_loop = LOOP_VINFO_LOOP (loop_info);
-   enum tree_code code;
-   gimple *loop_use_stmt = NULL;
-   stmt_vec_info use_stmt_info;
-   tree lhs;
-   imm_use_iterator imm_iter;
-   use_operand_p use_p;
-   int nloop_uses, size = 0, n_out_of_loop_uses;
-   bool found = false;
- 
-   if (loop != vect_loop)
-     return false;
- 
-   auto_vec<stmt_vec_info, 8> reduc_chain;
-   lhs = PHI_RESULT (phi);
-   code = gimple_assign_rhs_code (first_stmt);
-   while (1)
-     {
-       nloop_uses = 0;
-       n_out_of_loop_uses = 0;
-       FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
-         {
- 	  gimple *use_stmt = USE_STMT (use_p);
- 	  if (is_gimple_debug (use_stmt))
- 	    continue;
- 
-           /* Check if we got back to the reduction phi.  */
- 	  if (use_stmt == phi)
-             {
- 	      loop_use_stmt = use_stmt;
-               found = true;
-               break;
-             }
- 
-           if (flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
-             {
- 	      loop_use_stmt = use_stmt;
- 	      nloop_uses++;
-             }
-            else
-              n_out_of_loop_uses++;
- 
-            /* There are can be either a single use in the loop or two uses in
-               phi nodes.  */
-            if (nloop_uses > 1 || (n_out_of_loop_uses && nloop_uses))
-              return false;
-         }
- 
-       if (found)
-         break;
- 
-       /* We reached a statement with no loop uses.  */
-       if (nloop_uses == 0)
- 	return false;
- 
-       /* This is a loop exit phi, and we haven't reached the reduction phi.  */
-       if (gimple_code (loop_use_stmt) == GIMPLE_PHI)
-         return false;
- 
-       if (!is_gimple_assign (loop_use_stmt)
- 	  || code != gimple_assign_rhs_code (loop_use_stmt)
- 	  || !flow_bb_inside_loop_p (loop, gimple_bb (loop_use_stmt)))
-         return false;
- 
-       /* Insert USE_STMT into reduction chain.  */
-       use_stmt_info = loop_info->lookup_stmt (loop_use_stmt);
-       reduc_chain.safe_push (use_stmt_info);
- 
-       lhs = gimple_assign_lhs (loop_use_stmt);
-       size++;
-    }
- 
-   if (!found || loop_use_stmt != phi || size < 2)
-     return false;
- 
-   /* Swap the operands, if needed, to make the reduction operand be the second
-      operand.  */
-   lhs = PHI_RESULT (phi);
-   for (unsigned i = 0; i < reduc_chain.length (); ++i)
-     {
-       gassign *next_stmt = as_a <gassign *> (reduc_chain[i]->stmt);
-       if (gimple_assign_rhs2 (next_stmt) == lhs)
- 	{
- 	  tree op = gimple_assign_rhs1 (next_stmt);
- 	  stmt_vec_info def_stmt_info = loop_info->lookup_def (op);
- 
- 	  /* Check that the other def is either defined in the loop
- 	     ("vect_internal_def"), or it's an induction (defined by a
- 	     loop-header phi-node).  */
- 	  if (def_stmt_info
- 	      && flow_bb_inside_loop_p (loop, gimple_bb (def_stmt_info->stmt))
- 	      && parloops_valid_reduction_input_p (def_stmt_info))
- 	    {
- 	      lhs = gimple_assign_lhs (next_stmt);
- 	      continue;
- 	    }
- 
- 	  return false;
- 	}
-       else
- 	{
-           tree op = gimple_assign_rhs2 (next_stmt);
- 	  stmt_vec_info def_stmt_info = loop_info->lookup_def (op);
- 
-           /* Check that the other def is either defined in the loop
-             ("vect_internal_def"), or it's an induction (defined by a
-             loop-header phi-node).  */
- 	  if (def_stmt_info
- 	      && flow_bb_inside_loop_p (loop, gimple_bb (def_stmt_info->stmt))
- 	      && parloops_valid_reduction_input_p (def_stmt_info))
- 	    {
- 	      if (dump_enabled_p ())
- 		dump_printf_loc (MSG_NOTE, vect_location,
- 				 "swapping oprnds: %G", (gimple *) next_stmt);
- 
- 	      swap_ssa_operands (next_stmt,
- 				 gimple_assign_rhs1_ptr (next_stmt),
-                                  gimple_assign_rhs2_ptr (next_stmt));
- 	      update_stmt (next_stmt);
- 	    }
- 	  else
- 	    return false;
-         }
- 
-       lhs = gimple_assign_lhs (next_stmt);
-     }
- 
-   /* Build up the actual chain.  */
-   for (unsigned i = 0; i < reduc_chain.length () - 1; ++i)
-     {
-       REDUC_GROUP_FIRST_ELEMENT (reduc_chain[i]) = reduc_chain[0];
-       REDUC_GROUP_NEXT_ELEMENT (reduc_chain[i]) = reduc_chain[i+1];
-     }
-   REDUC_GROUP_FIRST_ELEMENT (reduc_chain.last ()) = reduc_chain[0];
-   REDUC_GROUP_NEXT_ELEMENT (reduc_chain.last ()) = NULL;
- 
-   /* Save the chain for further analysis in SLP detection.  */
-   LOOP_VINFO_REDUCTION_CHAINS (loop_info).safe_push (reduc_chain[0]);
-   REDUC_GROUP_SIZE (reduc_chain[0]) = size;
- 
-   return true;
- }
- 
  /* Return true if we need an in-order reduction for operation CODE
     on type TYPE.  NEED_WRAPPING_INTEGRAL_OVERFLOW is true if integer
     overflow must wrap.  */
--- 205,210 ----
*************** static stmt_vec_info
*** 455,461 ****
  parloops_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
  			  bool *double_reduc,
  			  bool need_wrapping_integral_overflow,
! 			  enum vect_reduction_type *v_reduc_type)
  {
    gphi *phi = as_a <gphi *> (phi_info->stmt);
    class loop *loop = (gimple_bb (phi))->loop_father;
--- 291,298 ----
  parloops_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
  			  bool *double_reduc,
  			  bool need_wrapping_integral_overflow,
! 			  enum vect_reduction_type *v_reduc_type,
! 			  hash_set<gphi *> &double_reduc_inner_lc_phis)
  {
    gphi *phi = as_a <gphi *> (phi_info->stmt);
    class loop *loop = (gimple_bb (phi))->loop_father;
*************** parloops_is_simple_reduction (loop_vec_i
*** 549,556 ****
  	  /* We can have more than one loop-closed PHI.  */
  	  lcphis.safe_push (as_a <gphi *> (use_stmt));
  	  if (nested_in_vect_loop
! 	      && (STMT_VINFO_DEF_TYPE (loop_info->lookup_stmt (use_stmt))
! 		  == vect_double_reduction_def))
  	    inner_loop_of_double_reduc = true;
  	}
      }
--- 386,392 ----
  	  /* We can have more than one loop-closed PHI.  */
  	  lcphis.safe_push (as_a <gphi *> (use_stmt));
  	  if (nested_in_vect_loop
! 	      && double_reduc_inner_lc_phis.contains (as_a <gphi *> (use_stmt)))
  	    inner_loop_of_double_reduc = true;
  	}
      }
*************** parloops_is_simple_reduction (loop_vec_i
*** 836,854 ****
        return def_stmt_info;
      }
  
-   /* Try to find SLP reduction chain.  */
-   if (! nested_in_vect_loop
-       && code != COND_EXPR
-       && orig_code != MINUS_EXPR
-       && parloops_is_slp_reduction (loop_info, phi, def_stmt))
-     {
-       if (dump_enabled_p ())
-         report_ploop_op (MSG_NOTE, def_stmt,
- 			 "reduction: detected reduction chain: ");
- 
-       return def_stmt_info;
-     }
- 
    /* Look for the expression computing loop_arg from loop PHI result.  */
    if (check_reduction_path (vect_location, loop, phi, loop_arg, code))
      return def_stmt_info;
--- 672,677 ----
*************** parloops_is_simple_reduction (loop_vec_i
*** 869,888 ****
  stmt_vec_info
  parloops_force_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
  			     bool *double_reduc,
! 			     bool need_wrapping_integral_overflow)
  {
    enum vect_reduction_type v_reduc_type;
    stmt_vec_info def_info
      = parloops_is_simple_reduction (loop_info, phi_info, double_reduc,
  				need_wrapping_integral_overflow,
! 				&v_reduc_type);
!   if (def_info)
!     {
!       STMT_VINFO_REDUC_TYPE (phi_info) = v_reduc_type;
!       STMT_VINFO_REDUC_DEF (phi_info) = def_info;
!       STMT_VINFO_REDUC_TYPE (def_info) = v_reduc_type;
!       STMT_VINFO_REDUC_DEF (def_info) = phi_info;
!     }
    return def_info;
  }
  
--- 692,711 ----
  stmt_vec_info
  parloops_force_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
  			     bool *double_reduc,
! 			     bool need_wrapping_integral_overflow,
! 			     hash_set<gphi *> &double_reduc_inner_lc_phis)
  {
    enum vect_reduction_type v_reduc_type;
    stmt_vec_info def_info
      = parloops_is_simple_reduction (loop_info, phi_info, double_reduc,
  				need_wrapping_integral_overflow,
! 				&v_reduc_type, double_reduc_inner_lc_phis);
!   /* Parallelization would reassociate the operation, which isn't
!      allowed for in-order reductions.  */
!   if (v_reduc_type == FOLD_LEFT_REDUCTION)
!     return NULL;
!   if (def_info && *double_reduc)
!     double_reduc_inner_lc_phis.add (as_a <gphi *> (def_info->stmt));
    return def_info;
  }
  
*************** set_reduc_phi_uids (reduction_info **slo
*** 3290,3307 ****
    return 1;
  }
  
- /* Return true if the type of reduction performed by STMT_INFO is suitable
-    for this pass.  */
- 
- static bool
- valid_reduction_p (stmt_vec_info stmt_info)
- {
-   /* Parallelization would reassociate the operation, which isn't
-      allowed for in-order reductions.  */
-   vect_reduction_type reduc_type = STMT_VINFO_REDUC_TYPE (stmt_info);
-   return reduc_type != FOLD_LEFT_REDUCTION;
- }
- 
  /* Detect all reductions in the LOOP, insert them into REDUCTION_LIST.  */
  
  static void
--- 3113,3118 ----
*************** gather_scalar_reductions (loop_p loop, r
*** 3311,3316 ****
--- 3122,3128 ----
    loop_vec_info simple_loop_info;
    auto_vec<gphi *, 4> double_reduc_phis;
    auto_vec<gimple *, 4> double_reduc_stmts;
+   hash_set<gphi *> double_reduc_inner_lc_phis;
  
    vec_info_shared shared;
    vect_loop_form_info info;
*************** gather_scalar_reductions (loop_p loop, r
*** 3334,3347 ****
        stmt_vec_info reduc_stmt_info
  	= parloops_force_simple_reduction (simple_loop_info,
  					   simple_loop_info->lookup_stmt (phi),
! 					   &double_reduc, true);
!       if (!reduc_stmt_info || !valid_reduction_p (reduc_stmt_info))
  	continue;
  
        if (double_reduc)
  	{
! 	  if (loop->inner->inner != NULL)
! 	    continue;
  
  	  double_reduc_phis.safe_push (phi);
  	  double_reduc_stmts.safe_push (reduc_stmt_info->stmt);
--- 3146,3160 ----
        stmt_vec_info reduc_stmt_info
  	= parloops_force_simple_reduction (simple_loop_info,
  					   simple_loop_info->lookup_stmt (phi),
! 					   &double_reduc, true,
! 					   double_reduc_inner_lc_phis);
!       if (!reduc_stmt_info)
  	continue;
  
        if (double_reduc)
  	{
! 	  /* vect_analyze_loop_form guarantees this.  */
! 	  gcc_assert (loop->inner->inner == NULL);
  
  	  double_reduc_phis.safe_push (phi);
  	  double_reduc_stmts.safe_push (reduc_stmt_info->stmt);
*************** gather_scalar_reductions (loop_p loop, r
*** 3350,3401 ****
  
        build_new_reduction (reduction_list, reduc_stmt_info->stmt, phi);
      }
-   delete simple_loop_info;
  
    if (!double_reduc_phis.is_empty ())
      {
!       vec_info_shared shared;
!       vect_loop_form_info info;
!       if (vect_analyze_loop_form (loop->inner, NULL, &info))
! 	{
! 	  simple_loop_info
! 	    = vect_create_loop_vinfo (loop->inner, &shared, &info);
! 	  gphi *phi;
! 	  unsigned int i;
  
! 	  FOR_EACH_VEC_ELT (double_reduc_phis, i, phi)
! 	    {
! 	      affine_iv iv;
! 	      tree res = PHI_RESULT (phi);
! 	      bool double_reduc;
  
! 	      use_operand_p use_p;
! 	      gimple *inner_stmt;
! 	      bool single_use_p = single_imm_use (res, &use_p, &inner_stmt);
! 	      gcc_assert (single_use_p);
! 	      if (gimple_code (inner_stmt) != GIMPLE_PHI)
! 		continue;
! 	      gphi *inner_phi = as_a <gphi *> (inner_stmt);
! 	      if (simple_iv (loop->inner, loop->inner, PHI_RESULT (inner_phi),
! 			     &iv, true))
! 		continue;
  
! 	      stmt_vec_info inner_phi_info
! 		= simple_loop_info->lookup_stmt (inner_phi);
! 	      stmt_vec_info inner_reduc_stmt_info
! 		= parloops_force_simple_reduction (simple_loop_info,
! 						   inner_phi_info,
! 						   &double_reduc, true);
! 	      gcc_assert (!double_reduc);
! 	      if (!inner_reduc_stmt_info
! 		  || !valid_reduction_p (inner_reduc_stmt_info))
! 		continue;
  
! 	      build_new_reduction (reduction_list, double_reduc_stmts[i], phi);
! 	    }
! 	  delete simple_loop_info;
  	}
      }
  
   gather_done:
    if (reduction_list->is_empty ())
--- 3163,3206 ----
  
        build_new_reduction (reduction_list, reduc_stmt_info->stmt, phi);
      }
  
    if (!double_reduc_phis.is_empty ())
      {
!       gphi *phi;
!       unsigned int i;
  
!       FOR_EACH_VEC_ELT (double_reduc_phis, i, phi)
! 	{
! 	  affine_iv iv;
! 	  tree res = PHI_RESULT (phi);
! 	  bool double_reduc;
  
! 	  use_operand_p use_p;
! 	  gimple *inner_stmt;
! 	  bool single_use_p = single_imm_use (res, &use_p, &inner_stmt);
! 	  gcc_assert (single_use_p);
! 	  if (gimple_code (inner_stmt) != GIMPLE_PHI)
! 	    continue;
! 	  gphi *inner_phi = as_a <gphi *> (inner_stmt);
! 	  if (simple_iv (loop->inner, loop->inner, PHI_RESULT (inner_phi),
! 			 &iv, true))
! 	    continue;
  
! 	  stmt_vec_info inner_phi_info
! 	    = simple_loop_info->lookup_stmt (inner_phi);
! 	  stmt_vec_info inner_reduc_stmt_info
! 	    = parloops_force_simple_reduction (simple_loop_info,
! 					       inner_phi_info,
! 					       &double_reduc, true,
! 					       double_reduc_inner_lc_phis);
! 	  gcc_assert (!double_reduc);
! 	  if (!inner_reduc_stmt_info)
! 	    continue;
  
! 	  build_new_reduction (reduction_list, double_reduc_stmts[i], phi);
  	}
      }
+   delete simple_loop_info;
  
   gather_done:
    if (reduction_list->is_empty ())
diff -Nrcpad gcc-16-20250817/gcc/tree-sra.cc gcc-16-20250824/gcc/tree-sra.cc
*** gcc-16-20250817/gcc/tree-sra.cc	Sun Aug 17 22:33:12 2025
--- gcc-16-20250824/gcc/tree-sra.cc	Sun Aug 24 22:33:16 2025
*************** build_access_from_expr_1 (tree expr, gim
*** 1291,1309 ****
        return NULL;
      }
  
!   /* We need to dive through V_C_Es in order to get the size of its parameter
!      and not the result type.  Ada produces such statements.  We are also
!      capable of handling the topmost V_C_E but not any of those buried in other
!      handled components.  */
!   if (TREE_CODE (expr) == VIEW_CONVERT_EXPR)
!     expr = TREE_OPERAND (expr, 0);
! 
!   if (contains_view_convert_expr_p (expr))
      {
        disqualify_base_of_expr (expr, "V_C_E under a different handled "
  			       "component.");
        return NULL;
      }
    if (TREE_THIS_VOLATILE (expr))
      {
        disqualify_base_of_expr (expr, "part of a volatile reference.");
--- 1291,1306 ----
        return NULL;
      }
  
!   /* We are capable of handling the topmost V_C_E but not any of those
!      buried in other handled components.  */
!   if (contains_view_convert_expr_p (TREE_CODE (expr) == VIEW_CONVERT_EXPR
! 				    ? TREE_OPERAND (expr, 0) : expr))
      {
        disqualify_base_of_expr (expr, "V_C_E under a different handled "
  			       "component.");
        return NULL;
      }
+ 
    if (TREE_THIS_VOLATILE (expr))
      {
        disqualify_base_of_expr (expr, "part of a volatile reference.");
*************** build_access_from_expr_1 (tree expr, gim
*** 1323,1328 ****
--- 1320,1326 ----
      case ARRAY_REF:
      case ARRAY_RANGE_REF:
      case BIT_FIELD_REF:
+     case VIEW_CONVERT_EXPR:
        ret = create_access (expr, stmt, write);
        break;
  
*************** make_fancy_name (tree expr)
*** 1884,1890 ****
     the current one as specified by INSERT_AFTER.  This function is not capable
     of handling bitfields.  */
  
! tree
  build_ref_for_offset (location_t loc, tree base, poly_int64 offset,
  		      bool reverse, tree exp_type, gimple_stmt_iterator *gsi,
  		      bool insert_after)
--- 1882,1888 ----
     the current one as specified by INSERT_AFTER.  This function is not capable
     of handling bitfields.  */
  
! static tree
  build_ref_for_offset (location_t loc, tree base, poly_int64 offset,
  		      bool reverse, tree exp_type, gimple_stmt_iterator *gsi,
  		      bool insert_after)
*************** get_access_for_expr (tree expr)
*** 4086,4097 ****
    tree base;
    bool reverse;
  
-   /* FIXME: This should not be necessary but Ada produces V_C_Es with a type of
-      a different size than the size of its argument and we need the latter
-      one.  */
-   if (TREE_CODE (expr) == VIEW_CONVERT_EXPR)
-     expr = TREE_OPERAND (expr, 0);
- 
    base = get_ref_base_and_extent (expr, &poffset, &psize, &pmax_size,
  				  &reverse);
    if (!known_size_p (pmax_size)
--- 4084,4089 ----
diff -Nrcpad gcc-16-20250817/gcc/tree-vect-data-refs.cc gcc-16-20250824/gcc/tree-vect-data-refs.cc
*** gcc-16-20250817/gcc/tree-vect-data-refs.cc	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/gcc/tree-vect-data-refs.cc	Sun Aug 24 22:33:16 2025
*************** vect_check_gather_scatter (stmt_vec_info
*** 4597,4609 ****
        masked_p = (ifn == IFN_MASK_LOAD || ifn == IFN_MASK_STORE);
      }
  
-   /* ???  For epilogues we adjust DR_REF to make the following stmt-based
-      analysis work, but this adjustment doesn't work for epilogues of
-      epilogues during transform, so disable gather/scatter in that case.  */
-   if (LOOP_VINFO_EPILOGUE_P (loop_vinfo)
-       && LOOP_VINFO_EPILOGUE_P (LOOP_VINFO_ORIG_LOOP_INFO (loop_vinfo)))
-     return false;
- 
    /* True if we should aim to use internal functions rather than
       built-in functions.  */
    bool use_ifn_p = (DR_IS_READ (dr)
--- 4597,4602 ----
diff -Nrcpad gcc-16-20250817/gcc/tree-vect-loop.cc gcc-16-20250824/gcc/tree-vect-loop.cc
*** gcc-16-20250817/gcc/tree-vect-loop.cc	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/gcc/tree-vect-loop.cc	Sun Aug 24 22:33:16 2025
*************** get_initial_defs_for_reduction (loop_vec
*** 5034,5040 ****
       two copies of each scalar operand: {s1, s2, s1, s2}.  (NUMBER_OF_COPIES
       will be 2).
  
!      If REDUC_GROUP_SIZE > NUNITS, the scalars will be split into several
       vectors containing the operands.
  
       For example, NUNITS is four as before, and the group size is 8
--- 5034,5040 ----
       two copies of each scalar operand: {s1, s2, s1, s2}.  (NUMBER_OF_COPIES
       will be 2).
  
!      If GROUP_SIZE > NUNITS, the scalars will be split into several
       vectors containing the operands.
  
       For example, NUNITS is four as before, and the group size is 8
*************** vect_create_epilog_for_reduction (loop_v
*** 5449,5457 ****
       # b1 = phi <b2, b0>
       a2 = operation (a1)
       b2 = operation (b1)  */
!   bool slp_reduc
!     = !REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info));
!   bool direct_slp_reduc;
    tree induction_index = NULL_TREE;
  
    unsigned int group_size = SLP_TREE_LANES (slp_node);
--- 5449,5456 ----
       # b1 = phi <b2, b0>
       a2 = operation (a1)
       b2 = operation (b1)  */
!   const bool slp_reduc
!     = SLP_INSTANCE_KIND (slp_node_instance) != slp_inst_kind_reduc_chain;
    tree induction_index = NULL_TREE;
  
    unsigned int group_size = SLP_TREE_LANES (slp_node);
*************** vect_create_epilog_for_reduction (loop_v
*** 5677,5685 ****
  
    /* True if we should implement SLP_REDUC using native reduction operations
       instead of scalar operations.  */
!   direct_slp_reduc = (reduc_fn != IFN_LAST
! 		      && slp_reduc
! 		      && !TYPE_VECTOR_SUBPARTS (vectype).is_constant ());
  
    /* In case of reduction chain, e.g.,
       # a1 = phi <a3, a0>
--- 5676,5685 ----
  
    /* True if we should implement SLP_REDUC using native reduction operations
       instead of scalar operations.  */
!   const bool direct_slp_reduc
!     = (reduc_fn != IFN_LAST
!        && slp_reduc
!        && !TYPE_VECTOR_SUBPARTS (vectype).is_constant ());
  
    /* In case of reduction chain, e.g.,
       # a1 = phi <a3, a0>
*************** vect_create_epilog_for_reduction (loop_v
*** 5700,5706 ****
       a multiple of the SLP group size.
  
       The same is true if we couldn't use a single defuse cycle.  */
!   if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info))
        || direct_slp_reduc
        || (slp_reduc
  	  && constant_multiple_p (TYPE_VECTOR_SUBPARTS (vectype), group_size)))
--- 5700,5706 ----
       a multiple of the SLP group size.
  
       The same is true if we couldn't use a single defuse cycle.  */
!   if (!slp_reduc
        || direct_slp_reduc
        || (slp_reduc
  	  && constant_multiple_p (TYPE_VECTOR_SUBPARTS (vectype), group_size)))
*************** vect_create_epilog_for_reduction (loop_v
*** 5969,5975 ****
      }
    else if (direct_slp_reduc)
      {
!       /* Here we create one vector for each of the REDUC_GROUP_SIZE results,
  	 with the elements for other SLP statements replaced with the
  	 neutral value.  We can then do a normal reduction on each vector.  */
  
--- 5969,5975 ----
      }
    else if (direct_slp_reduc)
      {
!       /* Here we create one vector for each of the GROUP_SIZE results,
  	 with the elements for other SLP statements replaced with the
  	 neutral value.  We can then do a normal reduction on each vector.  */
  
*************** vect_create_epilog_for_reduction (loop_v
*** 5987,5993 ****
        tree mask_type = truth_type_for (index_type);
  
        /* Create a vector that, for each element, identifies which of
! 	 the REDUC_GROUP_SIZE results should use it.  */
        tree index_mask = build_int_cst (index_elt_type, group_size - 1);
        index = gimple_build (&seq, BIT_AND_EXPR, index_type, index,
  			    build_vector_from_val (index_type, index_mask));
--- 5987,5993 ----
        tree mask_type = truth_type_for (index_type);
  
        /* Create a vector that, for each element, identifies which of
! 	 the results should use it.  */
        tree index_mask = build_int_cst (index_elt_type, group_size - 1);
        index = gimple_build (&seq, BIT_AND_EXPR, index_type, index,
  			    build_vector_from_val (index_type, index_mask));
*************** vect_create_epilog_for_reduction (loop_v
*** 5996,6010 ****
  	 scalar value if we have one, otherwise the initial scalar value
  	 is itself a neutral value.  */
        tree vector_identity = NULL_TREE;
!       tree neutral_op = NULL_TREE;
!       if (1)
! 	{
! 	  tree initial_value = NULL_TREE;
! 	  if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info)))
! 	    initial_value = reduc_info->reduc_initial_values[0];
! 	  neutral_op = neutral_op_for_reduction (TREE_TYPE (vectype), code,
! 						 initial_value, false);
! 	}
        if (neutral_op)
  	vector_identity = gimple_build_vector_from_val (&seq, vectype,
  							neutral_op);
--- 5996,6003 ----
  	 scalar value if we have one, otherwise the initial scalar value
  	 is itself a neutral value.  */
        tree vector_identity = NULL_TREE;
!       tree neutral_op = neutral_op_for_reduction (TREE_TYPE (vectype), code,
! 						  NULL_TREE, false);
        if (neutral_op)
  	vector_identity = gimple_build_vector_from_val (&seq, vectype,
  							neutral_op);
*************** vect_create_epilog_for_reduction (loop_v
*** 6207,6216 ****
                  }
              }
  
!           /* The only case where we need to reduce scalar results in SLP, is
!              unrolling.  If the size of SCALAR_RESULTS is greater than
!              REDUC_GROUP_SIZE, we reduce them combining elements modulo
!              REDUC_GROUP_SIZE.  */
            if (slp_reduc)
              {
                tree res, first_res, new_res;
--- 6200,6209 ----
                  }
              }
  
! 	  /* The only case where we need to reduce scalar results in a SLP
! 	     reduction, is unrolling.  If the size of SCALAR_RESULTS is
! 	     greater than GROUP_SIZE, we reduce them combining elements modulo
! 	     GROUP_SIZE.  */
            if (slp_reduc)
              {
                tree res, first_res, new_res;
*************** vect_create_epilog_for_reduction (loop_v
*** 6231,6237 ****
              }
            else
  	    {
! 	      /* Not SLP - we have one scalar to keep in SCALAR_RESULTS.  */
  	      new_temp = gimple_convert (&stmts, scalar_type, new_temp);
  	      scalar_results.safe_push (new_temp);
  	    }
--- 6224,6231 ----
              }
            else
  	    {
! 	      /* Reduction chain - we have one scalar to keep in
! 		 SCALAR_RESULTS.  */
  	      new_temp = gimple_convert (&stmts, scalar_type, new_temp);
  	      scalar_results.safe_push (new_temp);
  	    }
*************** vectorizable_lane_reducing (loop_vec_inf
*** 6887,6902 ****
    if (!type_has_mode_precision_p (type))
      return false;
  
-   stmt_vec_info reduc_info = STMT_VINFO_REDUC_DEF (vect_orig_stmt (stmt_info));
- 
    /* TODO: Support lane-reducing operation that does not directly participate
       in loop reduction.  */
!   if (!reduc_info || STMT_VINFO_REDUC_IDX (stmt_info) < 0)
      return false;
  
    /* Lane-reducing pattern inside any inner loop of LOOP_VINFO is not
       recoginized.  */
!   gcc_assert (STMT_VINFO_DEF_TYPE (reduc_info) == vect_reduction_def);
    gcc_assert (STMT_VINFO_REDUC_TYPE (reduc_info) == TREE_CODE_REDUCTION);
  
    for (int i = 0; i < (int) gimple_num_ops (stmt) - 1; i++)
--- 6881,6897 ----
    if (!type_has_mode_precision_p (type))
      return false;
  
    /* TODO: Support lane-reducing operation that does not directly participate
       in loop reduction.  */
!   if (!STMT_VINFO_REDUC_DEF (vect_orig_stmt (stmt_info))
!       || STMT_VINFO_REDUC_IDX (stmt_info) < 0)
      return false;
  
+   stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
+ 
    /* Lane-reducing pattern inside any inner loop of LOOP_VINFO is not
       recoginized.  */
!   gcc_assert (!nested_in_vect_loop_p (LOOP_VINFO_LOOP (loop_vinfo), stmt_info));
    gcc_assert (STMT_VINFO_REDUC_TYPE (reduc_info) == TREE_CODE_REDUCTION);
  
    for (int i = 0; i < (int) gimple_num_ops (stmt) - 1; i++)
*************** vectorizable_reduction (loop_vec_info lo
*** 7047,7052 ****
--- 7042,7049 ----
    bool double_reduc = false;
    tree cr_index_scalar_type = NULL_TREE, cr_index_vector_type = NULL_TREE;
    tree cond_reduc_val = NULL_TREE;
+   const bool reduc_chain
+     = SLP_INSTANCE_KIND (slp_node_instance) == slp_inst_kind_reduc_chain;
  
    /* Make sure it was already recognized as a reduction computation.  */
    if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_reduction_def
*************** vectorizable_reduction (loop_vec_info lo
*** 7256,7262 ****
    /* Not supportable if the reduction variable is used in the loop, unless
       it's a reduction chain.  */
    if (STMT_VINFO_RELEVANT (stmt_info) > vect_used_in_outer
!       && !REDUC_GROUP_FIRST_ELEMENT (stmt_info))
      return false;
  
    /* Reductions that are not used even in an enclosing outer-loop,
--- 7253,7259 ----
    /* Not supportable if the reduction variable is used in the loop, unless
       it's a reduction chain.  */
    if (STMT_VINFO_RELEVANT (stmt_info) > vect_used_in_outer
!       && !reduc_chain)
      return false;
  
    /* Reductions that are not used even in an enclosing outer-loop,
*************** vectorizable_reduction (loop_vec_info lo
*** 7285,7291 ****
  
    tree vectype_out = SLP_TREE_VECTYPE (slp_for_stmt_info);
    STMT_VINFO_REDUC_VECTYPE (reduc_info) = vectype_out;
-   STMT_VINFO_REDUC_VECTYPE_IN (reduc_info) = vectype_in;
  
    gimple_match_op op;
    if (!gimple_extract_op (stmt_info->stmt, &op))
--- 7282,7287 ----
*************** vectorizable_reduction (loop_vec_info lo
*** 7305,7311 ****
       OK to use them in a reduction chain or when the reduction group
       has just one element.  */
    if (lane_reducing
!       && !REDUC_GROUP_FIRST_ELEMENT (stmt_info)
        && SLP_TREE_LANES (slp_node) > 1)
      {
        if (dump_enabled_p ())
--- 7301,7307 ----
       OK to use them in a reduction chain or when the reduction group
       has just one element.  */
    if (lane_reducing
!       && !reduc_chain
        && SLP_TREE_LANES (slp_node) > 1)
      {
        if (dump_enabled_p ())
*************** vectorizable_reduction (loop_vec_info lo
*** 7556,7562 ****
  	 outer-loop vectorization is safe.  Likewise when we are vectorizing
  	 a series of reductions using SLP and the VF is one the reductions
  	 are performed in scalar order.  */
!       if (!REDUC_GROUP_FIRST_ELEMENT (stmt_info)
  	  && known_eq (LOOP_VINFO_VECT_FACTOR (loop_vinfo), 1u))
  	;
        else if (needs_fold_left_reduction_p (op.type, orig_code))
--- 7552,7558 ----
  	 outer-loop vectorization is safe.  Likewise when we are vectorizing
  	 a series of reductions using SLP and the VF is one the reductions
  	 are performed in scalar order.  */
!       if (!reduc_chain
  	  && known_eq (LOOP_VINFO_VECT_FACTOR (loop_vinfo), 1u))
  	;
        else if (needs_fold_left_reduction_p (op.type, orig_code))
*************** vectorizable_reduction (loop_vec_info lo
*** 7672,7678 ****
    /* For SLP reductions, see if there is a neutral value we can use.  */
    tree neutral_op = NULL_TREE;
    tree initial_value = NULL_TREE;
!   if (REDUC_GROUP_FIRST_ELEMENT (stmt_info) != NULL)
      initial_value = vect_phi_initial_value (reduc_def_phi);
    neutral_op = neutral_op_for_reduction (TREE_TYPE (vectype_out),
  					 orig_code, initial_value);
--- 7668,7674 ----
    /* For SLP reductions, see if there is a neutral value we can use.  */
    tree neutral_op = NULL_TREE;
    tree initial_value = NULL_TREE;
!   if (reduc_chain)
      initial_value = vect_phi_initial_value (reduc_def_phi);
    neutral_op = neutral_op_for_reduction (TREE_TYPE (vectype_out),
  					 orig_code, initial_value);
*************** vectorizable_reduction (loop_vec_info lo
*** 7702,7708 ****
  
    if (reduction_type == FOLD_LEFT_REDUCTION
        && SLP_TREE_LANES (slp_node) > 1
!       && !REDUC_GROUP_FIRST_ELEMENT (stmt_info))
      {
        /* We cannot use in-order reductions in this case because there is
  	 an implicit reassociation of the operations involved.  */
--- 7698,7704 ----
  
    if (reduction_type == FOLD_LEFT_REDUCTION
        && SLP_TREE_LANES (slp_node) > 1
!       && !reduc_chain)
      {
        /* We cannot use in-order reductions in this case because there is
  	 an implicit reassociation of the operations involved.  */
*************** vectorizable_reduction (loop_vec_info lo
*** 7730,7736 ****
      }
  
    /* Check extra constraints for variable-length unchained SLP reductions.  */
!   if (!REDUC_GROUP_FIRST_ELEMENT (stmt_info)
        && !nunits_out.is_constant ())
      {
        /* We checked above that we could build the initial vector when
--- 7726,7732 ----
      }
  
    /* Check extra constraints for variable-length unchained SLP reductions.  */
!   if (!reduc_chain
        && !nunits_out.is_constant ())
      {
        /* We checked above that we could build the initial vector when
*************** vectorizable_reduction (loop_vec_info lo
*** 7824,7830 ****
     own reduction accumulator since one of the main goals of unrolling a
     reduction is to reduce the aggregate loop-carried latency.  */
    if (ncopies > 1
!       && !REDUC_GROUP_FIRST_ELEMENT (stmt_info)
        && SLP_TREE_LANES (slp_node) == 1
        && (STMT_VINFO_RELEVANT (stmt_info) <= vect_used_only_live)
        && reduc_chain_length == 1
--- 7820,7826 ----
     own reduction accumulator since one of the main goals of unrolling a
     reduction is to reduce the aggregate loop-carried latency.  */
    if (ncopies > 1
!       && !reduc_chain
        && SLP_TREE_LANES (slp_node) == 1
        && (STMT_VINFO_RELEVANT (stmt_info) <= vect_used_only_live)
        && reduc_chain_length == 1
*************** vectorizable_reduction (loop_vec_info lo
*** 7892,7898 ****
       vect_transform_reduction for non-lane-reducing operation.  Otherwise
       this is costed by the separate vectorizable_* routines.  */
    if (single_defuse_cycle)
!     record_stmt_cost (cost_vec, ncopies, vector_stmt, stmt_info, 0, vect_body);
  
    if (dump_enabled_p ()
        && reduction_type == FOLD_LEFT_REDUCTION)
--- 7888,7895 ----
       vect_transform_reduction for non-lane-reducing operation.  Otherwise
       this is costed by the separate vectorizable_* routines.  */
    if (single_defuse_cycle)
!     record_stmt_cost (cost_vec, ncopies, vector_stmt,
! 		      slp_for_stmt_info, 0, vect_body);
  
    if (dump_enabled_p ()
        && reduction_type == FOLD_LEFT_REDUCTION)
*************** vect_transform_reduction (loop_vec_info
*** 8208,8214 ****
  	    }
  	}
  
!       tree reduc_vectype_in = STMT_VINFO_REDUC_VECTYPE_IN (reduc_info);
        gcc_assert (reduc_vectype_in);
  
        unsigned effec_reduc_ncopies
--- 8205,8211 ----
  	    }
  	}
  
!       tree reduc_vectype_in = STMT_VINFO_REDUC_VECTYPE_IN (stmt_info);
        gcc_assert (reduc_vectype_in);
  
        unsigned effec_reduc_ncopies
*************** vect_transform_cycle_phi (loop_vec_info
*** 8356,8361 ****
--- 8353,8360 ----
    int i;
    bool nested_cycle = false;
    int vec_num;
+   const bool reduc_chain
+     = SLP_INSTANCE_KIND (slp_node_instance) == slp_inst_kind_reduc_chain;
  
    if (nested_in_vect_loop_p (loop, stmt_info))
      {
*************** vect_transform_cycle_phi (loop_vec_info
*** 8426,8432 ****
        vec<stmt_vec_info> &stmts = SLP_TREE_SCALAR_STMTS (slp_node);
  
        unsigned int num_phis = stmts.length ();
!       if (REDUC_GROUP_FIRST_ELEMENT (reduc_stmt_info))
  	num_phis = 1;
        initial_values.reserve (num_phis);
        for (unsigned int i = 0; i < num_phis; ++i)
--- 8425,8431 ----
        vec<stmt_vec_info> &stmts = SLP_TREE_SCALAR_STMTS (slp_node);
  
        unsigned int num_phis = stmts.length ();
!       if (reduc_chain)
  	num_phis = 1;
        initial_values.reserve (num_phis);
        for (unsigned int i = 0; i < num_phis; ++i)
*************** vect_transform_lc_phi (loop_vec_info loo
*** 8626,8632 ****
  /* Vectorizes PHIs.  */
  
  bool
! vectorizable_phi (vec_info *,
  		  stmt_vec_info stmt_info,
  		  slp_tree slp_node, stmt_vector_for_cost *cost_vec)
  {
--- 8625,8631 ----
  /* Vectorizes PHIs.  */
  
  bool
! vectorizable_phi (bb_vec_info,
  		  stmt_vec_info stmt_info,
  		  slp_tree slp_node, stmt_vector_for_cost *cost_vec)
  {
*************** vectorizable_phi (vec_info *,
*** 8678,8684 ****
  	 favoring the vector path (but may pessimize it in some cases).  */
        if (gimple_phi_num_args (as_a <gphi *> (stmt_info->stmt)) > 1)
  	record_stmt_cost (cost_vec, SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node),
! 			  vector_stmt, stmt_info, vectype, 0, vect_body);
        SLP_TREE_TYPE (slp_node) = phi_info_type;
        return true;
      }
--- 8677,8683 ----
  	 favoring the vector path (but may pessimize it in some cases).  */
        if (gimple_phi_num_args (as_a <gphi *> (stmt_info->stmt)) > 1)
  	record_stmt_cost (cost_vec, SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node),
! 			  vector_stmt, slp_node, vectype, 0, vect_body);
        SLP_TREE_TYPE (slp_node) = phi_info_type;
        return true;
      }
*************** vectorizable_recurr (loop_vec_info loop_
*** 8860,8866 ****
  	 represented and costed separately.  */
        unsigned prologue_cost = 0;
        unsigned inside_cost = record_stmt_cost (cost_vec, ncopies, vector_stmt,
! 					       stmt_info, 0, vect_body);
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_NOTE, vect_location,
  			 "vectorizable_recurr: inside_cost = %d, "
--- 8859,8865 ----
  	 represented and costed separately.  */
        unsigned prologue_cost = 0;
        unsigned inside_cost = record_stmt_cost (cost_vec, ncopies, vector_stmt,
! 					       slp_node, 0, vect_body);
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_NOTE, vect_location,
  			 "vectorizable_recurr: inside_cost = %d, "
*************** vectorizable_nonlinear_induction (loop_v
*** 9403,9409 ****
        /* loop cost for vec_loop. Neg induction doesn't have any
  	 inside_cost.  */
        inside_cost = record_stmt_cost (cost_vec, ncopies, vector_stmt,
! 				      stmt_info, 0, vect_body);
  
        /* loop cost for vec_loop. Neg induction doesn't have any
  	 inside_cost.  */
--- 9402,9408 ----
        /* loop cost for vec_loop. Neg induction doesn't have any
  	 inside_cost.  */
        inside_cost = record_stmt_cost (cost_vec, ncopies, vector_stmt,
! 				      slp_node, 0, vect_body);
  
        /* loop cost for vec_loop. Neg induction doesn't have any
  	 inside_cost.  */
*************** vectorizable_nonlinear_induction (loop_v
*** 9412,9418 ****
  
        /* prologue cost for vec_init and vec_step.  */
        prologue_cost = record_stmt_cost (cost_vec, 2, scalar_to_vec,
! 					stmt_info, 0, vect_prologue);
  
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_NOTE, vect_location,
--- 9411,9417 ----
  
        /* prologue cost for vec_init and vec_step.  */
        prologue_cost = record_stmt_cost (cost_vec, 2, scalar_to_vec,
! 					slp_node, 0, vect_prologue);
  
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_NOTE, vect_location,
*************** vectorizable_induction (loop_vec_info lo
*** 9710,9720 ****
        /* loop cost for vec_loop.  */
        inside_cost = record_stmt_cost (cost_vec,
  				      SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node),
! 				      vector_stmt, stmt_info, 0, vect_body);
        /* prologue cost for vec_init (if not nested) and step.  */
        prologue_cost = record_stmt_cost (cost_vec, 1 + !nested_in_vect_loop,
  					scalar_to_vec,
! 					stmt_info, 0, vect_prologue);
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_NOTE, vect_location,
  			 "vect_model_induction_cost: inside_cost = %d, "
--- 9709,9719 ----
        /* loop cost for vec_loop.  */
        inside_cost = record_stmt_cost (cost_vec,
  				      SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node),
! 				      vector_stmt, slp_node, 0, vect_body);
        /* prologue cost for vec_init (if not nested) and step.  */
        prologue_cost = record_stmt_cost (cost_vec, 1 + !nested_in_vect_loop,
  					scalar_to_vec,
! 					slp_node, 0, vect_prologue);
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_NOTE, vect_location,
  			 "vect_model_induction_cost: inside_cost = %d, "
*************** vectorizable_live_operation (vec_info *v
*** 10260,10267 ****
        if (!vec_stmt_p)
  	return true;
        /* For SLP reductions we vectorize the epilogue for all involved stmts
! 	 together.  */
!       if (!REDUC_GROUP_FIRST_ELEMENT (stmt_info) && slp_index != 0)
  	return true;
        stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
        gcc_assert (reduc_info->is_reduc_info);
--- 10259,10267 ----
        if (!vec_stmt_p)
  	return true;
        /* For SLP reductions we vectorize the epilogue for all involved stmts
! 	 together.  For SLP reduction chains we only get here once.  */
!       if (SLP_INSTANCE_KIND (slp_node_instance) == slp_inst_kind_reduc_group
! 	  && slp_index != 0)
  	return true;
        stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
        gcc_assert (reduc_info->is_reduc_info);
*************** vectorizable_live_operation (vec_info *v
*** 10280,10295 ****
        if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo))
  	{
  	  slp_tree phis_node = slp_node_instance->reduc_phis;
  	  for (auto exit : get_loop_exit_edges (LOOP_VINFO_LOOP (loop_vinfo)))
  	    if (exit != LOOP_VINFO_IV_EXIT (loop_vinfo))
  	      {
! 		vect_create_epilog_for_reduction (loop_vinfo, reduc_info,
  						  phis_node, slp_node_instance,
  						  exit);
  		break;
  	      }
  	  if (LOOP_VINFO_EARLY_BREAKS_VECT_PEELED (loop_vinfo))
! 	    vect_create_epilog_for_reduction (loop_vinfo, reduc_info,
  					      phis_node, slp_node_instance,
  					      LOOP_VINFO_IV_EXIT (loop_vinfo));
  	}
--- 10280,10296 ----
        if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo))
  	{
  	  slp_tree phis_node = slp_node_instance->reduc_phis;
+ 	  stmt_info = SLP_TREE_REPRESENTATIVE (phis_node);
  	  for (auto exit : get_loop_exit_edges (LOOP_VINFO_LOOP (loop_vinfo)))
  	    if (exit != LOOP_VINFO_IV_EXIT (loop_vinfo))
  	      {
! 		vect_create_epilog_for_reduction (loop_vinfo, stmt_info,
  						  phis_node, slp_node_instance,
  						  exit);
  		break;
  	      }
  	  if (LOOP_VINFO_EARLY_BREAKS_VECT_PEELED (loop_vinfo))
! 	    vect_create_epilog_for_reduction (loop_vinfo, stmt_info,
  					      phis_node, slp_node_instance,
  					      LOOP_VINFO_IV_EXIT (loop_vinfo));
  	}
*************** vectorizable_live_operation (vec_info *v
*** 10378,10384 ****
  	}
        /* ???  Enable for loop costing as well.  */
        if (!loop_vinfo)
! 	record_stmt_cost (cost_vec, 1, vec_to_scalar, stmt_info, NULL_TREE,
  			  0, vect_epilogue);
        return true;
      }
--- 10379,10385 ----
  	}
        /* ???  Enable for loop costing as well.  */
        if (!loop_vinfo)
! 	record_stmt_cost (cost_vec, 1, vec_to_scalar, slp_node,
  			  0, vect_epilogue);
        return true;
      }
*************** scale_profile_for_vect_loop (class loop
*** 10972,11013 ****
  		      get_likely_max_loop_iterations_int (loop));
  }
  
- /* Helper function to pass to simplify_replace_tree to enable replacing tree's
-    in the hash_map with its corresponding values.  */
- 
- static tree
- find_in_mapping (tree t, void *context)
- {
-   hash_map<tree,tree>* mapping = (hash_map<tree, tree>*) context;
- 
-   tree *value = mapping->get (t);
-   return value ? *value : t;
- }
- 
  /* Update EPILOGUE's loop_vec_info.  EPILOGUE was constructed as a copy of the
     original loop that has now been vectorized.
  
     The inits of the data_references need to be advanced with the number of
     iterations of the main loop.  This has been computed in vect_do_peeling and
!    is stored in parameter ADVANCE.  We first restore the data_references
!    initial offset with the values recored in ORIG_DRS_INIT.
  
     Since the loop_vec_info of this EPILOGUE was constructed for the original
     loop, its stmt_vec_infos all point to the original statements.  These need
!    to be updated to point to their corresponding copies as well as the SSA_NAMES
!    in their PATTERN_DEF_SEQs and RELATED_STMTs.
  
     The data_reference's connections also need to be updated.  Their
     corresponding dr_vec_info need to be reconnected to the EPILOGUE's
!    stmt_vec_infos, their statements need to point to their corresponding copy,
!    if they are gather loads or scatter stores then their reference needs to be
!    updated to point to its corresponding copy.  */
  
  static void
  update_epilogue_loop_vinfo (class loop *epilogue, tree advance)
  {
    loop_vec_info epilogue_vinfo = loop_vec_info_for_loop (epilogue);
-   auto_vec<gimple *> stmt_worklist;
    hash_map<tree,tree> mapping;
    gimple *orig_stmt, *new_stmt;
    gimple_stmt_iterator epilogue_gsi;
--- 10973,10998 ----
  		      get_likely_max_loop_iterations_int (loop));
  }
  
  /* Update EPILOGUE's loop_vec_info.  EPILOGUE was constructed as a copy of the
     original loop that has now been vectorized.
  
     The inits of the data_references need to be advanced with the number of
     iterations of the main loop.  This has been computed in vect_do_peeling and
!    is stored in parameter ADVANCE.
  
     Since the loop_vec_info of this EPILOGUE was constructed for the original
     loop, its stmt_vec_infos all point to the original statements.  These need
!    to be updated to point to their corresponding copies.
  
     The data_reference's connections also need to be updated.  Their
     corresponding dr_vec_info need to be reconnected to the EPILOGUE's
!    stmt_vec_infos, their statements need to point to their corresponding
!    copy.  */
  
  static void
  update_epilogue_loop_vinfo (class loop *epilogue, tree advance)
  {
    loop_vec_info epilogue_vinfo = loop_vec_info_for_loop (epilogue);
    hash_map<tree,tree> mapping;
    gimple *orig_stmt, *new_stmt;
    gimple_stmt_iterator epilogue_gsi;
*************** update_epilogue_loop_vinfo (class loop *
*** 11022,11030 ****
  
    /* The EPILOGUE loop is a copy of the original loop so they share the same
       gimple UIDs.  In this loop we update the loop_vec_info of the EPILOGUE to
!      point to the copied statements.  We also create a mapping of all LHS' in
!      the original loop and all the LHS' in the EPILOGUE and create worklists to
!      update teh STMT_VINFO_PATTERN_DEF_SEQs and STMT_VINFO_RELATED_STMTs.  */
    for (unsigned i = 0; i < epilogue->num_nodes; ++i)
      {
        for (epilogue_phi_gsi = gsi_start_phis (epilogue_bbs[i]);
--- 11007,11013 ----
  
    /* The EPILOGUE loop is a copy of the original loop so they share the same
       gimple UIDs.  In this loop we update the loop_vec_info of the EPILOGUE to
!      point to the copied statements.  */
    for (unsigned i = 0; i < epilogue->num_nodes; ++i)
      {
        for (epilogue_phi_gsi = gsi_start_phis (epilogue_bbs[i]);
*************** update_epilogue_loop_vinfo (class loop *
*** 11036,11049 ****
  	  stmt_vinfo
  	    = epilogue_vinfo->stmt_vec_infos[gimple_uid (new_stmt) - 1];
  
- 	  orig_stmt = STMT_VINFO_STMT (stmt_vinfo);
  	  STMT_VINFO_STMT (stmt_vinfo) = new_stmt;
- 
- 	  mapping.put (gimple_phi_result (orig_stmt),
- 		       gimple_phi_result (new_stmt));
- 	  /* PHI nodes can not have patterns or related statements.  */
- 	  gcc_assert (STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) == NULL
- 		      && STMT_VINFO_RELATED_STMT (stmt_vinfo) == NULL);
  	}
  
        for (epilogue_gsi = gsi_start_bb (epilogue_bbs[i]);
--- 11019,11025 ----
*************** update_epilogue_loop_vinfo (class loop *
*** 11057,11081 ****
  	  stmt_vinfo
  	    = epilogue_vinfo->stmt_vec_infos[gimple_uid (new_stmt) - 1];
  
- 	  orig_stmt = STMT_VINFO_STMT (stmt_vinfo);
  	  STMT_VINFO_STMT (stmt_vinfo) = new_stmt;
  
- 	  if (tree old_lhs = gimple_get_lhs (orig_stmt))
- 	    mapping.put (old_lhs, gimple_get_lhs (new_stmt));
- 
- 	  if (STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo))
- 	    {
- 	      gimple_seq seq = STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo);
- 	      for (gimple_stmt_iterator gsi = gsi_start (seq);
- 		   !gsi_end_p (gsi); gsi_next (&gsi))
- 		stmt_worklist.safe_push (gsi_stmt (gsi));
- 	    }
- 
  	  related_vinfo = STMT_VINFO_RELATED_STMT (stmt_vinfo);
  	  if (related_vinfo != NULL && related_vinfo != stmt_vinfo)
  	    {
  	      gimple *stmt = STMT_VINFO_STMT (related_vinfo);
- 	      stmt_worklist.safe_push (stmt);
  	      /* Set BB such that the assert in
  		'get_initial_defs_for_reduction' is able to determine that
  		the BB of the related stmt is inside this loop.  */
--- 11033,11044 ----
*************** update_epilogue_loop_vinfo (class loop *
*** 11088,11120 ****
  	}
      }
  
-   /* The PATTERN_DEF_SEQs and RELATED_STMTs in the epilogue were constructed
-      using the original main loop and thus need to be updated to refer to the
-      cloned variables used in the epilogue.  */
-   for (unsigned i = 0; i < stmt_worklist.length (); ++i)
-     {
-       gimple *stmt = stmt_worklist[i];
-       tree *new_op;
- 
-       for (unsigned j = 1; j < gimple_num_ops (stmt); ++j)
- 	{
- 	  tree op = gimple_op (stmt, j);
- 	  if ((new_op = mapping.get(op)))
- 	    gimple_set_op (stmt, j, *new_op);
- 	  else
- 	    {
- 	      /* PR92429: The last argument of simplify_replace_tree disables
- 		 folding when replacing arguments.  This is required as
- 		 otherwise you might end up with different statements than the
- 		 ones analyzed in vect_loop_analyze, leading to different
- 		 vectorization.  */
- 	      op = simplify_replace_tree (op, NULL_TREE, NULL_TREE,
- 					  &find_in_mapping, &mapping, false);
- 	      gimple_set_op (stmt, j, op);
- 	    }
- 	}
-     }
- 
    struct data_reference *dr;
    vec<data_reference_p> datarefs = LOOP_VINFO_DATAREFS (epilogue_vinfo);
    FOR_EACH_VEC_ELT (datarefs, i, dr)
--- 11051,11056 ----
*************** update_epilogue_loop_vinfo (class loop *
*** 11122,11146 ****
        orig_stmt = DR_STMT (dr);
        gcc_assert (gimple_uid (orig_stmt) > 0);
        stmt_vinfo = epilogue_vinfo->stmt_vec_infos[gimple_uid (orig_stmt) - 1];
-       /* Data references for gather loads and scatter stores do not use the
- 	 updated offset we set using ADVANCE.  Instead we have to make sure the
- 	 reference in the data references point to the corresponding copy of
- 	 the original in the epilogue.  Make sure to update both
- 	 gather/scatters recognized by dataref analysis.  */
-       auto vstmt_vinfo = vect_stmt_to_vectorize (stmt_vinfo);
-       if (STMT_VINFO_STRIDED_P (vstmt_vinfo)
- 	  || STMT_VINFO_GATHER_SCATTER_P (vstmt_vinfo))
- 	{
- 	  /* ???  As we copy epilogues from the main loop incremental
- 	     replacement from an already replaced DR_REF from vectorizing
- 	     the first epilogue will fail.  */
- 	  DR_REF (dr)
- 	    = simplify_replace_tree (DR_REF (dr), NULL_TREE, NULL_TREE,
- 				     &find_in_mapping, &mapping);
- 	  DR_BASE_ADDRESS (dr)
- 	    = simplify_replace_tree (DR_BASE_ADDRESS (dr), NULL_TREE, NULL_TREE,
- 				     &find_in_mapping, &mapping);
- 	}
        DR_STMT (dr) = STMT_VINFO_STMT (stmt_vinfo);
      }
  
--- 11058,11063 ----
diff -Nrcpad gcc-16-20250817/gcc/tree-vect-slp.cc gcc-16-20250824/gcc/tree-vect-slp.cc
*** gcc-16-20250817/gcc/tree-vect-slp.cc	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/gcc/tree-vect-slp.cc	Sun Aug 24 22:33:16 2025
*************** _slp_tree::_slp_tree ()
*** 126,132 ****
    this->avoid_stlf_fail = false;
    SLP_TREE_VECTYPE (this) = NULL_TREE;
    SLP_TREE_REPRESENTATIVE (this) = NULL;
-   SLP_TREE_MEMORY_ACCESS_TYPE (this) = VMAT_UNINITIALIZED;
    SLP_TREE_REF_COUNT (this) = 1;
    this->failed = NULL;
    this->max_nunits = 1;
--- 126,131 ----
*************** vect_build_slp_instance (vec_info *vinfo
*** 3981,3988 ****
  			 vec<tree> &remain,
  			 unsigned max_tree_size, unsigned *limit,
  			 scalar_stmts_to_slp_tree_map_t *bst_map,
- 			 /* ???  We need stmt_info for group splitting.  */
- 			 stmt_vec_info stmt_info_,
  			 bool force_single_lane)
  {
    /* If there's no budget left bail out early.  */
--- 3980,3985 ----
*************** vect_build_slp_instance (vec_info *vinfo
*** 4018,4024 ****
    bool *matches = XALLOCAVEC (bool, group_size);
    poly_uint64 max_nunits = 1;
    unsigned tree_size = 0;
-   unsigned i;
  
    slp_tree node = NULL;
    if (group_size > 1 && force_single_lane)
--- 4015,4020 ----
*************** vect_build_slp_instance (vec_info *vinfo
*** 4078,4146 ****
  			     "SLP size %u vs. limit %u.\n",
  			     tree_size, max_tree_size);
  
! 	  /* Fixup SLP reduction chains.  */
! 	  if (kind == slp_inst_kind_reduc_chain)
  	    {
! 	      /* If this is a reduction chain with a conversion in front
! 		 amend the SLP tree with a node for that.  */
! 	      gimple *scalar_def
! 		= vect_orig_stmt (scalar_stmts[group_size - 1])->stmt;
! 	      if (STMT_VINFO_DEF_TYPE (scalar_stmts[0]) != vect_reduction_def)
  		{
! 		  /* Get at the conversion stmt - we know it's the single use
! 		     of the last stmt of the reduction chain.  */
! 		  use_operand_p use_p;
! 		  bool r = single_imm_use (gimple_assign_lhs (scalar_def),
! 					   &use_p, &scalar_def);
! 		  gcc_assert (r);
! 		  stmt_vec_info next_info = vinfo->lookup_stmt (scalar_def);
! 		  next_info = vect_stmt_to_vectorize (next_info);
! 		  scalar_stmts = vNULL;
! 		  scalar_stmts.create (group_size);
  		  for (unsigned i = 0; i < group_size; ++i)
! 		    scalar_stmts.quick_push (next_info);
! 		  slp_tree conv = vect_create_new_slp_node (scalar_stmts, 1);
! 		  SLP_TREE_VECTYPE (conv)
! 		    = get_vectype_for_scalar_type (vinfo,
! 						   TREE_TYPE
! 						     (gimple_assign_lhs
! 						       (scalar_def)),
! 						   group_size);
! 		  SLP_TREE_CHILDREN (conv).quick_push (node);
! 		  SLP_INSTANCE_TREE (new_instance) = conv;
! 		  /* We also have to fake this conversion stmt as SLP reduction
! 		     group so we don't have to mess with too much code
! 		     elsewhere.  */
! 		  REDUC_GROUP_FIRST_ELEMENT (next_info) = next_info;
! 		  REDUC_GROUP_NEXT_ELEMENT (next_info) = NULL;
  		}
! 	      /* Fill the backedge child of the PHI SLP node.  The
! 		 general matching code cannot find it because the
! 		 scalar code does not reflect how we vectorize the
! 		 reduction.  */
! 	      use_operand_p use_p;
! 	      imm_use_iterator imm_iter;
! 	      class loop *loop = LOOP_VINFO_LOOP (as_a <loop_vec_info> (vinfo));
! 	      FOR_EACH_IMM_USE_FAST (use_p, imm_iter,
! 				     gimple_get_lhs (scalar_def))
! 		/* There are exactly two non-debug uses, the reduction
! 		   PHI and the loop-closed PHI node.  */
! 		if (!is_gimple_debug (USE_STMT (use_p))
! 		    && gimple_bb (USE_STMT (use_p)) == loop->header)
! 		  {
! 		    auto_vec<stmt_vec_info, 64> phis (group_size);
! 		    stmt_vec_info phi_info
! 		      = vinfo->lookup_stmt (USE_STMT (use_p));
! 		    for (unsigned i = 0; i < group_size; ++i)
! 		      phis.quick_push (phi_info);
! 		    slp_tree *phi_node = bst_map->get (phis);
! 		    unsigned dest_idx = loop_latch_edge (loop)->dest_idx;
! 		    SLP_TREE_CHILDREN (*phi_node)[dest_idx]
! 		      = SLP_INSTANCE_TREE (new_instance);
! 		    SLP_INSTANCE_TREE (new_instance)->refcnt++;
! 		  }
  	    }
  
  	  vinfo->slp_instances.safe_push (new_instance);
  
  	  /* ???  We've replaced the old SLP_INSTANCE_GROUP_SIZE with
--- 4074,4417 ----
  			     "SLP size %u vs. limit %u.\n",
  			     tree_size, max_tree_size);
  
! 	  vinfo->slp_instances.safe_push (new_instance);
! 
! 	  /* ???  We've replaced the old SLP_INSTANCE_GROUP_SIZE with
! 	     the number of scalar stmts in the root in a few places.
! 	     Verify that assumption holds.  */
! 	  gcc_assert (SLP_TREE_SCALAR_STMTS (SLP_INSTANCE_TREE (new_instance))
! 			.length () == group_size);
! 
! 	  if (dump_enabled_p ())
  	    {
! 	      dump_printf_loc (MSG_NOTE, vect_location,
! 			       "Final SLP tree for instance %p:\n",
! 			       (void *) new_instance);
! 	      vect_print_slp_graph (MSG_NOTE, vect_location,
! 				    SLP_INSTANCE_TREE (new_instance));
! 	    }
! 
! 	  return true;
! 	}
!     }
!   /* Failed to SLP.  */
! 
!   /* While we arrive here even with slp_inst_kind_store we should only
!      for group_size == 1.  The code to split store groups is only in
!      vect_analyze_slp_instance now.  */
!   gcc_assert (kind != slp_inst_kind_store || group_size == 1);
! 
!   /* Free the allocated memory.  */
!   scalar_stmts.release ();
! 
!   /* Failed to SLP.  */
!   if (dump_enabled_p ())
!     dump_printf_loc (MSG_NOTE, vect_location, "SLP discovery failed\n");
!   return false;
! }
! 
! /* Analyze an SLP instance starting from a the start of a reduction chain.
!    Call vect_build_slp_tree to build a tree of packed stmts if possible.
!    Return FALSE if SLP build fails.  */
! 
! static bool
! vect_analyze_slp_reduc_chain (vec_info *vinfo,
! 			      scalar_stmts_to_slp_tree_map_t *bst_map,
! 			      stmt_vec_info stmt_info,
! 			      unsigned max_tree_size, unsigned *limit)
! {
!   vec<stmt_vec_info> scalar_stmts;
! 
!   /* Collect the reduction stmts and store them in scalar_stmts.  */
!   scalar_stmts.create (REDUC_GROUP_SIZE (stmt_info));
!   stmt_vec_info next_info = stmt_info;
!   while (next_info)
!     {
!       scalar_stmts.quick_push (vect_stmt_to_vectorize (next_info));
!       next_info = REDUC_GROUP_NEXT_ELEMENT (next_info);
!     }
!   /* Mark the first element of the reduction chain as reduction to properly
!      transform the node.  In the reduction analysis phase only the last
!      element of the chain is marked as reduction.  */
!   STMT_VINFO_DEF_TYPE (stmt_info)
!     = STMT_VINFO_DEF_TYPE (scalar_stmts.last ());
!   STMT_VINFO_REDUC_DEF (vect_orig_stmt (stmt_info))
!     = STMT_VINFO_REDUC_DEF (vect_orig_stmt (scalar_stmts.last ()));
! 
!   /* Build the tree for the SLP instance.  */
!   vec<stmt_vec_info> root_stmt_infos = vNULL;
!   vec<tree> remain = vNULL;
! 
!   /* If there's no budget left bail out early.  */
!   if (*limit == 0)
!     return false;
! 
!   if (dump_enabled_p ())
!     {
!       dump_printf_loc (MSG_NOTE, vect_location,
! 		       "Starting SLP discovery for\n");
!       for (unsigned i = 0; i < scalar_stmts.length (); ++i)
! 	dump_printf_loc (MSG_NOTE, vect_location,
! 			 "  %G", scalar_stmts[i]->stmt);
!     }
! 
!   /* Build the tree for the SLP instance.  */
!   unsigned int group_size = scalar_stmts.length ();
!   bool *matches = XALLOCAVEC (bool, group_size);
!   poly_uint64 max_nunits = 1;
!   unsigned tree_size = 0;
! 
!   slp_tree node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
! 				       &max_nunits, matches, limit,
! 				       &tree_size, bst_map);
!   if (node != NULL)
!     {
!       /* Calculate the unrolling factor based on the smallest type.  */
!       poly_uint64 unrolling_factor
! 	= calculate_unrolling_factor (max_nunits, group_size);
! 
!       if (maybe_ne (unrolling_factor, 1U)
! 	  && is_a <bb_vec_info> (vinfo))
! 	{
! 	  unsigned HOST_WIDE_INT const_max_nunits;
! 	  if (!max_nunits.is_constant (&const_max_nunits)
! 	      || const_max_nunits > group_size)
! 	    {
! 	      if (dump_enabled_p ())
! 		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 				 "Build SLP failed: store group "
! 				 "size not a multiple of the vector size "
! 				 "in basic block SLP\n");
! 	      vect_free_slp_tree (node);
! 	      return false;
! 	    }
! 	  /* Fatal mismatch.  */
! 	  if (dump_enabled_p ())
! 	    dump_printf_loc (MSG_NOTE, vect_location,
! 			     "SLP discovery succeeded but node needs "
! 			     "splitting\n");
! 	  memset (matches, true, group_size);
! 	  matches[group_size / const_max_nunits * const_max_nunits] = false;
! 	  vect_free_slp_tree (node);
! 	}
!       else
! 	{
! 	  /* Create a new SLP instance.  */
! 	  slp_instance new_instance = XNEW (class _slp_instance);
! 	  SLP_INSTANCE_TREE (new_instance) = node;
! 	  SLP_INSTANCE_LOADS (new_instance) = vNULL;
! 	  SLP_INSTANCE_ROOT_STMTS (new_instance) = root_stmt_infos;
! 	  SLP_INSTANCE_REMAIN_DEFS (new_instance) = remain;
! 	  SLP_INSTANCE_KIND (new_instance) = slp_inst_kind_reduc_chain;
! 	  new_instance->reduc_phis = NULL;
! 	  new_instance->cost_vec = vNULL;
! 	  new_instance->subgraph_entries = vNULL;
! 
! 	  if (dump_enabled_p ())
! 	    dump_printf_loc (MSG_NOTE, vect_location,
! 			     "SLP size %u vs. limit %u.\n",
! 			     tree_size, max_tree_size);
! 
! 	  /* Fixup SLP reduction chains.  If this is a reduction chain with
! 	     a conversion in front amend the SLP tree with a node for that.  */
! 	  gimple *scalar_def
! 	    = vect_orig_stmt (scalar_stmts[group_size - 1])->stmt;
! 	  if (STMT_VINFO_DEF_TYPE (scalar_stmts[0]) != vect_reduction_def)
! 	    {
! 	      /* Get at the conversion stmt - we know it's the single use
! 		 of the last stmt of the reduction chain.  */
! 	      use_operand_p use_p;
! 	      bool r = single_imm_use (gimple_assign_lhs (scalar_def),
! 				       &use_p, &scalar_def);
! 	      gcc_assert (r);
! 	      stmt_vec_info next_info = vinfo->lookup_stmt (scalar_def);
! 	      next_info = vect_stmt_to_vectorize (next_info);
! 	      scalar_stmts = vNULL;
! 	      scalar_stmts.create (group_size);
! 	      for (unsigned i = 0; i < group_size; ++i)
! 		scalar_stmts.quick_push (next_info);
! 	      slp_tree conv = vect_create_new_slp_node (scalar_stmts, 1);
! 	      SLP_TREE_VECTYPE (conv)
! 		= get_vectype_for_scalar_type (vinfo,
! 					       TREE_TYPE
! 					       (gimple_assign_lhs (scalar_def)),
! 					       group_size);
! 	      SLP_TREE_CHILDREN (conv).quick_push (node);
! 	      SLP_INSTANCE_TREE (new_instance) = conv;
! 	      /* We also have to fake this conversion stmt as SLP reduction
! 		 group so we don't have to mess with too much code
! 		 elsewhere.  */
! 	      REDUC_GROUP_FIRST_ELEMENT (next_info) = next_info;
! 	      REDUC_GROUP_NEXT_ELEMENT (next_info) = NULL;
! 	    }
! 	  /* Fill the backedge child of the PHI SLP node.  The
! 	     general matching code cannot find it because the
! 	     scalar code does not reflect how we vectorize the
! 	     reduction.  */
! 	  use_operand_p use_p;
! 	  imm_use_iterator imm_iter;
! 	  class loop *loop = LOOP_VINFO_LOOP (as_a <loop_vec_info> (vinfo));
! 	  FOR_EACH_IMM_USE_FAST (use_p, imm_iter,
! 				 gimple_get_lhs (scalar_def))
! 	    /* There are exactly two non-debug uses, the reduction
! 	       PHI and the loop-closed PHI node.  */
! 	      if (!is_gimple_debug (USE_STMT (use_p))
! 		  && gimple_bb (USE_STMT (use_p)) == loop->header)
  		{
! 		  auto_vec<stmt_vec_info, 64> phis (group_size);
! 		  stmt_vec_info phi_info
! 		    = vinfo->lookup_stmt (USE_STMT (use_p));
  		  for (unsigned i = 0; i < group_size; ++i)
! 		    phis.quick_push (phi_info);
! 		  slp_tree *phi_node = bst_map->get (phis);
! 		  unsigned dest_idx = loop_latch_edge (loop)->dest_idx;
! 		  SLP_TREE_CHILDREN (*phi_node)[dest_idx]
! 		    = SLP_INSTANCE_TREE (new_instance);
! 		  SLP_INSTANCE_TREE (new_instance)->refcnt++;
  		}
! 
! 	  vinfo->slp_instances.safe_push (new_instance);
! 
! 	  /* ???  We've replaced the old SLP_INSTANCE_GROUP_SIZE with
! 	     the number of scalar stmts in the root in a few places.
! 	     Verify that assumption holds.  */
! 	  gcc_assert (SLP_TREE_SCALAR_STMTS (SLP_INSTANCE_TREE (new_instance))
! 			.length () == group_size);
! 
! 	  if (dump_enabled_p ())
! 	    {
! 	      dump_printf_loc (MSG_NOTE, vect_location,
! 			       "Final SLP tree for instance %p:\n",
! 			       (void *) new_instance);
! 	      vect_print_slp_graph (MSG_NOTE, vect_location,
! 				    SLP_INSTANCE_TREE (new_instance));
  	    }
  
+ 	  return true;
+ 	}
+     }
+   /* Failed to SLP.  */
+ 
+   /* Free the allocated memory.  */
+   scalar_stmts.release ();
+ 
+   /* Failed to SLP.  */
+   if (dump_enabled_p ())
+     dump_printf_loc (MSG_NOTE, vect_location, "SLP discovery failed\n");
+   return false;
+ }
+ 
+ /* Analyze an SLP instance starting from a group of grouped stores.  Call
+    vect_build_slp_tree to build a tree of packed stmts if possible.
+    Return FALSE if it's impossible to SLP any stmt in the group.  */
+ 
+ static bool
+ vect_analyze_slp_instance (vec_info *vinfo,
+ 			   scalar_stmts_to_slp_tree_map_t *bst_map,
+ 			   stmt_vec_info stmt_info,
+ 			   slp_instance_kind kind,
+ 			   unsigned max_tree_size, unsigned *limit,
+ 			   bool force_single_lane)
+ {
+   vec<stmt_vec_info> scalar_stmts;
+ 
+   if (is_a <bb_vec_info> (vinfo))
+     vect_location = stmt_info->stmt;
+ 
+   gcc_assert (kind == slp_inst_kind_store);
+ 
+   /* Collect the stores and store them in scalar_stmts.  */
+   scalar_stmts.create (DR_GROUP_SIZE (stmt_info));
+   stmt_vec_info next_info = stmt_info;
+   while (next_info)
+     {
+       scalar_stmts.quick_push (vect_stmt_to_vectorize (next_info));
+       next_info = DR_GROUP_NEXT_ELEMENT (next_info);
+     }
+ 
+   vec<stmt_vec_info> root_stmt_infos = vNULL;
+   vec<tree> remain = vNULL;
+ 
+   /* Build the tree for the SLP instance.  */
+ 
+   /* If there's no budget left bail out early.  */
+   if (*limit == 0)
+     return false;
+ 
+   if (dump_enabled_p ())
+     {
+       dump_printf_loc (MSG_NOTE, vect_location,
+ 		       "Starting SLP discovery for\n");
+       for (unsigned i = 0; i < scalar_stmts.length (); ++i)
+ 	dump_printf_loc (MSG_NOTE, vect_location,
+ 			 "  %G", scalar_stmts[i]->stmt);
+     }
+ 
+   /* Build the tree for the SLP instance.  */
+   unsigned int group_size = scalar_stmts.length ();
+   bool *matches = XALLOCAVEC (bool, group_size);
+   poly_uint64 max_nunits = 1;
+   unsigned tree_size = 0;
+   unsigned i;
+ 
+   slp_tree node = NULL;
+   if (group_size > 1 && force_single_lane)
+     {
+       matches[0] = true;
+       matches[1] = false;
+     }
+   else
+     node = vect_build_slp_tree (vinfo, scalar_stmts, group_size,
+ 				&max_nunits, matches, limit,
+ 				&tree_size, bst_map);
+   if (node != NULL)
+     {
+       /* Calculate the unrolling factor based on the smallest type.  */
+       poly_uint64 unrolling_factor
+ 	= calculate_unrolling_factor (max_nunits, group_size);
+ 
+       if (maybe_ne (unrolling_factor, 1U)
+ 	  && is_a <bb_vec_info> (vinfo))
+ 	{
+ 	  unsigned HOST_WIDE_INT const_max_nunits;
+ 	  if (!max_nunits.is_constant (&const_max_nunits)
+ 	      || const_max_nunits > group_size)
+ 	    {
+ 	      if (dump_enabled_p ())
+ 		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 				 "Build SLP failed: store group "
+ 				 "size not a multiple of the vector size "
+ 				 "in basic block SLP\n");
+ 	      vect_free_slp_tree (node);
+ 	      return false;
+ 	    }
+ 	  /* Fatal mismatch.  */
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_NOTE, vect_location,
+ 			     "SLP discovery succeeded but node needs "
+ 			     "splitting\n");
+ 	  memset (matches, true, group_size);
+ 	  matches[group_size / const_max_nunits * const_max_nunits] = false;
+ 	  vect_free_slp_tree (node);
+ 	}
+       else
+ 	{
+ 	  /* Create a new SLP instance.  */
+ 	  slp_instance new_instance = XNEW (class _slp_instance);
+ 	  SLP_INSTANCE_TREE (new_instance) = node;
+ 	  SLP_INSTANCE_LOADS (new_instance) = vNULL;
+ 	  SLP_INSTANCE_ROOT_STMTS (new_instance) = root_stmt_infos;
+ 	  SLP_INSTANCE_REMAIN_DEFS (new_instance) = remain;
+ 	  SLP_INSTANCE_KIND (new_instance) = kind;
+ 	  new_instance->reduc_phis = NULL;
+ 	  new_instance->cost_vec = vNULL;
+ 	  new_instance->subgraph_entries = vNULL;
+ 
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_NOTE, vect_location,
+ 			     "SLP size %u vs. limit %u.\n",
+ 			     tree_size, max_tree_size);
+ 
  	  vinfo->slp_instances.safe_push (new_instance);
  
  	  /* ???  We've replaced the old SLP_INSTANCE_GROUP_SIZE with
*************** vect_build_slp_instance (vec_info *vinfo
*** 4163,4169 ****
      }
    /* Failed to SLP.  */
  
-   stmt_vec_info stmt_info = stmt_info_;
    /* Try to break the group up into pieces.  */
    if (*limit > 0 && kind == slp_inst_kind_store)
      {
--- 4434,4439 ----
*************** vect_build_slp_instance (vec_info *vinfo
*** 4424,4493 ****
    return false;
  }
  
- 
- /* Analyze an SLP instance starting from a group of grouped stores.  Call
-    vect_build_slp_tree to build a tree of packed stmts if possible.
-    Return FALSE if it's impossible to SLP any stmt in the loop.  */
- 
- static bool
- vect_analyze_slp_instance (vec_info *vinfo,
- 			   scalar_stmts_to_slp_tree_map_t *bst_map,
- 			   stmt_vec_info stmt_info,
- 			   slp_instance_kind kind,
- 			   unsigned max_tree_size, unsigned *limit,
- 			   bool force_single_lane)
- {
-   vec<stmt_vec_info> scalar_stmts;
- 
-   if (is_a <bb_vec_info> (vinfo))
-     vect_location = stmt_info->stmt;
- 
-   stmt_vec_info next_info = stmt_info;
-   if (kind == slp_inst_kind_store)
-     {
-       /* Collect the stores and store them in scalar_stmts.  */
-       scalar_stmts.create (DR_GROUP_SIZE (stmt_info));
-       while (next_info)
- 	{
- 	  scalar_stmts.quick_push (vect_stmt_to_vectorize (next_info));
- 	  next_info = DR_GROUP_NEXT_ELEMENT (next_info);
- 	}
-     }
-   else if (kind == slp_inst_kind_reduc_chain)
-     {
-       /* Collect the reduction stmts and store them in scalar_stmts.  */
-       scalar_stmts.create (REDUC_GROUP_SIZE (stmt_info));
-       while (next_info)
- 	{
- 	  scalar_stmts.quick_push (vect_stmt_to_vectorize (next_info));
- 	  next_info = REDUC_GROUP_NEXT_ELEMENT (next_info);
- 	}
-       /* Mark the first element of the reduction chain as reduction to properly
- 	 transform the node.  In the reduction analysis phase only the last
- 	 element of the chain is marked as reduction.  */
-       STMT_VINFO_DEF_TYPE (stmt_info)
- 	= STMT_VINFO_DEF_TYPE (scalar_stmts.last ());
-       STMT_VINFO_REDUC_DEF (vect_orig_stmt (stmt_info))
- 	= STMT_VINFO_REDUC_DEF (vect_orig_stmt (scalar_stmts.last ()));
-     }
-   else
-     gcc_unreachable ();
- 
-   vec<stmt_vec_info> roots = vNULL;
-   vec<tree> remain = vNULL;
-   /* Build the tree for the SLP instance.  */
-   bool res = vect_build_slp_instance (vinfo, kind, scalar_stmts,
- 				      roots, remain,
- 				      max_tree_size, limit, bst_map,
- 				      kind == slp_inst_kind_store
- 				      ? stmt_info : NULL, force_single_lane);
- 
-   /* ???  If this is slp_inst_kind_store and the above succeeded here's
-      where we should do store group splitting.  */
- 
-   return res;
- }
- 
  /* qsort comparator ordering SLP load nodes.  */
  
  static int
--- 4694,4699 ----
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 4931,4938 ****
  	    stmts.quick_push (stmt_info);
  	    if (! vect_build_slp_instance (vinfo, slp_inst_kind_store,
  					   stmts, roots, remain, max_tree_size,
! 					   &limit, bst_map, NULL,
! 					   force_single_lane))
  	      return opt_result::failure_at (vect_location,
  					     "SLP build failed.\n");
  	  }
--- 5137,5143 ----
  	    stmts.quick_push (stmt_info);
  	    if (! vect_build_slp_instance (vinfo, slp_inst_kind_store,
  					   stmts, roots, remain, max_tree_size,
! 					   &limit, bst_map, force_single_lane))
  	      return opt_result::failure_at (vect_location,
  					     "SLP build failed.\n");
  	  }
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 4947,4954 ****
  	  stmts.quick_push (stmt_info);
  	  if (! vect_build_slp_instance (vinfo, slp_inst_kind_store,
  					 stmts, roots, remain, max_tree_size,
! 					 &limit, bst_map, NULL,
! 					 force_single_lane))
  	    return opt_result::failure_at (vect_location,
  					   "SLP build failed.\n");
  	}
--- 5152,5158 ----
  	  stmts.quick_push (stmt_info);
  	  if (! vect_build_slp_instance (vinfo, slp_inst_kind_store,
  					 stmts, roots, remain, max_tree_size,
! 					 &limit, bst_map, force_single_lane))
  	    return opt_result::failure_at (vect_location,
  					   "SLP build failed.\n");
  	}
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 4967,4974 ****
  				       bb_vinfo->roots[i].stmts,
  				       bb_vinfo->roots[i].roots,
  				       bb_vinfo->roots[i].remain,
! 				       max_tree_size, &limit, bst_map, NULL,
! 				       false))
  	    {
  	      bb_vinfo->roots[i].stmts = vNULL;
  	      bb_vinfo->roots[i].roots = vNULL;
--- 5171,5177 ----
  				       bb_vinfo->roots[i].stmts,
  				       bb_vinfo->roots[i].roots,
  				       bb_vinfo->roots[i].remain,
! 				       max_tree_size, &limit, bst_map, false))
  	    {
  	      bb_vinfo->roots[i].stmts = vNULL;
  	      bb_vinfo->roots[i].roots = vNULL;
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 4985,4994 ****
  	    && ! STMT_VINFO_LIVE_P (first_element))
  	  ;
  	else if (force_single_lane
! 		 || ! vect_analyze_slp_instance (vinfo, bst_map, first_element,
! 						 slp_inst_kind_reduc_chain,
! 						 max_tree_size, &limit,
! 						 force_single_lane))
  	  {
  	    if (dump_enabled_p ())
  	      dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
--- 5188,5196 ----
  	    && ! STMT_VINFO_LIVE_P (first_element))
  	  ;
  	else if (force_single_lane
! 		 || ! vect_analyze_slp_reduc_chain (vinfo, bst_map,
! 						    first_element,
! 						    max_tree_size, &limit))
  	  {
  	    if (dump_enabled_p ())
  	      dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5005,5010 ****
--- 5207,5217 ----
  		vinfo = next;
  	      }
  	    STMT_VINFO_DEF_TYPE (first_element) = vect_internal_def;
+ 	    /* ???  When there's a conversion around the reduction
+ 	       chain 'last' isn't the entry of the reduction.  */
+ 	    if (STMT_VINFO_DEF_TYPE (last) != vect_reduction_def)
+ 	      return opt_result::failure_at (vect_location,
+ 					     "SLP build failed.\n");
  	    /* It can be still vectorized as part of an SLP reduction.  */
  	    loop_vinfo->reductions.safe_push (last);
  	  }
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5046,5052 ****
  						     slp_inst_kind_reduc_group,
  						     stmts, roots, remain,
  						     max_tree_size, &limit,
! 						     bst_map, NULL,
  						     force_single_lane))
  			return opt_result::failure_at (vect_location,
  						       "SLP build failed.\n");
--- 5253,5259 ----
  						     slp_inst_kind_reduc_group,
  						     stmts, roots, remain,
  						     max_tree_size, &limit,
! 						     bst_map,
  						     force_single_lane))
  			return opt_result::failure_at (vect_location,
  						       "SLP build failed.\n");
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5062,5068 ****
  					   slp_inst_kind_reduc_group,
  					   scalar_stmts, roots, remain,
  					   max_tree_size, &limit, bst_map,
! 					   NULL, force_single_lane))
  	    {
  	      if (scalar_stmts.length () <= 1)
  		scalar_stmts.release ();
--- 5269,5275 ----
  					   slp_inst_kind_reduc_group,
  					   scalar_stmts, roots, remain,
  					   max_tree_size, &limit, bst_map,
! 					   force_single_lane))
  	    {
  	      if (scalar_stmts.length () <= 1)
  		scalar_stmts.release ();
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5078,5085 ****
  						 slp_inst_kind_reduc_group,
  						 stmts, roots, remain,
  						 max_tree_size, &limit,
! 						 bst_map, NULL,
! 						 force_single_lane))
  		    return opt_result::failure_at (vect_location,
  						   "SLP build failed.\n");
  		}
--- 5285,5291 ----
  						 slp_inst_kind_reduc_group,
  						 stmts, roots, remain,
  						 max_tree_size, &limit,
! 						 bst_map, force_single_lane))
  		    return opt_result::failure_at (vect_location,
  						   "SLP build failed.\n");
  		}
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5114,5121 ****
  					       slp_inst_kind_reduc_group,
  					       stmts, roots, remain,
  					       max_tree_size, &limit,
! 					       bst_map, NULL,
! 					       force_single_lane))
  		  return opt_result::failure_at (vect_location,
  						 "SLP build failed.\n");
  	      }
--- 5320,5326 ----
  					       slp_inst_kind_reduc_group,
  					       stmts, roots, remain,
  					       max_tree_size, &limit,
! 					       bst_map, force_single_lane))
  		  return opt_result::failure_at (vect_location,
  						 "SLP build failed.\n");
  	      }
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5158,5164 ****
  	  if (! vect_build_slp_instance (vinfo, slp_inst_kind_gcond,
  					 stmts, roots, remain,
  					 max_tree_size, &limit,
! 					 bst_map, NULL, force_single_lane))
  	    {
  	      roots.release ();
  	      return opt_result::failure_at (vect_location,
--- 5363,5369 ----
  	  if (! vect_build_slp_instance (vinfo, slp_inst_kind_gcond,
  					 stmts, roots, remain,
  					 max_tree_size, &limit,
! 					 bst_map, force_single_lane))
  	    {
  	      roots.release ();
  	      return opt_result::failure_at (vect_location,
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5184,5191 ****
  		if (! vect_build_slp_instance (vinfo, slp_inst_kind_reduc_group,
  					       stmts, roots, remain,
  					       max_tree_size, &limit,
! 					       bst_map, NULL,
! 					       force_single_lane))
  		  return opt_result::failure_at (vect_location,
  						 "SLP build failed.\n");
  	      }
--- 5389,5395 ----
  		if (! vect_build_slp_instance (vinfo, slp_inst_kind_reduc_group,
  					       stmts, roots, remain,
  					       max_tree_size, &limit,
! 					       bst_map, force_single_lane))
  		  return opt_result::failure_at (vect_location,
  						 "SLP build failed.\n");
  	      }
*************** vect_analyze_slp (vec_info *vinfo, unsig
*** 5203,5210 ****
  		if (! vect_build_slp_instance (vinfo, slp_inst_kind_reduc_group,
  					       stmts, roots, remain,
  					       max_tree_size, &limit,
! 					       bst_map, NULL,
! 					       force_single_lane))
  		  return opt_result::failure_at (vect_location,
  						 "SLP build failed.\n");
  	      }
--- 5407,5413 ----
  		if (! vect_build_slp_instance (vinfo, slp_inst_kind_reduc_group,
  					       stmts, roots, remain,
  					       max_tree_size, &limit,
! 					       bst_map, force_single_lane))
  		  return opt_result::failure_at (vect_location,
  						 "SLP build failed.\n");
  	      }
*************** vect_slp_analyze_operations (vec_info *v
*** 8486,8492 ****
  	      && !vectorizable_bb_reduc_epilogue (instance, &cost_vec))
  	  /* Check we can vectorize the gcond.  */
  	  || (SLP_INSTANCE_KIND (instance) == slp_inst_kind_gcond
! 	      && !vectorizable_early_exit (vinfo,
  					   SLP_INSTANCE_ROOT_STMTS (instance)[0],
  					   NULL,
  					   SLP_INSTANCE_TREE (instance),
--- 8689,8695 ----
  	      && !vectorizable_bb_reduc_epilogue (instance, &cost_vec))
  	  /* Check we can vectorize the gcond.  */
  	  || (SLP_INSTANCE_KIND (instance) == slp_inst_kind_gcond
! 	      && !vectorizable_early_exit (as_a <loop_vec_info> (vinfo),
  					   SLP_INSTANCE_ROOT_STMTS (instance)[0],
  					   NULL,
  					   SLP_INSTANCE_TREE (instance),
*************** vectorize_slp_instance_root_stmt (vec_in
*** 11518,11525 ****
        auto last_stmt = STMT_VINFO_STMT (vect_orig_stmt (root_stmt_info));
        gimple_stmt_iterator rgsi = gsi_for_stmt (last_stmt);
        gcc_assert (!SLP_TREE_VEC_DEFS (node).is_empty ());
!       bool res = vectorizable_early_exit (vinfo, root_stmt_info, &rgsi,
! 					  node, NULL);
        gcc_assert (res);
        return;
      }
--- 11721,11728 ----
        auto last_stmt = STMT_VINFO_STMT (vect_orig_stmt (root_stmt_info));
        gimple_stmt_iterator rgsi = gsi_for_stmt (last_stmt);
        gcc_assert (!SLP_TREE_VEC_DEFS (node).is_empty ());
!       bool res = vectorizable_early_exit (as_a <loop_vec_info> (vinfo),
! 					  root_stmt_info, &rgsi, node, NULL);
        gcc_assert (res);
        return;
      }
diff -Nrcpad gcc-16-20250817/gcc/tree-vect-stmts.cc gcc-16-20250824/gcc/tree-vect-stmts.cc
*** gcc-16-20250817/gcc/tree-vect-stmts.cc	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/gcc/tree-vect-stmts.cc	Sun Aug 24 22:33:16 2025
*************** check_load_store_for_partial_vectors (lo
*** 1428,1439 ****
  				      slp_tree slp_node,
  				      vec_load_store_type vls_type,
  				      int group_size,
! 				      vect_memory_access_type
! 				      memory_access_type,
! 				      const gather_scatter_info *gs_info,
  				      slp_tree mask_node,
  				      vec<int> *elsvals = nullptr)
  {
    /* Invariant loads need no special support.  */
    if (memory_access_type == VMAT_INVARIANT)
      return;
--- 1428,1439 ----
  				      slp_tree slp_node,
  				      vec_load_store_type vls_type,
  				      int group_size,
! 				      vect_load_store_data *ls,
  				      slp_tree mask_node,
  				      vec<int> *elsvals = nullptr)
  {
+   vect_memory_access_type memory_access_type = ls->memory_access_type;
+ 
    /* Invariant loads need no special support.  */
    if (memory_access_type == VMAT_INVARIANT)
      return;
*************** check_load_store_for_partial_vectors (lo
*** 1492,1507 ****
        internal_fn len_ifn = (is_load
  			     ? IFN_MASK_LEN_GATHER_LOAD
  			     : IFN_MASK_LEN_SCATTER_STORE);
        if (internal_gather_scatter_fn_supported_p (len_ifn, vectype,
! 						  gs_info->memory_type,
! 						  gs_info->offset_vectype,
! 						  gs_info->scale,
  						  elsvals))
  	vect_record_loop_len (loop_vinfo, lens, nvectors, vectype, 1);
        else if (internal_gather_scatter_fn_supported_p (ifn, vectype,
! 						       gs_info->memory_type,
! 						       gs_info->offset_vectype,
! 						       gs_info->scale,
  						       elsvals)
  	       || memory_access_type == VMAT_GATHER_SCATTER_LEGACY)
  	vect_record_loop_mask (loop_vinfo, masks, nvectors, vectype,
--- 1492,1511 ----
        internal_fn len_ifn = (is_load
  			     ? IFN_MASK_LEN_GATHER_LOAD
  			     : IFN_MASK_LEN_SCATTER_STORE);
+       stmt_vec_info repr = SLP_TREE_REPRESENTATIVE (slp_node);
+       tree off_vectype = (STMT_VINFO_GATHER_SCATTER_P (repr)
+ 			  ? SLP_TREE_VECTYPE (SLP_TREE_CHILDREN (slp_node)[0])
+ 			  : ls->strided_offset_vectype);
+       tree memory_type = TREE_TYPE (DR_REF (STMT_VINFO_DR_INFO (repr)->dr));
+       int scale = SLP_TREE_GS_SCALE (slp_node);
        if (internal_gather_scatter_fn_supported_p (len_ifn, vectype,
! 						  memory_type,
! 						  off_vectype, scale,
  						  elsvals))
  	vect_record_loop_len (loop_vinfo, lens, nvectors, vectype, 1);
        else if (internal_gather_scatter_fn_supported_p (ifn, vectype,
! 						       memory_type,
! 						       off_vectype, scale,
  						       elsvals)
  	       || memory_access_type == VMAT_GATHER_SCATTER_LEGACY)
  	vect_record_loop_mask (loop_vinfo, masks, nvectors, vectype,
*************** static bool
*** 1960,1973 ****
  get_load_store_type (vec_info  *vinfo, stmt_vec_info stmt_info,
  		     tree vectype, slp_tree slp_node,
  		     bool masked_p, vec_load_store_type vls_type,
! 		     vect_memory_access_type *memory_access_type,
! 		     poly_int64 *poffset,
! 		     dr_alignment_support *alignment_support_scheme,
! 		     int *misalignment,
! 		     gather_scatter_info *gs_info,
! 		     internal_fn *lanes_ifn,
! 		     vec<int> *elsvals = nullptr)
  {
    loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (vinfo);
    poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
    class loop *loop = loop_vinfo ? LOOP_VINFO_LOOP (loop_vinfo) : NULL;
--- 1964,1978 ----
  get_load_store_type (vec_info  *vinfo, stmt_vec_info stmt_info,
  		     tree vectype, slp_tree slp_node,
  		     bool masked_p, vec_load_store_type vls_type,
! 		     vect_load_store_data *ls)
  {
+   vect_memory_access_type *memory_access_type = &ls->memory_access_type;
+   poly_int64 *poffset = &ls->poffset;
+   dr_alignment_support *alignment_support_scheme
+     = &ls->alignment_support_scheme;
+   int *misalignment = &ls->misalignment;
+   internal_fn *lanes_ifn = &ls->lanes_ifn;
+   vec<int> *elsvals = &ls->elsvals;
    loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (vinfo);
    poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
    class loop *loop = loop_vinfo ? LOOP_VINFO_LOOP (loop_vinfo) : NULL;
*************** get_load_store_type (vec_info  *vinfo, s
*** 2025,2058 ****
      {
        slp_tree offset_node = SLP_TREE_CHILDREN (slp_node)[0];
        tree offset_vectype = SLP_TREE_VECTYPE (offset_node);
!       memset (gs_info, 0, sizeof (gather_scatter_info));
!       gs_info->offset_vectype = offset_vectype;
!       gs_info->scale = SLP_TREE_GS_SCALE (slp_node);
!       gs_info->base = SLP_TREE_GS_BASE (slp_node);
!       gs_info->memory_type = TREE_TYPE (DR_REF (first_dr_info->dr));
!       gs_info->decl = NULL_TREE;
!       gs_info->ifn = IFN_LAST;
        tree tem;
        if (vect_gather_scatter_fn_p (loop_vinfo, vls_type == VLS_LOAD,
  				    masked_p, vectype,
! 				    gs_info->memory_type,
! 				    offset_vectype, gs_info->scale,
! 				    &gs_info->ifn, &tem,
  				    elsvals))
  	*memory_access_type = VMAT_GATHER_SCATTER_IFN;
        else if (vls_type == VLS_LOAD
  	       ? (targetm.vectorize.builtin_gather
! 		  && (gs_info->decl
  			= targetm.vectorize.builtin_gather (vectype,
  							    TREE_TYPE
  							      (offset_vectype),
! 							    gs_info->scale)))
  	       : (targetm.vectorize.builtin_scatter
! 		  && (gs_info->decl
  			= targetm.vectorize.builtin_scatter (vectype,
  							     TREE_TYPE
  							       (offset_vectype),
! 							     gs_info->scale))))
  	*memory_access_type = VMAT_GATHER_SCATTER_LEGACY;
        else
  	{
--- 2030,2058 ----
      {
        slp_tree offset_node = SLP_TREE_CHILDREN (slp_node)[0];
        tree offset_vectype = SLP_TREE_VECTYPE (offset_node);
!       int scale = SLP_TREE_GS_SCALE (slp_node);
!       tree memory_type = TREE_TYPE (DR_REF (first_dr_info->dr));
        tree tem;
        if (vect_gather_scatter_fn_p (loop_vinfo, vls_type == VLS_LOAD,
  				    masked_p, vectype,
! 				    memory_type,
! 				    offset_vectype, scale,
! 				    &ls->gs.ifn, &tem,
  				    elsvals))
  	*memory_access_type = VMAT_GATHER_SCATTER_IFN;
        else if (vls_type == VLS_LOAD
  	       ? (targetm.vectorize.builtin_gather
! 		  && (ls->gs.decl
  			= targetm.vectorize.builtin_gather (vectype,
  							    TREE_TYPE
  							      (offset_vectype),
! 							    scale)))
  	       : (targetm.vectorize.builtin_scatter
! 		  && (ls->gs.decl
  			= targetm.vectorize.builtin_scatter (vectype,
  							     TREE_TYPE
  							       (offset_vectype),
! 							     scale))))
  	*memory_access_type = VMAT_GATHER_SCATTER_LEGACY;
        else
  	{
*************** get_load_store_type (vec_info  *vinfo, s
*** 2317,2327 ****
         || *memory_access_type == VMAT_STRIDED_SLP)
        && !STMT_VINFO_GATHER_SCATTER_P (stmt_info)
        && SLP_TREE_LANES (slp_node) == 1
!       && loop_vinfo
!       && vect_use_strided_gather_scatters_p (stmt_info, vectype, loop_vinfo,
! 					     masked_p, gs_info, elsvals,
! 					     group_size, single_element_p))
!     *memory_access_type = VMAT_GATHER_SCATTER_IFN;
  
    if (*memory_access_type == VMAT_CONTIGUOUS_DOWN
        || *memory_access_type == VMAT_CONTIGUOUS_REVERSE)
--- 2317,2336 ----
         || *memory_access_type == VMAT_STRIDED_SLP)
        && !STMT_VINFO_GATHER_SCATTER_P (stmt_info)
        && SLP_TREE_LANES (slp_node) == 1
!       && loop_vinfo)
!     {
!       gather_scatter_info gs_info;
!       if (vect_use_strided_gather_scatters_p (stmt_info, vectype, loop_vinfo,
! 					      masked_p, &gs_info, elsvals,
! 					      group_size, single_element_p))
! 	{
! 	  SLP_TREE_GS_SCALE (slp_node) = gs_info.scale;
! 	  SLP_TREE_GS_BASE (slp_node) = error_mark_node;
! 	  ls->gs.ifn = gs_info.ifn;
! 	  ls->strided_offset_vectype = gs_info.offset_vectype;
! 	  *memory_access_type = VMAT_GATHER_SCATTER_IFN;
! 	}
!     }
  
    if (*memory_access_type == VMAT_CONTIGUOUS_DOWN
        || *memory_access_type == VMAT_CONTIGUOUS_REVERSE)
*************** vect_get_mask_load_else (int elsval, tre
*** 2715,2727 ****
  
  static gimple *
  vect_build_one_gather_load_call (vec_info *vinfo, stmt_vec_info stmt_info,
! 				 tree vectype,
! 				 gimple_stmt_iterator *gsi,
! 				 const gather_scatter_info *gs_info,
  				 tree ptr, tree offset, tree mask)
  {
!   tree arglist = TYPE_ARG_TYPES (TREE_TYPE (gs_info->decl));
!   tree rettype = TREE_TYPE (TREE_TYPE (gs_info->decl));
    tree srctype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
    /* ptrtype */ arglist = TREE_CHAIN (arglist);
    tree idxtype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
--- 2724,2735 ----
  
  static gimple *
  vect_build_one_gather_load_call (vec_info *vinfo, stmt_vec_info stmt_info,
! 				 slp_tree slp_node, tree vectype,
! 				 gimple_stmt_iterator *gsi, tree decl,
  				 tree ptr, tree offset, tree mask)
  {
!   tree arglist = TYPE_ARG_TYPES (TREE_TYPE (decl));
!   tree rettype = TREE_TYPE (TREE_TYPE (decl));
    tree srctype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
    /* ptrtype */ arglist = TREE_CHAIN (arglist);
    tree idxtype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
*************** vect_build_one_gather_load_call (vec_inf
*** 2787,2794 ****
        mask_op = vect_build_all_ones_mask (vinfo, stmt_info, masktype);
      }
  
!   tree scale = build_int_cst (scaletype, gs_info->scale);
!   gimple *new_stmt = gimple_build_call (gs_info->decl, 5, src_op, ptr, op,
  					mask_op, scale);
  
    if (!useless_type_conversion_p (vectype, rettype))
--- 2795,2802 ----
        mask_op = vect_build_all_ones_mask (vinfo, stmt_info, masktype);
      }
  
!   tree scale = build_int_cst (scaletype, SLP_TREE_GS_SCALE (slp_node));
!   gimple *new_stmt = gimple_build_call (decl, 5, src_op, ptr, op,
  					mask_op, scale);
  
    if (!useless_type_conversion_p (vectype, rettype))
*************** vect_build_one_gather_load_call (vec_inf
*** 2814,2825 ****
  
  static gimple *
  vect_build_one_scatter_store_call (vec_info *vinfo, stmt_vec_info stmt_info,
  				   gimple_stmt_iterator *gsi,
! 				   const gather_scatter_info *gs_info,
  				   tree ptr, tree offset, tree oprnd, tree mask)
  {
!   tree rettype = TREE_TYPE (TREE_TYPE (gs_info->decl));
!   tree arglist = TYPE_ARG_TYPES (TREE_TYPE (gs_info->decl));
    /* tree ptrtype = TREE_VALUE (arglist); */ arglist = TREE_CHAIN (arglist);
    tree masktype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
    tree idxtype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
--- 2822,2834 ----
  
  static gimple *
  vect_build_one_scatter_store_call (vec_info *vinfo, stmt_vec_info stmt_info,
+ 				   slp_tree slp_node,
  				   gimple_stmt_iterator *gsi,
! 				   tree decl,
  				   tree ptr, tree offset, tree oprnd, tree mask)
  {
!   tree rettype = TREE_TYPE (TREE_TYPE (decl));
!   tree arglist = TYPE_ARG_TYPES (TREE_TYPE (decl));
    /* tree ptrtype = TREE_VALUE (arglist); */ arglist = TREE_CHAIN (arglist);
    tree masktype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
    tree idxtype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist);
*************** vect_build_one_scatter_store_call (vec_i
*** 2883,2891 ****
        op = var;
      }
  
!   tree scale = build_int_cst (scaletype, gs_info->scale);
    gcall *new_stmt
!     = gimple_build_call (gs_info->decl, 5, ptr, mask_arg, op, src, scale);
    return new_stmt;
  }
  
--- 2892,2900 ----
        op = var;
      }
  
!   tree scale = build_int_cst (scaletype, SLP_TREE_GS_SCALE (slp_node));
    gcall *new_stmt
!     = gimple_build_call (decl, 5, ptr, mask_arg, op, src, scale);
    return new_stmt;
  }
  
*************** vect_build_one_scatter_store_call (vec_i
*** 2897,2907 ****
  
  static void
  vect_get_gather_scatter_ops (class loop *loop, slp_tree slp_node,
- 			     const gather_scatter_info *gs_info,
  			     tree *dataref_ptr, vec<tree> *vec_offset)
  {
    gimple_seq stmts = NULL;
!   *dataref_ptr = force_gimple_operand (gs_info->base, &stmts, true, NULL_TREE);
    if (stmts != NULL)
      {
        basic_block new_bb;
--- 2906,2916 ----
  
  static void
  vect_get_gather_scatter_ops (class loop *loop, slp_tree slp_node,
  			     tree *dataref_ptr, vec<tree> *vec_offset)
  {
    gimple_seq stmts = NULL;
!   *dataref_ptr = force_gimple_operand (SLP_TREE_GS_BASE (slp_node),
! 				       &stmts, true, NULL_TREE);
    if (stmts != NULL)
      {
        basic_block new_bb;
*************** vect_get_gather_scatter_ops (class loop
*** 2922,2931 ****
     I * DR_STEP / SCALE.  */
  
  static void
! vect_get_strided_load_store_ops (stmt_vec_info stmt_info, tree vectype,
  				 loop_vec_info loop_vinfo,
  				 gimple_stmt_iterator *gsi,
- 				 const gather_scatter_info *gs_info,
  				 tree *dataref_bump, tree *vec_offset,
  				 vec_loop_lens *loop_lens)
  {
--- 2931,2940 ----
     I * DR_STEP / SCALE.  */
  
  static void
! vect_get_strided_load_store_ops (stmt_vec_info stmt_info, slp_tree node,
! 				 tree vectype, tree offset_vectype,
  				 loop_vec_info loop_vinfo,
  				 gimple_stmt_iterator *gsi,
  				 tree *dataref_bump, tree *vec_offset,
  				 vec_loop_lens *loop_lens)
  {
*************** vect_get_strided_load_store_ops (stmt_ve
*** 2966,2980 ****
  
    /* The offset given in GS_INFO can have pointer type, so use the element
       type of the vector instead.  */
!   tree offset_type = TREE_TYPE (gs_info->offset_vectype);
  
    /* Calculate X = DR_STEP / SCALE and convert it to the appropriate type.  */
    tree step = size_binop (EXACT_DIV_EXPR, unshare_expr (DR_STEP (dr)),
! 			  ssize_int (gs_info->scale));
    step = fold_convert (offset_type, step);
  
    /* Create {0, X, X*2, X*3, ...}.  */
!   tree offset = fold_build2 (VEC_SERIES_EXPR, gs_info->offset_vectype,
  			     build_zero_cst (offset_type), step);
    *vec_offset = cse_and_gimplify_to_preheader (loop_vinfo, offset);
  }
--- 2975,2989 ----
  
    /* The offset given in GS_INFO can have pointer type, so use the element
       type of the vector instead.  */
!   tree offset_type = TREE_TYPE (offset_vectype);
  
    /* Calculate X = DR_STEP / SCALE and convert it to the appropriate type.  */
    tree step = size_binop (EXACT_DIV_EXPR, unshare_expr (DR_STEP (dr)),
! 			  ssize_int (SLP_TREE_GS_SCALE (node)));
    step = fold_convert (offset_type, step);
  
    /* Create {0, X, X*2, X*3, ...}.  */
!   tree offset = fold_build2 (VEC_SERIES_EXPR, offset_vectype,
  			     build_zero_cst (offset_type), step);
    *vec_offset = cse_and_gimplify_to_preheader (loop_vinfo, offset);
  }
*************** vectorizable_bswap (vec_info *vinfo,
*** 3107,3116 ****
        SLP_TREE_TYPE (slp_node) = call_vec_info_type;
        DUMP_VECT_SCOPE ("vectorizable_bswap");
        record_stmt_cost (cost_vec,
! 			1, vector_stmt, stmt_info, 0, vect_prologue);
        record_stmt_cost (cost_vec,
  			SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node),
! 			vec_perm, stmt_info, 0, vect_body);
        return true;
      }
  
--- 3116,3125 ----
        SLP_TREE_TYPE (slp_node) = call_vec_info_type;
        DUMP_VECT_SCOPE ("vectorizable_bswap");
        record_stmt_cost (cost_vec,
! 			1, vector_stmt, slp_node, 0, vect_prologue);
        record_stmt_cost (cost_vec,
  			SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node),
! 			vec_perm, slp_node, 0, vect_body);
        return true;
      }
  
*************** vectorizable_operation (vec_info *vinfo,
*** 6553,6558 ****
--- 6562,6581 ----
        vec_dest = vect_create_destination_var (scalar_dest, vectype);
        vec_cvt_dest = vect_create_destination_var (scalar_dest, vectype_out);
      }
+   /* For reduction operations with undefined overflow behavior make sure to
+      pun them to unsigned since we change the order of evaluation.
+      ???  Avoid for in-order reductions?  */
+   else if (arith_code_with_undefined_signed_overflow (orig_code)
+ 	   && ANY_INTEGRAL_TYPE_P (vectype)
+ 	   && TYPE_OVERFLOW_UNDEFINED (vectype)
+ 	   && STMT_VINFO_REDUC_IDX (stmt_info) != -1)
+     {
+       gcc_assert (orig_code == PLUS_EXPR || orig_code == MINUS_EXPR
+ 		  || orig_code == MULT_EXPR || orig_code == POINTER_PLUS_EXPR);
+       vec_cvt_dest = vect_create_destination_var (scalar_dest, vectype_out);
+       vectype = unsigned_type_for (vectype);
+       vec_dest = vect_create_destination_var (scalar_dest, vectype);
+     }
    /* Handle def.  */
    else
      vec_dest = vect_create_destination_var (scalar_dest, vectype_out);
*************** vectorizable_operation (vec_info *vinfo,
*** 6566,6571 ****
--- 6589,6634 ----
        vop1 = ((op_type == binary_op || op_type == ternary_op)
  	      ? vec_oprnds1[i] : NULL_TREE);
        vop2 = ((op_type == ternary_op) ? vec_oprnds2[i] : NULL_TREE);
+ 
+       if (vec_cvt_dest
+ 	  && !useless_type_conversion_p (vectype, TREE_TYPE (vop0)))
+ 	{
+ 	  new_temp = build1 (VIEW_CONVERT_EXPR, vectype, vop0);
+ 	  new_stmt = gimple_build_assign (vec_dest, VIEW_CONVERT_EXPR,
+ 					  new_temp);
+ 	  new_temp = make_ssa_name (vec_dest, new_stmt);
+ 	  gimple_assign_set_lhs (new_stmt, new_temp);
+ 	  vect_finish_stmt_generation (vinfo, stmt_info,
+ 				       new_stmt, gsi);
+ 	  vop0 = new_temp;
+ 	}
+       if (vop1
+ 	  && vec_cvt_dest
+ 	  && !useless_type_conversion_p (vectype, TREE_TYPE (vop1)))
+ 	{
+ 	  new_temp = build1 (VIEW_CONVERT_EXPR, vectype, vop1);
+ 	  new_stmt = gimple_build_assign (vec_dest, VIEW_CONVERT_EXPR,
+ 					  new_temp);
+ 	  new_temp = make_ssa_name (vec_dest, new_stmt);
+ 	  gimple_assign_set_lhs (new_stmt, new_temp);
+ 	  vect_finish_stmt_generation (vinfo, stmt_info,
+ 				       new_stmt, gsi);
+ 	  vop1 = new_temp;
+ 	}
+       if (vop2
+ 	  && vec_cvt_dest
+ 	  && !useless_type_conversion_p (vectype, TREE_TYPE (vop2)))
+ 	{
+ 	  new_temp = build1 (VIEW_CONVERT_EXPR, vectype, vop2);
+ 	  new_stmt = gimple_build_assign (vec_dest, VIEW_CONVERT_EXPR,
+ 					  new_temp);
+ 	  new_temp = make_ssa_name (vec_dest, new_stmt);
+ 	  gimple_assign_set_lhs (new_stmt, new_temp);
+ 	  vect_finish_stmt_generation (vinfo, stmt_info,
+ 				       new_stmt, gsi);
+ 	  vop2 = new_temp;
+ 	}
+ 
        if (using_emulated_vectors_p)
  	{
  	  /* Lower the operation.  This follows vector lowering.  */
*************** vectorizable_store (vec_info *vinfo,
*** 7729,7735 ****
    unsigned int vec_num;
    bb_vec_info bb_vinfo = dyn_cast <bb_vec_info> (vinfo);
    tree aggr_type;
-   gather_scatter_info gs_info;
    poly_uint64 vf;
    vec_load_store_type vls_type;
    tree ref_type;
--- 7792,7797 ----
*************** vectorizable_store (vec_info *vinfo,
*** 7814,7829 ****
    if (!STMT_VINFO_DATA_REF (stmt_info))
      return false;
  
!   vect_memory_access_type memory_access_type;
!   enum dr_alignment_support alignment_support_scheme;
!   int misalignment;
!   poly_int64 poffset;
!   internal_fn lanes_ifn;
!   if (!get_load_store_type (vinfo, stmt_info, vectype, slp_node, mask_node,
! 			    vls_type, &memory_access_type, &poffset,
! 			    &alignment_support_scheme, &misalignment, &gs_info,
! 			    &lanes_ifn))
      return false;
  
    if (slp_node->ldst_lanes
        && memory_access_type != VMAT_LOAD_STORE_LANES)
--- 7876,7895 ----
    if (!STMT_VINFO_DATA_REF (stmt_info))
      return false;
  
!   vect_load_store_data _ls_data;
!   vect_load_store_data &ls = slp_node->get_data (_ls_data);
!   if (cost_vec
!       && !get_load_store_type (vinfo, stmt_info, vectype, slp_node, mask_node,
! 			       vls_type, &_ls_data))
      return false;
+   /* Temporary aliases to analysis data, should not be modified through
+      these.  */
+   const vect_memory_access_type memory_access_type = ls.memory_access_type;
+   const dr_alignment_support alignment_support_scheme
+     = ls.alignment_support_scheme;
+   const int misalignment = ls.misalignment;
+   const poly_int64 poffset = ls.poffset;
+   const internal_fn lanes_ifn = ls.lanes_ifn;
  
    if (slp_node->ldst_lanes
        && memory_access_type != VMAT_LOAD_STORE_LANES)
*************** vectorizable_store (vec_info *vinfo,
*** 7895,7907 ****
    bool costing_p = cost_vec;
    if (costing_p) /* transformation not required.  */
      {
-       SLP_TREE_MEMORY_ACCESS_TYPE (slp_node) = memory_access_type;
- 
        if (loop_vinfo
  	  && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo))
  	check_load_store_for_partial_vectors (loop_vinfo, vectype, slp_node,
! 					      vls_type, group_size,
! 					      memory_access_type, &gs_info,
  					      mask_node);
  
        if (!vect_maybe_update_slp_op_vectype (op_node, vectype)
--- 7961,7970 ----
    bool costing_p = cost_vec;
    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_type, group_size, &ls,
  					      mask_node);
  
        if (!vect_maybe_update_slp_op_vectype (op_node, vectype)
*************** vectorizable_store (vec_info *vinfo,
*** 7924,7931 ****
  			 "Vectorizing an unaligned access.\n");
  
        SLP_TREE_TYPE (slp_node) = store_vec_info_type;
      }
-   gcc_assert (memory_access_type == SLP_TREE_MEMORY_ACCESS_TYPE (slp_node));
  
    /* Transform.  */
  
--- 7987,7994 ----
  			 "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.  */
  
*************** vectorizable_store (vec_info *vinfo,
*** 7940,7946 ****
  	  unsigned int inside_cost = 0, prologue_cost = 0;
  	  if (vls_type == VLS_STORE_INVARIANT)
  	    prologue_cost += record_stmt_cost (cost_vec, 1, scalar_to_vec,
! 					       stmt_info, 0, vect_prologue);
  	  vect_get_store_cost (vinfo, stmt_info, slp_node, 1,
  			       alignment_support_scheme, misalignment,
  			       &inside_cost, cost_vec);
--- 8003,8009 ----
  	  unsigned int inside_cost = 0, prologue_cost = 0;
  	  if (vls_type == VLS_STORE_INVARIANT)
  	    prologue_cost += record_stmt_cost (cost_vec, 1, scalar_to_vec,
! 					       slp_node, 0, vect_prologue);
  	  vect_get_store_cost (vinfo, stmt_info, slp_node, 1,
  			       alignment_support_scheme, misalignment,
  			       &inside_cost, cost_vec);
*************** vectorizable_store (vec_info *vinfo,
*** 8020,8025 ****
--- 8083,8096 ----
  	     ...
           */
  
+       /* ???  Modify local copies of alignment_support_scheme and
+ 	 misalignment, but this part of analysis should be done
+ 	 earlier and remembered, likewise the chosen load mode.  */
+       const dr_alignment_support tem = alignment_support_scheme;
+       dr_alignment_support alignment_support_scheme = tem;
+       const int tem2 = misalignment;
+       int misalignment = tem2;
+ 
        unsigned nstores = const_nunits;
        unsigned lnel = 1;
        tree ltype = elem_type;
*************** vectorizable_store (vec_info *vinfo,
*** 8289,8296 ****
      {
        aggr_type = elem_type;
        if (!costing_p)
! 	vect_get_strided_load_store_ops (stmt_info, vectype, loop_vinfo,
! 					 gsi, &gs_info,
  					 &bump, &vec_offset, loop_lens);
      }
    else
--- 8360,8368 ----
      {
        aggr_type = elem_type;
        if (!costing_p)
! 	vect_get_strided_load_store_ops (stmt_info, slp_node, vectype,
! 					 ls.strided_offset_vectype,
! 					 loop_vinfo, gsi,
  					 &bump, &vec_offset, loop_lens);
      }
    else
*************** vectorizable_store (vec_info *vinfo,
*** 8497,8503 ****
  		    vect_get_slp_defs (mask_node, &vec_masks);
  
  		  if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
! 		    vect_get_gather_scatter_ops (loop, slp_node, &gs_info,
  						 &dataref_ptr, &vec_offsets);
  		  else
  		    dataref_ptr
--- 8569,8575 ----
  		    vect_get_slp_defs (mask_node, &vec_masks);
  
  		  if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
! 		    vect_get_gather_scatter_ops (loop, slp_node,
  						 &dataref_ptr, &vec_offsets);
  		  else
  		    dataref_ptr
*************** vectorizable_store (vec_info *vinfo,
*** 8555,8563 ****
  	      if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
  		vec_offset = vec_offsets[j];
  
! 	      tree scale = size_int (gs_info.scale);
  
! 	      if (gs_info.ifn == IFN_MASK_LEN_SCATTER_STORE)
  		{
  		  if (loop_lens)
  		    final_len = vect_get_loop_len (loop_vinfo, gsi,
--- 8627,8635 ----
  	      if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
  		vec_offset = vec_offsets[j];
  
! 	      tree scale = size_int (SLP_TREE_GS_SCALE (slp_node));
  
! 	      if (ls.gs.ifn == IFN_MASK_LEN_SCATTER_STORE)
  		{
  		  if (loop_lens)
  		    final_len = vect_get_loop_len (loop_vinfo, gsi,
*************** vectorizable_store (vec_info *vinfo,
*** 8627,8639 ****
  		  continue;
  		}
  
  		poly_uint64 offset_nunits
! 		  = TYPE_VECTOR_SUBPARTS (gs_info.offset_vectype);
  		if (known_eq (nunits, offset_nunits))
  		  {
  		    new_stmt = vect_build_one_scatter_store_call
! 				   (vinfo, stmt_info, gsi, &gs_info,
! 				    dataref_ptr, vec_offsets[j],
  				    vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
  						 new_stmt, gsi);
--- 8699,8712 ----
  		  continue;
  		}
  
+ 		tree offset_vectype = TREE_TYPE (vec_offsets[0]);
  		poly_uint64 offset_nunits
! 		  = TYPE_VECTOR_SUBPARTS (offset_vectype);
  		if (known_eq (nunits, offset_nunits))
  		  {
  		    new_stmt = vect_build_one_scatter_store_call
! 				   (vinfo, stmt_info, slp_node, gsi,
! 				    ls.gs.decl, dataref_ptr, vec_offsets[j],
  				    vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
  						 new_stmt, gsi);
*************** vectorizable_store (vec_info *vinfo,
*** 8644,8650 ****
  		       lanes but the builtins will store full vectype
  		       data from the lower lanes.  */
  		    new_stmt = vect_build_one_scatter_store_call
! 				   (vinfo, stmt_info, gsi, &gs_info,
  				    dataref_ptr, vec_offsets[2 * j],
  				    vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
--- 8717,8723 ----
  		       lanes but the builtins will store full vectype
  		       data from the lower lanes.  */
  		    new_stmt = vect_build_one_scatter_store_call
! 				   (vinfo, stmt_info, slp_node, gsi, ls.gs.decl,
  				    dataref_ptr, vec_offsets[2 * j],
  				    vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
*************** vectorizable_store (vec_info *vinfo,
*** 8670,8683 ****
  							VEC_UNPACK_HI_EXPR,
  							final_mask);
  			final_mask = make_ssa_name
! 				      (truth_type_for (gs_info.offset_vectype));
  			gimple_set_lhs (new_stmt, final_mask);
  			vect_finish_stmt_generation (vinfo, stmt_info,
  						     new_stmt, gsi);
  			}
  
  		    new_stmt = vect_build_one_scatter_store_call
! 				  (vinfo, stmt_info, gsi, &gs_info,
  				   dataref_ptr, vec_offsets[2 * j + 1],
  				   vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
--- 8743,8756 ----
  							VEC_UNPACK_HI_EXPR,
  							final_mask);
  			final_mask = make_ssa_name
! 				      (truth_type_for (offset_vectype));
  			gimple_set_lhs (new_stmt, final_mask);
  			vect_finish_stmt_generation (vinfo, stmt_info,
  						     new_stmt, gsi);
  			}
  
  		    new_stmt = vect_build_one_scatter_store_call
! 				  (vinfo, stmt_info, slp_node, gsi, ls.gs.decl,
  				   dataref_ptr, vec_offsets[2 * j + 1],
  				   vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
*************** vectorizable_store (vec_info *vinfo,
*** 8710,8717 ****
  		      }
  
  		    new_stmt = vect_build_one_scatter_store_call
! 				   (vinfo, stmt_info, gsi, &gs_info,
! 				    dataref_ptr, vec_offset,
  				    vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
  						 new_stmt, gsi);
--- 8783,8790 ----
  		      }
  
  		    new_stmt = vect_build_one_scatter_store_call
! 				   (vinfo, stmt_info, slp_node, gsi,
! 				    ls.gs.decl, dataref_ptr, vec_offset,
  				    vec_oprnd, final_mask);
  		    vect_finish_stmt_generation (vinfo, stmt_info,
  						 new_stmt, gsi);
*************** vectorizable_store (vec_info *vinfo,
*** 8742,8750 ****
  		  continue;
  		}
  
  	      unsigned HOST_WIDE_INT const_nunits = nunits.to_constant ();
  	      unsigned HOST_WIDE_INT const_offset_nunits
! 		= TYPE_VECTOR_SUBPARTS (gs_info.offset_vectype).to_constant ();
  	      vec<constructor_elt, va_gc> *ctor_elts;
  	      vec_alloc (ctor_elts, const_nunits);
  	      gimple_seq stmts = NULL;
--- 8815,8824 ----
  		  continue;
  		}
  
+ 	      tree offset_vectype = TREE_TYPE (vec_offsets[0]);
  	      unsigned HOST_WIDE_INT const_nunits = nunits.to_constant ();
  	      unsigned HOST_WIDE_INT const_offset_nunits
! 		= TYPE_VECTOR_SUBPARTS (offset_vectype).to_constant ();
  	      vec<constructor_elt, va_gc> *ctor_elts;
  	      vec_alloc (ctor_elts, const_nunits);
  	      gimple_seq stmts = NULL;
*************** vectorizable_store (vec_info *vinfo,
*** 8759,8765 ****
  	      unsigned elt_offset
  		= (j % factor) * const_nunits;
  	      tree idx_type = TREE_TYPE (TREE_TYPE (vec_offset));
! 	      tree scale = size_int (gs_info.scale);
  	      tree ltype = build_aligned_type (TREE_TYPE (vectype), align);
  	      for (unsigned k = 0; k < const_nunits; ++k)
  		{
--- 8833,8839 ----
  	      unsigned elt_offset
  		= (j % factor) * const_nunits;
  	      tree idx_type = TREE_TYPE (TREE_TYPE (vec_offset));
! 	      tree scale = size_int (SLP_TREE_GS_SCALE (slp_node));
  	      tree ltype = build_aligned_type (TREE_TYPE (vectype), align);
  	      for (unsigned k = 0; k < const_nunits; ++k)
  		{
*************** vectorizable_load (vec_info *vinfo,
*** 9238,9244 ****
    bb_vec_info bb_vinfo = dyn_cast <bb_vec_info> (vinfo);
    poly_uint64 vf;
    tree aggr_type;
-   gather_scatter_info gs_info;
    tree ref_type;
    enum vect_def_type mask_dt = vect_unknown_def_type;
    enum vect_def_type els_dt = vect_unknown_def_type;
--- 9312,9317 ----
*************** vectorizable_load (vec_info *vinfo,
*** 9372,9391 ****
    else
      group_size = 1;
  
!   vect_memory_access_type memory_access_type;
!   enum dr_alignment_support alignment_support_scheme;
!   int misalignment;
!   poly_int64 poffset;
!   internal_fn lanes_ifn;
!   auto_vec<int> elsvals;
!   int maskload_elsval = 0;
!   bool need_zeroing = false;
!   if (!get_load_store_type (vinfo, stmt_info, vectype, slp_node, mask_node,
! 			    VLS_LOAD, &memory_access_type, &poffset,
! 			    &alignment_support_scheme, &misalignment, &gs_info,
! 			    &lanes_ifn, &elsvals))
      return false;
  
  
    /* We might need to explicitly zero inactive elements if there are
       padding bits in the type that might leak otherwise.
--- 9445,9468 ----
    else
      group_size = 1;
  
!   vect_load_store_data _ls_data;
!   vect_load_store_data &ls = slp_node->get_data (_ls_data);
!   if (cost_vec
!       && !get_load_store_type (vinfo, stmt_info, vectype, slp_node, mask_node,
! 			       VLS_LOAD, &ls))
      return false;
+   /* Temporary aliases to analysis data, should not be modified through
+      these.  */
+   const vect_memory_access_type memory_access_type = ls.memory_access_type;
+   const dr_alignment_support alignment_support_scheme
+     = ls.alignment_support_scheme;
+   const int misalignment = ls.misalignment;
+   const poly_int64 poffset = ls.poffset;
+   const internal_fn lanes_ifn = ls.lanes_ifn;
+   const vec<int> &elsvals = ls.elsvals;
  
+   int maskload_elsval = 0;
+   bool need_zeroing = false;
  
    /* We might need to explicitly zero inactive elements if there are
       padding bits in the type that might leak otherwise.
*************** vectorizable_load (vec_info *vinfo,
*** 9456,9462 ****
  	  if (!VECTOR_MODE_P (vec_mode)
  	      || !can_vec_mask_load_store_p (vec_mode,
  					     TYPE_MODE (mask_vectype),
! 					     true, NULL, &elsvals))
  	    return false;
  	}
        else if (memory_access_type != VMAT_LOAD_STORE_LANES
--- 9533,9539 ----
  	  if (!VECTOR_MODE_P (vec_mode)
  	      || !can_vec_mask_load_store_p (vec_mode,
  					     TYPE_MODE (mask_vectype),
! 					     true, NULL, &ls.elsvals))
  	    return false;
  	}
        else if (memory_access_type != VMAT_LOAD_STORE_LANES
*************** vectorizable_load (vec_info *vinfo,
*** 9498,9511 ****
  	  return false;
  	}
  
-       SLP_TREE_MEMORY_ACCESS_TYPE (slp_node) = memory_access_type;
- 
        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,
! 					      memory_access_type, &gs_info,
! 					      mask_node, &elsvals);
  
        if (dump_enabled_p ()
  	  && memory_access_type != VMAT_ELEMENTWISE
--- 9575,9585 ----
  	  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
*************** vectorizable_load (vec_info *vinfo,
*** 9520,9535 ****
  	vinfo->any_known_not_updated_vssa = true;
  
        SLP_TREE_TYPE (slp_node) = load_vec_info_type;
!     }
!   else
!     {
!       /* Here just get the else values.  */
!       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,
! 					      memory_access_type, &gs_info,
! 					      mask_node, &elsvals);
      }
  
    /* If the type needs padding we must zero inactive elements.
--- 9594,9600 ----
  	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.
*************** vectorizable_load (vec_info *vinfo,
*** 9552,9559 ****
    if (elsvals.length ())
      maskload_elsval = *elsvals.begin ();
  
-   gcc_assert (memory_access_type == SLP_TREE_MEMORY_ACCESS_TYPE (slp_node));
- 
    if (dump_enabled_p () && !costing_p)
      dump_printf_loc (MSG_NOTE, vect_location, "transform load.\n");
  
--- 9617,9622 ----
*************** vectorizable_load (vec_info *vinfo,
*** 9722,9727 ****
--- 9785,9797 ----
        tree ltype = TREE_TYPE (vectype);
        tree lvectype = vectype;
        auto_vec<tree> dr_chain;
+       /* ???  Modify local copies of alignment_support_scheme and
+ 	 misalignment, but this part of analysis should be done
+ 	 earlier and remembered, likewise the chosen load mode.  */
+       const dr_alignment_support tem = alignment_support_scheme;
+       dr_alignment_support alignment_support_scheme = tem;
+       const int tem2 = misalignment;
+       int misalignment = tem2;
        if (memory_access_type == VMAT_STRIDED_SLP)
  	{
  	  HOST_WIDE_INT n = gcd (group_size, const_nunits);
*************** vectorizable_load (vec_info *vinfo,
*** 10344,10350 ****
  	  aggr_type = NULL_TREE;
  	  bump = NULL_TREE;
  	  if (!costing_p)
! 	    vect_get_gather_scatter_ops (loop, slp_node, &gs_info, &dataref_ptr,
  					 &vec_offsets);
  	}
        else
--- 10414,10420 ----
  	  aggr_type = NULL_TREE;
  	  bump = NULL_TREE;
  	  if (!costing_p)
! 	    vect_get_gather_scatter_ops (loop, slp_node, &dataref_ptr,
  					 &vec_offsets);
  	}
        else
*************** vectorizable_load (vec_info *vinfo,
*** 10352,10359 ****
  	  aggr_type = elem_type;
  	  if (!costing_p)
  	    {
! 	      vect_get_strided_load_store_ops (stmt_info, vectype, loop_vinfo,
! 					       gsi, &gs_info,
  					       &bump, &vec_offset, loop_lens);
  	      dataref_ptr
  		  = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
--- 10422,10430 ----
  	  aggr_type = elem_type;
  	  if (!costing_p)
  	    {
! 	      vect_get_strided_load_store_ops (stmt_info, slp_node, vectype,
! 					       ls.strided_offset_vectype,
! 					       loop_vinfo, gsi,
  					       &bump, &vec_offset, loop_lens);
  	      dataref_ptr
  		  = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
*************** vectorizable_load (vec_info *vinfo,
*** 10402,10410 ****
  	      if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
  		vec_offset = vec_offsets[i];
  	      tree zero = build_zero_cst (vectype);
! 	      tree scale = size_int (gs_info.scale);
  
! 	      if (gs_info.ifn == IFN_MASK_LEN_GATHER_LOAD)
  		{
  		  if (loop_lens)
  		    final_len = vect_get_loop_len (loop_vinfo, gsi, loop_lens,
--- 10473,10481 ----
  	      if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
  		vec_offset = vec_offsets[i];
  	      tree zero = build_zero_cst (vectype);
! 	      tree scale = size_int (SLP_TREE_GS_SCALE (slp_node));
  
! 	      if (ls.gs.ifn == IFN_MASK_LEN_GATHER_LOAD)
  		{
  		  if (loop_lens)
  		    final_len = vect_get_loop_len (loop_vinfo, gsi, loop_lens,
*************** vectorizable_load (vec_info *vinfo,
*** 10476,10488 ****
  					slp_node, 0, vect_body);
  		  continue;
  		}
! 	      poly_uint64 offset_nunits
! 		  = TYPE_VECTOR_SUBPARTS (gs_info.offset_vectype);
  	      if (known_eq (nunits, offset_nunits))
  		{
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, vectype, gsi, &gs_info,
! 				dataref_ptr, vec_offsets[i], final_mask);
  		  data_ref = NULL_TREE;
  		}
  	      else if (known_eq (nunits, offset_nunits * 2))
--- 10547,10560 ----
  					slp_node, 0, vect_body);
  		  continue;
  		}
! 	      tree offset_vectype = TREE_TYPE (vec_offsets[0]);
! 	      poly_uint64 offset_nunits = TYPE_VECTOR_SUBPARTS (offset_vectype);
  	      if (known_eq (nunits, offset_nunits))
  		{
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, slp_node, vectype, gsi,
! 				ls.gs.decl, dataref_ptr, vec_offsets[i],
! 				final_mask);
  		  data_ref = NULL_TREE;
  		}
  	      else if (known_eq (nunits, offset_nunits * 2))
*************** vectorizable_load (vec_info *vinfo,
*** 10491,10498 ****
  		     lanes but the builtins will produce full vectype
  		     data with just the lower lanes filled.  */
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, vectype, gsi, &gs_info,
! 				dataref_ptr, vec_offsets[2 * i], final_mask);
  		  tree low = make_ssa_name (vectype);
  		  gimple_set_lhs (new_stmt, low);
  		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
--- 10563,10571 ----
  		     lanes but the builtins will produce full vectype
  		     data with just the lower lanes filled.  */
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, slp_node, vectype, gsi,
! 				ls.gs.decl, dataref_ptr, vec_offsets[2 * i],
! 				final_mask);
  		  tree low = make_ssa_name (vectype);
  		  gimple_set_lhs (new_stmt, low);
  		  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
*************** vectorizable_load (vec_info *vinfo,
*** 10523,10537 ****
  						      VEC_UNPACK_HI_EXPR,
  						      final_mask);
  		      final_mask = make_ssa_name
! 				    (truth_type_for (gs_info.offset_vectype));
  		      gimple_set_lhs (new_stmt, final_mask);
  		      vect_finish_stmt_generation (vinfo, stmt_info,
  						   new_stmt, gsi);
  		    }
  
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, vectype, gsi, &gs_info,
! 				dataref_ptr,
  				vec_offsets[2 * i + 1], final_mask);
  		  tree high = make_ssa_name (vectype);
  		  gimple_set_lhs (new_stmt, high);
--- 10596,10610 ----
  						      VEC_UNPACK_HI_EXPR,
  						      final_mask);
  		      final_mask = make_ssa_name
! 				    (truth_type_for (offset_vectype));
  		      gimple_set_lhs (new_stmt, final_mask);
  		      vect_finish_stmt_generation (vinfo, stmt_info,
  						   new_stmt, gsi);
  		    }
  
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, slp_node, vectype, gsi,
! 				ls.gs.decl, dataref_ptr,
  				vec_offsets[2 * i + 1], final_mask);
  		  tree high = make_ssa_name (vectype);
  		  gimple_set_lhs (new_stmt, high);
*************** vectorizable_load (vec_info *vinfo,
*** 10574,10580 ****
  						   new_stmt, gsi);
  		    }
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, vectype, gsi, &gs_info,
  				dataref_ptr, vec_offset, final_mask);
  		  data_ref = NULL_TREE;
  		}
--- 10647,10654 ----
  						   new_stmt, gsi);
  		    }
  		  new_stmt = vect_build_one_gather_load_call
! 			       (vinfo, stmt_info, slp_node, vectype, gsi,
! 				ls.gs.decl,
  				dataref_ptr, vec_offset, final_mask);
  		  data_ref = NULL_TREE;
  		}
*************** vectorizable_load (vec_info *vinfo,
*** 10603,10610 ****
  					slp_node, 0, vect_body);
  		  continue;
  		}
  	      unsigned HOST_WIDE_INT const_offset_nunits
! 		= TYPE_VECTOR_SUBPARTS (gs_info.offset_vectype) .to_constant ();
  	      vec<constructor_elt, va_gc> *ctor_elts;
  	      vec_alloc (ctor_elts, const_nunits);
  	      gimple_seq stmts = NULL;
--- 10677,10685 ----
  					slp_node, 0, vect_body);
  		  continue;
  		}
+ 	      tree offset_vectype = TREE_TYPE (vec_offsets[0]);
  	      unsigned HOST_WIDE_INT const_offset_nunits
! 		= TYPE_VECTOR_SUBPARTS (offset_vectype).to_constant ();
  	      vec<constructor_elt, va_gc> *ctor_elts;
  	      vec_alloc (ctor_elts, const_nunits);
  	      gimple_seq stmts = NULL;
*************** vectorizable_load (vec_info *vinfo,
*** 10615,10621 ****
  	      vec_offset = vec_offsets[i / factor];
  	      unsigned elt_offset = (i % factor) * const_nunits;
  	      tree idx_type = TREE_TYPE (TREE_TYPE (vec_offset));
! 	      tree scale = size_int (gs_info.scale);
  	      tree ltype = build_aligned_type (TREE_TYPE (vectype), align);
  	      for (unsigned k = 0; k < const_nunits; ++k)
  		{
--- 10690,10696 ----
  	      vec_offset = vec_offsets[i / factor];
  	      unsigned elt_offset = (i % factor) * const_nunits;
  	      tree idx_type = TREE_TYPE (TREE_TYPE (vec_offset));
! 	      tree scale = size_int (SLP_TREE_GS_SCALE (slp_node));
  	      tree ltype = build_aligned_type (TREE_TYPE (vectype), align);
  	      for (unsigned k = 0; k < const_nunits; ++k)
  		{
*************** vectorizable_comparison (vec_info *vinfo
*** 12210,12222 ****
     vectorization.  */
  
  bool
! vectorizable_early_exit (vec_info *vinfo, stmt_vec_info stmt_info,
  			 gimple_stmt_iterator *gsi,
  			 slp_tree slp_node, stmt_vector_for_cost *cost_vec)
  {
!   loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (vinfo);
!   if (!loop_vinfo
!       || !is_a <gcond *> (STMT_VINFO_STMT (stmt_info)))
      return false;
  
    if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_condition_def)
--- 12285,12295 ----
     vectorization.  */
  
  bool
! vectorizable_early_exit (loop_vec_info loop_vinfo, stmt_vec_info stmt_info,
  			 gimple_stmt_iterator *gsi,
  			 slp_tree slp_node, stmt_vector_for_cost *cost_vec)
  {
!   if (!is_a <gcond *> (STMT_VINFO_STMT (stmt_info)))
      return false;
  
    if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_condition_def)
*************** vectorizable_early_exit (vec_info *vinfo
*** 12281,12287 ****
  	  return false;
  	}
  
!       if (!vectorizable_comparison_1 (vinfo, vectype, stmt_info, code, gsi,
  				      slp_node, cost_vec))
  	return false;
  
--- 12354,12360 ----
  	  return false;
  	}
  
!       if (!vectorizable_comparison_1 (loop_vinfo, vectype, stmt_info, code, gsi,
  				      slp_node, cost_vec))
  	return false;
  
*************** vect_analyze_stmt (vec_info *vinfo,
*** 12531,12538 ****
      }
  
    ok = true;
!   if (!bb_vinfo
!       && (STMT_VINFO_RELEVANT_P (stmt_info)
  	  || STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def))
      /* Prefer vectorizable_call over vectorizable_simd_clone_call so
         -mveclibabi= takes preference over library functions with
--- 12604,12611 ----
      }
  
    ok = true;
!   if (bb_vinfo
!       || (STMT_VINFO_RELEVANT_P (stmt_info)
  	  || STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def))
      /* Prefer vectorizable_call over vectorizable_simd_clone_call so
         -mveclibabi= takes preference over library functions with
*************** vect_analyze_stmt (vec_info *vinfo,
*** 12540,12597 ****
      ok = (vectorizable_call (vinfo, stmt_info, NULL, node, cost_vec)
  	  || vectorizable_simd_clone_call (vinfo, stmt_info, NULL, node,
  					   cost_vec)
! 	  || vectorizable_conversion (vinfo, stmt_info,
! 				      NULL, node, cost_vec)
! 	  || vectorizable_operation (vinfo, stmt_info,
! 				     NULL, node, cost_vec)
! 	  || vectorizable_assignment (vinfo, stmt_info,
! 				      NULL, node, cost_vec)
  	  || vectorizable_load (vinfo, stmt_info, NULL, node, cost_vec)
  	  || vectorizable_store (vinfo, stmt_info, NULL, node, cost_vec)
- 	  || vectorizable_lane_reducing (as_a <loop_vec_info> (vinfo),
- 					 stmt_info, node, cost_vec)
- 	  || vectorizable_reduction (as_a <loop_vec_info> (vinfo), stmt_info,
- 				     node, node_instance, cost_vec)
- 	  || vectorizable_induction (as_a <loop_vec_info> (vinfo), stmt_info,
- 				     node, cost_vec)
  	  || vectorizable_shift (vinfo, stmt_info, NULL, node, cost_vec)
! 	  || vectorizable_condition (vinfo, stmt_info,
! 				     NULL, node, cost_vec)
! 	  || vectorizable_comparison (vinfo, stmt_info, NULL, node,
! 				      cost_vec)
! 	  || vectorizable_lc_phi (as_a <loop_vec_info> (vinfo),
! 				  stmt_info, node)
! 	  || vectorizable_recurr (as_a <loop_vec_info> (vinfo),
! 				   stmt_info, node, cost_vec)
! 	  || vectorizable_early_exit (vinfo, stmt_info, NULL, node,
! 				      cost_vec));
!   else
!     {
!       if (bb_vinfo)
! 	ok = (vectorizable_call (vinfo, stmt_info, NULL, node, cost_vec)
! 	      || vectorizable_simd_clone_call (vinfo, stmt_info,
! 					       NULL, node, cost_vec)
! 	      || vectorizable_conversion (vinfo, stmt_info, NULL, node,
! 					  cost_vec)
! 	      || vectorizable_shift (vinfo, stmt_info,
! 				     NULL, node, cost_vec)
! 	      || vectorizable_operation (vinfo, stmt_info,
! 					 NULL, node, cost_vec)
! 	      || vectorizable_assignment (vinfo, stmt_info, NULL, node,
! 					  cost_vec)
! 	      || vectorizable_load (vinfo, stmt_info,
! 				    NULL, node, cost_vec)
! 	      || vectorizable_store (vinfo, stmt_info,
! 				     NULL, node, cost_vec)
! 	      || vectorizable_condition (vinfo, stmt_info,
! 					 NULL, node, cost_vec)
! 	      || vectorizable_comparison (vinfo, stmt_info, NULL, node,
! 					  cost_vec)
! 	      || vectorizable_phi (vinfo, stmt_info, node, cost_vec)
! 	      || vectorizable_early_exit (vinfo, stmt_info, NULL, node,
! 					  cost_vec));
! 
!     }
  
    if (!ok)
      return opt_result::failure_at (stmt_info->stmt,
--- 12613,12643 ----
      ok = (vectorizable_call (vinfo, stmt_info, NULL, node, cost_vec)
  	  || vectorizable_simd_clone_call (vinfo, stmt_info, NULL, node,
  					   cost_vec)
! 	  || vectorizable_conversion (vinfo, stmt_info, NULL, node, cost_vec)
! 	  || vectorizable_operation (vinfo, stmt_info, NULL, node, cost_vec)
! 	  || vectorizable_assignment (vinfo, stmt_info, NULL, node, cost_vec)
  	  || vectorizable_load (vinfo, stmt_info, NULL, node, cost_vec)
  	  || vectorizable_store (vinfo, stmt_info, NULL, node, cost_vec)
  	  || vectorizable_shift (vinfo, stmt_info, NULL, node, cost_vec)
! 	  || vectorizable_condition (vinfo, stmt_info, NULL, node, cost_vec)
! 	  || vectorizable_comparison (vinfo, stmt_info, NULL, node, cost_vec)
! 	  || (bb_vinfo
! 	      && vectorizable_phi (bb_vinfo, stmt_info, node, cost_vec))
! 	  || (is_a <loop_vec_info> (vinfo)
! 	      && (vectorizable_lane_reducing (as_a <loop_vec_info> (vinfo),
! 					      stmt_info, node, cost_vec)
! 		  || vectorizable_reduction (as_a <loop_vec_info> (vinfo),
! 					     stmt_info,
! 					     node, node_instance, cost_vec)
! 		  || vectorizable_induction (as_a <loop_vec_info> (vinfo),
! 					     stmt_info, node, cost_vec)
! 		  || vectorizable_lc_phi (as_a <loop_vec_info> (vinfo),
! 					  stmt_info, node)
! 		  || vectorizable_recurr (as_a <loop_vec_info> (vinfo),
! 					  stmt_info, node, cost_vec)
! 		  || vectorizable_early_exit (as_a <loop_vec_info> (vinfo),
! 					      stmt_info, NULL, node,
! 					      cost_vec))));
  
    if (!ok)
      return opt_result::failure_at (stmt_info->stmt,
*************** vect_transform_stmt (vec_info *vinfo,
*** 12738,12749 ****
        break;
  
      case phi_info_type:
!       done = vectorizable_phi (vinfo, stmt_info, slp_node, NULL);
        gcc_assert (done);
        break;
  
      case loop_exit_ctrl_vec_info_type:
!       done = vectorizable_early_exit (vinfo, stmt_info, gsi, slp_node, NULL);
        gcc_assert (done);
        break;
  
--- 12784,12797 ----
        break;
  
      case phi_info_type:
!       done = vectorizable_phi (as_a <bb_vec_info> (vinfo),
! 			       stmt_info, slp_node, NULL);
        gcc_assert (done);
        break;
  
      case loop_exit_ctrl_vec_info_type:
!       done = vectorizable_early_exit (as_a <loop_vec_info> (vinfo),
! 				      stmt_info, gsi, slp_node, NULL);
        gcc_assert (done);
        break;
  
diff -Nrcpad gcc-16-20250817/gcc/tree-vectorizer.h gcc-16-20250824/gcc/tree-vectorizer.h
*** gcc-16-20250817/gcc/tree-vectorizer.h	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/gcc/tree-vectorizer.h	Sun Aug 24 22:33:16 2025
*************** struct vect_simd_clone_data : vect_data
*** 270,275 ****
--- 270,295 ----
    auto_vec<tree> simd_clone_info;
  };
  
+ /* Analysis data from vectorizable_load and vectorizable_store for
+    load_vec_info_type and store_vec_info_type.  */
+ struct vect_load_store_data : vect_data {
+   vect_load_store_data (vect_load_store_data &&other) = default;
+   vect_load_store_data () = default;
+   virtual ~vect_load_store_data () = default;
+ 
+   vect_memory_access_type memory_access_type;
+   dr_alignment_support alignment_support_scheme;
+   int misalignment;
+   internal_fn lanes_ifn; // VMAT_LOAD_STORE_LANES
+   poly_int64 poffset;
+   union {
+       internal_fn ifn;	// VMAT_GATHER_SCATTER_IFN
+       tree decl;	// VMAT_GATHER_SCATTER_DECL
+   } gs;
+   tree strided_offset_vectype; // VMAT_GATHER_SCATTER_IFN, originally strided
+   auto_vec<int> elsvals;
+ };
+ 
  /* A computation tree of an SLP instance.  Each node corresponds to a group of
     stmts to be packed in a SIMD stmt.  */
  struct _slp_tree {
*************** struct _slp_tree {
*** 332,341 ****
  
    int vertex;
  
-   /* Classifies how the load or store is going to be implemented
-      for loop vectorization.  */
-   vect_memory_access_type memory_access_type;
- 
    /* The kind of operation as determined by analysis and optional
       kind specific data.  */
    enum stmt_vec_info_type type;
--- 352,357 ----
*************** public:
*** 427,438 ****
  #define SLP_TREE_REPRESENTATIVE(S)		 (S)->representative
  #define SLP_TREE_LANES(S)			 (S)->lanes
  #define SLP_TREE_CODE(S)			 (S)->code
- #define SLP_TREE_MEMORY_ACCESS_TYPE(S)		 (S)->memory_access_type
  #define SLP_TREE_TYPE(S)			 (S)->type
  #define SLP_TREE_GS_SCALE(S)			 (S)->gs_scale
  #define SLP_TREE_GS_BASE(S)			 (S)->gs_base
  #define SLP_TREE_PERMUTE_P(S)			 ((S)->code == VEC_PERM_EXPR)
  
  enum vect_partial_vector_style {
      vect_partial_vectors_none,
      vect_partial_vectors_while_ult,
--- 443,462 ----
  #define SLP_TREE_REPRESENTATIVE(S)		 (S)->representative
  #define SLP_TREE_LANES(S)			 (S)->lanes
  #define SLP_TREE_CODE(S)			 (S)->code
  #define SLP_TREE_TYPE(S)			 (S)->type
  #define SLP_TREE_GS_SCALE(S)			 (S)->gs_scale
  #define SLP_TREE_GS_BASE(S)			 (S)->gs_base
  #define SLP_TREE_PERMUTE_P(S)			 ((S)->code == VEC_PERM_EXPR)
  
+ inline vect_memory_access_type
+ SLP_TREE_MEMORY_ACCESS_TYPE (slp_tree node)
+ {
+   if (SLP_TREE_TYPE (node) == load_vec_info_type
+       || SLP_TREE_TYPE (node) == store_vec_info_type)
+     return static_cast<vect_load_store_data *> (node->data)->memory_access_type;
+   return VMAT_UNINITIALIZED;
+ }
+ 
  enum vect_partial_vector_style {
      vect_partial_vectors_none,
      vect_partial_vectors_while_ult,
*************** extern bool vect_transform_cycle_phi (lo
*** 2671,2681 ****
  				      slp_tree, slp_instance);
  extern bool vectorizable_lc_phi (loop_vec_info, stmt_vec_info, slp_tree);
  extern bool vect_transform_lc_phi (loop_vec_info, stmt_vec_info, slp_tree);
! extern bool vectorizable_phi (vec_info *, stmt_vec_info, slp_tree,
  			      stmt_vector_for_cost *);
  extern bool vectorizable_recurr (loop_vec_info, stmt_vec_info,
  				  slp_tree, stmt_vector_for_cost *);
! extern bool vectorizable_early_exit (vec_info *, stmt_vec_info,
  				     gimple_stmt_iterator *,
  				     slp_tree, stmt_vector_for_cost *);
  extern bool vect_emulated_vector_p (tree);
--- 2695,2705 ----
  				      slp_tree, slp_instance);
  extern bool vectorizable_lc_phi (loop_vec_info, stmt_vec_info, slp_tree);
  extern bool vect_transform_lc_phi (loop_vec_info, stmt_vec_info, slp_tree);
! extern bool vectorizable_phi (bb_vec_info, stmt_vec_info, slp_tree,
  			      stmt_vector_for_cost *);
  extern bool vectorizable_recurr (loop_vec_info, stmt_vec_info,
  				  slp_tree, stmt_vector_for_cost *);
! extern bool vectorizable_early_exit (loop_vec_info, stmt_vec_info,
  				     gimple_stmt_iterator *,
  				     slp_tree, stmt_vector_for_cost *);
  extern bool vect_emulated_vector_p (tree);
diff -Nrcpad gcc-16-20250817/gcc/tree.cc gcc-16-20250824/gcc/tree.cc
*** gcc-16-20250817/gcc/tree.cc	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/gcc/tree.cc	Sun Aug 24 22:33:16 2025
*************** tree_fits_poly_uint64_p (const_tree t)
*** 6639,6644 ****
--- 6639,6656 ----
  	  && wi::fits_uhwi_p (wi::to_widest (t)));
  }
  
+ /* Return true if T is an INTEGER_CST whose numerical value (extended according
+    to TYPE_UNSIGNED) fits in a sanitize_code_type (uint64_t).  */
+ 
+ bool
+ tree_fits_sanitize_code_type_p (const_tree t)
+ {
+   if (t == NULL_TREE)
+     return false;
+   return (TREE_CODE (t) == INTEGER_CST
+ 	  && wi::fits_uhwi_p (wi::to_widest (t)));
+ }
+ 
  /* T is an INTEGER_CST whose numerical value (extended according to
     TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  Return that
     HOST_WIDE_INT.  */
*************** tree_to_uhwi (const_tree t)
*** 6661,6666 ****
--- 6673,6689 ----
    return TREE_INT_CST_LOW (t);
  }
  
+ /* T is an INTEGER_CST whose numerical value (extended according to
+    TYPE_UNSIGNED) fits in a sanitize_code_type.  Return that
+    sanitize_code_type.  */
+ 
+ sanitize_code_type
+ tree_to_sanitize_code_type (const_tree t)
+ {
+   gcc_assert (tree_fits_sanitize_code_type_p (t));
+   return TREE_INT_CST_LOW (t);
+ }
+ 
  /* Return the most significant (sign) bit of T.  */
  
  int
diff -Nrcpad gcc-16-20250817/gcc/tree.h gcc-16-20250824/gcc/tree.h
*** gcc-16-20250817/gcc/tree.h	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/gcc/tree.h	Sun Aug 24 22:33:16 2025
*************** extern bool tree_fits_shwi_p (const_tree
*** 5040,5045 ****
--- 5040,5047 ----
  extern bool tree_fits_poly_int64_p (const_tree) ATTRIBUTE_PURE;
  extern bool tree_fits_uhwi_p (const_tree) ATTRIBUTE_PURE;
  extern bool tree_fits_poly_uint64_p (const_tree) ATTRIBUTE_PURE;
+ extern bool tree_fits_sanitize_code_type_p (const_tree) ATTRIBUTE_PURE;
+ 
  
  extern HOST_WIDE_INT tree_to_shwi (const_tree)
    ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
*************** extern unsigned HOST_WIDE_INT tree_to_uh
*** 5049,5054 ****
--- 5051,5058 ----
    ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
  extern poly_uint64 tree_to_poly_uint64 (const_tree)
    ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
+ extern sanitize_code_type tree_to_sanitize_code_type (const_tree)
+   ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
  #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
  extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
  tree_to_shwi (const_tree t)
diff -Nrcpad gcc-16-20250817/libgcc/ChangeLog gcc-16-20250824/libgcc/ChangeLog
*** gcc-16-20250817/libgcc/ChangeLog	Sun Aug 17 22:33:13 2025
--- gcc-16-20250824/libgcc/ChangeLog	Sun Aug 24 22:33:17 2025
***************
*** 1,3 ****
--- 1,12 ----
+ 2025-08-21  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* config/pru/libgcc-eabi.ver: Add __pruabi_softmpyi and
+ 	__pruabi_softmpyll symbols.
+ 	* config/pru/t-pru: Add softmpy source files.
+ 	* config/pru/pru-softmpy.h: New file.
+ 	* config/pru/softmpyi.c: New file.
+ 	* config/pru/softmpyll.c: New file.
+ 
  2025-08-13  Yang Yujie  <yangyujie@loongson.cn>
  
  	PR target/117599
diff -Nrcpad gcc-16-20250817/libgcc/config/pru/libgcc-eabi.ver gcc-16-20250824/libgcc/config/pru/libgcc-eabi.ver
*** gcc-16-20250817/libgcc/config/pru/libgcc-eabi.ver	Sun Aug 17 22:33:20 2025
--- gcc-16-20250824/libgcc/config/pru/libgcc-eabi.ver	Sun Aug 24 22:33:17 2025
*************** GCC_9.0.0 {
*** 86,88 ****
--- 86,94 ----
    __gnu_eqsf2
    __gnu_eqdf2
  }
+ 
+ %inherit GCC_16.0.0 GCC_9.0.0
+ GCC_16.0.0 {
+   __pruabi_softmpyi
+   __pruabi_softmpyll
+ }
diff -Nrcpad gcc-16-20250817/libgcc/config/pru/pru-softmpy.h gcc-16-20250824/libgcc/config/pru/pru-softmpy.h
*** gcc-16-20250817/libgcc/config/pru/pru-softmpy.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libgcc/config/pru/pru-softmpy.h	Sun Aug 24 22:33:17 2025
***************
*** 0 ****
--- 1,42 ----
+ /* libgcc routines for PRU.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Based on rl78/rl78-mul.h.
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 3, or (at your
+    option) any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+    License for more details.
+ 
+    Under Section 7 of GPL version 3, you are granted additional
+    permissions described in the GCC Runtime Library Exception, version
+    3.1, as published by the Free Software Foundation.
+ 
+    You should have received a copy of the GNU General Public License and
+    a copy of the GCC Runtime Library Exception along with this program;
+    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ UINT_TYPE C2(__pruabi_softmpy,NAME_MODE)   (UINT_TYPE, UINT_TYPE);
+ UINT_TYPE
+ C2(__pruabi_softmpy,NAME_MODE) (UINT_TYPE a, UINT_TYPE b)
+ {
+   UINT_TYPE rv = 0;
+ 
+   unsigned char bit;
+ 
+   for (bit=0; b && bit<sizeof(UINT_TYPE)*8; bit++)
+     {
+       if (b & 1)
+ 	rv += a;
+       a <<= 1;
+       b >>= 1;
+     }
+   return rv;
+ }
diff -Nrcpad gcc-16-20250817/libgcc/config/pru/softmpyi.c gcc-16-20250824/libgcc/config/pru/softmpyi.c
*** gcc-16-20250817/libgcc/config/pru/softmpyi.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libgcc/config/pru/softmpyi.c	Sun Aug 24 22:33:17 2025
***************
*** 0 ****
--- 1,37 ----
+ /* libgcc routines for PRU
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Based on rl78/lib2mul.c
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 3, or (at your
+    option) any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+    License for more details.
+ 
+    Under Section 7 of GPL version 3, you are granted additional
+    permissions described in the GCC Runtime Library Exception, version
+    3.1, as published by the Free Software Foundation.
+ 
+    You should have received a copy of the GNU General Public License and
+    a copy of the GCC Runtime Library Exception along with this program;
+    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ typedef unsigned int  uint32_type   __attribute__ ((mode (SI)));
+ 
+ #define C2B(a,b) a##b
+ #define C2(a,b) C2B(a,b)
+ 
+ #undef UINT_TYPE
+ #undef NAME_MODE
+ 
+ #define UINT_TYPE       uint32_type
+ #define NAME_MODE       i
+ 
+ #include "pru-softmpy.h"
diff -Nrcpad gcc-16-20250817/libgcc/config/pru/softmpyll.c gcc-16-20250824/libgcc/config/pru/softmpyll.c
*** gcc-16-20250817/libgcc/config/pru/softmpyll.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libgcc/config/pru/softmpyll.c	Sun Aug 24 22:33:17 2025
***************
*** 0 ****
--- 1,37 ----
+ /* libgcc routines for PRU
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Based on rl78/lib2mul.c
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published
+    by the Free Software Foundation; either version 3, or (at your
+    option) any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+    License for more details.
+ 
+    Under Section 7 of GPL version 3, you are granted additional
+    permissions described in the GCC Runtime Library Exception, version
+    3.1, as published by the Free Software Foundation.
+ 
+    You should have received a copy of the GNU General Public License and
+    a copy of the GCC Runtime Library Exception along with this program;
+    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ typedef unsigned int  uint64_type   __attribute__ ((mode (DI)));
+ 
+ #define C2B(a,b) a##b
+ #define C2(a,b) C2B(a,b)
+ 
+ #undef UINT_TYPE
+ #undef NAME_MODE
+ 
+ #define UINT_TYPE       uint64_type
+ #define NAME_MODE       ll
+ 
+ #include "pru-softmpy.h"
diff -Nrcpad gcc-16-20250817/libgcc/config/pru/t-pru gcc-16-20250824/libgcc/config/pru/t-pru
*** gcc-16-20250817/libgcc/config/pru/t-pru	Sun Aug 17 22:33:20 2025
--- gcc-16-20250824/libgcc/config/pru/t-pru	Sun Aug 24 22:33:17 2025
*************** LIB2ADD += \
*** 28,33 ****
--- 28,35 ----
  	$(srcdir)/config/pru/lib2divSI.c \
  	$(srcdir)/config/pru/lib2bitcountHI.c \
  	$(srcdir)/config/pru/mpyll.S \
+ 	$(srcdir)/config/pru/softmpyll.c \
+ 	$(srcdir)/config/pru/softmpyi.c \
  	$(srcdir)/config/pru/gef.c \
  	$(srcdir)/config/pru/gtf.c \
  	$(srcdir)/config/pru/lef.c \
diff -Nrcpad gcc-16-20250817/libgcobol/ChangeLog gcc-16-20250824/libgcobol/ChangeLog
*** gcc-16-20250817/libgcobol/ChangeLog	Sun Aug 17 22:33:29 2025
--- gcc-16-20250824/libgcobol/ChangeLog	Sun Aug 24 22:33:18 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-08-20  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* libgcobol.cc (format_for_display_internal): Handle NumericDisplay
+ 	properly.
+ 	(compare_88): Fix memory access error.
+ 	(__gg__unstring): Likewise.
+ 
  2025-08-13  Mark Wielaard  <mark@klomp.org>
  
  	* configure: Regenerate.
diff -Nrcpad gcc-16-20250817/libgcobol/libgcobol.cc gcc-16-20250824/libgcobol/libgcobol.cc
*** gcc-16-20250817/libgcobol/libgcobol.cc	Sun Aug 17 22:33:29 2025
--- gcc-16-20250824/libgcobol/libgcobol.cc	Sun Aug 24 22:33:18 2025
*************** format_for_display_internal(char **dest,
*** 2990,2995 ****
--- 2990,2998 ----
        {
        // Because a NumericDisplay can have any damned thing as a character,
        // we are going force things that aren't digits to display as '0'
+ 
+       // 0xFF is an exception, so that a HIGH-VALUE in a numeric display shows
+       // up in a unique way.
        static const uint8_t ascii_chars[256] =
          {
          '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0x00
*************** format_for_display_internal(char **dest,
*** 3007,3013 ****
          '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0xc0
          '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0xd0
          '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0xe0
!         '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0xf0
          };
        static const uint8_t ebcdic_chars[256] =
          {
--- 3010,3016 ----
          '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0xc0
          '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0xd0
          '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // 0xe0
!         '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 0xFF, // 0xf0
          };
        static const uint8_t ebcdic_chars[256] =
          {
*************** format_for_display_internal(char **dest,
*** 3026,3032 ****
          0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, // 0xc0
          0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, // 0xd0
          0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, // 0xe0
!         0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, // 0xf0
          } ;
  
        // We are going to make use of fact that a NumericDisplay's data is
--- 3029,3035 ----
          0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, // 0xc0
          0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, // 0xd0
          0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, // 0xe0
!         0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xFF, // 0xf0
          } ;
  
        // We are going to make use of fact that a NumericDisplay's data is
*************** format_for_display_internal(char **dest,
*** 3114,3135 ****
  
            // But when it isn't HIGH-VALUE, we don't want to see the effects
            // of the internal sign.
-           if( (*dest)[index-1] != (char)DEGENERATE_HIGH_VALUE )
-             {
-             // Another tricky thing, though, is that for various reasons
-             // the string of digits might not be digits.  There can be
-             // REDEFINES, or the middle of the number might have been changed
-             // with an INITIALIZE into spaces.  But we do want numbers to
-             // look like numbers.  So, we do what we can:
  
!             if( internal_is_ebcdic )
!               {
!               ch = ebcdic_chars[ch];
!               }
!             else
!               {
!               ch = ascii_chars[ch];
!               }
              }
            (*dest)[index++] = ch;
            }
--- 3117,3136 ----
  
            // But when it isn't HIGH-VALUE, we don't want to see the effects
            // of the internal sign.
  
!           // Another tricky thing, though, is that for various reasons
!           // the string of digits might not be digits.  There can be
!           // REDEFINES, or the middle of the number might have been changed
!           // with an INITIALIZE into spaces.  But we do want numbers to
!           // look like numbers.  So, we do what we can:
! 
!           if( internal_is_ebcdic )
!             {
!             ch = ebcdic_chars[ch];
!             }
!           else
!             {
!             ch = ascii_chars[ch];
              }
            (*dest)[index++] = ch;
            }
*************** format_for_display_internal(char **dest,
*** 3151,3166 ****
            for(int i=0; i<rdigits; i++ )
              {
              unsigned char ch = *running_location++;
!               if( (*dest)[index-1] != (char)DEGENERATE_HIGH_VALUE )
!                 {
!               if( internal_is_ebcdic )
!                 {
!                 ch = ebcdic_chars[ch];
!                 }
!               else
!                 {
!                 ch = ascii_chars[ch];
!                 }
                }
              (*dest)[index++] = ch;
              }
--- 3152,3164 ----
            for(int i=0; i<rdigits; i++ )
              {
              unsigned char ch = *running_location++;
!             if( internal_is_ebcdic )
!               {
!               ch = ebcdic_chars[ch];
!               }
!             else
!               {
!               ch = ascii_chars[ch];
                }
              (*dest)[index++] = ch;
              }
*************** compare_88( const char    *list,
*** 3664,3670 ****
      cmpval = cstrncmp (test,
                        PTRCAST(char, conditional_location),
                        conditional_length);
!     if( cmpval == 0 && (int)strlen(test) != conditional_length )
        {
        // When strncmp returns 0, the actual smaller string is the
        // the shorter of the two:
--- 3662,3670 ----
      cmpval = cstrncmp (test,
                        PTRCAST(char, conditional_location),
                        conditional_length);
! 
! //    if( cmpval == 0 && (int)strlen(test) != conditional_length )
!     if( cmpval == 0 && test_len != conditional_length )
        {
        // When strncmp returns 0, the actual smaller string is the
        // the shorter of the two:
*************** __gg__unstring( const cblc_field_t *id1,
*** 11058,11066 ****
        }
  
      // Update the state variables:
-     pointer += examined + id2_s[ifound];
      tally += 1;
      nreceiver += 1;
      }
  
  done:
--- 11058,11069 ----
        }
  
      // Update the state variables:
      tally += 1;
      nreceiver += 1;
+     if( ifound >= 0 )
+       {
+       pointer += examined + id2_s[ifound];
+       }
      }
  
  done:
diff -Nrcpad gcc-16-20250817/libstdc++-v3/ChangeLog gcc-16-20250824/libstdc++-v3/ChangeLog
*** gcc-16-20250817/libstdc++-v3/ChangeLog	Sun Aug 17 22:33:48 2025
--- gcc-16-20250824/libstdc++-v3/ChangeLog	Sun Aug 24 22:33:27 2025
***************
*** 1,3 ****
--- 1,202 ----
+ 2025-08-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121496
+ 	* acinclude.m4 (GLIBCXX_CHECK_PTHREAD_MUTEX_CLOCKLOCK): Do not
+ 	use _GLIBCXX_TSAN in _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK macro.
+ 	* configure: Regenerate.
+ 
+ 2025-08-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121496
+ 	* include/std/mutex (__timed_mutex_impl::_M_try_wait_until):
+ 	Change preprocessor condition to use #if instead of #ifdef.
+ 	(recursive_timed_mutex::_M_clocklock): Likewise.
+ 	* testsuite/30_threads/timed_mutex/121496.cc: New test.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/120994
+ 	* include/bits/version.def (aligned_accessor): Add.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/mdspan (aligned_accessor): New class.
+ 	* src/c++23/std.cc.in (aligned_accessor): Add.
+ 	* testsuite/23_containers/mdspan/accessors/generic.cc: Add tests
+ 	for aligned_accessor.
+ 	* testsuite/23_containers/mdspan/accessors/aligned_neg.cc: New test.
+ 	* testsuite/23_containers/mdspan/version.cc: Add test for
+ 	__cpp_lib_aligned_accessor.
+ 	* testsuite/23_containers/mdspan/accessors/debug/aligned_access_neg.cc: New file.
+ 	* testsuite/23_containers/mdspan/accessors/debug/aligned_offset_neg.cc: New file.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/120994
+ 	* include/bits/align.h (is_sufficiently_aligned): New function.
+ 	* include/bits/version.def (is_sufficiently_aligned): Add.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/memory: Add __glibcxx_want_is_sufficiently_aligned.
+ 	* src/c++23/std.cc.in (is_sufficiently_aligned): Add.
+ 	* testsuite/20_util/headers/memory/version.cc: Add test for
+ 	__cpp_lib_is_sufficiently_aligned.
+ 	* testsuite/20_util/is_sufficiently_aligned/1.cc: New test.
+ 
+ 2025-08-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/121374
+ 	* include/std/limits (numeric_limits<__float128>::max_digits10):
+ 	Fix value.
+ 	* testsuite/18_support/numeric_limits/128bit.cc: Check value.
+ 
+ 2025-08-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR c++/117294
+ 	* testsuite/20_util/optional/cons/value_neg.cc: Prune additional
+ 	output for C++20 and later.
+ 	* testsuite/20_util/scoped_allocator/69293_neg.cc: Match
+ 	additional error for C++20 and later.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/bits/version.def (mdspan): Set value for C++26.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/mdspan (dims): Add.
+ 	* src/c++23/std.cc.in (dims): Add.
+ 	* testsuite/23_containers/mdspan/extents/misc.cc: Add tests.
+ 	* testsuite/23_containers/mdspan/version.cc: Update test.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__static_prod): Delete.
+ 	(__fwd_partial_prods): Compute at compile-time in O(rank), not
+ 	O(rank**2).
+ 	(__rev_partial_prods): Ditto.
+ 	(__size): Inline __static_prod.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__fwd_partial_prods): Reduce size of the
+ 	array by 1 element.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__valid_static_extent): Replace
+ 	numeric_limits with __int_traits.
+ 	(extents::_S_ctor_explicit): Ditto.
+ 	(extents::__static_quotient): Ditto.
+ 	(layout_stride::mapping::mapping): Ditto.
+ 	(mdspan::size): Ditto.
+ 	* testsuite/23_containers/mdspan/extents/class_mandates_neg.cc:
+ 	Update test with additional diagnostics.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (extents::operator==): Replace loop with
+ 	pack expansion.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__mdspan::__all_static): New function.
+ 	(__mdspan::_StaticExtents::_S_is_dyn): Inline and eliminate.
+ 	(__mdspan::_ExtentsStorage::_S_is_dynamic): New method.
+ 	(__mdspan::_ExtentsStorage::_M_extent): Use _S_is_dynamic.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__fwd_prods): Relax condition for fully-dynamic
+ 	extents to cover (dyn, ..., dyn, X).
+ 	(__rev_partial_prods): Analogous for (X, dyn, ..., dyn).
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__mdspan::__all_dynamic): New function.
+ 	(__mdspan::_StaticExtents::_S_dynamic_index): Convert to method.
+ 	(__mdspan::_StaticExtents::_S_dynamic_index_inv): Ditto.
+ 	(__mdspan::_StaticExtents): New specialization for fully dynamic
+ 	extents.
+ 	(__mdspan::__fwd_prod): New constexpr if branch to avoid
+ 	instantiating __fwd_partial_prods.
+ 	(__mdspan::__rev_prod): Ditto.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__mdspan::__fwd_prod): Optimize
+ 	for rank <= 2.
+ 	(__mdspan::__rev_prod): Ditto.
+ 	(__mdspan::__size): Refactor to use a pre-computed product, not
+ 	a partial product.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__mdspan::__static_prod): New function.
+ 	(__mdspan::__fwd_partial_prods): Constexpr array of partial
+ 	forward products.
+ 	(__mdspan::__fwd_partial_prods): Same for reverse partial
+ 	products.
+ 	(__mdspan::__static_extents_prod): Delete function.
+ 	(__mdspan::__extents_prod): Renamed from __exts_prod and refactored.
+ 	include/std/mdspan (__mdspan::__fwd_prod): Compute as the
+ 	product of pre-computed static static and the product of dynamic
+ 	extents.
+ 	(__mdspan::__rev_prod): Ditto.
+ 
+ 2025-08-21  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (__mdspan::_StaticExtents): Extract non IndexType
+ 	related code from _ExtentsStorage.
+ 	(__mdspan::_ExtentsStorage): Use _StaticExtents.
+ 	(__mdspan::__static_extents): Return reference to NTTP of _StaticExtents.
+ 	(__mdspan::__contains_zero): New overload.
+ 	(__mdspan::__exts_prod, __mdspan::__static_quotient): Use span to avoid
+ 	copying __sta_exts.
+ 
+ 2025-08-19  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/104874
+ 	* testsuite/24_iterators/random_access/string_vector_iterators.cc:
+ 	Call test6642.
+ 
+ 2025-08-18  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/121476
+ 	* include/bits/ranges_algo.h (__all_of_fn::operator()):
+ 	(__any_of_fn::operator(), __none_of_fn::operator())
+ 	(__find_first_of_fn::operator(), __count_fn::operator())
+ 	(__find_end_fn::operator(), __remove_if_fn::operator())
+ 	(__remove_fn::operator(), __unique_fn::operator())
+ 	(__is_sorted_until_fn::operator(), __is_sorted_fn::operator())
+ 	(__lower_bound_fn::operator(), __upper_bound_fn::operator())
+ 	(__equal_range_fn::operator(), __binary_search_fn::operator())
+ 	(__is_partitioned_fn::operator(), __partition_point_fn::operator())
+ 	(__minmax_fn::operator(), __min_element_fn::operator())
+ 	(__includes_fn::operator(), __max_fn::operator())
+ 	(__lexicographical_compare_fn::operator(), __clamp__fn::operator())
+ 	(__find_last_fn::operator(), __find_last_if_fn::operator())
+ 	(__find_last_if_not_fn::operator()): Add [[nodiscard]] attribute.
+ 	* include/bits/ranges_algobase.h (__equal_fn::operator()):
+ 	Add [[nodiscard]] attribute.
+ 	* include/bits/ranges_util.h (__find_fn::operator())
+ 	(__find_if_fn::operator(), __find_if_not_fn::operator())
+ 	(__mismatch_fn::operator(), __search_fn::operator())
+ 	(__min_fn::operator(), __adjacent_find_fn::operator()):
+ 	Add [[nodiscard]] attribute.
+ 	* include/bits/stl_algo.h (std::min(initializer_list<T>))
+ 	(std::min(initializer_list<T>, _Compare))
+ 	(std::max(initializer_list<T>))
+ 	(std::mmax(initializer_list<T>, _Compare)): Add _GLIBCXX_NODISCARD.
+ 	* testsuite/25_algorithms/min/constrained.cc: Silence nodiscard
+ 	warning.
+ 	* testsuite/25_algorithms/max/constrained.cc: Likewise.
+ 	* testsuite/25_algorithms/minmax/constrained.cc: Likewise.
+ 	* testsuite/25_algorithms/minmax_element/constrained.cc: Likewise.
+ 
+ 2025-08-18  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/121313
+ 	* include/bits/vector.tcc (vector::insert_range): Add check for
+ 	empty size.
+ 	* testsuite/23_containers/vector/modifiers/insert/insert_range.cc:
+ 	New tests.
+ 
  2025-08-10  H.J. Lu  <hjl.tools@gmail.com>
  
  	* configure: Regenerated.
diff -Nrcpad gcc-16-20250817/libstdc++-v3/acinclude.m4 gcc-16-20250824/libstdc++-v3/acinclude.m4
*** gcc-16-20250817/libstdc++-v3/acinclude.m4	Sun Aug 17 22:33:48 2025
--- gcc-16-20250824/libstdc++-v3/acinclude.m4	Sun Aug 24 22:33:27 2025
*************** AC_DEFUN([GLIBCXX_CHECK_PTHREAD_MUTEX_CL
*** 4511,4517 ****
        [glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK=no])
    ])
    if test $glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK = yes; then
!     AC_DEFINE(_GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK, (_GLIBCXX_TSAN==0), [Define if pthread_mutex_clocklock is available in <pthread.h>.])
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
--- 4511,4517 ----
        [glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK=no])
    ])
    if test $glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK = yes; then
!     AC_DEFINE(_GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK, 1, [Define if pthread_mutex_clocklock is available in <pthread.h>.])
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
diff -Nrcpad gcc-16-20250817/libstdc++-v3/configure gcc-16-20250824/libstdc++-v3/configure
*** gcc-16-20250817/libstdc++-v3/configure	Sun Aug 17 22:33:48 2025
--- gcc-16-20250824/libstdc++-v3/configure	Sun Aug 24 22:33:27 2025
*************** fi
*** 21881,21887 ****
  $as_echo "$glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK" >&6; }
    if test $glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK = yes; then
  
! $as_echo "#define _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK (_GLIBCXX_TSAN==0)" >>confdefs.h
  
    fi
  
--- 21881,21887 ----
  $as_echo "$glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK" >&6; }
    if test $glibcxx_cv_PTHREAD_MUTEX_CLOCKLOCK = yes; then
  
! $as_echo "#define _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK 1" >>confdefs.h
  
    fi
  
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/align.h gcc-16-20250824/libstdc++-v3/include/bits/align.h
*** gcc-16-20250817/libstdc++-v3/include/bits/align.h	Sun Aug 17 22:33:48 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/align.h	Sun Aug 24 22:33:28 2025
*************** align(size_t __align, size_t __size, voi
*** 102,107 ****
--- 102,124 ----
      }
  #endif // __glibcxx_assume_aligned
  
+ #ifdef __glibcxx_is_sufficiently_aligned // C++ >= 26
+   /** @brief Is `__ptr` aligned to an _Align byte boundary?
+    *
+    *  @tparam _Align An alignment value
+    *  @tparam _Tp    An object type
+    *
+    *  C++26 20.2.5 [ptr.align]
+    *
+    *  @ingroup memory
+    */
+   template<size_t _Align, class _Tp>
+     [[nodiscard,__gnu__::__always_inline__]]
+     inline bool
+     is_sufficiently_aligned(_Tp* __ptr)
+     { return reinterpret_cast<__UINTPTR_TYPE__>(__ptr) % _Align == 0; }
+ #endif // __glibcxx_is_sufficiently_aligned
+ 
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace
  
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/ranges_algo.h gcc-16-20250824/libstdc++-v3/include/bits/ranges_algo.h
*** gcc-16-20250817/libstdc++-v3/include/bits/ranges_algo.h	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/ranges_algo.h	Sun Aug 24 22:33:28 2025
*************** namespace ranges
*** 109,115 ****
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 109,115 ----
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 122,128 ****
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 122,128 ----
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 137,143 ****
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 137,143 ----
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 150,156 ****
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 150,156 ----
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 165,171 ****
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 165,171 ----
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 178,184 ****
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 178,184 ----
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 279,285 ****
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       constexpr _Iter1
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
--- 279,285 ----
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr _Iter1
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
*************** namespace ranges
*** 298,304 ****
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       constexpr borrowed_iterator_t<_Range1>
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
--- 298,304 ----
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range1>
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
*************** namespace ranges
*** 319,325 ****
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<_Iter, _Proj>,
  					 const _Tp*>
!       constexpr iter_difference_t<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Proj __proj = {}) const
        {
--- 319,325 ----
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<_Iter, _Proj>,
  					 const _Tp*>
!       [[nodiscard]] constexpr iter_difference_t<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 336,342 ****
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<iterator_t<_Range>, _Proj>,
  					 const _Tp*>
!       constexpr range_difference_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 336,342 ----
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<iterator_t<_Range>, _Proj>,
  					 const _Tp*>
!       [[nodiscard]] constexpr range_difference_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 726,732 ****
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       constexpr subrange<_Iter1>
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
--- 726,732 ----
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr subrange<_Iter1>
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
*************** namespace ranges
*** 783,789 ****
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       constexpr borrowed_subrange_t<_Range1>
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
--- 783,789 ----
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range1>
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
*************** namespace ranges
*** 806,812 ****
  	     indirect_equivalence_relation<projected<_Iter1, _Proj1>,
  					   projected<_Iter2, _Proj2>> _Pred
  	       = ranges::equal_to>
!       constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
--- 806,812 ----
  	     indirect_equivalence_relation<projected<_Iter1, _Proj1>,
  					   projected<_Iter2, _Proj2>> _Pred
  	       = ranges::equal_to>
!       [[nodiscard]] constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
*************** namespace ranges
*** 875,881 ****
  	     indirect_equivalence_relation<
  	       projected<iterator_t<_Range1>, _Proj1>,
  	       projected<iterator_t<_Range2>, _Proj2>> _Pred = ranges::equal_to>
!       constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
--- 875,881 ----
  	     indirect_equivalence_relation<
  	       projected<iterator_t<_Range1>, _Proj1>,
  	       projected<iterator_t<_Range2>, _Proj2>> _Pred = ranges::equal_to>
!       [[nodiscard]] constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
*************** namespace ranges
*** 1281,1287 ****
      template<permutable _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 1281,1287 ----
      template<permutable _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 1305,1311 ****
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
        requires permutable<iterator_t<_Range>>
!       constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 1305,1311 ----
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
        requires permutable<iterator_t<_Range>>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 1323,1329 ****
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<_Iter, _Proj>,
  					 const _Tp*>
!       constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Proj __proj = {}) const
        {
--- 1323,1329 ----
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<_Iter, _Proj>,
  					 const _Tp*>
!       [[nodiscard]] constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 1341,1347 ****
  	&& indirect_binary_predicate<ranges::equal_to,
  				     projected<iterator_t<_Range>, _Proj>,
  				     const _Tp*>
!       constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 1341,1347 ----
  	&& indirect_binary_predicate<ranges::equal_to,
  				     projected<iterator_t<_Range>, _Proj>,
  				     const _Tp*>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 1440,1446 ****
  	     typename _Proj = identity,
  	     indirect_equivalence_relation<
  	       projected<_Iter, _Proj>> _Comp = ranges::equal_to>
!       constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 1440,1446 ----
  	     typename _Proj = identity,
  	     indirect_equivalence_relation<
  	       projected<_Iter, _Proj>> _Comp = ranges::equal_to>
!       [[nodiscard]] constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 1462,1468 ****
  	     indirect_equivalence_relation<
  	       projected<iterator_t<_Range>, _Proj>> _Comp = ranges::equal_to>
        requires permutable<iterator_t<_Range>>
!       constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 1462,1468 ----
  	     indirect_equivalence_relation<
  	       projected<iterator_t<_Range>, _Proj>> _Comp = ranges::equal_to>
        requires permutable<iterator_t<_Range>>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 2849,2855 ****
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 2849,2855 ----
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 2868,2874 ****
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 2868,2874 ----
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 2884,2890 ****
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 2884,2890 ----
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 2903,2909 ****
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 2903,2909 ----
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 2987,2993 ****
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 2987,2993 ----
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3017,3023 ****
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 3017,3023 ----
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3035,3041 ****
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 3035,3041 ----
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3065,3071 ****
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 3065,3071 ----
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3083,3089 ****
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 3083,3089 ----
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3128,3134 ****
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, const _Tp& __value,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 3128,3134 ----
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, const _Tp& __value,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3146,3152 ****
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 3146,3152 ----
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj),
  	     indirect_strict_weak_order<const _Tp*, projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3164,3170 ****
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Range&& __r, const _Tp& __value, _Comp __comp = {},
  		 _Proj __proj = {}) const
        {
--- 3164,3170 ----
  	     indirect_strict_weak_order<const _Tp*,
  					projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Range&& __r, const _Tp& __value, _Comp __comp = {},
  		 _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3180,3186 ****
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 3180,3186 ----
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3196,3202 ****
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 3196,3202 ----
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       [[nodiscard]] constexpr bool
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 3488,3494 ****
      template<forward_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 3488,3494 ----
      template<forward_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 3514,3520 ****
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 3514,3520 ----
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 3875,3881 ****
  	     indirect_strict_weak_order<projected<_Iter1, _Proj1>,
  					projected<_Iter2, _Proj2>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2,
  		 _Comp __comp = {},
--- 3875,3881 ----
  	     indirect_strict_weak_order<projected<_Iter1, _Proj1>,
  					projected<_Iter2, _Proj2>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2,
  		 _Comp __comp = {},
*************** namespace ranges
*** 3904,3910 ****
  	     indirect_strict_weak_order<projected<iterator_t<_Range1>, _Proj1>,
  					projected<iterator_t<_Range2>, _Proj2>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Comp __comp = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
--- 3904,3910 ----
  	     indirect_strict_weak_order<projected<iterator_t<_Range1>, _Proj1>,
  					projected<iterator_t<_Range2>, _Proj2>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Comp __comp = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
*************** namespace ranges
*** 4175,4181 ****
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       constexpr const _Tp&
        operator()(const _Tp& __a, const _Tp& __b,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4175,4181 ----
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr const _Tp&
        operator()(const _Tp& __a, const _Tp& __b,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4192,4198 ****
  	       _Comp = ranges::less>
        requires indirectly_copyable_storable<iterator_t<_Range>,
  					    range_value_t<_Range>*>
!       constexpr range_value_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	auto __first = ranges::begin(__r);
--- 4192,4198 ----
  	       _Comp = ranges::less>
        requires indirectly_copyable_storable<iterator_t<_Range>,
  					    range_value_t<_Range>*>
!       [[nodiscard]] constexpr range_value_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	auto __first = ranges::begin(__r);
*************** namespace ranges
*** 4213,4219 ****
      template<copyable _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       constexpr _Tp
        operator()(initializer_list<_Tp> __r,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4213,4219 ----
      template<copyable _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr _Tp
        operator()(initializer_list<_Tp> __r,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4229,4235 ****
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>> _Comp
  	       = ranges::less>
!       constexpr const _Tp&
        operator()(const _Tp& __val, const _Tp& __lo, const _Tp& __hi,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4229,4235 ----
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>> _Comp
  	       = ranges::less>
!       [[nodiscard]] constexpr const _Tp&
        operator()(const _Tp& __val, const _Tp& __lo, const _Tp& __hi,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4279,4285 ****
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       constexpr minmax_result<const _Tp&>
        operator()(const _Tp& __a, const _Tp& __b,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4279,4285 ----
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr minmax_result<const _Tp&>
        operator()(const _Tp& __a, const _Tp& __b,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4295,4301 ****
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
        requires indirectly_copyable_storable<iterator_t<_Range>, range_value_t<_Range>*>
!       constexpr minmax_result<range_value_t<_Range>>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	auto __first = ranges::begin(__r);
--- 4295,4301 ----
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
        requires indirectly_copyable_storable<iterator_t<_Range>, range_value_t<_Range>*>
!       [[nodiscard]] constexpr minmax_result<range_value_t<_Range>>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	auto __first = ranges::begin(__r);
*************** namespace ranges
*** 4354,4360 ****
      template<copyable _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       constexpr minmax_result<_Tp>
        operator()(initializer_list<_Tp> __r,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4354,4360 ----
      template<copyable _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr minmax_result<_Tp>
        operator()(initializer_list<_Tp> __r,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4371,4377 ****
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4371,4377 ----
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4392,4398 ****
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 4392,4398 ----
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 4408,4414 ****
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4408,4414 ----
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4429,4435 ****
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 4429,4435 ----
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 4448,4454 ****
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       constexpr minmax_element_result<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 4448,4454 ----
  	     typename _Proj = identity,
  	     indirect_strict_weak_order<projected<_Iter, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr minmax_element_result<_Iter>
        operator()(_Iter __first, _Sent __last,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 4503,4509 ****
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       constexpr minmax_element_result<borrowed_iterator_t<_Range>>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 4503,4509 ----
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<iterator_t<_Range>, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr minmax_element_result<borrowed_iterator_t<_Range>>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 4521,4527 ****
  	     indirect_strict_weak_order<projected<_Iter1, _Proj1>,
  					projected<_Iter2, _Proj2>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2,
  		 _Comp __comp = {},
--- 4521,4527 ----
  	     indirect_strict_weak_order<projected<_Iter1, _Proj1>,
  					projected<_Iter2, _Proj2>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2,
  		 _Comp __comp = {},
*************** namespace ranges
*** 4607,4613 ****
  	     indirect_strict_weak_order<projected<iterator_t<_Range1>, _Proj1>,
  					projected<iterator_t<_Range2>, _Proj2>>
  	       _Comp = ranges::less>
!       constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Comp __comp = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
--- 4607,4613 ----
  	     indirect_strict_weak_order<projected<iterator_t<_Range1>, _Proj1>,
  					projected<iterator_t<_Range2>, _Proj2>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Comp __comp = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
*************** namespace ranges
*** 4836,4842 ****
  	     typename _Proj = identity,
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj)>
        requires indirect_binary_predicate<ranges::equal_to, projected<_Iter, _Proj>, const _Tp*>
!       constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last, const _Tp& __value, _Proj __proj = {}) const
        {
  	if constexpr (same_as<_Iter, _Sent> && bidirectional_iterator<_Iter>)
--- 4836,4842 ----
  	     typename _Proj = identity,
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj)>
        requires indirect_binary_predicate<ranges::equal_to, projected<_Iter, _Proj>, const _Tp*>
!       [[nodiscard]] constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last, const _Tp& __value, _Proj __proj = {}) const
        {
  	if constexpr (same_as<_Iter, _Sent> && bidirectional_iterator<_Iter>)
*************** namespace ranges
*** 4869,4875 ****
  	     typename _Tp
  	       _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(iterator_t<_Range>, _Proj)>
        requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Range>, _Proj>, const _Tp*>
!       constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        { return (*this)(ranges::begin(__r), ranges::end(__r), __value, std::move(__proj)); }
    };
--- 4869,4875 ----
  	     typename _Tp
  	       _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(iterator_t<_Range>, _Proj)>
        requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Range>, _Proj>, const _Tp*>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        { return (*this)(ranges::begin(__r), ranges::end(__r), __value, std::move(__proj)); }
    };
*************** namespace ranges
*** 4880,4886 ****
    {
      template<forward_iterator _Iter, sentinel_for<_Iter> _Sent, typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const
        {
  	if constexpr (same_as<_Iter, _Sent> && bidirectional_iterator<_Iter>)
--- 4880,4886 ----
    {
      template<forward_iterator _Iter, sentinel_for<_Iter> _Sent, typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const
        {
  	if constexpr (same_as<_Iter, _Sent> && bidirectional_iterator<_Iter>)
*************** namespace ranges
*** 4911,4917 ****
  
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>> _Pred>
!       constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__pred), std::move(__proj)); }
    };
--- 4911,4917 ----
  
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>> _Pred>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__pred), std::move(__proj)); }
    };
*************** namespace ranges
*** 4922,4928 ****
    {
      template<forward_iterator _Iter, sentinel_for<_Iter> _Sent, typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const
        {
  	if constexpr (same_as<_Iter, _Sent> && bidirectional_iterator<_Iter>)
--- 4922,4928 ----
    {
      template<forward_iterator _Iter, sentinel_for<_Iter> _Sent, typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr subrange<_Iter>
        operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const
        {
  	if constexpr (same_as<_Iter, _Sent> && bidirectional_iterator<_Iter>)
*************** namespace ranges
*** 4953,4959 ****
  
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>> _Pred>
!       constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__pred), std::move(__proj)); }
    };
--- 4953,4959 ----
  
      template<forward_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>> _Pred>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__pred), std::move(__proj)); }
    };
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/ranges_algobase.h gcc-16-20250824/libstdc++-v3/include/bits/ranges_algobase.h
*** gcc-16-20250817/libstdc++-v3/include/bits/ranges_algobase.h	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/ranges_algobase.h	Sun Aug 24 22:33:28 2025
*************** namespace ranges
*** 101,107 ****
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
--- 101,107 ----
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr bool
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
*************** namespace ranges
*** 168,174 ****
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
--- 168,174 ----
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr bool
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/ranges_util.h gcc-16-20250824/libstdc++-v3/include/bits/ranges_util.h
*** gcc-16-20250817/libstdc++-v3/include/bits/ranges_util.h	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/ranges_util.h	Sun Aug 24 22:33:28 2025
*************** namespace ranges
*** 501,507 ****
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj)>
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<_Iter, _Proj>, const _Tp*>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Proj __proj = {}) const
        {
--- 501,507 ----
  	     typename _Tp _GLIBCXX26_RANGE_ALGO_DEF_VAL_T(_Iter, _Proj)>
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<_Iter, _Proj>, const _Tp*>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 const _Tp& __value, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 537,543 ****
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<iterator_t<_Range>, _Proj>,
  					 const _Tp*>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 537,543 ----
        requires indirect_binary_predicate<ranges::equal_to,
  					 projected<iterator_t<_Range>, _Proj>,
  					 const _Tp*>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, const _Tp& __value, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 552,558 ****
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 552,558 ----
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 565,571 ****
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 565,571 ----
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 580,586 ****
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
--- 580,586 ----
      template<input_iterator _Iter, sentinel_for<_Iter> _Sent,
  	     typename _Proj = identity,
  	     indirect_unary_predicate<projected<_Iter, _Proj>> _Pred>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 593,599 ****
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 593,599 ----
      template<input_range _Range, typename _Proj = identity,
  	     indirect_unary_predicate<projected<iterator_t<_Range>, _Proj>>
  	       _Pred>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
*************** namespace ranges
*** 634,640 ****
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       constexpr mismatch_result<_Iter1, _Iter2>
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
--- 634,640 ----
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr mismatch_result<_Iter1, _Iter2>
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
*************** namespace ranges
*** 655,660 ****
--- 655,661 ----
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
+       [[nodiscard]]    
        constexpr mismatch_result<iterator_t<_Range1>, iterator_t<_Range2>>
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
*************** namespace ranges
*** 675,681 ****
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       constexpr subrange<_Iter1>
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
--- 676,682 ----
  	     typename _Pred = ranges::equal_to,
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr subrange<_Iter1>
        operator()(_Iter1 __first1, _Sent1 __last1,
  		 _Iter2 __first2, _Sent2 __last2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
*************** namespace ranges
*** 719,725 ****
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       constexpr borrowed_subrange_t<_Range1>
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
--- 720,726 ----
  	     typename _Proj1 = identity, typename _Proj2 = identity>
        requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>,
  				     _Pred, _Proj1, _Proj2>
!       [[nodiscard]] constexpr borrowed_subrange_t<_Range1>
        operator()(_Range1&& __r1, _Range2&& __r2, _Pred __pred = {},
  		 _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const
        {
*************** namespace ranges
*** 737,743 ****
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       constexpr const _Tp&
        operator()(const _Tp& __a, const _Tp& __b,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 738,744 ----
      template<typename _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr const _Tp&
        operator()(const _Tp& __a, const _Tp& __b,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 754,760 ****
  	       _Comp = ranges::less>
        requires indirectly_copyable_storable<iterator_t<_Range>,
  					    range_value_t<_Range>*>
!       constexpr range_value_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	auto __first = ranges::begin(__r);
--- 755,761 ----
  	       _Comp = ranges::less>
        requires indirectly_copyable_storable<iterator_t<_Range>,
  					    range_value_t<_Range>*>
!       [[nodiscard]] constexpr range_value_t<_Range>
        operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const
        {
  	auto __first = ranges::begin(__r);
*************** namespace ranges
*** 775,781 ****
      template<copyable _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       constexpr _Tp
        operator()(initializer_list<_Tp> __r,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
--- 776,782 ----
      template<copyable _Tp, typename _Proj = identity,
  	     indirect_strict_weak_order<projected<const _Tp*, _Proj>>
  	       _Comp = ranges::less>
!       [[nodiscard]] constexpr _Tp
        operator()(initializer_list<_Tp> __r,
  		 _Comp __comp = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 793,799 ****
  	     indirect_binary_predicate<projected<_Iter, _Proj>,
  				       projected<_Iter, _Proj>> _Pred
  	       = ranges::equal_to>
!       constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred = {}, _Proj __proj = {}) const
        {
--- 794,800 ----
  	     indirect_binary_predicate<projected<_Iter, _Proj>,
  				       projected<_Iter, _Proj>> _Pred
  	       = ranges::equal_to>
!       [[nodiscard]] constexpr _Iter
        operator()(_Iter __first, _Sent __last,
  		 _Pred __pred = {}, _Proj __proj = {}) const
        {
*************** namespace ranges
*** 814,820 ****
  	     indirect_binary_predicate<
  	       projected<iterator_t<_Range>, _Proj>,
  	       projected<iterator_t<_Range>, _Proj>> _Pred = ranges::equal_to>
!       constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
--- 815,821 ----
  	     indirect_binary_predicate<
  	       projected<iterator_t<_Range>, _Proj>,
  	       projected<iterator_t<_Range>, _Proj>> _Pred = ranges::equal_to>
!       [[nodiscard]] constexpr borrowed_iterator_t<_Range>
        operator()(_Range&& __r, _Pred __pred = {}, _Proj __proj = {}) const
        {
  	return (*this)(ranges::begin(__r), ranges::end(__r),
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/stl_algo.h gcc-16-20250824/libstdc++-v3/include/bits/stl_algo.h
*** gcc-16-20250817/libstdc++-v3/include/bits/stl_algo.h	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/stl_algo.h	Sun Aug 24 22:33:28 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5759,5765 ****
  #if __cplusplus >= 201103L
    // N2722 + DR 915.
    template<typename _Tp>
!     _GLIBCXX14_CONSTEXPR
      inline _Tp
      min(initializer_list<_Tp> __l)
      {
--- 5759,5765 ----
  #if __cplusplus >= 201103L
    // N2722 + DR 915.
    template<typename _Tp>
!     _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
      inline _Tp
      min(initializer_list<_Tp> __l)
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5769,5775 ****
      }
  
    template<typename _Tp, typename _Compare>
!     _GLIBCXX14_CONSTEXPR
      inline _Tp
      min(initializer_list<_Tp> __l, _Compare __comp)
      {
--- 5769,5775 ----
      }
  
    template<typename _Tp, typename _Compare>
!     _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
      inline _Tp
      min(initializer_list<_Tp> __l, _Compare __comp)
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5779,5785 ****
      }
  
    template<typename _Tp>
!     _GLIBCXX14_CONSTEXPR
      inline _Tp
      max(initializer_list<_Tp> __l)
      {
--- 5779,5785 ----
      }
  
    template<typename _Tp>
!     _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
      inline _Tp
      max(initializer_list<_Tp> __l)
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5789,5795 ****
      }
  
    template<typename _Tp, typename _Compare>
!     _GLIBCXX14_CONSTEXPR
      inline _Tp
      max(initializer_list<_Tp> __l, _Compare __comp)
      {
--- 5789,5795 ----
      }
  
    template<typename _Tp, typename _Compare>
!     _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
      inline _Tp
      max(initializer_list<_Tp> __l, _Compare __comp)
      {
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/vector.tcc gcc-16-20250824/libstdc++-v3/include/bits/vector.tcc
*** gcc-16-20250817/libstdc++-v3/include/bits/vector.tcc	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/vector.tcc	Sun Aug 24 22:33:28 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1007,1021 ****
  
  	if constexpr (ranges::forward_range<_Rg>)
  	  {
  	    // Start of existing elements:
  	    pointer __old_start = this->_M_impl._M_start;
  	    // End of existing elements:
  	    pointer __old_finish = this->_M_impl._M_finish;
  	    // Insertion point:
- 	    const auto __ins_idx = __pos - cbegin();
  	    pointer __ins = __old_start + __ins_idx;
- 	    // Number of new elements to insert:
- 	    const auto __n = size_type(ranges::distance(__rg));
  	    // Number of elements that can fit in unused capacity:
  	    const auto __cap = this->_M_impl._M_end_of_storage - __old_finish;
  	    if (__cap >= __n)
--- 1007,1024 ----
  
  	if constexpr (ranges::forward_range<_Rg>)
  	  {
+ 	    const auto __ins_idx = __pos - cbegin();
+ 	    // Number of new elements to insert:
+ 	    const auto __n = size_type(ranges::distance(__rg));
+ 	    if (__n == 0)
+ 	      return begin() + __ins_idx;
+ 
  	    // Start of existing elements:
  	    pointer __old_start = this->_M_impl._M_start;
  	    // End of existing elements:
  	    pointer __old_finish = this->_M_impl._M_finish;
  	    // Insertion point:
  	    pointer __ins = __old_start + __ins_idx;
  	    // Number of elements that can fit in unused capacity:
  	    const auto __cap = this->_M_impl._M_end_of_storage - __old_finish;
  	    if (__cap >= __n)
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/version.def gcc-16-20250824/libstdc++-v3/include/bits/version.def
*** gcc-16-20250817/libstdc++-v3/include/bits/version.def	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/version.def	Sun Aug 24 22:33:28 2025
*************** ftms = {
*** 733,738 ****
--- 733,746 ----
  };
  
  ftms = {
+   name = is_sufficiently_aligned;
+   values = {
+     v = 202411;
+     cxxmin = 26;
+   };
+ };
+ 
+ ftms = {
    name = atomic_flag_test;
    values = {
      v = 201907;
*************** ftms = {
*** 1008,1018 ****
--- 1016,1040 ----
  ftms = {
    name = mdspan;
    values = {
+     v = 202406;
+     cxxmin = 26;
+   };
+   values = {
      v = 202207;
      cxxmin = 23;
    };
  };
  
+ ftms = {
+   name = aligned_accessor;
+   values = {
+     v = 202411;
+     cxxmin = 26;
+     extra_cond = "__glibcxx_assume_aligned "
+     "&& __glibcxx_is_sufficiently_aligned";
+   };
+ };
+ 
  ftms = {
    name = ssize;
    values = {
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/bits/version.h gcc-16-20250824/libstdc++-v3/include/bits/version.h
*** gcc-16-20250817/libstdc++-v3/include/bits/version.h	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/bits/version.h	Sun Aug 24 22:33:28 2025
***************
*** 815,820 ****
--- 815,830 ----
  #endif /* !defined(__cpp_lib_assume_aligned) && defined(__glibcxx_want_assume_aligned) */
  #undef __glibcxx_want_assume_aligned
  
+ #if !defined(__cpp_lib_is_sufficiently_aligned)
+ # if (__cplusplus >  202302L)
+ #  define __glibcxx_is_sufficiently_aligned 202411L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_sufficiently_aligned)
+ #   define __cpp_lib_is_sufficiently_aligned 202411L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_is_sufficiently_aligned) && defined(__glibcxx_want_is_sufficiently_aligned) */
+ #undef __glibcxx_want_is_sufficiently_aligned
+ 
  #if !defined(__cpp_lib_atomic_flag_test)
  # if (__cplusplus >= 202002L)
  #  define __glibcxx_atomic_flag_test 201907L
***************
*** 1125,1131 ****
  #undef __glibcxx_want_span
  
  #if !defined(__cpp_lib_mdspan)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_mdspan 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
  #   define __cpp_lib_mdspan 202207L
--- 1135,1146 ----
  #undef __glibcxx_want_span
  
  #if !defined(__cpp_lib_mdspan)
! # if (__cplusplus >  202302L)
! #  define __glibcxx_mdspan 202406L
! #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
! #   define __cpp_lib_mdspan 202406L
! #  endif
! # elif (__cplusplus >= 202100L)
  #  define __glibcxx_mdspan 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
  #   define __cpp_lib_mdspan 202207L
***************
*** 1134,1139 ****
--- 1149,1164 ----
  #endif /* !defined(__cpp_lib_mdspan) && defined(__glibcxx_want_mdspan) */
  #undef __glibcxx_want_mdspan
  
+ #if !defined(__cpp_lib_aligned_accessor)
+ # if (__cplusplus >  202302L) && (__glibcxx_assume_aligned && __glibcxx_is_sufficiently_aligned)
+ #  define __glibcxx_aligned_accessor 202411L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_aligned_accessor)
+ #   define __cpp_lib_aligned_accessor 202411L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_aligned_accessor) && defined(__glibcxx_want_aligned_accessor) */
+ #undef __glibcxx_want_aligned_accessor
+ 
  #if !defined(__cpp_lib_ssize)
  # if (__cplusplus >= 202002L)
  #  define __glibcxx_ssize 201902L
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/std/limits gcc-16-20250824/libstdc++-v3/include/std/limits
*** gcc-16-20250817/libstdc++-v3/include/std/limits	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/std/limits	Sun Aug 24 22:33:28 2025
*************** __glibcxx_float_n(128)
*** 2128,2134 ****
        static _GLIBCXX_USE_CONSTEXPR int digits = 113;
        static _GLIBCXX_USE_CONSTEXPR int digits10 = 33;
  #if __cplusplus >= 201103L
!       static constexpr int max_digits10 = 35;
  #endif
        static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
        static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
--- 2128,2134 ----
        static _GLIBCXX_USE_CONSTEXPR int digits = 113;
        static _GLIBCXX_USE_CONSTEXPR int digits10 = 33;
  #if __cplusplus >= 201103L
!       static constexpr int max_digits10 = 36;
  #endif
        static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
        static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/std/mdspan gcc-16-20250824/libstdc++-v3/include/std/mdspan
*** gcc-16-20250817/libstdc++-v3/include/std/mdspan	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/std/mdspan	Sun Aug 24 22:33:28 2025
***************
*** 36,45 ****
  #include <span>
  #include <array>
  #include <type_traits>
- #include <limits>
  #include <utility>
  
  #define __glibcxx_want_mdspan
  #include <bits/version.h>
  
  #ifdef __glibcxx_mdspan
--- 36,49 ----
  #include <span>
  #include <array>
  #include <type_traits>
  #include <utility>
  
+ #if __cplusplus > 202302L
+ #include <bits/align.h>
+ #endif
+ 
  #define __glibcxx_want_mdspan
+ #define __glibcxx_want_aligned_accessor
  #include <bits/version.h>
  
  #ifdef __glibcxx_mdspan
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 49,97 ****
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
    namespace __mdspan
    {
!     template<typename _IndexType, array _Extents>
!       class _ExtentsStorage
!       {
!       public:
! 	static consteval bool
! 	_S_is_dyn(size_t __ext) noexcept
! 	{ return __ext == dynamic_extent; }
  
! 	template<typename _OIndexType>
! 	  static constexpr _IndexType
! 	  _S_int_cast(const _OIndexType& __other) noexcept
! 	  { return _IndexType(__other); }
  
  	static constexpr size_t _S_rank = _Extents.size();
  
! 	// For __r in [0, _S_rank], _S_dynamic_index[__r] is the number
  	// of dynamic extents up to (and not including) __r.
  	//
  	// If __r is the index of a dynamic extent, then
  	// _S_dynamic_index[__r] is the index of that extent in
  	// _M_dyn_exts.
! 	static constexpr auto _S_dynamic_index = [] consteval
  	{
  	  array<size_t, _S_rank+1> __ret;
  	  size_t __dyn = 0;
  	  for (size_t __i = 0; __i < _S_rank; ++__i)
  	    {
  	      __ret[__i] = __dyn;
! 	      __dyn += _S_is_dyn(_Extents[__i]);
  	    }
  	  __ret[_S_rank] = __dyn;
  	  return __ret;
  	}();
  
! 	static constexpr size_t _S_rank_dynamic = _S_dynamic_index[_S_rank];
  
! 	// For __r in [0, _S_rank_dynamic), _S_dynamic_index_inv[__r] is the
  	// index of the __r-th dynamic extent in _Extents.
! 	static constexpr auto _S_dynamic_index_inv = [] consteval
  	{
  	  array<size_t, _S_rank_dynamic> __ret;
  	  for (size_t __i = 0, __r = 0; __i < _S_rank; ++__i)
! 	    if (_S_is_dyn(_Extents[__i]))
  	      __ret[__r++] = __i;
  	  return __ret;
  	}();
--- 53,118 ----
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
    namespace __mdspan
    {
!     consteval bool
!     __all_static(std::span<const size_t> __extents)
!     {
!       for(auto __ext : __extents)
! 	if (__ext == dynamic_extent)
! 	  return false;
!       return true;
!     }
  
!     consteval bool
!     __all_dynamic(std::span<const size_t> __extents)
!     {
!       for(auto __ext : __extents)
! 	if (__ext != dynamic_extent)
! 	  return false;
!       return true;
!     }
  
+     template<array _Extents>
+       class _StaticExtents
+       {
+       public:
  	static constexpr size_t _S_rank = _Extents.size();
  
! 	// For __r in [0, _S_rank], _S_dynamic_index(__r) is the number
  	// of dynamic extents up to (and not including) __r.
  	//
  	// If __r is the index of a dynamic extent, then
  	// _S_dynamic_index[__r] is the index of that extent in
  	// _M_dyn_exts.
! 	static constexpr size_t
! 	_S_dynamic_index(size_t __r) noexcept
! 	{ return _S_dynamic_index_data[__r]; }
! 
! 	static constexpr auto _S_dynamic_index_data = [] consteval
  	{
  	  array<size_t, _S_rank+1> __ret;
  	  size_t __dyn = 0;
  	  for (size_t __i = 0; __i < _S_rank; ++__i)
  	    {
  	      __ret[__i] = __dyn;
! 	      __dyn += (_Extents[__i] == dynamic_extent);
  	    }
  	  __ret[_S_rank] = __dyn;
  	  return __ret;
  	}();
  
! 	static constexpr size_t _S_rank_dynamic = _S_dynamic_index(_S_rank);
  
! 	// For __r in [0, _S_rank_dynamic), _S_dynamic_index_inv(__r) is the
  	// index of the __r-th dynamic extent in _Extents.
! 	static constexpr size_t
! 	_S_dynamic_index_inv(size_t __r) noexcept
! 	{ return _S_dynamic_index_inv_data[__r]; }
! 
! 	static constexpr auto _S_dynamic_index_inv_data = [] consteval
  	{
  	  array<size_t, _S_rank_dynamic> __ret;
  	  for (size_t __i = 0, __r = 0; __i < _S_rank; ++__i)
! 	    if (_Extents[__i] == dynamic_extent)
  	      __ret[__r++] = __i;
  	  return __ret;
  	}();
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 99,113 ****
  	static constexpr size_t
  	_S_static_extent(size_t __r) noexcept
  	{ return _Extents[__r]; }
  
  	constexpr _IndexType
  	_M_extent(size_t __r) const noexcept
  	{
! 	  auto __se = _Extents[__r];
! 	  if (__se == dynamic_extent)
! 	    return _M_dyn_exts[_S_dynamic_index[__r]];
  	  else
! 	    return __se;
  	}
  
  	template<size_t _OtherRank, typename _GetOtherExtent>
--- 120,185 ----
  	static constexpr size_t
  	_S_static_extent(size_t __r) noexcept
  	{ return _Extents[__r]; }
+       };
+ 
+     template<array _Extents>
+       requires (__all_dynamic<_Extents>())
+       class _StaticExtents<_Extents>
+       {
+       public:
+ 	static constexpr size_t _S_rank = _Extents.size();
+ 
+ 	static constexpr size_t
+ 	_S_dynamic_index(size_t __r) noexcept
+ 	{ return __r; }
+ 
+ 	static constexpr size_t _S_rank_dynamic = _S_rank;
+ 
+ 	static constexpr size_t
+ 	_S_dynamic_index_inv(size_t __k) noexcept
+ 	{ return __k; }
+ 
+ 	static constexpr size_t
+ 	_S_static_extent(size_t) noexcept
+ 	{ return dynamic_extent; }
+       };
+ 
+     template<typename _IndexType, array _Extents>
+       class _ExtentsStorage : public _StaticExtents<_Extents>
+       {
+       private:
+ 	using _S_base = _StaticExtents<_Extents>;
+ 
+       public:
+ 	using _S_base::_S_rank;
+ 	using _S_base::_S_rank_dynamic;
+ 	using _S_base::_S_dynamic_index;
+ 	using _S_base::_S_dynamic_index_inv;
+ 	using _S_base::_S_static_extent;
+ 
+ 	static constexpr bool
+ 	_S_is_dynamic(size_t __r) noexcept
+ 	{
+ 	  if constexpr (__all_static(_Extents))
+ 	    return false;
+ 	  else if constexpr (__all_dynamic(_Extents))
+ 	    return true;
+ 	  else
+ 	    return _Extents[__r] == dynamic_extent;
+ 	}
+ 
+ 	template<typename _OIndexType>
+ 	  static constexpr _IndexType
+ 	  _S_int_cast(const _OIndexType& __other) noexcept
+ 	  { return _IndexType(__other); }
  
  	constexpr _IndexType
  	_M_extent(size_t __r) const noexcept
  	{
! 	  if (_S_is_dynamic(__r))
! 	    return _M_dyn_exts[_S_dynamic_index(__r)];
  	  else
! 	    return _S_static_extent(__r);
  	}
  
  	template<size_t _OtherRank, typename _GetOtherExtent>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 116,122 ****
  	  {
  	    if constexpr (_OtherRank == _S_rank)
  	      for (size_t __i = 0; __i < _S_rank; ++__i)
! 		if (_Extents[__i] != dynamic_extent
  		    && !cmp_equal(_Extents[__i], _S_int_cast(__get_extent(__i))))
  		  return false;
  	    return true;
--- 188,194 ----
  	  {
  	    if constexpr (_OtherRank == _S_rank)
  	      for (size_t __i = 0; __i < _S_rank; ++__i)
! 		if (!_S_is_dynamic(__i)
  		    && !cmp_equal(_Extents[__i], _S_int_cast(__get_extent(__i))))
  		  return false;
  	    return true;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 131,137 ****
  	      {
  		size_t __di = __i;
  		if constexpr (_OtherRank != _S_rank_dynamic)
! 		  __di = _S_dynamic_index_inv[__i];
  		_M_dyn_exts[__i] = _S_int_cast(__get_extent(__di));
  	      }
  	  }
--- 203,209 ----
  	      {
  		size_t __di = __i;
  		if constexpr (_OtherRank != _S_rank_dynamic)
! 		  __di = _S_dynamic_index_inv(__i);
  		_M_dyn_exts[__i] = _S_int_cast(__get_extent(__di));
  	      }
  	  }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 157,172 ****
  	      { return __exts[__i]; });
  	  }
  
! 	static constexpr span<const size_t>
! 	_S_static_extents(size_t __begin, size_t __end) noexcept
! 	{ return {_Extents.data() + __begin, _Extents.data() + __end}; }
  
  	constexpr span<const _IndexType>
  	_M_dynamic_extents(size_t __begin, size_t __end) const noexcept
  	requires (_Extents.size() > 0)
  	{
! 	  return {_M_dyn_exts + _S_dynamic_index[__begin],
! 		  _M_dyn_exts + _S_dynamic_index[__end]};
  	}
  
        private:
--- 229,244 ----
  	      { return __exts[__i]; });
  	  }
  
! 	static constexpr const array<size_t, _S_rank>&
! 	_S_static_extents() noexcept
! 	{ return _Extents; }
  
  	constexpr span<const _IndexType>
  	_M_dynamic_extents(size_t __begin, size_t __end) const noexcept
  	requires (_Extents.size() > 0)
  	{
! 	  return {_M_dyn_exts + _S_dynamic_index(__begin),
! 		  _M_dyn_exts + _S_dynamic_index(__end)};
  	}
  
        private:
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 182,194 ****
      template<size_t _Extent, typename _IndexType>
        concept
        __valid_static_extent = _Extent == dynamic_extent
! 	|| _Extent <= numeric_limits<_IndexType>::max();
  
      template<typename _Extents>
!       constexpr span<const size_t>
!       __static_extents(size_t __begin = 0, size_t __end = _Extents::rank())
!       noexcept
!       { return _Extents::_S_storage::_S_static_extents(__begin, __end); }
  
      template<typename _Extents>
        constexpr span<const typename _Extents::index_type>
--- 254,297 ----
      template<size_t _Extent, typename _IndexType>
        concept
        __valid_static_extent = _Extent == dynamic_extent
! 	|| _Extent <= __gnu_cxx::__int_traits<_IndexType>::__max;
  
      template<typename _Extents>
!       constexpr const array<size_t, _Extents::rank()>&
!       __static_extents() noexcept
!       { return _Extents::_S_storage::_S_static_extents(); }
! 
!     // Pre-compute: \prod_{i = 0}^r _Extents[i], for r = 0,..., n (exclusive)
!     template<array _Extents>
!       constexpr auto __fwd_partial_prods = [] consteval
! 	{
! 	  constexpr size_t __rank = _Extents.size();
! 	  std::array<size_t, __rank> __ret;
! 	  size_t __prod = 1;
! 	  for (size_t __r = 0; __r < __rank; ++__r)
! 	    {
! 	      __ret[__r] = __prod;
! 	      if (size_t __ext = _Extents[__r]; __ext != dynamic_extent)
! 		__prod *= __ext;
! 	    }
! 	  return __ret;
! 	}();
! 
!     // Pre-compute: \prod_{i = r+1}^{n-1} _Extents[i]
!     template<array _Extents>
!       constexpr auto __rev_partial_prods = [] consteval
! 	{
! 	  constexpr size_t __rank = _Extents.size();
! 	  std::array<size_t, __rank> __ret;
! 	  size_t __prod = 1;
! 	  for (size_t __r = __rank; __r > 0; --__r)
! 	    {
! 	      __ret[__r - 1] = __prod;
! 	      if (size_t __ext = _Extents[__r - 1]; __ext != dynamic_extent)
! 		__prod *= __ext;
! 	    }
! 	  return __ret;
! 	}();
  
      template<typename _Extents>
        constexpr span<const typename _Extents::index_type>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 205,211 ****
        static_assert(
  	  (__mdspan::__valid_static_extent<_Extents, _IndexType> && ...),
  	  "Extents must either be dynamic or representable as IndexType");
- 
      public:
        using index_type = _IndexType;
        using size_type = make_unsigned_t<index_type>;
--- 308,313 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 250,257 ****
  	_S_ctor_explicit()
  	{
  	  return (_S_is_less_dynamic(_Extents, _OExtents) || ...)
! 	    || (numeric_limits<index_type>::max()
! 		< numeric_limits<_OIndexType>::max());
  	}
  
        template<size_t... _OExtents>
--- 352,359 ----
  	_S_ctor_explicit()
  	{
  	  return (_S_is_less_dynamic(_Extents, _OExtents) || ...)
! 	    || (__gnu_cxx::__int_traits<index_type>::__max
! 		< __gnu_cxx::__int_traits<_OIndexType>::__max);
  	}
  
        template<size_t... _OExtents>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 306,321 ****
  	    return false;
  	  else
  	    {
! 	      for (size_t __i = 0; __i < __self.rank(); ++__i)
! 		if (!cmp_equal(__self.extent(__i), __other.extent(__i)))
! 		  return false;
! 	      return true;
  	    }
  	}
  
      private:
!       friend span<const size_t>
!       __mdspan::__static_extents<extents>(size_t, size_t);
  
        friend span<const index_type>
        __mdspan::__dynamic_extents<extents>(const extents&, size_t, size_t);
--- 408,424 ----
  	    return false;
  	  else
  	    {
! 	      auto __impl = [&__self, &__other]<size_t... _Counts>(
! 		  index_sequence<_Counts...>)
! 		{ return (cmp_equal(__self.extent(_Counts),
! 				    __other.extent(_Counts)) && ...); };
! 	      return __impl(make_index_sequence<__self.rank()>());
  	    }
  	}
  
      private:
!       friend const array<size_t, rank()>&
!       __mdspan::__static_extents<extents>();
  
        friend span<const index_type>
        __mdspan::__dynamic_extents<extents>(const extents&, size_t, size_t);
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 340,345 ****
--- 443,453 ----
  	return false;
        }
  
+     template<typename _Tp, size_t _Nm>
+       consteval bool
+       __contains_zero(const array<_Tp, _Nm>& __exts) noexcept
+       { return __contains_zero(span<const _Tp>(__exts)); }
+ 
      template<typename _Extents>
        constexpr bool
        __empty(const _Extents& __exts) noexcept
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 352,402 ****
  	  return false;
        }
  
-     constexpr size_t
-     __static_extents_prod(const auto& __sta_exts) noexcept
-     {
-       size_t __ret = 1;
-       for (auto __factor : __sta_exts)
- 	if (__factor != dynamic_extent)
- 	  __ret *= __factor;
-       return __ret;
-     }
- 
      template<typename _Extents>
        constexpr typename _Extents::index_type
!       __exts_prod(const _Extents& __exts, size_t __begin, size_t __end) noexcept
        {
! 	using _IndexType = typename _Extents::index_type;
! 
! 	size_t __ret = 1;
! 	if constexpr (_Extents::rank_dynamic() != _Extents::rank())
! 	  {
! 	    auto __sta_exts = __static_extents<_Extents>(__begin, __end);
! 	    __ret = __static_extents_prod(__sta_exts);
! 	    if (__ret == 0)
! 	      return 0;
! 	  }
  
  	if constexpr (_Extents::rank_dynamic() > 0)
  	  for (auto __factor : __dynamic_extents(__exts, __begin, __end))
  	    __ret *= size_t(__factor);
! 	return _IndexType(__ret);
        }
  
      template<typename _Extents>
        constexpr typename _Extents::index_type
        __fwd_prod(const _Extents& __exts, size_t __r) noexcept
!       { return __exts_prod(__exts, 0, __r); }
  
      template<typename _Extents>
        constexpr typename _Extents::index_type
        __rev_prod(const _Extents& __exts, size_t __r) noexcept
!       { return __exts_prod(__exts, __r + 1, __exts.rank()); }
  
      template<typename _Extents>
        constexpr typename _Extents::index_type
        __size(const _Extents& __exts) noexcept
!       { return __fwd_prod(__exts, __exts.rank()); }
  
      template<typename _IndexType, size_t... _Counts>
        auto __build_dextents_type(integer_sequence<size_t, _Counts...>)
--- 460,534 ----
  	  return false;
        }
  
      template<typename _Extents>
        constexpr typename _Extents::index_type
!       __extents_prod(const _Extents& __exts, size_t __sta_prod, size_t __begin,
! 		     size_t __end) noexcept
        {
! 	if (__sta_prod == 0)
! 	  return 0;
  
+ 	size_t __ret = __sta_prod;
  	if constexpr (_Extents::rank_dynamic() > 0)
  	  for (auto __factor : __dynamic_extents(__exts, __begin, __end))
  	    __ret *= size_t(__factor);
! 	return static_cast<typename _Extents::index_type>(__ret);
        }
  
+     // Preconditions: _r < _Extents::rank()
      template<typename _Extents>
        constexpr typename _Extents::index_type
        __fwd_prod(const _Extents& __exts, size_t __r) noexcept
!       {
! 	constexpr size_t __rank = _Extents::rank();
! 	constexpr auto& __sta_exts = __static_extents<_Extents>();
! 	if constexpr (__rank == 1)
! 	  return 1;
! 	else if constexpr (__rank == 2)
! 	  return __r == 0 ? 1 : __exts.extent(0);
! 	else if constexpr (__all_dynamic(std::span(__sta_exts).first(__rank-1)))
! 	  return __extents_prod(__exts, 1, 0, __r);
! 	else
! 	  {
! 	    size_t __sta_prod = __fwd_partial_prods<__sta_exts>[__r];
! 	    return __extents_prod(__exts, __sta_prod, 0, __r);
! 	  }
!       }
  
+     // Preconditions: _r < _Extents::rank()
      template<typename _Extents>
        constexpr typename _Extents::index_type
        __rev_prod(const _Extents& __exts, size_t __r) noexcept
!       {
! 	constexpr size_t __rank = _Extents::rank();
! 	constexpr auto& __sta_exts = __static_extents<_Extents>();
! 	if constexpr (__rank == 1)
! 	  return 1;
! 	else if constexpr (__rank == 2)
! 	  return __r == 0 ? __exts.extent(1) : 1;
! 	else if constexpr (__all_dynamic(std::span(__sta_exts).last(__rank-1)))
! 	  return __extents_prod(__exts, 1, __r + 1, __rank);
! 	else
! 	  {
! 	    size_t __sta_prod = __rev_partial_prods<__sta_exts>[__r];
! 	    return __extents_prod(__exts, __sta_prod, __r + 1, __rank);
! 	  }
!       }
  
      template<typename _Extents>
        constexpr typename _Extents::index_type
        __size(const _Extents& __exts) noexcept
!       {
! 	constexpr size_t __sta_prod = [] {
! 	  span<const size_t> __sta_exts = __static_extents<_Extents>();
! 	  size_t __ret = 1;
! 	  for(auto __ext : __sta_exts)
! 	    if (__ext != dynamic_extent)
! 	      __ret *= __ext;
! 	  return __ret;
! 	}();
! 	return __extents_prod(__exts, __sta_prod, 0, _Extents::rank());
!       }
  
      template<typename _IndexType, size_t... _Counts>
        auto __build_dextents_type(integer_sequence<size_t, _Counts...>)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 407,412 ****
--- 539,549 ----
      using dextents = decltype(__mdspan::__build_dextents_type<_IndexType>(
  	make_index_sequence<_Rank>()));
  
+ #if __glibcxx_mdspan >= 202406L
+   template<size_t _Rank, typename _IndexType = size_t>
+     using dims = dextents<_IndexType, _Rank>;
+ #endif
+ 
    template<typename... _Integrals>
      requires (is_convertible_v<_Integrals, size_t> && ...)
      explicit extents(_Integrals...) ->
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 463,471 ****
      template<typename _Extents,
               typename _IndexType = typename _Extents::index_type>
        consteval _IndexType
!       __static_quotient(_IndexType __nom = numeric_limits<_IndexType>::max())
        {
! 	auto __sta_exts = __static_extents<_Extents>();
  	for (auto __factor : __sta_exts)
  	  {
  	    if (__factor != dynamic_extent)
--- 600,609 ----
      template<typename _Extents,
               typename _IndexType = typename _Extents::index_type>
        consteval _IndexType
!       __static_quotient(_IndexType __nom = __gnu_cxx::__int_traits<_IndexType>
! 						    ::__max)
        {
! 	std::span<const size_t> __sta_exts = __static_extents<_Extents>();
  	for (auto __factor : __sta_exts)
  	  {
  	    if (__factor != dynamic_extent)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 912,923 ****
  	  static_assert(__mdspan::__representable_size<_OExtents, index_type>,
  	    "The size of StridedMapping::extents_type must be representable as"
  	    " index_type");
! 	  if constexpr (cmp_greater(numeric_limits<_OIndexType>::max(),
! 				    numeric_limits<index_type>::max()))
! 	    __glibcxx_assert(!cmp_less(numeric_limits<index_type>::max(),
! 				       __other.required_span_size())
! 		&& "other.required_span_size() must be representable"
! 		   " as index_type");
  	  if constexpr (extents_type::rank() > 0)
  	    for (size_t __i = 0; __i < extents_type::rank(); ++__i)
  	      _M_strides[__i] = index_type(__other.stride(__i));
--- 1050,1062 ----
  	  static_assert(__mdspan::__representable_size<_OExtents, index_type>,
  	    "The size of StridedMapping::extents_type must be representable as"
  	    " index_type");
! 	  if constexpr (cmp_greater(__gnu_cxx::__int_traits<_OIndexType>::__max,
! 				    __gnu_cxx::__int_traits<index_type>::__max))
! 	    __glibcxx_assert(!cmp_less(
! 		__gnu_cxx::__int_traits<index_type>::__max,
! 		__other.required_span_size())
! 	      && "other.required_span_size() must be representable"
! 		 " as index_type");
  	  if constexpr (extents_type::rank() > 0)
  	    for (size_t __i = 0; __i < extents_type::rank(); ++__i)
  	      _M_strides[__i] = index_type(__other.stride(__i));
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1050,1055 ****
--- 1189,1242 ----
        { return __p + __i; }
      };
  
+ #ifdef __glibcxx_aligned_accessor
+   template<typename _ElementType, size_t _ByteAlignment>
+     struct aligned_accessor
+     {
+       static_assert(has_single_bit(_ByteAlignment),
+ 	"ByteAlignment must be a power of two");
+       static_assert(_ByteAlignment >= alignof(_ElementType));
+ 
+       using offset_policy = default_accessor<_ElementType>;
+       using element_type = _ElementType;
+       using reference = element_type&;
+       using data_handle_type = element_type*;
+ 
+       static constexpr size_t byte_alignment = _ByteAlignment;
+ 
+       constexpr
+       aligned_accessor() noexcept = default;
+ 
+       template<typename _OElementType, size_t _OByteAlignment>
+ 	requires (_OByteAlignment >= byte_alignment) 
+ 	    && is_convertible_v<_OElementType(*)[], element_type(*)[]>
+ 	constexpr
+ 	aligned_accessor(aligned_accessor<_OElementType, _OByteAlignment>)
+ 	noexcept
+ 	{ }
+ 
+       template<typename _OElementType>
+ 	requires is_convertible_v<_OElementType(*)[], element_type(*)[]>
+ 	constexpr explicit
+ 	aligned_accessor(default_accessor<_OElementType>) noexcept
+ 	{ }
+ 
+       template<typename _OElementType>
+ 	requires is_convertible_v<element_type(*)[], _OElementType(*)[]>
+ 	constexpr
+ 	operator default_accessor<_OElementType>() const noexcept
+ 	{ return {}; }
+ 
+       constexpr reference
+       access(data_handle_type __p, size_t __i) const noexcept
+       { return std::assume_aligned<byte_alignment>(__p)[__i]; }
+ 
+       constexpr typename offset_policy::data_handle_type
+       offset(data_handle_type __p, size_t __i) const noexcept
+       { return std::assume_aligned<byte_alignment>(__p) + __i; }
+     };
+ #endif
+ 
    namespace __mdspan
    {
      template<typename _Extents, typename _IndexType, size_t _Nm>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1234,1240 ****
        size() const noexcept
        {
  	__glibcxx_assert(cmp_less_equal(_M_mapping.required_span_size(),
! 					numeric_limits<size_t>::max()));
  	return size_type(__mdspan::__size(extents()));
        }
  
--- 1421,1428 ----
        size() const noexcept
        {
  	__glibcxx_assert(cmp_less_equal(_M_mapping.required_span_size(),
! 					__gnu_cxx::__int_traits<size_t>
! 						 ::__max));
  	return size_type(__mdspan::__size(extents()));
        }
  
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/std/memory gcc-16-20250824/libstdc++-v3/include/std/memory
*** gcc-16-20250817/libstdc++-v3/include/std/memory	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/std/memory	Sun Aug 24 22:33:28 2025
***************
*** 110,115 ****
--- 110,116 ----
  #define __glibcxx_want_constexpr_memory
  #define __glibcxx_want_enable_shared_from_this
  #define __glibcxx_want_indirect
+ #define __glibcxx_want_is_sufficiently_aligned
  #define __glibcxx_want_make_unique
  #define __glibcxx_want_out_ptr
  #define __glibcxx_want_parallel_algorithm
diff -Nrcpad gcc-16-20250817/libstdc++-v3/include/std/mutex gcc-16-20250824/libstdc++-v3/include/std/mutex
*** gcc-16-20250817/libstdc++-v3/include/std/mutex	Sun Aug 17 22:33:49 2025
--- gcc-16-20250824/libstdc++-v3/include/std/mutex	Sun Aug 24 22:33:28 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 190,196 ****
  	  return static_cast<_Derived*>(this)->_M_timedlock(__ts);
  	}
  
! #ifdef _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        template<typename _Duration>
  	bool
  	_M_try_lock_until(const chrono::time_point<chrono::steady_clock,
--- 190,196 ----
  	  return static_cast<_Derived*>(this)->_M_timedlock(__ts);
  	}
  
! #if _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        template<typename _Duration>
  	bool
  	_M_try_lock_until(const chrono::time_point<chrono::steady_clock,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 377,383 ****
        _M_timedlock(const __gthread_time_t& __ts)
        { return !__gthread_recursive_mutex_timedlock(&_M_mutex, &__ts); }
  
! #ifdef _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        bool
        _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts)
        { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); }
--- 377,383 ----
        _M_timedlock(const __gthread_time_t& __ts)
        { return !__gthread_recursive_mutex_timedlock(&_M_mutex, &__ts); }
  
! #if _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
        bool
        _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts)
        { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/src/c++23/std.cc.in gcc-16-20250824/libstdc++-v3/src/c++23/std.cc.in
*** gcc-16-20250817/libstdc++-v3/src/c++23/std.cc.in	Sun Aug 17 22:33:50 2025
--- gcc-16-20250824/libstdc++-v3/src/c++23/std.cc.in	Sun Aug 24 22:33:29 2025
*************** export namespace std
*** 1858,1871 ****
  {
    using std::extents;
    using std::dextents;
    using std::layout_left;
    using std::layout_right;
    using std::layout_stride;
    using std::default_accessor;
    using std::mdspan;
!   // FIXME layout_left_padded, layout_right_padded, aligned_accessor,
!   // strided_slice, submdspan_mapping_result, full_extent_t, full_extent,
!   // submdspan_extents, mdsubspan
  }
  #endif
  
--- 1858,1877 ----
  {
    using std::extents;
    using std::dextents;
+ #if __glibcxx_mdspan >= 202406L
+   using std::dims;
+ #endif
    using std::layout_left;
    using std::layout_right;
    using std::layout_stride;
    using std::default_accessor;
+ #if __glibcxx_aligned_accessor
+   using std::aligned_accessor;
+ #endif
    using std::mdspan;
!   // FIXME layout_left_padded, layout_right_padded, strided_slice,
!   // submdspan_mapping_result, full_extent_t, full_extent, submdspan_extents,
!   // mdsubspan
  }
  #endif
  
*************** export namespace std
*** 1878,1883 ****
--- 1884,1892 ----
    using std::allocator_arg_t;
    using std::allocator_traits;
    using std::assume_aligned;
+ #if __glibcxx_is_sufficiently_aligned
+   using std::is_sufficiently_aligned;
+ #endif  
    using std::make_obj_using_allocator;
    using std::pointer_traits;
    using std::to_address;
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc gcc-16-20250824/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc	Sun Aug 17 22:33:50 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc	Sun Aug 24 22:33:29 2025
***************
*** 4,9 ****
--- 4,14 ----
  
  #if __SIZEOF_FLOAT128__
  __extension__ template class std::numeric_limits<__float128>;
+ 
+ # if __cplusplus >= 201103L
+ static_assert( std::numeric_limits<__float128>::max_digits10 == 36,
+ 	       "PR libstdc++/121374" );
+ # endif
  #endif
  
  #if __SIZEOF_INT128__
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/20_util/headers/memory/version.cc gcc-16-20250824/libstdc++-v3/testsuite/20_util/headers/memory/version.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/20_util/headers/memory/version.cc	Sun Aug 17 22:33:50 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/20_util/headers/memory/version.cc	Sun Aug 24 22:33:29 2025
***************
*** 10,12 ****
--- 10,16 ----
  #if __cpp_lib_addressof_constexpr != 201603L
  # error "Feature-test macro __cpp_lib_addressof_constexpr has wrong value in <version>"
  #endif
+ 
+ #if __cplusplus > 202302L && __cpp_lib_is_sufficiently_aligned != 202411L
+ # error "Feature-test macro __cpp_lib_is_sufficiently_aligned has wrong value in <version>"
+ #endif
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/1.cc gcc-16-20250824/libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/1.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/1.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/1.cc	Sun Aug 24 22:33:29 2025
***************
*** 0 ****
--- 1,31 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <memory>
+ #include <array>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test01()
+ {
+   constexpr size_t N = 4;
+   constexpr size_t M = 2*N + 1;
+   alignas(N) std::array<char, M> buffer{};
+ 
+   auto* ptr = buffer.data();
+   VERIFY(std::is_sufficiently_aligned<1>(ptr+0));
+   VERIFY(std::is_sufficiently_aligned<1>(ptr+1));
+ 
+   VERIFY(std::is_sufficiently_aligned<2>(ptr+0));
+   VERIFY(!std::is_sufficiently_aligned<2>(ptr+1));
+   VERIFY(std::is_sufficiently_aligned<2>(ptr+2));
+ 
+   for (size_t i = 0; i < M; ++i)
+     VERIFY(std::is_sufficiently_aligned<N>(ptr + i) == (i % N == 0));
+ }
+ 
+ int
+ main()
+ {
+   test01();
+   return 0;
+ }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc gcc-16-20250824/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc	Sun Aug 17 22:33:50 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc	Sun Aug 24 22:33:29 2025
*************** int main()
*** 37,39 ****
--- 37,40 ----
    }
  }
  // { dg-prune-output "no type .*enable_if" }
+ // { dg-prune-output "no matching function for call to 'main..::U::U..'" }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc gcc-16-20250824/libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc	Sun Aug 17 22:33:51 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc	Sun Aug 24 22:33:29 2025
*************** static_assert(uses_allocator<X, inner_al
*** 42,47 ****
--- 42,49 ----
  static_assert(!is_constructible<X, allocator_arg_t, inner_alloc_type>{}, "");
  static_assert(!is_constructible<X, inner_alloc_type>{}, "");
  
+ // { dg-error "too many initializers" "" { target c++20 } 0 }
+ 
  void
  test01()
  {
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/aligned_neg.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/aligned_neg.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/aligned_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/aligned_neg.cc	Sun Aug 24 22:33:30 2025
***************
*** 0 ****
--- 1,33 ----
+ // { dg-do compile { target c++26 } }
+ #include<mdspan>
+ 
+ #include <cstdint>
+ 
+ std::aligned_accessor<uint32_t, 0> a;          // { dg-error "required from here" }
+ std::aligned_accessor<uint32_t, 7> b;          // { dg-error "required from here" }
+ std::aligned_accessor<uint32_t, size_t(-1)> c; // { dg-error "required from here" }
+ 
+ std::aligned_accessor<uint32_t, 2> d;          // { dg-error "required from here" }
+ 
+ std::aligned_accessor<int[2], 32> e;           // { dg-error "required from here" }
+ 
+ class Abstract
+ {
+   virtual void
+   foo() const = 0;
+ };
+ 
+ class Derived : public Abstract
+ {
+   void
+   foo() const override
+   { }
+ };
+ 
+ std::aligned_accessor<Derived, alignof(int)> f_ok;
+ std::aligned_accessor<Abstract, alignof(int)> f_err; // { dg-error "required from here" }
+ 
+ // { dg-prune-output "ByteAlignment must be a power of two" }
+ // { dg-prune-output "ElementType must not be an array type" }
+ // { dg-prune-output "ElementType must not be an abstract" }
+ // { dg-prune-output "static assertion failed" } // no message for alignment being too small
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_access_neg.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_access_neg.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_access_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_access_neg.cc	Sun Aug 24 22:33:30 2025
***************
*** 0 ****
--- 1,23 ----
+ // { dg-do run { target c++26 xfail *-*-* } }
+ // { dg-require-debug-mode "" }
+ 
+ #include <mdspan>
+ #include <array>
+ 
+ void
+ test_unaligned_access()
+ {
+   constexpr size_t N = 4;
+   alignas(N) std::array<char, 128> buffer{};
+   auto* unaligned = buffer.data() + 1;
+   auto a = std::aligned_accessor<char, N>{};
+ 
+   [[maybe_unused]] char x = a.access(unaligned, 0);
+ }
+ 
+ int
+ main()
+ {
+   test_unaligned_access();
+   return 0;
+ };
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_offset_neg.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_offset_neg.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_offset_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/debug/aligned_offset_neg.cc	Sun Aug 24 22:33:30 2025
***************
*** 0 ****
--- 1,23 ----
+ // { dg-do run { target c++26 xfail *-*-* } }
+ // { dg-require-debug-mode "" }
+ 
+ #include <mdspan>
+ #include <array>
+ 
+ void
+ test_unaligned_offset()
+ {
+   constexpr size_t N = 4;
+   alignas(N) std::array<char, 128> buffer{};
+   auto* unaligned = buffer.data() + 1;
+   auto a = std::aligned_accessor<char, N>{};
+ 
+   [[maybe_unused]] char* x = a.offset(unaligned, 0);
+ }
+ 
+ int
+ main()
+ {
+   test_unaligned_offset();
+   return 0;
+ };
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/generic.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/generic.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/accessors/generic.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/accessors/generic.cc	Sun Aug 24 22:33:30 2025
*************** template<template<typename T> typename A
*** 97,106 ****
--- 97,132 ----
  
  static_assert(test_properties<std::default_accessor>());
  
+ #ifdef __glibcxx_aligned_accessor
+ template<size_t Mult>
+ struct OverAlignedAccessorTrait
+ {
+   template<typename T>
+     using type = std::aligned_accessor<T, Mult*alignof(T)>;
+ };
+ 
+ static_assert(test_properties<OverAlignedAccessorTrait<1>::type>());
+ static_assert(test_properties<OverAlignedAccessorTrait<2>::type>());
+ static_assert(test_ctor<OverAlignedAccessorTrait<2>::type,
+ 			std::default_accessor, false>());
+ static_assert(test_ctor<OverAlignedAccessorTrait<2>::type,
+ 			OverAlignedAccessorTrait<4>::type>());
+ static_assert(test_ctor<std::default_accessor,
+ 			OverAlignedAccessorTrait<2>::type>());
+ static_assert(!std::is_constructible_v<std::aligned_accessor<char, 4>,
+ 				       std::aligned_accessor<char, 2>>);
+ #endif
+ 
  template<typename A>
    constexpr size_t
    accessor_alignment = alignof(typename A::element_type);
  
+ #ifdef __glibcxx_aligned_accessor
+ template<typename T, size_t N>
+   constexpr size_t
+   accessor_alignment<std::aligned_accessor<T, N>> = N;
+ #endif
+ 
  template<typename Accessor>
    constexpr void
    test_access(Accessor accessor)
*************** main()
*** 136,140 ****
--- 162,171 ----
  {
    test_all<std::default_accessor<double>>();
    static_assert(test_all<std::default_accessor<double>>());
+ 
+ #ifdef __glibcxx_aligned_accessor
+   test_all<typename OverAlignedAccessorTrait<4>::type<double>>();
+   static_assert(test_all<typename OverAlignedAccessorTrait<4>::type<double>>());
+ #endif
    return 0;
  }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc	Sun Aug 24 22:33:30 2025
*************** std::extents<double, 1> e4;
*** 12,14 ****
--- 12,17 ----
  // { dg-prune-output "signed or unsigned integer" }
  // { dg-prune-output "invalid use of incomplete type" }
  // { dg-prune-output "non-constant condition for static assertion" }
+ // { dg-prune-output "integer constants in boolean context" }
+ // { dg-prune-output "__gnu_cxx::__numeric_traits_integer" }
+ // { dg-prune-output "static assertion failed" }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc	Sun Aug 24 22:33:30 2025
*************** static_assert(std::extents<int, 1, dyn>:
*** 159,164 ****
--- 159,171 ----
  static_assert(std::extents<int, dyn, dyn>::static_extent(0) == dyn);
  static_assert(std::extents<int, dyn, dyn>::static_extent(1) == dyn);
  
+ // dims
+ #if __glibcxx_mdspan >= 202406L
+ static_assert(std::is_same_v<std::dims<0>, std::dextents<size_t, 0>>);
+ static_assert(std::is_same_v<std::dims<3>, std::dextents<size_t, 3>>);
+ static_assert(std::is_same_v<std::dims<3, int>, std::dextents<int, 3>>);
+ #endif
+ 
  // extent
  template<typename Extent>
    constexpr void
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/version.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/version.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/mdspan/version.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/mdspan/version.cc	Sun Aug 24 22:33:30 2025
***************
*** 1,9 ****
! // { dg-do compile { target c++23 } }
  #include <mdspan>
  
  #ifndef __cpp_lib_mdspan
  #error "Feature test macro __cpp_lib_mdspan is missing for <mdspan>"
! #if __cpp_lib_mdspan < 202207
! #error "Feature test macro __cpp_lib_mdspan has the wrong value"
  #endif
  #endif
--- 1,20 ----
! // { dg-do preprocess { target c++23 } }
! // { dg-add-options no_pch }
! 
  #include <mdspan>
  
  #ifndef __cpp_lib_mdspan
  #error "Feature test macro __cpp_lib_mdspan is missing for <mdspan>"
! #elif __cplusplus <= 202302L && __cpp_lib_mdspan != 202207L
! #error "Feature test macro __cpp_lib_mdspan has the wrong value for C++23"
! #elif __cplusplus > 202302L && __cpp_lib_mdspan != 202406L
! #error "Feature test macro __cpp_lib_mdspan has the wrong value for C++26"
! #endif
! 
! #if __cplusplus > 202302L
! #ifndef __cpp_lib_aligned_accessor
! #error "Feature test macro __cpp_lib_aligned_accessor is missing for <mdspan>"
! #elif __cpp_lib_aligned_accessor != 202411L
! #error "Feature test macro __cpp_lib_aligned_accessor has the wrong value"
  #endif
  #endif
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/insert_range.cc gcc-16-20250824/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/insert_range.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/insert_range.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/insert_range.cc	Sun Aug 24 22:33:31 2025
*************** test_ranges()
*** 99,106 ****
--- 99,156 ----
    return true;
  }
  
+ struct SelfAssignChecker {
+   static int moveCounter;
+   static int copyCounter;
+ 
+   SelfAssignChecker() = default;
+   constexpr SelfAssignChecker(int v) : val(v) { }
+   SelfAssignChecker(const SelfAssignChecker&) = default;
+   SelfAssignChecker(SelfAssignChecker&&) = default;
+ 
+   SelfAssignChecker operator=(const SelfAssignChecker& rhs)
+   {
+     if (this == &rhs)
+       ++copyCounter;
+     this->val = rhs.val;
+     return *this;
+   }
+ 
+   SelfAssignChecker operator=(SelfAssignChecker&& rhs)
+   {
+     if (this == &rhs)
+       ++moveCounter;
+     this->val = rhs.val;
+     return *this;
+   }
+ 
+   int val;
+ 
+   friend bool operator==(SelfAssignChecker, SelfAssignChecker) = default;
+ };
+ 
+ int SelfAssignChecker::moveCounter = 0;
+ int SelfAssignChecker::copyCounter = 0;
+ 
+ void
+ test_pr121313()
+ {
+   using namespace __gnu_test;
+ 
+   SelfAssignChecker::copyCounter = SelfAssignChecker::moveCounter = 0;
+   do_test<test_forward_range<int>, std::allocator<SelfAssignChecker>>();
+   VERIFY( SelfAssignChecker::moveCounter == 0 );
+   VERIFY( SelfAssignChecker::copyCounter == 0 );
+ 
+   SelfAssignChecker::copyCounter = SelfAssignChecker::moveCounter = 0;
+   do_test<test_input_range<int>, std::allocator<SelfAssignChecker>>();
+   VERIFY( SelfAssignChecker::moveCounter == 0 );
+   VERIFY( SelfAssignChecker::copyCounter == 0 );
+ }
+ 
  int main()
  {
    test_ranges();
+   test_pr121313();
    static_assert( test_ranges() );
  }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc gcc-16-20250824/libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc	Sun Aug 24 22:33:31 2025
*************** main()
*** 370,374 ****
--- 370,375 ----
     string_stuff();
     vector_stuff();
     reverse_stuff();
+    test6642();
     return 0;
  }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/max/constrained.cc gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/max/constrained.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/max/constrained.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/max/constrained.cc	Sun Aug 24 22:33:31 2025
*************** test04()
*** 87,98 ****
      int m;
    };
    A r[5] = {5, 4, 3, 2, 1};
!   ranges::max(r, ranges::less{}, &A::m);
    VERIFY( copies == 1 );
    VERIFY( moves == 0 );
    copies = moves = 0;
    A s[5] = {1, 2, 3, 4, 5};
!   ranges::max(s, ranges::less{}, &A::m);
    VERIFY( copies == 5 );
    VERIFY( moves == 0 );
  }
--- 87,98 ----
      int m;
    };
    A r[5] = {5, 4, 3, 2, 1};
!   (void)ranges::max(r, ranges::less{}, &A::m);
    VERIFY( copies == 1 );
    VERIFY( moves == 0 );
    copies = moves = 0;
    A s[5] = {1, 2, 3, 4, 5};
!   (void)ranges::max(s, ranges::less{}, &A::m);
    VERIFY( copies == 5 );
    VERIFY( moves == 0 );
  }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/min/constrained.cc gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/min/constrained.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/min/constrained.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/min/constrained.cc	Sun Aug 24 22:33:31 2025
*************** test04()
*** 87,98 ****
      int m;
    };
    A r[5] = {5, 4, 3, 2, 1};
!   ranges::min(r, ranges::less{}, &A::m);
    VERIFY( copies == 5 );
    VERIFY( moves == 0 );
    copies = moves = 0;
    A s[5] = {1, 2, 3, 4, 5};
!   ranges::min(s, ranges::less{}, &A::m);
    VERIFY( copies == 1 );
    VERIFY( moves == 0 );
  }
--- 87,98 ----
      int m;
    };
    A r[5] = {5, 4, 3, 2, 1};
!   (void)ranges::min(r, ranges::less{}, &A::m);
    VERIFY( copies == 5 );
    VERIFY( moves == 0 );
    copies = moves = 0;
    A s[5] = {1, 2, 3, 4, 5};
!   (void)ranges::min(s, ranges::less{}, &A::m);
    VERIFY( copies == 1 );
    VERIFY( moves == 0 );
  }
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc	Sun Aug 24 22:33:31 2025
*************** test04()
*** 99,118 ****
    struct counted_less
    { bool operator()(int a, int b) { ++counter; return a < b; } };
  
!   ranges::minmax({1,2}, counted_less{});
    VERIFY( counter == 1 );
  
    counter = 0;
!   ranges::minmax({1,2,3}, counted_less{});
    VERIFY( counter == 3 );
  
    counter = 0;
!   ranges::minmax({1,2,3,4,5,6,7,8,9,10}, counted_less{});
    VERIFY( counter <= 15 );
  
    counter = 0;
!   ranges::minmax({10,9,8,7,6,5,4,3,2,1}, counted_less{});
    VERIFY( counter <= 15 );
  }
  
  void
--- 99,126 ----
    struct counted_less
    { bool operator()(int a, int b) { ++counter; return a < b; } };
  
!   auto p = ranges::minmax({1,2}, counted_less{});
    VERIFY( counter == 1 );
+   VERIFY( p.min = 1 );
+   VERIFY( p.max = 2 );
  
    counter = 0;
!   p = ranges::minmax({1,2,3}, counted_less{});
    VERIFY( counter == 3 );
+   VERIFY( p.min = 1 );
+   VERIFY( p.max = 3 );
  
    counter = 0;
!   p = ranges::minmax({1,2,3,4,5,6,7,8,9,10}, counted_less{});
    VERIFY( counter <= 15 );
+   VERIFY( p.min = 1 );
+   VERIFY( p.max = 10 );
  
    counter = 0;
!   p = ranges::minmax({10,9,8,7,6,5,4,3,2,1}, counted_less{});
    VERIFY( counter <= 15 );
+   VERIFY( p.min = 1 );
+   VERIFY( p.max = 10 );
  }
  
  void
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc	Sun Aug 17 22:33:52 2025
--- gcc-16-20250824/libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc	Sun Aug 24 22:33:31 2025
*************** test02()
*** 70,90 ****
    { bool operator()(int a, int b) { ++counter; return a < b; } };
  
    int x[] = {1,2,3,4,5,6,7,8,9,10};
!   ranges::minmax_element(x, x+2, counted_less{});
    VERIFY( counter == 1 );
  
    counter = 0;
!   ranges::minmax_element(x, x+3, counted_less{});
    VERIFY( counter == 3 );
  
    counter = 0;
!   ranges::minmax_element(x, counted_less{});
    VERIFY( counter <= 15 );
  
    ranges::reverse(x);
    counter = 0;
!   ranges::minmax_element(x, counted_less{});
    VERIFY( counter <= 15 );
  }
  
  int
--- 70,98 ----
    { bool operator()(int a, int b) { ++counter; return a < b; } };
  
    int x[] = {1,2,3,4,5,6,7,8,9,10};
!   auto p = ranges::minmax_element(x, x+2, counted_less{});
    VERIFY( counter == 1 );
+   VERIFY( p.min == x+0 );
+   VERIFY( p.max == x+1 );
  
    counter = 0;
!   p = ranges::minmax_element(x, x+3, counted_less{});
    VERIFY( counter == 3 );
+   VERIFY( p.min == x+0 );
+   VERIFY( p.max == x+2 );
  
    counter = 0;
!   p = ranges::minmax_element(x, counted_less{});
    VERIFY( counter <= 15 );
+   VERIFY( p.min == x+0 );
+   VERIFY( p.max == x+9 );
  
    ranges::reverse(x);
    counter = 0;
!   p = ranges::minmax_element(x, counted_less{});
    VERIFY( counter <= 15 );
+   VERIFY( p.min == x+9 );
+   VERIFY( p.max == x+0 );
  }
  
  int
diff -Nrcpad gcc-16-20250817/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc gcc-16-20250824/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc
*** gcc-16-20250817/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20250824/libstdc++-v3/testsuite/30_threads/timed_mutex/121496.cc	Sun Aug 24 22:33:33 2025
***************
*** 0 ****
--- 1,14 ----
+ // { dg-do compile { target { { i?86-*-linux* x86_64-*-linux* } && lp64 } } }
+ // { dg-require-effective-target c++11 }
+ // { dg-options "-fsanitize=thread" }
+ 
+ // PR libstdc++/121496 no member named '_M_clocklock' with -fsanitize=thread
+ 
+ #include <mutex>
+ #include <chrono>
+ 
+ void
+ test_pr121496(std::timed_mutex& m)
+ {
+   (void) m.try_lock_until(std::chrono::steady_clock::time_point{});
+ }
